4.4. 设置环境

通过为 bash shell 创建两个新的启动文件来建立一个良好的工作环境。当以用户 lfs 身份登录时,执行以下命令来创建一个新的.bash_profile:

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

当以用户 lfs 身份登录时,初始 shell 通常是一个 login shell,它会读取/etc/profile主机的 (可能包含一些设置和环境变量),然后.bash_profile. exec env -i.../bin/bash 命令在.bash_profile文件中会将正在运行的 shell 替换为一个全新的 shell,这个新 shell 拥有一个完全空的环境,除了HOME, TERM,以及PS1变量。这确保了不会有来自宿主系统的不必要且潜在危险的环境变量泄漏到构建环境中。这里使用的技术实现了确保环境清洁的目标。

shell 的新实例是一个 non-login shell,它不会读取/etc/profile.bash_profile文件,而是读取.bashrc文件。现在创建.bashrc.bashrc

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH
EOF

set +h 命令关闭了 bash 的哈希功能。哈希通常是一个有用的功能——bash 使用一个哈希表来记住可执行文件的完整路径,以避免重复搜索PATH来查找相同的可执行文件。然而,新的工具应该在安装后立即使用。通过关闭哈希功能,shell 将始终搜索PATHPATH$LFS/tools,以便在程序要运行时找到新编译的工具,而无需记住同一程序先前版本在不同位置的信息。

将用户文件创建掩码 (umask) 设置为 022 确保了新创建的文件和目录仅对其所有者可写,但对任何人都是可读和可执行的 (假设 open(2) 系统调用使用了默认模式,新文件最终的权限模式将为 644,目录的权限模式将为 755)。

LFS 变量应该设置为选择的挂载点。LFS

LFS 变量应该设置为选择的挂载点。LC_ALL 变量控制某些程序的本地化,使其消息遵循指定国家的约定。如果宿主系统使用的 Glibc 版本早于 2.2.4,将LC_ALLLC_ALL 变量控制某些程序的本地化,使其消息遵循指定国家的约定。如果宿主系统使用的 Glibc 版本早于 2.2.4,将设置为 “POSIX” 或 “C” 以外的值 (在本章中) 可能会导致问题,如果您退出 chroot 环境并希望稍后返回。将LC_ALL 变量控制某些程序的本地化,使其消息遵循指定国家的约定。如果宿主系统使用的 Glibc 版本早于 2.2.4,将LC_ALL

设置为 “POSIX” 或 “C” (两者等效) 确保一切在 chroot 环境中都能按预期工作。通过将/tools/binPATH放在标准的 PATH 之前,所有在 第 5 章 中安装的程序在安装后立即被 shell 拾取。这与关闭哈希功能相结合,限制了当第 5 章环境中存在相同程序时,使用宿主机上的旧程序的风险。

最后,为了使环境为构建临时工具做好充分准备,source 刚刚创建的用户配置文件

source ~/.bash_profile