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 文件。.bash_profile 中的命令 exec env -i.../bin/bash 用一个除了 HOMETERMPS1 变量外,其他环境完全为空的新 shell 代替运行中的 shell。这能确保不会有潜在的和意想不到的危险环境变量,从宿主机泄露到构建环境中。这样做主要是为了确保环境的干净。

新的 shell 实例是一个 non-login 的 shell,不会读取 /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 进行检索的时间和对同一个可执行文件的重复寻找。然而,新工具在安装后,应马上使用。通过关闭哈希功能,程序执行的时候就会一直搜索 PATH。如此,新编译的工具一旦可用,shell 便能在马上在文件夹 $LFS/tools 中找到它们,而不会去记录存在于不同地方的旧版该程序。

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

LFS 变量应设置成选定的挂载点。

LC_ALL 变量控制某些程序的本地化,使它们的消息遵循特定国家的惯例。设置 LC_ALL 为「POSIX」或「C」(两者是等价的),确保在 chroot 环境中一切能如期望的那样进行。

LFS_TGT 变量设置了一个虽非默认,但在构建交叉编译器、连接器和交叉编译临时工作链时,用得上到的兼容的机器说明。第 5.2 节 「工具链技术说明」中包含更多信息。

通过把 /tools/bin 放在标准 PATH 变量的前面,使得所有在 第 5 章 中安装的程序,一经安装 shell 便能马上使用。与之配合的关闭哈希功能,能在第五章环境中的程序在可用的情况下,限制使用宿主机中旧程序的风险。

最后,启用刚才创建的用户配置,为构建临时工具完全准备好环境:

source ~/.bash_profile