Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Дистрибутивы

Как смастерить собственный дистрибутив Линукс

Оригинал: How To Roll Your Own Linux Distro
Автор: Serdar Yegulalp
Дата: 29 января 2008
Свободный перевод: Алексей Дмитриев
Дата перевода: 21 марта 2008

Хотите ли вы подогнать под свои нужды Knoppix, переделать существующую операционную систему с открытыми кодами, например Puppy Linux, или вы нацелились создать свою собственную систему из ничего, мы поможем вам на этом пути.

Сделай сам. Это тот способ, которым создавался Линукс. Группа энтузиастов, вдохновляемая и ведомая Линусом Торвальдсом, создала величайшую "самодельную" операционную систему, которую когда-либо видел мир. Вам тоже под силу создать собственный дистрибутив Линукс.


Простой восстанавливающий скрипт в Puppy Linux позволяет взять существующую инсталляцию и "свернуть" ее в ISO файл

Звучит довольно устрашающе, и действительно, в этом деле многое, определенно, не для новичков. Но, принимая во внимание множество знаний, которые вы приобретете по ходу работы, и, учитывая результат, эта задача имеет много общего с собиранием компьютера из разрозненных деталей. Допускаю, что в случае сборки компьютера, всегда найдется множество причин, чтобы купить готовый с полки, точно также найдется достаточно оснований скачать готовый дистрибутив и просто пользоваться им. Существует лишь несколько рациональных причин заниматься созданием собственного дистрибутива:

Для самообразования. Иногда лучший способ узнать что-либо - это запустить руки под капот и хорошенько их испачкать, желательно под чьим-нибудь чутким руководством. Нет никакой гарантии, что вы все узнаете. Но вы узнаете вкус процесса познания и поймете, в каком направлении двигаться, чтобы получить ответ на свой вопрос (и как именно его получить), что вы вряд ли приобретете, установив популярный дистрибутив, и выполняя на нем ежедневную работу.

Для решения определенной проблемы, либо для ликвидации пробела. Скажем, если есть какая-нибудь "заковыристая железяка", с которой вы очень хотите работать, вы можете доработать имеющийся дистрибутив, чтобы он хорошо "ладил" с этим устройством. Это может оказаться простейшим подключением поддержки данного устройства в ядре, а может оказаться значительно более сложным делом. А может быть, вы захотите создать дистрибутив для очень специфической цели. (Не так давно я писал про Hikarunix, ныне, к сожалению, заброшенный дистрибутив, посвященный игрокам в Го; трудно придумать нечто более узкоспециальное).

Для развлечения. Я называю это "а почему нет?". Линукс существует, чтобы с ним возиться, так вот и возитесь, и получайте удовольствие. Сомнительно, чтобы вы доверили ценную работу системе, на которую затратили столько времени, но разве это уменьшает удовольствие? А если что-то пойдет наперекосяк, всегда можно все стереть и начать с чистого листа. (В конце концов, вы же не в рабочее время этим занимаетесь, и не в коммерческих целях, верно?)

Предостережения

Прежде чем начитать "ваять", следует хорошо понимать несколько вещей.

Для начала нужно уже знать что-нибудь о Линукс. Прежде чем пытаться создать свой собственный дистрибутив, хотя бы в общих чертах познакомьтесь с Линукс, если вы этого еще не сделали. Короче: попользуйтесь Линуксом какое-то время. Если вы не знаете основ, мало толку пытаться вносить улучшения.

Будьте терпеливы и внимательны. Любой проект такого типа, даже автоматизированный до известной степени, скорее всего, будет долгим и полным разочарований. Не надейтесь закончить все в тот же день; будьте готовы вести заметки о том, как все работает и почему.

