<< Back to shouce.jb51.net

进入chroot(虚拟根)环境

现在是进入我们的虚拟根环境以便安装我们所需要的其它软件时候了。在你执行chroot前,你必须成为root,因为只有root能执行chroot命令。

和前面一样,运行echo $LFS 命令,看一下LFS变量是否正确设置了,如果按照我们的例子来做的话,应该是 /mnt/lfs.

成为root后运行下列命令进入chroot环境:

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值设置成与chroot外的相同,这样可以使象vim和less等程序可以正常运行。如果你需要其它的变量,比如 CFLAGS 或 CXXFLAGS,就在这里把它们设好。

从现在开始,$LFS变量就不再需要了,因为现在shell已经把 $LFS 看成 / ,也就是chroot命令的第一个参数。

注意,/tools/bin 是在 PATH 环境变量的最后一个。这意味着,只要有新的工具安装上了,第五章里编译的临时工具就不再使用了。当然,这需要关闭掉shell的记忆功能(也就是hash),我们过一会就把它关掉。

您必须确保本章和以后章节中的所有命令都是在虚拟根环境下执行的。如果已经离开了这个环境(如重启动等原因),请记住一定要在继续工作以前重新进入chroot并且重新加载proc和devpts(马上就将讨论到)。

注意,bash提示中会包含"I have no name!",这个很正常,因为 /etc/passwd 文件还没创建呢。