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 通常是一个可登录的 shell,它先读取宿主机的 /etc/profile 文件(很可能包括一些设置和环境变量),然后是 .bash_profile 文件。.bash_profile 文件中的 exec env -i.../bin/bash 命令用一个除了 HOMETERMPS1 变量,完全空环境的 shell 代替运行中的 shell。这可以确保没有不必要的或者有潜在风险的环境变量从宿主机系统中泄露到构建环境。这里使用的技巧是为了有一个干净环境。

新的 shell 实例是一个非登录 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 的时间和又找到一个相同的可执行文件。然而,新工具要一安装后就使用。通过关闭哈希功能,一个程序准备运行时 shell 总是会搜索 PATH 变量。如此,shell 能在新编译的工具可用时马上在文件夹 $LFS/tools 中找到,而不是记录相同程序在其它地方的之前版本。

设置用户文件新建掩码(umask)为 022 ,确保新建的文件和目录只有它们自己的所有者可写,任何人都可读和可执行(假定 open(2) 系统调用使用的默认模式是新文件使用 644 模式,文件夹使用 755 模式)。

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

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

当编译我们的交叉编译器和链接器以及交叉编译我们的临时工具链时,LFS_TGT变量设置了一个非默认,但兼容的机器说明。5.2,“工具链技术说明”包含更多的信息。

/tools/bin 放在标准的 PATH 变量前面, 第五章中安装的软件一安装完成 shell 就可使用。这和关闭哈希功能一起,降低了在第五章环境中新程序可用时宿主机器使用旧程序的风险。

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

source ~/.bash_profile