Налаживайте все на свой страх и риск. Имейте в виду, что любое изменение может иметь неожиданные последствия. Например, вы решили отключить в ядре поддержку PC карт (возможно потому, что вы не используете ваш переделываемый проект на ноутбуке и не хотите включать эти модули); вам следует задокументировать это на тот случай, чтобы некто, использующий ноутбук, и зависящий от РС карт, не был поставлен в тупик. Даже если вы не собираетесь распространять законченный проект, очень стоит задокументировать основные функциональные изменения. Вы сильно удивитесь через некоторое время, как вы могли забыть о таких вещах. Предпочитайте стабильность скорости. Одна из возможностей, которую вы обнаружите по ходу дела, это возможность использовать оптимизацию компилятора для ускорения процесса. Это значит, для компиляции исходного кода вашего ядра, или инструментальной цепочки, использовать инструкции, предназначенные для специальной разновидности процессора, таких как множественные MMX / SSE / 3Dnow модификации. Беда в том, что применение данных оптимизаций, может оказаться делом, приводящим к сбоям и частым отказам; хуже того, вы можете узнать, насколько это сбойно, уже весьма далеко подвинувшись в процессе сборки. Для начинающих вполне достаточно значений оптимизации, установленных по умолчанию. В документе, который я цитировал выше, Jim Gifford говорит, - "Тот факт, что у меня не было проблем с компиляцией (с определенным набором настроек компилятора), вовсе не означает, что проблем не будет и у вас".

До поры до времени, не пытайтесь использовать сотворенную вами систему для своих ежедневных рабочих задач, чтобы опробовать, насколько она хороша. Работать с ценными материалами, а не с их копиями на такой "самодельной" системе - не самая продуктивная мысль. Существующие, проверенные пользователями дистрибутивы уже прошли всестороннюю обкатку, и вероятность существования в них устойчивых системных ошибок намного меньше. Создание своего собственного дистрибутива дает гораздо меньше уверенности в уровне стабильности или полноты свойств. Но иногда, наткнуться лбом на эти препятствия, является способом изучить их из первоисточника, если у вас есть на то время и склонности.

Переделка существующего дистрибутива

Существуют три основных способа сотворить собственный дистрибутив, их выбор зависит от того, что именно вы хотите усовершенствовать, и от уровня ваших технических знаний, которые вы можете вложить в проект. Первым, наиболее простым, и, возможно, быстро приносящим плоды способом, является переделка уже существующего дистрибутива.


Начало процесса инсталляции Gentoo при помощи Gentoo Live CD. Классическая версия инсталлятора Gentoo из командной строки, работает все так же хорошо, но некоторым удобнее работать в графическом интерфейсе

Перестройка, или переделка, включает установку данного дистрибутива, внесение изменений или усовершенствований, и затем "упаковку" дистрибутива, вместе со всеми изменениями, снова в файл образа (обычно .ISO файл) В последние два года, этот подход стал гораздо проще, благодаря коллекции инструментов и программ для автоматизации процесса, созданных сообществом. Такие инструменты быстро становятся неотъемлемой частью самих дистрибутивов. Так что, если вы "запали" на Линукс, и хотите попробовать свои силы в модификации дистрибутивов, этот путь будет лучшим для старта.

Один из моих любимых дистрибутивов, Puppy Linux, может быть переделан несколькими различными путями. Наиболее кардинальный путь лежит через использование встроенной программы - Puppy Simple CD Remaster script, которая рекомпилирует все в текущей работающей файловой системе на CD. Программа делает паузы, и сообщает вам о ходе процесса, так что вы знаете, когда и где сделать нужные вам изменения, например, изменить настройку "железа" в директории /etc. (Подсказка: Установленный по умолчанию в дистрибутиве Puppy файловый менеджер ROX-Filer, позволяет просматривать .ISO файлы, как директории "только для чтения", так, что вы можете следить за результатами по окончании дела).

Заметьте, что если вы захотите проделать это все с дистрибутивом, установленным на жесткий диск, то лучше будет произвести так называемую "экономную" установку дистрибутива Puppy на жесткий диск, затем произвести желательные изменения, а потом "слепить" все обратно. "Экономная" установка позволяет Puppy сосуществовать с другими операционными системами в одном разделе винчестера (обычно другого Линукса). Все содержимое дистрибутива Puppy устанавливается в виде пяти больших файлов, один из которых является файлом-образом, представляющим файловую систему Puppy. Это отличается от "полной" инсталляции, при которой Puppy требует для себя целый раздел, где "расписывает" все файлы обычным порядком. Simple CD Remaster скрипт, в тот виде, как он есть, не может работать с полной инсталляцией, хотя, якобы, существует способ его "заставить".

