2.6. 设置 $LFS 环境变量和 Umask

在本书中,我们经常使用环境变量 LFS。您应该保证,在构建 LFS 的全过程中,该变量都被定义且设置为您构建 LFS 使用的目录 —— 我们使用 /mnt/lfs 作为例子,但您可以任意选择目录名。如果您在一个独立的分区上构建 LFS,那么这个目录将用作该分区的挂载点。选择一个目录,然后用以下命令设置环境变量:

export LFS=/mnt/lfs

设置该环境变量的好处是,我们可以直接输入书中的命令,例如 mkdir -v $LFS/tools。Shell 在解析命令时会自动将 $LFS 替换成 /mnt/lfs (或是您设置的其他值)。

现在设定创建文件时使用的访问权限模式掩码 (umask) 为 022,以防个别宿主发行版使用不同的默认值:

umask 022

将 umask 设定为 022,保证只有文件所有者可以写新创建的文件和目录,但任何人都可读取或搜索 (仅针对目录) 它们 (如果 open(2) 系统调用使用默认模式,则新文件将具有权限模式 644,而新目录具有权限模式 755)。过于宽松的默认值可能在 LFS 系统中遗留安全问题,而过于严格的默认值可能在构建或使用 LFS 时引发奇怪的问题。

[小心]

小心

无论何时,如果您离开并重新进入了工作环境,一定要再次确认 LFS 已经正确设定,且 umask 被设为 022 (例如,使用 su 切换到 root 或者其他用户时)。以下命令可用于检查 LFS 的设置是否正确:

echo $LFS

确认上述命令输出用于构建 LFS 系统的位置,如果使用了本书的例子,就是 /mnt/lfs

以下命令可用于检查 umask 是否设定正确:

umask

该命令应该输出 022

如果上述两条命令中任意一条的输出不正确,则需要按照本页面之前给出的命令,将 $LFS 设为正确的目录名,并将 umask 设为 022

[注意]

注意

确保 LFS 变量和 umask 始终正确的一种方法是:编辑您的主目录中的 .bash_profile,以及/root/.bash_profile,为它们加入上述 exportumask 命令。另外,在 /etc/passwd 中,每个需要使用 LFS 变量的用户的 shell 都必须是 bash,以保证每次登录时都执行 .bash_profile 中的命令。

另外还要考虑登录宿主系统的方式,如果您使用图形显示管理器登录,再启动虚拟终端,那么 .bash_profile 一般不会被虚拟终端执行。此时,应该将上述命令加入到您使用的用户和 root 用户的 .bashrc 文件中。另外,一些发行版的 .bashrc 中使用 "if" 命令,使其在非交互 bash 的启动过程中不执行其余命令。此时必须将上述命令添加到交互性检测之前。