Общие сведения о настройке среды LFS

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

person BluePython    schedule 24.07.2014    source источник


Ответы (1)


См. файлы запуска Bash.

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

В этом случае env вызывает новый интерактивный экземпляр bash без входа в систему (/bin/bash) с игнорируемыми переменными среды (-i), кроме тех, которые установлены явно. Экземпляры bash без входа в систему не читают .bash_profile, .bash_login и .profile, но читают .bashrc. Однако экземпляры входа читают эти файлы, но не .bashrc. Поскольку env не передает -l в /bin/bash, bash не будет работать как оболочка для входа в систему.

И exec перезаписывает текущий процесс оболочки с помощью env. env, с другой стороны, exec bash, так что в целом старая оболочка преобразуется в новую bash, но идентификатор процесса остается прежним.

person konsolebox    schedule 24.07.2014