Простая программа Simple CD Remaster script, пожалуй, лучший способ войти в курс дела, так как она дает некоторое представление о том, как это все работает, в то же время, держа вас под контролем. Более сложный, но и более технически продвинутый подход - независимая программа HackyRemaster script. Этот скрипт берет содержимое Puppy CD, либо .ISO файл, распаковывает его в рабочую директорию (которая может находиться где угодно), и позволяет вам делать изменения, которые вы найдете нужными, прямо в файловой системе. По окончании, все содержимое снова упаковывается в .ISO файл. Программа Puppy Unleashed подразумевает установку большого архива (1.5 ГB) всех возможных пакетов для Puppy , чтобы использовать его для строительства "самодельного" дистрибутива, Оборотная сторона такого подхода в необходимости закачивать целый архив и хорошо знать все о пакетах, с которыми придется возиться. Еще одна стартовая точка при работе с Puppy - это Empty Crust, сильно упрощенная версия Puppy Linux 1.0.7. Эта версия специально отстает на несколько релизов от современной, но способна стать "скелетом" будущей самоделки.

Я выбрал в качестве примера перестройки/переделки дистрибутив Puppy за его простоту, но существует много других крупных дистрибутивов с подобными функциями. Всегда полезный Knoppix, live-CD дистрибутив, из которого строится множество других, имеет руководство, где очень подробно описано, как переделывать Knoppix, начиная от удаления/добавления пакетов, и заканчивая изменением внешнего вида и поведения всей системы. И Ubuntu также имеет средства перестройки своих установочных CD, хотя руководство не слишком автоматизировано, имеются написанные сообществом скрипты, для облегчения этой работы.

Попутно упомяну найденный мной в сети хитрый инструмент для создания собственного измененного дистрибутива: Custom NimbleX CD builder http://custom.nimblex.net/, генерирующий собранный с переделками .ISO файл небольшого, но функционального дистрибутива NimbleX. Это не так гибко, как собирать дистрибутив вручную, но, тем не менее, весьма полезно.

Линукс из ничего

Следующим шагом для тех, кто достаточно амбициозен для сборки собственного дистрибутива, будет Линукс Из Ничего (Linux From Scratch) - LFS.

LFS - это и дистрибутив, и онлайновое руководство для его сборки, все в одном флаконе. LFS LiveCD, представляющий из себя тщательно продуманную среду для "выращивания" вашей собственной Линукс системы, включает полную версию книги-руководства, а также содержит исходные коды, которые понадобятся вам для строительства дистрибутива.

LFS подразумевает, что вы обладаете изрядным рабочим опытом в Линуксе. По меньшей мере, вы должны ориентироваться в командной строке, и следовать инструкциям. Нужно сказать, что одна из прелестей подхода к делу LFS заключается в том, что каждая из команд, используемых вами для строительства целого дистрибутива, документирована "изнутри", так что вы не просто слепо выполняете набор инструкций. Все, что вы применяете - каждая команда, каждая опция - подробно разъясняется и становится понятной.


Подготовка к началу работы Линукса Из Ничего при помощи одного из автоматизированных скриптов. Это вовсе не заменяет знания того, как строить дистрибутив; вам необходимо знать, как контролировать "стройку" от начала до конца

Создание новой системы LFS Linux происходит внутри "дистрибутива-хозяина", используя его как среду для выполнения работы. Проще всего скачать LFS Live CD и использовать его, тем более что он включает в свой состав среду, специально подогнанную для такого типа работы - с сокращенным числом параметров, которые могут вызвать ошибку. Можно провести параллели между возведением здания на пустом месте, и созданием Линукс дистрибутива при помощи LFS (авторы LFS в своей книге используют эту метафору, так можно, я тоже ей попользуюсь?).

1.Подготовительные работы. Первые несколько шагов сопоставимы с рытьем котлована и заливкой фундамента для здания. Вам помогут установить файловую систему (около 4-х Гб - я бы отвел 8 или больше, место нынче недорого); скачать основной набор пакетов, потребных для всего дела, и установка некоторых вступительных мелочей, вроде создания пользовательского аккаунта, из которого будут производиться многие LFS работы.

2. Временная система. Временная система подобна строительным лесам - сами они не являются частью строения, но без них здания не построить; а когда нужда в них отпадет, их разберут. Временная система состоит в основном из цепочки инструментов разработки - набора утилит, который вы создаете для того, чтобы с его помощью создавать собственно дистрибутив, например компилятор GCC. Инструменты из этого набора сами компилируются из исходного кода - неплохой способ получить экспресс-курс по сборке приложений из исходного кода, который совершенно необходим при работе с Линукс и со свободными исходниками вообще.

