在本章中,我们将真正开始构造 LFS 系统。
软件的安装过程是简单直接的。尽管很多时候可以把安装说明写得更短、更通用,我们还是选择为每个包提供完整的安装流程,以尽量减小出错的可能。学习 Linux 系统工作原理的关键就是要知道每个包的作用,以及您 (或者系统) 为什么需要它。
我们不推荐在编译中使用自定义优化。自定义优化可以使程序跑得稍微快一点,但也可能在编译或运行的过程中带来问题。如果一个软件包在打开自定义优化时无法编译,试着关闭优化再编译它。即使一个软件包在使用自定义优化时可以编译,由于源代码和编译工具的复杂相互作用,仍然存在编译不正确的风险。另外请注意,除本书明确说明外,设定
-march
和 -mtune
是未经验证的。它们可能在工具链软件包 (Binutils、GCC 和 Glibc)
中引发问题。自定义编译优化带来的微小性能增益往往不值得冒上述风险。我们建议第一次构建 LFS 的读者不要使用自定义的优化选项。
另一方面,我们保持软件包默认配置启用的优化选项。另外,我们有时显式启用软件包提供但未作为默认的优化配置。软件包维护者已经测试了这些配置并认为它们是安全的,因此它们不太可能导致构建失败。通常来说,默认配置已经启用
-O2
或 -O3
,因此在不使用任何自定义优化的情况下,得到的系统仍然会运行得很快,同时保持稳定。
在提供安装过程的说明之前,每个页面都提供了软件包的基本信息,包括其内容的简要描述,以及构建过程大概需要的时间和磁盘空间。在安装指令之后,有一个包含该软件包提供的所有程序和库的清单 (以及对它们的简要描述)。
对于拥有可用的测试套件的软件包,第 8 章中给出的 SBU 值和需要的磁盘空间包含了运行测试套件需要的时间和磁盘空间。如无特殊说明,SBU 值根据仅使用四个 CPU 核心 (-j4) 进行操作时测得的时间计算。
一般来说,LFS 作者不鼓励构建和安装静态库。在现代 Linux 系统中,多数静态库已经失去存在的意义。另外,将静态库链接到程序中可能是有害的。如果需要更新这个库以解决安全问题,所有使用该静态库的程序都要重新链接到新版本的库。程序对静态库的使用并不总是显然的,甚至可能无法查明有哪些程序需要重新链接 (以及如何重新链接)。
本章给出的安装过程删除或者禁止安装多数静态库。一般来说,传递 --disable-static
选项给 configure
即可达成目的。然而,某些情况下需要使用其他手段。在极个别情况下,特别是对于 Glibc 和
GCC,静态库在一般软件包的构建过程中仍然很关键,就不能禁用静态库。
关于库的更详细讨论,可以参阅 BLFS 手册中的 Libraries: Static or shared? 一节。