Хотя если честно, строить мы будем не UNIX, а UNIX-подобную систему, точнее, Linux. Сама идея «создать свою систему» звучит страшно. Однако сделать это под силу почти каждому, кто имеет начальные знания в Linux и представляет, где находится консоль. В этой статье вы узнаете о проекте Linux From Scratch, направленном на тех, кто хочет более детально разобраться в том, как же построена система Linux, какие компоненты нужны для ее работы.
Все началось с того, что я пересматривал СПЕЦ журнала Хакер, полностью посвященному Линуксу (№5/2000). В журнале был упомянут сайт проекта LFS, на котором описан процесс создания системы Linux (http://www.linuxfromscratch.org). Для того чтобы преступить к построению Linux’а, требовалось: а) свободное время; б) девайс руки прямые, PnP. Летом первое найдется, вторым вроде не обделен :-). Как оказалось позже, малость Интернета, а лучше побольше тоже не повредит.
Подготовка
Загрузившись на вышеупомянутую ссылку, попадете на страницу с выбором зеркал сайта; пропускная способность некоторых до 1 Гб/с, то бишь создано прямо для наших модемов. Выбрав одно из зеркал, зайдете на сам сайт проекта. Ресурс довольно неплохой: много разделов, включая FAQ; к недостаткам можно отнести только то, что он англоязычный. Руководитель проекта LFS Герард Бикманс (Gerard Beekmans) является автором одноименной книги Linux From Scratch, которую предлагают загрузить в разделе Download. Доступны HTML- и TXT-варианты, я выбрал версию 4.1(посдеднюю) в HTML. Вообще, можно найти и русскую версию книги, но что она будет последней, не обещаю (http://multilinux.sakh.com/lfs/ версия 4.0). Linux From Scratch (LFS) переводится как «Линукс из ничего». Перед построением собственной системы автор очень рекомендует посетить два линка: Software-Buildings-HOWTO (http://www.tldp.org/HOWTO/Software-Buildings-HOWTO.html) и The Linux Users’ Guide (http://espc22.murdoch.edu.au/~stewart/quide/guide.html) там описаны принципы построения системы и установка программ в среде *NIX. В LFS-BOOK описан процесс создания Линукса с нуля, естественно, пользуясь только исходниками программного обеспечения. Вот их-то и надо скачать. А скачать, ни много ни мало, придется около 100 Мб. Могу посоветовать http://freshmeat.net, на этом сайте выкладывают самый «свежий» софт, FreashMeat поистине лучший сайт программ для *nix. Все пакеты исходников даны в tar.bz или tar.bz2 (последний вариант немного экономнее). Самые большие из них GCC (14 Mб), Glibc (18 Mб), Linux kernel (27 Mб) и Perl (10 Мб), остальные приблизительно до 2 Мб. Ядро можно не скачивать, лежит на дисках дистров Линукса, разве что у вас установлен сокращенный вариант дистрибутива. На момент закачки вы, конечно, обнаружите более новые версии, чем те, что описаны в книге. Понятно, LFS не успевает следить за новыми релизами пакетов, тем более что их немало. Я советую качать только те версии, которые описаны в книге, возможно, вы избежите многих проблем при сборке и установке.
Рабочий стол
Построение системы проходит в три этапа. Необходимо 1) создать среду разработки; 2) в этой среде установить саму систему и 3) сделать ее загружаемой (bootable). (В LFS-BOOK первому этапу соответствует глава 2, а второму и третьему глава 3.)
В среду разработки входит минимальный список компонентов, которые необходимы для компилирования (сборке из исходников) и установки программ и утилит, которые необходимы для построения системы. К ним относятся компилятор GCC, оболочка bash, архиваторы Gzip и Tar, утилиты для работы с текстом, дополнительные программы для работы с файлами и архивами, программа patch. В саму систему входит полный набор пакетов, тех, которые включены в большинство дистров Линукса и нужны для комфортной работы в системе. В отличие от мега-дистрибутивов типа Mandrake, Debian, RedHat, в вашу систему войдет только тот набор программ, который необходим для ваших целей. Помимо описанных в книге компонентов вы можете установить и свой «дополнительный набор», например, это может быть проигрыватель mplayer или Midnight Commander для удобной «двухпанельной» работы с файлами. К сожалению, описание установки программ, не входящих в LFS, придется вычитывать в Readme от программы или искать на сайте разработчика.
Итак, приступим
Средой разработки среды разработки (масло масляное) послужит любая система Linux с полным набором пакетов для разработки (т.е. программирования). У меня была установлена ASPLinux 7.3. При установке программ компилятор GCC часто выдавал ошибки, многие пакеты не устанавливались. После того как я поставил RedHat 7.3, все заработало.
Сначала нужно создать раздел диска для будущей системы. Хватит и 500 Мб, но я советую 1 Гб, т.к. туда можно переписать распакованные исходники и работать только с одним разделом. Если напряг с местом, ищите компромиссы, но ни в коем случае не устанавливайте программы с FAT-разделов. Создать диск я советую с помощью Partition Magic. Главное не перепутать номер раздела, куда будет установлена система. Нужно запомнить, что на винчестере у вас могут быть 4 основных (primary) диска, или 3 primary плюс дополнительный. Последний (дополнительный) может содержать в себе подразделы, он называется extended. Рассмотрим: диски С и D primary, Y, Z, E относятся к extended. На Y у меня установлена RedHat, на Z построена LFS, между Y, Z, E находятся swap-файлы систем. В Линуксе диски называются hd*#, где # число, которое указывает на порядковый номер диска, а * буква, которая показывает, куда установлен винт (a primary master, b secondary master, c primary slave, d secondary slave). Цвета указывают на тип файловых систем. Если Linux установлена на файловую систему ext3, то для работы с такими разделами потребуется PartitionMagic 8.0.
У меня один винчестер. Для текущей схемы разбивки C hda1, D hda2, Y hda5, swap hda6, Z hda7, swap hda8, E hda9. Куда делись hda3 и hda4? Я уже говорил про четыре primary-раздела так вот, их номера зарезервированы. Даже если hda3 нет, его имя не используется. hda4 номер extended-раздела. После переразбивки и перезагрузки в консоли Linux пишем mke2fs /dev/hda# (раздел, подготовленный под LFS). Затем создаем каталог lfs и монтируем туда наш раздел: mount /dev/hda* /lfs. Автор также для удобства советует создать переменную LFS линк на эту папку с системой: команда export LFS=/lfs. После выполнения этой команды $LFS будет значить то же самое, что /lfs. Это может понадобиться в том случае, если папка в lfs «спрятана» на диске, и надо набирать длинную строку адреса. Заходим в $LFS: cd $LFS, далее в $LFS создаем каталоги static и src: mkdir {static,src}. В src распаковываем все исходники. Сделать это можно с помощью графической утилиты Arc или консольных tar и bzip. Опять же, не пользуйтесь Windows-архиваторами! Разница между ними в том, что они используют разные файловые системы. В Linux файлы world.zip и World.zip могут находится в одном каталоге, Windows поймет их как один файл и при распаковке один заменит другой.
Рассказывать, как устанавливаются все программы, не буду найдете в книге и о том, как они устанавливаются, и о том, каковы особенности установки. Опишу один пример bash-2.05b. Для начала скажу, что программы из исходников устанавливаются командами ./configure, make и make install. Чтобы bash-2.05b установилась в каталог static, при конфигурации нужно написать ./configure --prefix=$LFS/static. При сборке программ для среды построения используется статическая компиляция (по умолчанию динамическая). Разница состоит в том, что при статической сборке код библиотек добавляется в саму программу, а при динамической в отдельную библиотеку. Второй способ лучше, так как программы порой используют одну библиотеку, и можно реально сэкономить место; но для нашего случая подойдет только статическая сборка, потому что все библиотеки устанавливаются в каталоги lib, которые во время запуска системы построения будут недоступны. Особенности установки bash-2.05b таковы: надо указать ссылку на библиотеку curses. Полная команда конфигурирования выглядит так ./configure --prefix=$LFS/static --enable-static-link --with-curses. Капризы установки встречаются нечасто, чаще всего происходят из-за несоответствия версий компилятора GCC, установленного в вашем основном дистрибутиве. Если ошибка неизбежна, поищите патчи на исходники программы. Патчи устанавливаются командой patch Np1 i [путь и имя файла патча]. После конфигурирования команда make соберет из сконфигурировано готовые файлы, а make install установит их куда нужно. Таким же образом устанавливаются и другие компоненты среды разработки (читайте LFS-BOOK). В следующий раз я поясню, как запустить систему, создать профили, установить пакеты и добавить LFS в загрузочное меню.