7.4. 进入 Chroot 环境

现在已经准备好了所有继续构建其余工具时必要的软件包,可以进入 chroot 环境并完成临时工具的安装。在安装最终的系统时,会继续使用该 chroot 环境。以 root 用户身份,运行以下命令以进入当前只包含临时工具的 chroot 环境:

chroot "$LFS" /usr/bin/env -i   \
    HOME=/root                  \
    TERM="$TERM"                \
    PS1='(lfs chroot) \u:\w\$ ' \
    PATH=/usr/bin:/usr/sbin     \
    MAKEFLAGS="-j$(nproc)"      \
    TESTSUITEFLAGS="-j$(nproc)" \
    /bin/bash --login

如果不希望使用所有可用的逻辑 CPU 核心,将 $(nproc) 替换为在本章和后续章节中构建软件包时所希望使用的核心数。第 8 章 中的一些软件包 (如 Autoconf, Libtool, 以及 Tar) 的测试套件不受 MAKEFLAGS 控制,它们使用另一个环境变量 TESTSUITEFLAGS。我们在此也设置这个变量,以便用多个 CPU 核心运行测试套件。

通过传递 -i 选项给 env 命令,可以清除 chroot 环境中的所有环境变量。随后,只重新设定 HOMETERMPS1,以及 PATH 变量。参数 TERM=$TERM 将 chroot 环境中的 TERM 变量设为和 chroot 环境外相同的值。一些程序需要这个变量才能正常工作,例如 vimless。如果需要设定其他变量,例如 CFLAGSCXXFLAGS,也可以在这里设定。

从现在开始,就不再需要使用 LFS 环境变量,因为所有工作都被局限在 LFS 文件系统内。这是由于 chroot 命令启动 Bash 时,已经将根目录 (/) 设置为 $LFS

注意 /tools/bin 不在 PATH 中。这意味着不再使用交叉工具链。

另外,注意 bash 的提示符会包含 I have no name!。这是正常的,因为现在还没有创建 /etc/passwd 文件。

[注意]

注意

本章剩余部分和后续各章中的命令都要在 chroot 环境中运行。如果您因为一些原因 (如重新启动计算机) 离开了该环境,必须确认虚拟内核文件系统如第 7.3.1 节 “挂载和填充 /dev”第 7.3.2 节 “挂载虚拟内核文件系统”所述挂载好,然后重新进入 chroot 环境,才能继续安装 LFS。