Skip to the content.

1.Introduction.md


1.1 How to Build an LFS System

LFS 系统必须在一个已经安装好的 Linux 发行版 (如 Debian、OpenMandriva、Fedora 或者 openSUSE) 中构建。这个安装好的 Linux 系统 (称为宿主) 提供包括编译器、链接器和 shell 在内的必要程序,作为构建新系统的起点。请在安装发行版的过程中选择“development” (开发) 选项,以保证系统包含这些工具。

您也可以选择不安装一个单独的发行版,而是使用某个商业发行版的 LiveCD。

本书的第 2 章描述了如何创建一个新的 Linux 本地分区和文件系统,以在其中编译和安装新的 LFS 系统。第 3 章列举了在构建 LFS 系统的过程中必须下载的软件包和补丁,并解释了在新文件系统中存储它们的方法。第 4 章讨论工作环境的正确配置。请仔细阅读第 4 章,因为它解释了您在开始第 5 章及后续章节的工作前必须了解的一些重要问题。

第 5 章解释初始工具链 (binutils, gcc, 以及 glibc) 的安装过程,在安装过程中使用交叉编译技术,将新的工具与宿主系统完全隔离。

第 6 章向您展示如何使用刚刚构建的交叉工具链,交叉编译一些基本工具。

之后在第 7 章中,进入一个 “chroot” 环境,在其中使用刚刚构建的工具,继续构建 LFS 构建过程中需要的其余工具。

我们努力将新构造的系统从宿主发行版分离出来。这个过程看上去很繁琐,我们将会在工具链技术说明中完整地从技术上解释这样做的必要性。

第 8 章中我们将构建完整的 LFS 系统。使用 chroot 环境的另一项优势是,在构建 LFS 的过程中,您可以继续使用宿主系统。这样,在等待软件包编译的过程中,您可以继续正常使用计算机。

为了完成安装,我们在第 9 章中进行系统的基本设置,在第 10 章中配置内核和引导加载器。最后,第 11 章包含在阅读完本书后继续体验 LFS 的相关信息。在完成本书的所有流程后,重启计算机即可进入新的 LFS 系统。

以上是 LFS 构建过程的简要介绍,针对特定步骤的详细信息将在之后章节以及软件包的简介中讨论。在您踏上 LFS 的构建之旅后,就能逐步理清这些目前看上去很复杂的步骤,每一步都将变得非常清晰。

1.2 What’s new since the last release

从 LFS 11.3 起,在构建 GCC 时启用 –enable-default-pie–enable-default-ssp。它们能预防一些恶意攻击,但不能完美地保障系统安全。注意一些教科书假设并未使用这些选项,因此如果您在 LFS 系统上运行这些教科书中的示例,可能需要使用 GCC 选项 -fno-pie -no-pie -fno-stack-protection 禁用 PIE 和 SSP。

这里列出本书上一次发布之后发生变化的软件包。

已升级:

已添加:

已移除:

1.3 Changelog

这是 Linux From Scratch 手册的 11.3 版本,发布于 2023 年 3 月 1 日。如果该版本已经发布了六个月或更久,可能已经发布了更好的新版本。如果要查询是否有新版本,通过 https://www.linuxfromscratch.org/mirrors.html 访问一个 LFS 镜像站。

下面是本书自上一版本发布以来的更新日志。

更新日志记录:

1.4 Resources

1.4.1. FAQ

如果在构建 LFS 的过程中您遇到了任何问题,或是存在疑问,或者觉得书中存在拼写错误,请先参考常见问题 (FAQ) 列表,它位于 https://www.linuxfromscratch.org/faq/

1.4.2. 邮件列表

服务器 linuxfromscratch.org 管理了若干用于 LFS项目开发过程的邮件列表,其中有主要的开发列表和技术支持列表,以及其他辅助列表。如果 FAQ 不能解决您的问题,您可以访问 https://www.linuxfromscratch.org/search.html 在邮件列表中进行搜索。

如果希望了解各个邮件列表的信息,如订阅方法、过往邮件存档等,访问 https://www.linuxfromscratch.org/mail.html

1.4.3. IRC

一些 LFS 社区成员通过互联网中继聊天系统 (IRC) 提供支援。在使用这一渠道之前,首先保证您的问题并没有被 LFS FAQ 和邮件列表解决。您可以在 irc.libera.net 找到 IRC 网络,支持频道的名字是 #lfs-support。

