Настройка окружения

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