清理与备份
本节里的步骤是可选的,但如果你的 LFS 分区容量比较小,知道有些不必要的内容可以被删除也是挺好的。目前编译好的可执行文件和库大概会有 70MB 左右不需要的调试符号。可以通过下面的命令移除这些符号:
1. 清理.la 文件及文档
.la 文件,是 libtool 编译出的库文件,记录同名动态库和静态库的相关信息,仅在静态链接库时起作用,经常不但无用反而有害的一种文件,特别是在使用 autotools 以外的工具构建系统的时候。在 chroot 状态下,运行一下命令寻找并清除.la 文件。
find /usr/{lib,libexec} -name \*.la -delete
如果需要节省更多空间,还可以删除帮助文档。最终 LFS 系统中使用的帮助文档也是在第 4 章中构建的,本章节构建软件包的时候顺带安装的这些帮助文档,最后并不会有任何作用。
rm -rf /usr/share/{info,man,doc}/*
2. 退出 chroot 环境
后续的清理和备份步骤,需要在退出 chroot 的环境中进行。由于清理的是一些无关紧要的内容,备份也不是必须的,所以可以跳过并直接进入第 4 章的构建工作。
专门退出 chroot 环境的原因有两点:
- 可以保证操作中,操作的对象不会被使用;
- 便于将备份的内容转移到存储它的位置。(备份的文件应该存储在$LFS 以外的目录中,保证不会被构建失误所殃及)。
exit
umount $LFS/dev{/pts,}
umount $LFS/{sys,proc,run}
在退出后最好查看以下$LFS 变量是否正确。使用 root 身份在宿主系统执行错误命令是十分危险的操作。
3. 清理无用的调试符号文件
如果你的 LFS 分区容量比较小,执行本步骤可以帮你节约近 90MB 的磁盘空间。 运行以下命令删除调试符号的二进制文件:
strip --strip-debug $LFS/usr/lib/*
strip --strip-unneeded $LFS/usr/{,s}bin/*
strip --strip-unneeded $LFS/tools/bin/*
以上命令会跳过一些文件并报告称无法识别它们的格式。这些文件大多数都是脚本文件,而不是二进制文件,属于正常现象。
注意其中的第一个对 lib 目录的命令使用的是 --strip-debug 而非 --strip-unneeded。这是因为--strip-unneeded 这会损坏静态库,最终导致工具链软件包都要重新构建,所以千万不要弄错。
在执行完清理操作后,可以使用命令 df -h $LFS 查询磁盘可用空间。在这个阶段,应该保证 chroot 分区有至少 5 GB 的可用空间,来保证第 4 章构建和安装 Glibc 和 GCC 的时候,有充足的空间可以容纳,构建 Glibc 和 GCC 会产生的大量临时文件。由于正常步骤在构建后会删除软件包目录,此时临时文件也就一并被删除了,第 4 章构建 Glibc 和 GCC 的时候会是磁盘占用的峰值,磁盘容量分配的比较极限的情况下,需要在构建时
4. 备份
整个第 3 章应该花费了不少时间,不过第 4 章的构建更花时间,操作也会更多,为了避免失误导致重头再来,备份本章节构建的内容显然是更好的选择。当然使用虚拟机的读者完全可以跳过这个步骤,快照也可以完成同样的功效。 运行以下命令,打包并备份整个$LFS 目录,备份需要占用 600M 左右的存储空间。
cd $LFS &&
tar -cJpf $HOME/lfs-temp-tools-10.1.tar.xz .
5. 还原
同样的在确定需要从第 3 章结束重新开始第 4 章时,运行以下命令,删除错误构建的 LFS 系统,并还原备份文件。
cd $LFS &&
rm -rf ./* &&
tar -xpf $HOME/lfs-temp-tools-10.1.tar.xz
还原后记得重新 chroot 后在开始后续的构建步骤,进入步骤参考 3.4 进入 chroot 环境,这点使用虚拟机快照的读者也需要注意。