У меня есть несколько вопросов относительно предложенной установки от LFS.
Вопрос:
- что на самом деле делает эта команда
cat > ~/.bash_profile ‹‹ "EOF" exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash EOF
- в нем упоминается, что «новый экземпляр оболочки - это оболочка без входа в систему», поэтому нам нужно настроить .bashrc .... однако на самом деле это не объясняет, как мы используем этот bashrc после его создания. В конце он возвращается к bash_profile.
Большинство из них хорошо объяснено, но, возможно, для этого раздела оно более техническое, чем я ожидал, и оно также включает некоторые важные концепции, которые я хотел бы понять более подробно. Я выделил жирным шрифтом некоторые команды, которые не могу понять, что они делают.
Откуда: http://www.linuxfromscratch.org/lfs/view/stable/chapter04/settingenvironment.html
Настройте хорошую рабочую среду, создав два новых файла запуска для оболочки bash. Войдя в систему как пользователь lfs, введите следующую команду, чтобы создать новый .bash_profile:
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
При входе в систему как пользователь lfs начальная оболочка обычно представляет собой оболочку входа в систему, которая считывает /etc/profile хоста, а затем .bash_profile. Команда exec env -i.../bin/bash в файле .bash_profile заменяет запущенную оболочку новой с полностью пустой средой, за исключением переменных HOME, TERM и PS1. Это гарантирует, что никакие нежелательные и потенциально опасные переменные среды из хост-системы не попадут в среду сборки.
Новый экземпляр оболочки — это оболочка без входа в систему, которая не читает файлы /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. Однако новые инструменты следует использовать сразу же после их установки. Отключив хэш-функцию, оболочка всегда будет искать ПУТЬ, когда программа должна быть запущена. Таким образом, оболочка найдет только что скомпилированные инструменты в $LFS/tools, как только они станут доступны, не запоминая предыдущую версию той же программы в другом месте.
Установка пользовательской маски создания файлов (umask) на 022 гарантирует, что вновь созданные файлы и каталоги доступны для записи только их владельцу, но доступны для чтения и выполнения любым (при условии, что системный вызов open(2) использует режимы по умолчанию новые файлы будут иметь режим разрешений 644, а каталоги — режим 755).
Переменная LFS должна быть установлена на выбранную точку монтирования.
Переменная LC_ALL управляет локализацией определенных программ, заставляя их сообщения следовать соглашениям определенной страны. Если хост-система использует версию Glibc более раннюю, чем 2.2.4, установка LC_ALL в значение, отличное от «POSIX» или «C» (в этой главе) может вызвать проблемы, если вы выйдете из среды chroot и захотите вернуться позже. Установка LC_ALL в «POSIX» или «C» (оба эквивалентны) гарантирует, что в среде chroot все будет работать должным образом.
Переменная LFS_TGT устанавливает нестандартное, но совместимое описание машины для использования при создании нашего кросс-компилятора и компоновщика и при кросс-компиляции нашей временной цепочки инструментов. Дополнительная информация содержится в Разделе 5.2, «Технические примечания к набору инструментов».
Наконец, чтобы полностью подготовить среду для создания временных инструментов, используйте только что созданный профиль пользователя:
source ~/.bash_profile