Настройка окружения
После того, как вы создали нового пользователя, от имени которого будете собирать LFA, нужно настроить его окружение. Как минимум, требуется объявить ряд переменных окружения, которые мы будем использовать при сборке программ. В таких переменных содержатся сведения, неизменные от пакета к пакету. Например, путь, куда нужно устанавливать программы, целевая архитектураи т.п. Если после создания пользователя вы вошли в терминале от его имени, то приступайте к выполнению инструкций ниже. В противном случае от вас требуется сначала войти от имени lfa
с помощью команды su - lfa
.
Первым делом требуется создать файл ~/.bash_profile
:
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
При входе в систему от имени пользователя lfa
начальной оболочкой обычно является оболочка входа в систему, которая читает файл /etc/profile
, содержащий основные общесистемные настройки и переменные окружения, а затем ~/.bash_profile
. Команда exec env -i ... /bin/bash
в последнем заменяет запущенную оболочку новой с абсолютно пустым окружением, за исключением переменных $HOME
, $TERM
и $PS1
. Это гарантирует нам, что никакие нежелательные и потенциально опасные переменные окружения из хост-системы не «просочатся» в нашу среду сборки.
Новый экземпляр оболочки вместо /etc/profile
и ~/.bash_profile
будет читать уже файл ~/.bashrc
. Создайте его:
cat > ~/.bashrc << "EOF"
set +h
umask 022
unset CFLAGS
LFA=$HOME/lfa
LC_ALL=C
PATH=$LFA/tools/bin:/bin:/usr/bin
export LFA LC_ALL PATH
EOF
Применение изменений
Для того, чтобы применить внесённые нами изменения, выполните:
source ~/.bash_profile
Значения параметров
~/.bashrc
:Команда
set +h
отключает хеш-функцию BASH. Хеширование в общем случае является полезной вещью, поскольку BASH использует хеш-таблицу для запоминания полного пути к исполняемым файлам, чтобы не искать путь до исполняемого файла в$PATH
снова и снова. Однако новые программы для сборки, которые мы только что установили в$LFA/tools/bin
, требуется использовать сразу же после их установки. После отключения хеширования оболочка BASH сразу найдёт только что установленные программы, не вспоминая о предыдущей версии программы в другом месте.Исполнение команды
umask 022
гарантирует, что вновь созданные файлы и каталоги могут быть записаны только их владельцем, но могут быть прочитаны и исполнены любым пользователем.Далее во избежание сбоев во время сборки кросс-компилятора нам требуется «удалить» переменную окружения
CFLAGS
.Переменная окружения
LFA
содержит путь до дитректории, в которой будем собирать систему.
LC_ALL
управляет локализацией программ, заставляя сообщения, которые они выводят в терминал, следовать конвенциям указанной в этой переменной страны. Во избежание проблем сборки любые значенияLC_ALL
, отличные отPOSIX
илиC
, использовать не рекомендуется.Переменная окружения
PATH
содержит пути до директорий, в которых содержатся исполняемые файлы. Благодаря этой переменной в терминале мы можем просто ввестиsome_program
вместо указания полного пути/usr/bin/some_program
. В эту переменную мы добавляем путь до двоичных исполняемых файлов собираемого нами кросс-компилятора ($LFA/tools/bin
), а также «стандартные» для хост-системы директории/bin
и/usr/bin
. Указание пути до кросс-компилятора раньше, чем путей до других инструментов вкупе с отключением хеширования гарантирует, что для сборки системы у нас будут использованы только нужные программы из кросс-компилятора, а не из хост-системы.