Создаем свой Линукс-дистрибутив

Xakep, номер #045, стр. 045-054-2


Почему мы используем статическую компиляцию?

При статической компиляции код библиотеки добавляется к коду программы, существенно увеличивая ее размер, но таким образом не нарушается целостность. Когда же происходит динамическая компиляция, библиотека хранится в отдельном файле, а программы по мере надобности обращаются к нему. В результате чего все программы работают с одной копией библиотеки и имеют сравнительно меньший размер. Но после установки нового корневого каталога нашей новой системы библиотеки, находящиеся в каталогах /lib, /usr/lib, /usr/local/lib и т.д., будут недоступны, поэтому динамически скомпилированные программы не будут работать.

Вот почему при конфигурировании программ надо указывать флаги --enable-static-link, --disable-shared и --static.

В процессе установки на экране могут появляться предупреждения компилятора. На это не нужно обращать внимания, все идет пучком. В большинстве случаев это происходит из-за синтаксиса С или С++, т.е. некоторые исходные тексты используют старый стандарт этих языков, что не критично. Характерная особенность: при компиляции программ под рутом могут возникнуть проблемы. Это связано с тем, что некоторые старые файлы в системе могут быть переписаны новыми. Дабы этого избежать, мы будем компилировать программы из-под непривилегированного пользователя. Пусть раздел для LFS будет подмонтирован в /mnt/lfs. Для начала определим переменную LFS:

export LFS=/mnt/lfs

Теперь самое время создать пользователя lfs, из-под которого будем непосредственно устанавливать LFS:

useradd -s /bin/bash -m lfs &&

passwd lfs

После создания пользователя изменим/сменим владельца нашей новой партиции:

chown -R lfs $LFS

Теперь заходи в систему как lfs и создавай новый профиль для удобной работы:

cat > ~/.bash_profile << "EOF"

umask 022

LFS=/mnt/lfs

LC_ALL=POSIX

export LFS LC_ALL

EOF

source ~/.bash_profile

Все. Можно начинать установку. Первым делом создадим дерево каталогов:

cd $LFS &&

mkdir -p bin boot dev/pts etc/opt home lib mnt proc root sbin tmp var opt &&

for dirname in $LFS/usr $LFS/usr/local

do

mkdir $dirname

cd $dirname

mkdir bin etc include lib sbin share src

ln -s share/man

ln -s share/doc

ln -s share/info

cd $dirname/share

mkdir dict doc info locale man nls misc terminfo zoneinfo

cd $dirname/share/man

mkdir man{1,2,3,4,5,6,7,8}

done &&

cd $LFS/var &&

mkdir -p lock log mail run spool tmp opt cache lib/misc local &&

cd $LFS/opt &&

mkdir bin doc include info lib man &&

cd $LFS/usr &&

ln -s ../var/tmp

Теперь самое время установить bash. Сначала надо проверить, есть ли у тебя файлы /usr/lib/libcurses.a и /usr/lib/libncurses.a. Если отсутствуют оба файла, тебе нужно установить пакет с названием ncurses-dev. Если этот пакет установлен или после установки, проверь еще раз наличие файлов. Если файл libcurses.a отсутствует, то надо создать ссылку:

cd /usr/lib &&

ln -s libncurses.a libcurses.a

После этого можно устанавливать bash:

Назад на стр. 045-054-1  Содержание  Вперед на стр. 045-054-3