7.14. 清理和备份临时系统

libtool .la 文件仅在链接到静态库时有用。在使用动态共享库时它们没有意义,甚至有害,特别是对于非 autotools 构建系统。仍然在 chroot 环境中,运行命令删除它们:

find /usr/{lib,libexec} -name \*.la -delete

删除临时工具的文档,以防止它们进入最终构建的系统,并节省大约 35 MB:

rm -rf /usr/share/{info,man,doc}/*
[注意]

注意

本节中的其余步骤都是可选的。不过,一旦您开始在第 8 章中安装软件包,临时工具就会被覆盖。因此,按照下面描述的步骤备份临时工具可能是个好主意。其余步骤只有在您的磁盘空间非常紧张时才需要执行。

以下步骤在 chroot 环境之外进行。换句话说,您需要在继续操作之前退出 chroot 环境。这样做的主要原因是:

退出 chroot 环境,并解除挂载内核虚拟文件系统:

[注意]

注意

以下给出的所有步骤都以 root 身份执行。请非常小心地执行命令,错误的命令可能修改您的宿主系统。特别注意环境变量 LFS 会自动为用户 lfs 设定,但可能没有root 设定。无论何时,只要准备以 root 身份执行命令,一定要确认 LFS 变量正确设定。第 2.6 节 “设置 $LFS 环境变量”已经讨论了这个问题。

exit
umount $LFS/dev{/pts,}
umount $LFS/{sys,proc,run}

7.14.1. 移除无用内容

如果 LFS 分区比较小,好消息是,有些无用的内容可以删除。到现在为止,已经构建的可执行文件和库包含大约 90MB 的无用调试符号。

从二进制文件移除调试符号:

strip --strip-debug $LFS/usr/lib/*
strip --strip-unneeded $LFS/usr/{,s}bin/*
strip --strip-unneeded $LFS/tools/bin/*

以上命令会跳过一些文件,并报告说无法识别它们的格式。这些文件大多数都是脚本文件,而不是二进制文件。

注意不要对库文件使用 --strip-unneeded 选项。这会损坏静态库,结果工具链软件包都要重新构建。

现在,您应该保证 chroot 分区有至少 5 GB 的可用空间,以在下一阶段构建和安装 Glibc 和 GCC。如果空间足够构建和安装 Glibc,那么构建和安装剩余的软件包就不成问题。您可以使用命令 df -h $LFS 查询磁盘可用空间。

7.14.2. 备份

现在已经建立了必要的工具,可以考虑备份它们。如果对之前构建的软件包进行的各项检查都没有发现问题,即可判定您的临时工具状态良好,可以将它们备份起来供以后重新使用。如果在后续章节发生了无法挽回的错误,通常来说,最好的办法是删除所有东西,然后 (更小心地) 从头开始。不幸的是,这也会删除所有临时工具。为了避免浪费时间对已经构建成功的部分进行返工,可以准备一个备份。

确认在 root 的主目录中,有至少 600 MB 的可用存储空间 (源代码压缩包也会被包含在备份档案中)。

运行以下命令,创建备份档案:

cd $LFS &&
tar -cJpf $HOME/lfs-temp-tools-10.0.tar.xz .

可以将 $HOME 替换成您选择的其他目录,如果您不想将备份存储在 root 的主目录中:

7.14.3. 还原

如果您犯下了一些错误,并不得不重新开始构建,您可以使用备份档案还原临时工具,节约一些工作时间。由于源代码在 $LFS 中,它们也包含在备份档案内,因此不需要重新下载它们。在确认 $LFS设定正确后,运行以下命令从备份档案进行还原:

cd $LFS &&
rm -rf ./* &&
tar -xpf $HOME/lfs-temp-tools-10.0.tar.xz

再一次复查环境是否配置正确,即可继续构建系统。

[重要]

重要

如果您在移除调试符号,进行备份,或从备份进行恢复时退出了 chroot 环境,记得按照第 7.3 节 “准备虚拟内核文件系统”的描述重新挂载内核虚拟文件系统,并重新进入 chroot 环境 (参阅第 7.4 节 “进入 Chroot 环境”),再继续进行构建。