Первая версия статьи о LRs была написана летом 2002 г. С тех пор этот проект то глох, то реанимировался заново. И нынче, по данным Distrowatch, числится в мертвых - так что все сказанное ниже следует воспринимать в прошедшем времени. Затем LRs лег в основу еще одного дистрибутива - MyGeOs, который, правда, тоже можно считать прочно мёртвым. Тем не менее, свою роль в истории Source Based дистрибутивов он сыграл.
Как известно, существует множество дистрибутивов Linux, хороших и, иногда, разных. Одни из них являют собой полные коллекции всего и вся. Воплощаясь, в итоге, в метадистрибутивы, лучшим примером чему служит всем известный Sisyphus. Иные идут по пути самоограничения, претворяясь в итоге в нечто вроде Linux на одной дискете (примером чему - mulinux, (почти) функциональный дистрибутив, правда, на двух дискета, вторая - система X). Третьи же, в поисках баланса между этими путями, обращаются к идее пользовательской наращиваемости, впервые появившейся во FreeBSD. Что еще последовательно проводится в дистрибутиве Gentoo Linux.
Однако существует радикальное решение этого диалектического противоречия - отказ от дистрибутива вообще. То есть сборка функциональной системы из отдельных компонентов, начиная с ядра, компилятора, glibc и кончая пользовательскими приложениями. Что нашло свое воплощение в проекте Linux from Scratch.
Конечно, нельзя сказать, что в этом случае Linux собирается из совсем уж ничего. Хотя на первых же страницах своего руководства (LFS Book - очень увлекательное чтиво для любого линуксоида) разработчик, Герард Бикманс (Gerard Beekmans) заявляет о принципиальном отказе не только от любых прекомпилированных пакетов, но и от всякого рода CD ROM и загрузочных дисков при сборке базовых компонентов.
Однако в итоге оказывается, что необходимым условием такой установки является наличие машины с работоспособной системой на базе какого-либо иного дистрибутива. Что, согласитесь, хотя и интересно, но все же не совсем то, что ожидается: ведь абсолютно любой дистрибутив Linux, затратив некоторые (различные в разных случаях) усилия и время (а также деньги за трафик), можно пересобрать и перенастроить, сделав совершенно на себя не похожим. Причем - в процессе реальной работы, а не в некоем параллельном оной пространстве.
Тем не менее сама по себе идея сборки дистрибутива из исходников с нуля - очень заманчива. И потому мое внимание привлек проект, развивающий принципы LFS. Он носит имя LRs-Linux и в значительной степени основан на LFS. Однако, в отличие от прототипа, это - все же дистрибутив, хотя и своеобразный. Он доступен в виде iso-образа загрузочного CD, на котором помещаются все необходимые для функционирования системы компоненты. И, следовательно, является самодостаточным. О нем и пойдет речь в настоящей заметке.
Итак, загружаемся с CD - в квазитекстовой моде, то есть Frame Buffer. Причем в весьма своеобразном режиме - монитор тут же приходится перенастраивать, равнение - по голове пингвина с заставки. Далее - выбор клавиатурной раскладки, это становится общим местом загрузочных Linux-CD. Предупреждаю, что выбирать раскладку, отличную от английской американской, не рекомендуется - эффект может быть весьма странным (хотя и US-клавиатура не спасет от неожиданностей после инсталляции, но - каждому овощу свой фрукт). А потом дело доходит и до языка установки. Список обширен (включая русский), но доступные для выбора пункты - только английский, французский и немецкий.
Сразу замечу, что диск, согласно описанию, служит трем целям - как rescue-носитель, для т.н. salvage installation, и для установки просто. Так вот, если не выбрать никакого языка, мы тут же оказываемся в rescue-режиме, сиречь просто в shell'е, запустить установку из которого возможным не представляется (по крайней мере, я такой возможности не нашел). Так что английский американский, хотя и отмеченный по умолчанию, выбрать все-таки необходимо.
А вот после этого - собственно выбор между указанными режимами. Выбираем, разумеется инсталляцию - восстанавливать пока нечего, спасаться - разве что от самой установки. После чего - сообщение о возможности подгрузки модулей (например, для SCSI-адаптера). Каковые устанавливатель должен знать на память - ни малейшей подсказки в этом направлении не получишь.
К слову сказать, все это происходит в одной-единственной виртуальной консоли, так что и вывести документацию на второй экран не удастся (благо, и на диске, от греха подальше, она отсутствует). Так что следует заранее озаботиться ее распечаткой (с сайта). Инструкция по установке там весьма скромна и по форме, и по содержанию, однако содержит одно совершенно необходимое сведение. Какое - пока секрет, из вредности скажу, когда дело дойдет до этого. Хотя именно этот пункт инструкции и следует прочитать в первую (а возможно, и в последнюю) очередь.
А в остальном в инструкции по установке особой необходимости нет - инсталлятор почти что за руку проведет по всем ее этапам, сопровождая свои (и наши) действия в нужных местах комментариями и предупреждениями, а то и просто напоминаниями.
Так, первое из таких напоминаний - перед первым же серьезным деянием, разбиением диска. Предваряющий текст (так и хочется назвать его сопроводиловкой) гласит, что под корневой раздел нужно отвести 1,8 Гбайт, под swap-раздел - 64-128 Мбайт, и отдельно можно сделать boot-раздел в 20 Мбайт. А заодно напоминает нам, что ATA-диски в Linux называются /dev/hda
, /dev/hdb
и т.д., файловая система Linux маркируется шестнадцатеричным кодом 83, а система для раздела подкачки - кодом 82. Пустячок, а приятно - можно не ошибиться даже в последнем градусе склероза.
Для разбиения дисков рекомендован cfdisk
(в инструкции сказано, что можно и графической утилитой, но, видимо, это - еще в проекте). Однако не возбраняется и метод "для крутых", именуемый hard way. Под чем, как легко догадаться, подразумевается обыкновенный fdisk
.
Вне зависимости от того, избрали ли вы путь трудный или легкий (кстати, никогда не мог понять, почему cfdisk
считается легче в использовании - по мне, так fdisk
много проще, гибче, а главное - прозрачнее), следующий шаг - выбор точек монтирования созданных разделов. С параллельным назначением им файловых систем. Среди последних доступны ext2fs (ну еще бы!), ее журналируемый отпрыск ext3fs и ReiserFS - ни программного RAID, ни XFS в списке нет. И вручную их также определить нельзя...
Определение точек монтирования требует некоторой аккуратности. Так, если был создан специальный раздел под /boot
, его обязательно следует смонтировать раньше, чем корневую файловую систему - иначе он просто пропадет из списка. И при выборе пунктов меню (а делается это цифрами, по номерам) лучше не ошибаться - клавиша Delete ничего не удаляет, а ошибка приводит к выбросу в командную строку. После чего единственный выход, если есть желание продолжить эти игры - перезагрузка, и все с начала.
По завершении разметки диска предлагается вчерне выбрать то, что будет устанавливаться. Варианты - пуристический набор LFS, набор собственно LRs (это - не пересекающиеся множества), LRs+XFree86, LRs+XFree86+KDE (к сожалению, в текущей версии только 2.2.2). В качестве стандартного рассматривается вариант LFS+все остальное. Устрашаться такому не нужно - на следующем этапе можно будет детализировать выбор до отдельных пакетов (причем не только из выбранного набора, но и из любого невыбранного).
Тем не менее на самом деле степеней свободы не так и мало. Потому что в состав LFS входят базовые компоненты системы (мало без чего можно обойтись в этом наборе), в состав LRs - основные пользовательские приложения и утилиты (тут, конечно, кое от чего, а то и от многого, можно отказаться). В набор XFree, кроме собственно X'ов, включены несколько менеджеров окон (WindowMaker, Blackbox, XFce) и абстрактно-иксовые приложения и утилиты (далеко не все из них видятся мне необходимыми, так что простора для вычеркивания хоть отбавляй). А с KDE - все понятно, если есть желание использовать эту среду, придется ставить практически все из ее набора.
К вычеркиванию пакетов из наборов следует подходить вдумчиво. Ни малейшего контроля завивисмостей не осуществляется, как не предлагается и никакой подсказки. Так что можно спокойно заказать установку kdebase без библиотеки Qt - и узнать о невозможности этого только при компиляции (причем - далеко не сразу, но об этом позже). Однако при понимании взаимосвязи пакетов и библиотек можно (сверяясь при этом с LFS-Book, без нее тут не обойтись) собрать компоненты системы очень точно, как в рюкзаке хорошего туриста - где, как известно, не должно быть ничего лишнего, но все необходимое должно быть.
В плюс системе, пакеты собираются без излишеств - ну кому, скажите на милость, нужна сборка Midnight Commander с поддержкой GNOME, как это бывает (точнее - бывало в те времена - А.Ф..) по умолчанию в большинстве дистрибутивов? И, что лично мне понравилось, консольные меню-ориентированные программы компилируются без поддержки gpm
- на мой взгляд, щелканье мышью по менюшкам не искупает усложнения использования традиционного консольного cut&paste.
Но я забежал вперед - пока мы только начинаем подготовку к сборке пакетов. Для чего перво-наперво выбираем компилятор, gcc-2.95
или gcc-3.0.3
. Сопроводиловка гласит, что второй генерит более быстрый код, но может не собрать старые исходники. Последнее в общем случае верно, но, опять же предвосхищая события, скажу, что все выбранное мной (почти весь LFS, LRs без большей части сетевого инвернтаря и минимальнейшие X'ы с голимым Blackbox'ом) скомпилировалось без проблем. Вернее, проблемы, конечно же, были, но к компилятору они отношения не имели.
Далее вопрошается, включать ли оптимизацию при сборке. Варианты - от i386 до Athlon (последний - лишь при выборе gcc-3
). Или - установить тип процессора мануально, для любых поддерживаемых gcc
процессоров. Я, грешным делом. не озаботился узнать заранее, есть ли в gcc-3
оптимизация под P-4 (а ставилась система именно на него), и никаких сопроводительных замечаний на сей предмет сообщено не было. Хотя это было бы полезнее, чем напоминание о коде файловой системы Linux. И потому ограничился оптимизацией под абстрактный i686.
Следующий вопрос также потребовал напряжения мысли - об уровне оптимизации, 1-м или 2-м. Что понимается под цифрами - a priory ясно не было, и комментарии отсутствовали. Возможно, для Linux-разработчика ответ очевиден (но он вряд ли нуждается и в напоминании о номенклатуре дисков). Я же методом дедукции, индукции и интуиции решил, что 2-й уровень означает CFLAGS="-march=i686"
etc., тогда как 1-й - CFLAGS="-mcpu=i686"
. И, что приятно, оказался прав, соответствующие строчки замелькали на экране с началом сборки.
Правда, недолго - минут через 15-20 мелькание прекратилось, хотя и погасания экрана не было - строки просто застыли на месте. Я сначала подумал, что машина зависла насмерть - однако о каких-то процессах жизнедеятельности напоминали индикаторы винчестера и CD ROM. Сверился с инструкцией - и вычитал ту самую главную в ней истину, о которой говорил в начале: что сборка системы может занять от 2 до 14 часов. Для примера указывалось, что полная исталляция на P-III/800 требует часов аж 10.
У меня был не P-III/800 (а P-4/1,9), и полной инсталляции я не заказывал, так что, по прикидке, часа в два уложиться должен был, так что выпил крепкой кавказской водки кислярки и лег на досадную укушетку перечитывать LFS-Book (двести страниц чистого текста 10-м кеглем). В итоге процедура заняла 2 часа 25 минут.
Но это было еще не все. Впереди предстояла сборка ядра - если, конечно, не воспользоваться предлагаемым ядром LRkernel. Что я с негодованием отверг, хотя, в свете дальнейших событий, это было бы лучшим выходом. Конфигурирование ядра делается (безальтернативно) посредством make menuconfig
, вызываемой автоматически.
Ядро в комплекте оказалось не из наипоследних (2.4.17), без поддержки XFS (почему она и не предлагалась при монтировании разделов). Так что много внимания этому я не уделил - все равно прийдется скоро переставлять. А вот дальше мне совсем не понравилось. По выходе из меню конфигурирования процесс сборки начался автоматически, причем я даже не успел рассмотреть, что там происходило - bzImage
ли собирался, или еще какой zdisk
(судя по дальнейшему, именно последний).
А затем, без всякого перехода, задание пароля для root'а (причем система не один раз предупредила меня о чрезмерной простоте использованного для этого матерного ругательства на одном из экзотических языков), задание пользователя и, сразу же, конфигурирование LILO. От последнего можно отказаться, если выбрать загрузку с дискеты - но "это, говорят, не современно".
А вот LILO конфигурится в простом текстовом редакторе (к слову - я так и не понял, в каком, нечто вроде jed
без меню). И это оказалось для меня камнем преткновения. То, что по умолчанию оно было настроено на загрузку с дискеты, исправить было несложно. А вот указать образ для загрузки - неколько затруднительно, ведь файла его я в глаза не видел. Пожалел, что не выбрал умолчальный вариант с ядром LR и загрузкой с дискеты, но увы - как я уже упоминал, никакого отката не предусмотрено, только выход и перезагрузка. И нет второй консоли, чтобы посмотреть, что же там у меня собралось...
Прописал образ ядра по наитию (ошибочно, но потом выяснилось, что ни один из обычных все равно не подошел бы). И перешел к последнему пункту программы - очистке бинарников от отладочной информации (так я перевел оригинал). После чего предлагалось на выбор - перезвагрузка или активизация консоли. Тут бы мне, конечно, выбрать последнее, посмотреть, что там с ядром и при необходимости поправить /etc/lilo.config
, но зуд в трех намозоленных пальцах оказался сильнее.
Словом, вы понимаете - из перезагрузки ничего не вышло. Взгрустнув, приготовился грузиться в rescue-режиме и бороться с LILO и ядром, как вдруг вспомнил о той самой salvage-инсталляции и решил ее попробовать - бороться-то особо было не за что.
Оказалось - не зря вспомнил, вещь хорошая. Быстро проскакиваешь выбор раскладки и языка - и оказываешься в стадии выбора пакетов. Тут в списках наборов уже отмечено, что установлено ранее (оказалось, оно регистрировалось в базе данных, где-то в /var
). И можно не только добавить что-то, но и удалить. Я воспользовался обеими возможностями (плоды чтения LFS-Book на досадной укушетке в ходе инсталляции).
Удаление прошло безболезненно, а вот с установкой вышел облом. Решил было добавить Midnight Commander, но забыл отметить glib
, без коей тот отказался собираться. Причем сообщил об этом не сразу, а довольно долго делал вид, что что-то там компилирует. Ну, тут-то не страшно, всего несколько минут потеряно. А вот представьте, каково было бы при нормальной инсталляции устанавливать KDE без чего-нибудь нужного: часов этак пять развлечений - и все начинай сначала.
В общем, выбрал в итоге "умолчальное" ядро и загрузку с дискеты, перезагрузился нормально - и не смог авторизоваться. Ни как root, ни как user. Тут дошло дело до rescue-режима (в single-user mode система грузиться почему-то отказалась), монтирования корневой файловой системы и искоренения (в /etc/shadow
, разумеется) паролей.
Наконец, еще одна перезагрузка, авторизация без пароля - и я, наконец, в командной строке (bash
, не иначе). И тут все стало мучительно ясно: по умолчанию была загружена немецкая раскладка. И не просто немецкая, а еще и qwertz - это почти что qwerty, только y и z поменялись местами, и все спецсимволы не там, где надо - потому и ни один пароль не проходил. Конечно, все равно раскладку следовало менять на qwerty/ru4
, но ведь предупреждать нужно...
В комплекте, кстати, qwerty/ru4
нет, как нет и любой другой ru
; консольные кириллические шрифты есть, mapscreen для koi2alt есть, русская locale есть, а раскладки нет. Прямо по Венечке Ерофееву - "вымя есть, а хересу нет". Помнится, с другим дистрибутивом "от германьцев" (вернее, австрияков) - RockLinux, уже было что-то подобное. Хорошо, цельно-потибреный комплект всего кириллического от Altlinux - всегда под рукой, прямо палочка-выручалочка (низкий за что поклон всем на http://www.altlinux.ru).
В общем, на русификации мои приключения по сборке Linux'а из ничего и закончились. Конечно, то, с чем я развлекался - далеко не "from Scratch". В сущности, обычный дистрибутив, с обычным меню-ориентированным, хотя и чисто текстовым, инсталлятором, может быть, предоставляющим чуть большую свободу выбора, чем другие (SB-системы, конечно, а не из тех,что под лозунгом "Linux и user братья навек"). Единственное отличие - абсолютно все собирается, а не устанавливается из прекомпилированных пакетов. И это, конечно, плюс - можно влиять на условия сборки - ту же оптимизацию, например. Хотя установка идет очень долго - и это, безусловно, минус...
Впрочем, последнее в моем случае практических результатов не имело. Не смотря на новый компилятор и оптимизацию, система получилась не особо торопливой. По крайней мере визуально, за Gentoo Linux (собранной посредством gcc-3
, но с более новым ядром) ей еще гнаться и гнаться. Даже ReiserFS (я забыл сказать, что выбрал именно эту файловую систему) не показала себя в полном блеске на своей любимой операции (копировании большого количества мелких файлов).
Сказанное выше - отнюдь не в упрек. Все равно, идея хорошая, ну а что исполнение не на высшем уровне - так на то и версия-то всего 0.2.6. Важнее, что ориентация дистрибутива, особенно его сопроводиловок, не очень понятна. Повторюсь, что вряд ли тот, кто знает о связи mc
и glib
, нуждается в напоминании кода типа раздела под своппинг. А вот в нетривиальных случаях подсказки могли бы быть и подробнее.
Дальнейшая судьба дистрибутива LRs сложилась несколько странно. Вскоре после описанных событий проект как-то заглох и одно время на Distrowatch был даже помечен как мертвый. Однако потом гальванизировался, и время от времени выходили новые версии этого дистрибутива. Но я с ним больше дела не имел - руки не дошли...
А с некоторых пор (с 2005 г.) LRs в списках Distrowatch вообще не значится. Как, впрочем, и его потомок - MyGeOs.