Большинство программ и библиотек по умолчанию компилируются с символами отладки. ( с опцией gcc -g).
При отладке программы или библиотеки, скомпилированной с отладочной информацией, отладчик предоставляет не только адреса в памяти, но и имена алгоритмов и переменных.
Однако включение символов отладки значительно увеличивает размер программы или библиотеки. Для того, чтобы получить представление о размере отладочных символов, взглянем на пример:
оболочка bash, скомпилированная с отладочными символами: 1200 KB
оболочка bash, скомпилированная без отладочных символов: 480 KB
файлы glibc и gcc (/lib и /usr/lib) с отладочными символами: 87 MB
файлы glibc и gcc скомпилированная без отладочных символов: 16 MB
Размеры могут различаться в зависимости от использованного компилятора Си и библиотеки. При сопоставлении размера программы, скомпилированной с отладочными символами и без них, разница составляет примерно 2 – 5 раз.
Так как большинство пользователей никогда не используют отладчик, удаление этих символов позволит значительно сэкономить дисковое пространство.
Для удаления символов отладки из бинарного файла (файл a.out или бинарный файл ELF), выполните strip –strip-debug filename. Допускается использование символа * для обработки нескольких файлов (например, strip –strip-debug $LFS/static/bin/*).
Для удобства, в главе 9 описана программа, удаляющая отладочные символы со всех программ и библиотек системы. Для получения дополнительных сведений по оптимизации, см. руководство: http://hints.linuxfromscratch.org/hints/optimization.txt.
Вход в среду chroot
Для последующей инсталляции пакетов необходимо войти в среду chroot. Для этого войдите в систему в режиме пользователя root, т.к. только root он имеет право выполнять команду chroot.
После перехода в режим пользователя root, выполните следующую команду для входа в среду chroot:
chroot $LFS /static/bin/env -i
HOME=/root TERM=$TERM PS1='u:w$ '
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/static/bin
/static/bin/bash –login
Команда env с опцией -i очистит значения всех переменных среды chroot. Затем только переменные HOME, TERM, PS1 и PATH будут заданы. Конструкция TERM=$TERM устанавливает значение TERM для среды chroot равным значению TERM вне этой среды; эта переменная необходима для корректной работы программ типа vim и less. Если вы нуждаетесь в других переменных, например CFLAGS или CXXFLAGS, самое время задать их снова.
Отныне нет необходимости использовать переменную LFS, т.к. все действия выполняются в файловой системе LFS (то, что оболочка считает / , на самом деле является /mnt/lfs).
Обратите внимание, что все команды, начиная с данной главы, следует выполнять из среды chroot. Если по какой-то причине (например, перезагрузка системы) вы вышли из этой среды, прежде чем возобновить инсталляцию, заново войдите в нее и монтируйте файловую систему proc (см. далее).
Заметьте, что приглашение bash выглядит следующим образом: «I have no name!» Это нормально, т.к. пакет Glibc еще не был установлен.
Изменение прав
Первое что мы сделаем в режиме пользователя
Выполните следующую команду для передачи прав на все программы, скомпилированные с использованием статических ссылок:
chown -R 0:0 /static
Эта команда использует «0:0» вместо «root:root», т.к. оболочка не может резольвировать имя «root», т.к. пакет glibc еще не был установлен.
Создание директорий
Давайте создадим структуру файловой системы LFS. Начнем с создания более или менее стандартного дерева с помощью следующих команд:
mkdir -p /{bin,boot,dev/pts,etc/opt,home,lib,mnt,proc} &&
mkdir -p /{root,sbin,tmp,usr/local,var,opt} &&
for dirname in /usr /usr/local
do
mkdir $dirname/{bin,etc,include,lib,sbin,share,src}