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 用户登入时,会使用前面设定的 Bash Shell,它会首先读取宿主系统的 /etc/profile 文件(通常包含一些设置和环境变量),然后读取 .bash_profile 文件来完成初始化。.bash_profile 中的 exec env -i.../bin/bash 命令用完全空的环境(除了HOMETERMPS1 变量外)来启动 Shell。这样能保证我们的编译环境不会被宿主系统中不必要的或者有潜在危险的环境变量所影响,从而确保获得一个干净的工作环境。

这个新创建的 bash 是非登入 Shell,它不读取 /etc/profile.bash_profile 文件,而是读取 .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 总是会在 PATH里搜索。因此当一个程序可用时,Shell 可以在 $LFS/tools 里立即搜索到,而不是使用哈希表里记忆的在其它目录下的同一个程序。

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

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

LC_ALL 变量控制着某些程序的本地化,使其显示的信息复合指定国家(地区)的规范。如果宿主系统使用早于 2.2.4 版本的 Glibc,LC_ALL 使用除“POSIX” 或 “C” 外其它的值可能导致在退出 chroot 环境再返回继续时出现问题。

/tools/bin 置于 PATH 变量的开头,可以使在第五章中安装的程序安装后立即被 shell 使用。再加上关闭 shell 哈希功能,在第五章的环境中,使得宿主系统中的相同名字的程序被使用的可能降到最小。

最后,为了完全准备好构建临时工具的环境,导入刚才生成的配置文件:



source ~/.bash_profile



Host by Unixetc