通过为 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 用一个除了
HOME
,TERM
和
PS1
变量外,其他环境完全为空的新 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