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

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


./configure --enable-static-link --prefix=$LFS/usr --bindir=$LFS/bin --with-curses &&

make &&

make install &&

cd $LFS/bin &&

ln -sf bash sh

Точно таким же образом устанавливаются и остальные программы: binutils, bzip2, diffutils, fileutils, gawk, gcc, grep, gzip, linux kernel, make, patch, sed, sh-utils, tar, texinfo, textutils. Инструкции по установке всего этого есть в LFS-book.

После этого создаем файлы passwd и group, монтируем файловую систему proc.

Все. Первый этап установки закончен.

Этап второй

На этом этапе мы должны установить одну из самых главных библиотек - glibc, и после этого уже динамически перекомпилить уже установленные программы и добавить некоторые новые. Для начала создадим профиль рута:

cat > $LFS/root/.bash_profile << "EOF"

# Begin /root/.bash_profile

PS1='\u:\w\$ '

PATH=/bin:/usr/bin:/sbin:/usr/sbin

export PS1 PATH

# End /root/.bash_profile

EOF

Теперь самое время залогиниться в нашу новую систему:

cd $LFS &&

chroot $LFS /usr/bin/env -i HOME=/root \

TERM=$TERM /bin/bash --login

Теперь в строке приглашения вместо имени стоит "I have no name!". Это нормально, просто мы еще не установили glibc. После этого меняем владельца всей нашей LFS-партиции на рута:

cd / &&

chown 0.0 . proc &&

chown -R 0.0 bin boot dev etc home lib mnt opt root sbin tmp usr var

Мы используем 0.0 вместо root.root, так как мы еще не установили glibc. Устанавливаем glibc:

mknod -m 0666 /dev/null c 1 3 &&

touch /etc/ld.so.conf &&

cp malloc/Makefile malloc/Makefile.backup &&

sed 's%\$(PERL)%/usr/bin/perl%' malloc/Makefile.backup > malloc/Makefile &&

cp login/Makefile login/Makefile.backup &&

sed 's/root/0/' login/Makefile.backup > login/Makefile &&

mkdir ../glibc-build &&

cd ../glibc-build &&

../glibc-2.2.5/configure --prefix=/usr --enable-add-ons --libexecdir=/usr/bin &&

echo "cross-compiling = no" > configparms &&

make &&

make install &&

make localedata/install-locales &&

exec /bin/bash --login

После этого в строке приглашения появляется заветное root, и мы можем динамически перекомпилить уже установленные программы и некоторые новые: install-log, makedev, man-pages, findutils, gawk, ncurses, vim, gcc, bison, less, groff, man, perl, m4, texinfo, autoconf, automake, bash, flex, file, libtool, bin86, binutils, bzip2, ed, gettext, kbd, diffutils, e2fsprogs, fileutils, grep, gzip, lilo, make, modutils, netkitbase, patch, procinfo, procps, psmisc, reiserfsprogs, sed, sh-utils, net-tools, shadow, sysklogd, sysvinit, tar, textutils, util-linux, lfs-bootscripts.

Обращаю внимание, что после компиляции glibc устанавливаем install-log. Это я добавил от себя, в LFS-book этого нет, но в дальнейшем это сильно облегчит жизнь. Взять его можно здесь: http://prdownload.sourceforge.net/install-log/install-log-1.9.tar.bz2 Смело устанавливаем:

make &&

cp install-log /usr/bin &&

cp install-log.1 /usr/share/man/man1 &&

cp install-log.rc /etc &&

mkdir /var/install-logs &&

touch /var/install-logs/.timestamp

После установки каждой программы вызывай install-log filename, и в директории /var/install-logs получаем в директории /var/install-logs текстовый файл с именем filename, содержащий имена установленных файлов. Теперь создаем профиль редактора vim, конфигурируем glibc, устанавливаем системное время, конфигурируем динамическую загрузку библиотек, демон syslogd, shadow, sysvinit, клавиатуру, сеть и т.д. После этого компилируем ядро, добавляем его в LILO и получаем свежеустановленный и вполне работоспособный Linux. Инструкция по сборке написана нормально, и при минимальном знании английского языка ее можно понять. И еще: по умолчанию LFS совершенно небезопасен =/, поэтому этому аспекту надо уделить повышенное внимание.

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