3. Построение и загрузка самой системы. Только теперь мы начинаем сборку самого дистрибутива - возведение здания. Как и прежде, вся работа, как, например, создание директорий для будущей системы будет делаться вручную, с пояснениями - "что это такое, для чего нужно, и почему именно так". Затем идет создание загрузочных скриптов, контролирующих процесс запуска, что делает систему загружаемой, и (наконец!) запуск новой системы LFS.

Однако проект на этом не заканчивается. Есть еще несколько продолжений в этом "сериале" проектов, к которым можно перейти, закончив первый. Следующим, скорее всего, будет Beyond Linux From Scratch, который предлагает настройку всего, что только возможно, в вашем новеньком Линукс дистрибутиве. Этим стоит заниматься: во-первых, если у вас есть амбиции превратить ваш дистрибутив в нечто более работоспособное, чем могли бы пользоваться и другие; во-вторых, если вы хотите получше изучить, что происходит внутри дистрибутива Линукс (всякие Х серверы, командные оболочки и тому подобное).

Hardened Linux From Scratch поможет создать с нуля версию Линукс с повышенной безопасностью, хотя проект кое в чем еще в стадии разработки. Cross Linux From Scratch позволит производить процесс сборки LFS при помощи перекрестной компиляции: как поясняют авторы проекта, - "Вы можете создать цепочку инструментов Sparc на машине x86, а затем использовать эту цепочку на машине Sparc для создания дистрибутива Линукс из исходников прямо там". Это, вероятно, наиболее "продвинутый" из проектов LFS, и с наименьшей аудиторией, что, впрочем, не лишает его права на существование; возможно, он будет полезен, если вы решите создать дистрибутив Линукс для какой-нибудь экзотической платформы.

Другой подход демонстрирует Automated Linux From Scratch , дающий высокую степень автоматизации процесса сборки LFS. Способ, которым это сделано, заслуживает Нобелевской премии за сообразительность: загружается целая книга LFS book, в которой все команды в тексте являются ссылками и работают автоматически. Таким образом, она работает прямо с новейшей версии книги, и может быть использована для осуществления любого проекта LFS, из числа описанных выше. Заметьте, что это не освобождает от необходимости читать книгу, вам все же придется проделать часть работы по подготовке системы, и иметь представление о процессе сборки LFS, чтобы начать работу.

Gentoo

Ни одно обсуждение проблемы создания собственного дистрибутива не будет полным без упоминания о Gentoo. Подобно LFS, Gentoo тоже строится из исходных кодов, но не с самого "нулевого цикла", а позже по ходу сборки; пакеты берутся в виде исходников и компилируются специально под архитектуру вашей машины, по мере необходимости. Благодаря этому, почти все аспекты системы - использованные пакеты, настройка и оптимизация компилятора, которым они собираются, и все остальное - находится в вашем полном распоряжении.

В этом есть хорошая и плохая стороны. Да, это позволяет вам собирать всю систему снизу доверху, чтобы сделать ее своей в такой степени, в какой вряд ли позволят настройки любого другого дистрибутива; идеальный инструмент для самовыражения. Но в то же время, это позволит вам запутать все до крайности, или, по крайней мере, насажать множество "ляпов" во множестве мест. Gentoo определенно дистрибутив "только для экспертов". Мой приятель так охарактеризовал его: "Знал бы, насколько это трудно, никогда бы не взялся". Поэтому Gentoo может использоваться, и используется, в качестве "производственной среды" для знающих и аккуратных.

Процесс создания системы Gentoo довольно схож с таковым системы LFS. Сперва вы скачиваете один из нескольких возможных установочных CD, в зависимости от архитектуры машины, на которой работаете. 32-битная x86 версия Gentoo, например, идет на другом CD, нежели 64-битная. (Имейте в виду, что ссылки в этой статье относятся к документации версии Gentoo x86; для иных архитектур вам придется поискать документацию самостоятельно).

После того, как вы загрузились с CD, наладили сеть и устроили разделы жесткого диска, вы затем скачиваете то, что называется stage3 архив, или stage3 тарбалл. Название "stage3" (стадия 3) происходит от того факта, что прежде, в ранних версиях Gentoo, требовалось пройти две предварительные стадии инсталляции - bootstrapping the buildchain (русских названий не имеют). Архив stage3 содержит все необходимое, чтобы начать работу немедленно, в пределах выбранной вами архитектуре машины, без необходимости проходить первые две стадии. Следующий шаг вводит в действие систему портежей Gentoo, чтобы собрать оставшиеся части и привести систему к наисовременнейшему уровню обновлений. Так как Gentoo имеет дело с исходными кодами, система портежей не скачивает прекомпилированные пакеты с репозитория - она загружает новейшие исходные коды программ, компилирует их по требованию вашей платформы. Так как компиляция - процесс длительный, особенно базового (список А) набора программ, некоторые большие приложения (например, Firefox) можно установить в виде бинарных прекомпилированных пакетов.