1.4.4. 镜像站

LFS 项目在全世界分布着若干镜像站,您可以通过这些镜像站更容易地访问 LFS 网站,并下载需要的软件包。请访问 LFS 网站 https://www.linuxfromscratch.org/mirrors.html 获取最新的镜像站点列表。

1.4.5. 联系信息

请直接将您的问题和评论发送到某个 LFS 邮件列表 (上面已经给出)。

1.5 Help

如果您在按照本书工作的过程中遇到任何问题或者疑问,请先阅读位于 https://www.linuxfromscratch.org/faq/#generalfaq 的常见问题列表,一般来说可以找到答案。如果您的问题没有被 FAQ 解决,试着找到问题的根源。这个指南指出了一些疑难问题的排查思路:https://www.linuxfromscratch.org/hints/downloads/files/errors.txt

如果 FAQ 中没有您的问题,访问 https://www.linuxfromscratch.org/search.html,在邮件列表中搜索。

我们也有一个不错的 LFS 社区,社区成员愿意通过邮件列表和 IRC (见第 1.4 节 “相关资源”) 提供支援。然而,我们每天都会得到一大堆明明在 FAQ 或者邮件列表中能找到答案的问题。因此,为了使得技术支持的效能最大化,您需要自己先对问题进行一些研究。这样,我们就能够集中精力解决最特殊的支援需求。如果您的研究得不到结果,请您在求助时附带下面列出的全部相关信息。

1.5.1. 需要提供的信息

除了简要描述您遇到的问题外,您应该在求助邮件中附带下列必要信息。

LFS 手册的版本 (您正在阅读的版本是 11.3)

构建 LFS 时使用的宿主发行版名称和版本

宿主系统需求脚本的输出

出现问题的软件包或书内章节

程序输出的原始错误消息,或者对问题的清晰描述

您是否进行了超出本书内容的操作

注意: 有超出本书内容的操作,并不意味着我们就不会协助您。无论如何,LFS 强调个人体验。在求助信中说明您对本书给出构建过程的改动,有助于我们猜测和判定问题的可能原因。

1.5.2. 配置脚本的问题

如果在运行 configure 脚本的过程中出现问题,请阅读日志文件 config.log。它可能包含configure 运行时没有输出到屏幕的具体问题。求助时请附带日志文件中与问题 相关 的部分。

1.5.3. 编译错误

屏幕上的输出和一些文件的内容对于确认编译错误的原因都很有用。屏幕输出来自于 configure 脚本和 make 命令。您不用附带所有输出内容,只要包含足够相关信息即可。例如,这里给出从 make 的屏幕输出中截取的一段:

gcc -DALIASPATH=\"/mnt/lfs/usr/share/locale:.\"
-DLOCALEDIR=\"/mnt/lfs/usr/share/locale\"
-DLIBDIR=\"/mnt/lfs/usr/lib\"
-DINCLUDEDIR=\"/mnt/lfs/usr/include\" -DHAVE_CONFIG_H -I. -I.
-g -O2 -c getopt1.c
gcc -g -O2 -static -o make ar.o arscan.o commands.o dir.o
expand.o file.o function.o getopt.o implicit.o job.o main.o
misc.o read.o remake.o rule.o signame.o variable.o vpath.o
default.o remote-stub.o version.o opt1.o
-lutil job.o: In function `load_too_high':
/lfs/tmp/make-3.79.1/job.c:1565: undefined reference
to `getloadavg'
collect2: ld returned 1 exit status
make[2]: *** [make] Error 1
make[2]: Leaving directory `/lfs/tmp/make-3.79.1'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/lfs/tmp/make-3.79.1'
make: *** [all-recursive-am] Error 2

对于本例来说,许多人会只附带靠下的一行:

make [2]: *** [make] Error 1

这一行只告诉我们某些事情出问题了,而完全没有说明哪里出了问题。而上面的一段输出包含了出现问题的命令行和相关的错误消息,这是我们需要的。

可以在线阅读一篇关于如何在网络上提问的精彩文章:http://catb.org/~esr/faqs/smart-questions.html。请阅读它并遵循它的建议。这样可以增加您得到帮助的可能性。