Установим
правильное
рабочее
окружение,
создав два
новых
файла
настроек
для
оболочки 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