На этой стадии вы также имеете возможность влиять на то, как Portage компилирует пакеты, какие применяются параметры оптимизации, хотя обычно, для начала, стоит оставить их по минимуму. Подобные же настройки могут быть применены к компиляции ядра, и такие свойства как multiprocessor/multicore или поддержка PC карт, могут быть активированы, либо отключены. Имейте в виду, что попытки регулировать все подряд с первого раза могут привести к плохим результатам, оставьте их на потом, когда хоть раз пройдете весь процесс от начала до конца и получите результат, близкий к ожидаемому.

Одним из ключевых элементов доводки уже собранной системы Gentoo, являются USE флаги. Эти флаги, устанавливаемые в переменных окружения, используются при сборке пакетов. Они позволяют вам включать или отключать поддержку определенных свойств в различных пакетах, как способ влиять на скорость и объем вашей системы. Например, вы создаете систему, которая не нуждается в поддержке Иксов (скажем безмониторный сервер, который вы администрируете из командной строки), значит, вам нужно использовать флаг -X, чтобы отключить компиляцию поддержки для Х11.

Для создания системы, пригодной для распространения, необходимо освоить инструмент Gentoo названный Catalyst , предназначенный специально для создания компонентов выпускаемых Линукс дистрибутивов. Тот тарбалл stage3, который мы устанавливали раньше, тоже создается при помощи Catalyst. С его помощью можно создать live CD, как один из инструментов дистрибутива (можно собрать live CD из ничего без помощи программы Catalyst; якобы такой будет немного более гибким).

Распространение

Каков же будет следующий шаг после создания собственного дистрибутива? Кроме использования его в собственных целях, вы можете поделиться своей гордостью с окружающими - представьте его публике.

Это дело добровольное, но весьма полезное. Дистрибутив, который вы слепили, будет иметь аудиторию. И если эта аудитория вдумчивая, вы получите ценную обратную связь и узнаете, что работает, а что - нет. И, даже если в ваши планы не входит широкое распространение дистрибутива, вы узнаете вещи, которые помогут вам улучшить ваше детище.

Есть несколько способов "опубликовать" дистрибутив. Один из самых обычных - представить его на DistroWatch, пожалуй, единственный широко посещаемый сайт, имеющий дело с многообразием Линукс дистрибутивов. Сейчас, когда я пишу это, форма подачи заявок на DistroWatch подвергается каким-то переделкам, но с сайтом можно связаться и по электронной почте. Имейте в виду, что DistroWatch не принимает заявки на определенные категории дистрибутивов (в частности на основе Windows).

Место для хостинга нового дистрибутива - это отдельная история. SourceForge обычно не предоставляет хостинга для Линукс дистрибутивов из-за того, что на это требуется много места, но если сами коды дистрибутива находятся в каком-нибудь другом месте, может предоставить хостинг для отладки и дискуссий по такому проекту. К счастью, свободное место в Интернете стало удивительно дешевым в последнее время, да и можно воспользоваться системой BitTorrent, как способом уменьшить тяготы с пропускной способностью.

Не забудьте представить также дерево исходников. Я подразумеваю, что как дистрибутив, вами созданный, так и его отдельные пакеты распространяются под лицензией GPL (Гну Публичная Лицензия), так что не забудьте также включить исходный код. Исходные коды не должны находиться в тех же пакетах, что и бинарники, особенно потому, что дерево исходников может быть весьма велико, несколько гигабайт не является чем-то неслыханным. Важно, что вы делаете его доступным, и документируете этот факт, особенно если вы уже закончили вносить изменения в исходники.

Говоря о документации, есть еще кое-что, что неплохо бы присоединить к новому дистрибутиву. Может быть, это набор README файлов, или полная документация, или информация о каких-либо особенностях вашего дистрибутива, причуды, которые вам удалось заметить, вещи, которые стоит попробовать (и которые не стоит!), мысли по поводу развития проекта. Дистрибутив, в конце концов, всегда развивается.