Создаем свой Линукс-дистрибутив
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: |