Самостройный Linux
Часть 3, Продолжальная

Алексей Федорчук
[email protected]

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

Чтобы статически связанные программы в дальнейшем не путались с нормально (то есть динамически) слинкованными (они будут собраны на одном из следующих этапов), отведем для них специальный каталог в дереве /mount_point/basix (будущем корне нашей системы), например, static. И предпишем, чтобы все именно в него помещались результаты компиляции.

Обе задачи - статическая линковка и размещение в каталоге /mount_point/basix/static для ряда наших программ достигаются указанием соответствующих опций конфигурирования:

$ ./configure --enable-static --prefix=/mount_point/basix/static

Форма команды приведена в предположении, что мы находимся в корневом каталоге дерева исходников собираемой программы. Для некоторых программ (из нашего статического набора это binutils и gcc) сборку рекомендуется выполнять из специально созданного каталога, изолированного от дерева исходников (типа binutils-build м gcc-build, соответственно). В этом случае после создания такого каталога следует перейти в него, а команда конфигурирования примет вид вроде

$ ../binutils-X.XX/configure [options]

Однако многие из собираемых программ реагируют на опцию конфигурирования --enable-static (это можно проверить по команде ./configure --help). В этом случае, понятно, она опускается, а статическая линковка задается на стадии компиляции.

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

Компиляция программ и установка их в соответствующие ветви каталога basix/static выполняются, как обычно, последовательностью команд

$ make && make install

Для программ, не понимающих опции --enable-static, в строке make следует указать дополнительные флаги компиляции, предписывающие статическую сборку, в большинстве случаев таковым выступает флаг LDFLAGS=-static, или:

$ make LDFLAGS=-all-static

Префикс также может указываться как флаг компиляции, например:

$ make PREFIX=/mount_point/basix/static

Порядок при сборке статически слинкованных пакетов значения не имеет. По завершении мы получаем в каталоге static нечто вроде слепка корня - с подкаталогами bin, i686-pc-linux-gnu, include, info, lib, libexec, man, share, var. Ну а дерево исходников, из которых все это собиралось (то есть usr/src/tmp), лучше просто целиком удалить - собрать в нем же динамически связанные пакеты не рекомендуется.

Да, вот что. Герард настоятельно рекомендует выполнять статическую сборку от имени специально для того созданного пользователя, но не как администратор. В его Писании это вполне резонно - при элементарной ошибке набора в указании префикса можно легко затереть важные файлы материнской системы. Если же в качестве последней выступает LiveCD, то необходимости в новом пользователе нет, это избавит от нескольких промежуточных действий.

И еще. Пожалуйста, не воспринимайте эту часть как руководство к действиям, которые описаны здесь в самом общем виде. Ибо, ей-же богу, не вижу смысла дублировать Герардово Писание или, паче того вывод ./configure --help для каждой программы. Так что именно к этим источникам и следует обратиться за деталями.

Продолжение следует