4.4. Установка рабочего окружения

Установим правильное рабочее окружение, создав два новых файла настроек для оболочки bash. Выполните из-под пользователя lfs следующую команду для создания .bash_profile:

cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

Когда Вы зашли под пользовтелем lfs, выполняемая оболочка обычно является так называемой login shell, которая считывает файл /etc/profile с хост-системы (обычно содержащий некоторые настройки и переменные окружения, общие для всей системы), а затем файл .bash_profile. Команда exec env -i.../bin/bash в файле .bash_profile заменяет запущенную оболочку на новую с абсолютно пустым окружением, исключая переменные HOME, TERM и PS1. Это позволяет убедиться, что никакие потенциально нежелательные переменные окружения из хост-системы не просочатся в окружение сборки.

Свежезапущенная оболочка представляет собой non-login shell, которая не считывает файлы /etc/profile и .bash_profile, вместо этого читая файл .bashrc. Создадим .bashrc:

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF

Команда set +h отключает функцию хэширования bash. Хэширование чаще всего полезно— bash использует хэш-таблицу для запоминания полного пути к исполняемым файлам, чтобы не просматривать заново все каталоги PATH при поиске однажды уже вызванной программы. Но наши инструменты должны включаться в работу сразу после установки. Благодаря отключению функции хеширования оболочка будет всегда просматривать PATH перед выполнением программы, и находить наши свежесобранные инструменты в $LFS/tools как только они станут доступны, не запоминая предыдущие версии тех же программ, расположенные в другом месте.

Устанавливая пользовательскую маску создания файла (umask) в 022, мы указываем, что новые файлы и директории будут доступны для записи только владельцу, но читать и выполнять их смогут все (предполагая значения по умолчанию, используемые системным вызовом open(2), файлы будут создаваться с правами 644, а папки - 755).

Переменная окружения LFS должна содержать путь до выбранной точки монтирования.

Переменная LC_ALL управляет локализацией некоторых программ, требуя от них форматировать сообщения в соответствии с правилами, принятыми в указанной стране. Если хост-система использует версию Glibc старше 2.2.4, установка переменной LC_ALL в значение, отличное от «POSIX» или «C» (на протяжении этой главы) может привести к неожиданным проблемам, если Вы зайдете во временное окружение с помощью chroot и захотите вернуться в него позже. Установка LC_ALL в «POSIX» или «C » (оба значения эквивалентны) гарантирует, что все будет работать так, как ожидается.

Переменная LFS_TGT устанавливает нестандартное, но совместимое определение платформы для использования при сборке наших кросс-компилятора и компоновщика и затем - временного инструментария. Более подробная информация изложена в Раздел 5.2, «Toolchain Technical Notes».

Благодаря тому, что мы поместили /tools/bin перед стандартными директориями PATH, все программы, устанавливаемые в Глава 5 будит подхватываться оболочкой сразу после их установки. Это, в совокупности с отключеным хэшированием, минимизирует риск случайного использования старых программ из хост-системы во временном окружении в Главе 5.

Заканчивая подготовку окружения к сборке временных инструментов, считаем только что созданный профиль:

source ~/.bash_profile