Алексей Федорчук
[email protected]
Необходимость самостройного Linux'а осознана, пакеты собраны, LiveCD вставлен в привод, руки тянутся к трем сакраментальным клавишам для перезагрузки машины. Однако - по рукам себе, по рукам: прежде необходимо наметить план дальнейших мероприятий.
А план этот, подобно советской пятилетке, сводится к следующим этапам, назовем их: начинальник, продолжальник, определяльник, решальник и завершальник (почти как в старом анекдоте - правда, без субботника и воскресника).
Начальный этап - выполнение комплекса подготовительных действий типа создания дисковых разделов и файловых систем на них, их монтирования, развертывания файловой структуры, получения и (или) размещения исходников и т.д.
Продолжение этого становится довольно нудный процесс компиляции некоего минимума пакетов. Пакеты собираются в статически связанном виде, то есть разделяемые функции (из glibc и тому подобных библиотек) встраиваются непосредственно в исполняемые бинарники, а не подгружаются по мере надобности. В результате пакеты разбухают в объеме и становятся неповоротливыми. Однако это - единственная возможность обеспечить их функционирование на третьем, определяющем, этапе.
А назван третий этап определяющим потому, что от него зависит успех или провал всей операции. Он начинается с процедуры т.н. смены корня (что это такое - расскажу своевременно) и завершается сборкой главной системной библиотеки glibc.
Четвертый этап - решающий, в ходе его будет собран и установлен должным образом почти весь набор Base Linux.
Наконец, пятый этап - завершающие (но очень ответственные) штрихи, призванные обеспечить загрузку новообразованной системы.
Вот теперь все цели ясны, задачи определены. За работу, товарищи!
Абу Талиб сказал: все имеет свое начало, и все начинается с дороги. В нашем случае первый шаг по этой дороге - разметка диска.
Собственно, ничего необычного тут нет - стратегия и тактика разбиения диска описывалась на этих страницах. Два обязательных раздела - корневой и под своппинг. Необходимый объем для установки Base Linux (включая архивы исходников, место для временной их распаковки, и так далее) превышает полтора гигабайта. Плюс некий запас свободного пространства (как известно, производительность файловых операций в любых Unix-системах резко деградирует, если объем такового падает ниже 10%) - итого 2 Гбайт абсолютного минимума. Ну а swap-раздел - стандартно, между 128 Мбайт и 2 Гбайт (рекомендуется - удвоенный объем ОЗУ).
Впрочем, своя рука - владыка, и мы имеем возможность гибкого варьирования разделов. Например, можно создать маленький загрузочный раздел под /boot - это настоятельно рекомендуется, если в планах у нас использование GRUB в качестве начального загрузчика (а в моих планах - всегда именно так, никаких преимуществ перед ним у Lilo нынче не осталось).
Далее, и корневой раздел можно сделать не очень большим, выделив из его состава такие каталоги, как /var, /usr/X11R6, /usr/local и /opt. Последние три раздела в данном случае очень даже целесообразно обособить, ведь именно в них будет по умолчанию устанавливаться весь софт из числа Base Linux inside - мы же не для того собираем собственную систему, чтобы ограничится спартанскими минимумом обязательных компонентов. С другой стороны, в обособлении раздела под /usr в данном случае не видно резона - ведь большая часть Base Linux соберется именно в нем, после чего он станет своего рода read only. При большом объеме оперативной памяти нет необходимости и в отдельном разделе под /tmp - лучше будет в дальнейшем подмонтировать в него файловую систему tmpfs. Ну и конечно, каталог /home всегда должен лежать в отдельной патриции, это следует затвердить, как догмат веры.
С файловыми системами - также никакой специфики, выходящей за рамки ранее описанного. Для раздела под /boot практически обязательна классика жанра - ext2fs. Под корень, если сделать его небольшим, также рекомендуется отвести (не извести) ext2fs или, для страховки, ее журналируемый вариант ext3fs. Файловые системы на прочих разделах - в соответствии с пристрастиями, потребностями и возможностями (так, XFS не поддерживается в Lonix - но она и целесообразна для для больших разделов, например, под /home, который на этом этапе отнюдь не обязательно задействовать).
Теперь раздел, которому суждено стать корневым в нашей грядущей системе, следует подмонтировать к Live файловой системы, загруженной с нашего CD. Создав предварительно для этого соответствующую точку монтирования (в Lonix для этой цели служит каталог /fake/needwrite - прочие ветви файловой системы отнюдь не Live, а, напротив, очень даже read only). Ну и переходим в этот раздел - например, cd /fake/needwrite/basix.
Следующий шаг - развертывание файловой иерархии, что мы будем делать в полном соответствии с заветами документа, описывающего одноименный стандарт - Filesystem Hierarchy Standard (благодаря Виктору Костромину мы имеем возможность ознакомиться с ним и по русски). А именно: в корне создаем файлового древа создаем каталоги:
$ mkdir bin boot dev etc home lib mnt opt root sbin usr/{X11R,local} var
Напомню - все пути даются относительно точки монтирования будущего корневого раздела, в данном примере - /fake/needwrite/basix. Далее, при необходимости, подмонтируем к соответствующим точкам - opt, tmp, usr/{X11R,local}, var, - предопределенные для них разделы:
$ mount /dev/hd?# opt
и так далее. В каталогах usr, usr/X11R, usr/local развертываем их внутреннюю иерархию - с подкаталогами ~/bin, ~/etc, ~/include, ~/lib, ~/sbin, ~/share, ~/src и еще глубже (типа ~/share/man, ~/share/man/man1 и так далее).
Проделываем ту же процедуру для каталога opt - здесь согласно стандарту следует выполнить нечто вроде
$ mkdir opt/{bin,doc,include,info,lib,man}
Далее - каталоги var и tmp. В первом случае нам потребуются подкаталоги
$ mkdir var/{cache,lib,local,lock,log,opt,run,spool}
А вот каталог tmp оставляем пустым - просто как точку монтирования для грядущей tmpfs после того, как будет собрано ядро с поддержкой оной.
Теперь создаем символические ссылки минимум одна, usr/tmp -> var/tmp, нам потребуется:
ln -s var/tmp usr
Наконец, изменяем атрибуты доступа для каталога /root - он должен быть закрыт для доступа обычных пользователей:
$ chmod 0750 root
То же - для хранилищ временных файлов: в них, напротив, любой пользователь должен иметь возможность записи, но не - удаления чужих файлов. Последнее достигается установкой дополнительного бита суидности:
$ chmod 1777 tmp var/tmp
Теперь можно приступить к развертыванию архивов исходников, предварительно скачав их из сети и разместив в каком-либо подходящем каталоге (например, usr/src - но обязательно в дереве каталога basix). Создаем каталог под собственно дерево исходников (скажем, usr/src/tmp) и переходим в него. Для статической сборки второго этапа все программы Base Linux нам не потребуются. Поэтому разворачиваем только необходимый минимум: bash, gcc, make, binutils и еще несколько (общим числом 18 - в него обязательно должен входить выбранный текстовый редактор). На этом подготовительный этап самостроя системы можно считать законченным.
Продолжение следует