现在可以切换到 chroot 环境开始构建和安装最终的 LFS 系统了。以 root
用户运行下面的命令进入这个“空间”,目前,里面只入住了之前准备的临时工具:
chroot "$LFS" /tools/bin/env -i \ HOME=/root \ TERM="$TERM" \ PS1='\u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ /tools/bin/bash --login +h
给 env 命令传递 -i
选项会清除这个 chroot 切换进去的环境里所有变量。随后,只重新设定了 HOME
、TERM
、PS1
和 PATH
变量。TERM=$TERM
语句会设定 chroot 进入的环境里的 TERM
变量为进入前该变量同样的值。许多程序需要这个变量才能正常工作,比如 vim 和 less。如果还需要设定其他变量,比如 CFLAGS
或 CXXFLAGS
,就在这里一起设定比较合适。
从这里以后,就不再需要 LFS
变量了,因为后面所有工作都将被限定在 LFS 文件系统里。这是因为我们已经告诉 Bash 终端 $LFS
就是当前的根目录(/
)。
请注意 /tools/bin
放在了 PATH
变量的最后。意思是在每个软件的最后版本编译安装好后就不再使用临时工具了。这还需要让 shell 不要“记住”每个可执行文件的位置—这样的话,还要给 bash 加上 +h
选项来关闭其哈希功能。
注意一下 bash 的提示符是 I have no name!
。这是正常的,因为这个时候 /etc/passwd
文件还没有被创建。
非常重要,本章从这以后的命令,以及后续章节里的命令都要在 chroot 环境下运行。如果因为某种原因(比如说重启)离开了这个环境,请保证要按照 6.2.2,“挂载和激活 /dev” 和 6.2.3,“挂载虚拟内核文件系统”里所说的那样挂载虚拟内核文件系统,然后在继续构建之前重新运行 chroot 进入环境。