# 1.1\. 如何构建一个 LFS 系统?
我们将用一个已安装好的 Linux 发行版(例如 Debian、Mandrake、Red Hat、SuSE)来构建 LFS 系统。这个已存在的 Linux 系统(宿主系统)将作为建立新系统的起点,提供包括编译器、连接器和 Shell 等创建新系统的必要工具。您安装这个发行版的时候,需要选择"development(开发/编程)"选项,以便可以使用这些工具。
另一个选择是使用 Linux From Scratch 的 LiveCD 。这个CD是一个非常好的宿主系统,它包含了构建一个完整 LFS 系统所需要的一切工具,另外还包含了所有的软件包源代码、补丁和一个本书的拷贝。使用这个CD ,你可以不需要任何网络连接或者下载任何额外的东西。要了解更多关于 LFS LiveCD 的信息或者想下载它,请查看:[_http://www.linuxfromscratch.org/livecd/_](http://www.linuxfromscratch.org/livecd/) 。
[第二章](../chapter02/chapter02.html)描述了怎样创建一个新的 Linux 本地分区和文件系统,新的 LFS 系统将在该分区上编译和安装。[第三章](../chapter03/chapter03.html)解释了构建一个 LFS 系统需要那些软件包和补丁,以及怎样把它们存放到新文件系统上。[第四章](../chapter04/chapter04.html)讨论了建立一个适当的工作环境。请仔细阅读[第四章](../chapter04/chapter04.html),因为它讨论了在开始[第五章](../chapter05/chapter05.html)及其后面的步骤之前,开发者需要知道的几个重要问题。
[第五章](../chapter05/chapter05.html)解释了形成一个基本开发套件(或称为工具链)所需的许多软件的安装,这个工具链将被用来构建[第六章](../chapter06/chapter06.html)中的实际系统。其中一些软件包需要解决循环依赖关系:例如,要编译一个编译器,您首先就需要一个编译器。
[第五章](../chapter05/chapter05.html)告诉用户如何第一遍编译工具链,包括 Binutils 和 GCC(第一遍主要的意思就是指这两个核心软件包后面还将第二次安装)。这些软件包里的程序将静态连接以便在使用时独立于宿主系统。接下来的步骤是编译 Glibc ,也就是 C 运行时库。Glibc 将由第一遍建立的工具链程序编译。然后将第二遍编译的工具链动态连接到刚刚编译好的 Glibc 库上。[第五章](../chapter05/chapter05.html)余下的软件包将使用第二遍建立的工具链来编译。完成这些步骤之后,LFS 的安装过程除了正在运行的内核外,将不再依赖于宿主系统。
为了不依赖宿主系统,初看起来我们需要做很多工作。[节 5.2,"工具链技术说明"](../chapter05/toolchaintechnotes.html "5.2\. 工具链技术说明")提供了一个完整的技术说明,包括静态连接的程序和动态连接的程序之间的差异。
[第六章](../chapter06/chapter06.html)将构建完整的 LFS 系统。**chroot**(改变root)程序用来进入一个虚拟的环境并开始一个新的 shell,其根目录是 LFS 分区。这非常类似于重启并让内核将 LFS 分区挂载为根分区。系统实际上并没有重启,而是由 **chroot** 代替了,因为建立一个可启动的系统需要做一些现在还不需要做的额外工作。主要的好处在于"虚根环境(chrooting)"允许您在构建 LFS 的同时可以继续使用宿主系统。在等待软件包编译完成的时候,用户可以切换到不同的虚拟控制台(VC)或者 X 桌面,就像平常一样继续使用计算机。
为了完成安装,[第七章](../chapter07/chapter07.html)设置启动脚本,[第八章](../chapter08/chapter08.html)安装内核和启动引导程序。[第九章](../chapter09/chapter09.html)包含在本书之外获得进一步 LFS 体验的信息。在本书中所有步骤都完成之后,计算机就已经准备好重启进入新的 LFS 系统了。
以上就是概略的过程,在接下来的章节和软件包描述中会讨论每一步的细节。看似复杂的项目将详细阐明,随着读者(就是你啦)踏上 LFS 冒险之路,每一件事情都将依序出现。
## 1.2\. 如何提高 LFS 制作的成功率?
新手第一次做 LFS 的时候通常会遇见各种各样的问题,有许多人就此止步了,这不能不说是一个遗憾。热心的 youbest 兄有一篇大作专门针对新手经常遇见的问题,给出了[如何提高 LFS 的成功率以及部分问题的解决方法](http://www.linuxsir.org/bbs/showthread.php?t=252928),建议大家在制作过程中参考。
## 1.3\. 在制作中途关闭计算机以后怎么办?
LFS 的制作过程是相当漫长的,特别是对机器不太好的朋友,有时候不得不中途关机,但对一些不太清楚 LFS 的工作原理的朋友,可能重新开机以后无法正确的恢复到先前的工作状态,因此为了能成功的完成 LFS 全过程,不得不持续开机几十个小时。幸好 youbest 兄有一篇大作解决了这个头疼的问题,给出了[制作 LFS 过程中各个阶段恢复工作状态的详细方法(适合LFS6.3)](http://www.linuxsir.org/bbs/thread322895.html),虽然是基于 LFS 6.1 版本的,但仍然具有很实用的参考价值。
- Linux From Scratch
- 序言
- i. 前言
- ii. 目标读者
- iii. 先决条件
- iv. 对宿主系统的要求
- v. 排版约定
- vi. 本书的组织结构
- vii. 勘误表
- I. 简介
- 1. 简介
- 1.1. 如何构建一个 LFS 系统?
- 1.2. 与上一版本有何不同?
- 1.3. 更新日志
- 1.4. 资源
- 1.5. 帮助
- 2. 准备一个新分区
- 2.1. 简介
- 2.2. 创建一个新分区
- 2.3. 在新分区上创建文件系统
- 2.4. 挂载新分区
- 3. 软件包和补丁
- 3.1. 简介
- 3.2. 全部软件包
- 3.3. 需要的补丁
- 4. 最后的准备工作
- 4.1. 关于环境变量 $LFS
- 4.2. 创建 $LFS/tools 目录
- 4.3. 添加 LFS 用户
- 4.4. 设置工作环境
- 4.5. 关于 SBU
- 4.6. 关于软件包测试套件
- 5. 构建临时编译环境
- 5.1. 简介
- 5.2. 工具链技术说明
- 5.3. Binutils-2.16.1 - 第一遍
- 5.4. GCC-4.0.3 - 第一遍
- 5.5. Linux-Libc-Headers-2.6.12.0
- 5.6. Glibc-2.3.6
- 5.7. 调整工具链
- 5.8. Tcl-8.4.13
- 5.9. Expect-5.43.0
- 5.10. DejaGNU-1.4.4
- 5.11. GCC-4.0.3 - 第二遍
- 5.12. Binutils-2.16.1 - 第二遍
- 5.13. Ncurses-5.5
- 5.14. Bash-3.1
- 5.15. Bzip2-1.0.3
- 5.16. Coreutils-5.96
- 5.17. Diffutils-2.8.1
- 5.18. Findutils-4.2.27
- 5.19. Gawk-3.1.5
- 5.20. Gettext-0.14.5
- 5.21. Grep-2.5.1a
- 5.22. Gzip-1.3.5
- 5.23. M4-1.4.4
- 5.24. Make-3.80
- 5.25. Patch-2.5.4
- 5.26. Perl-5.8.8
- 5.27. Sed-4.1.5
- 5.28. Tar-1.15.1
- 5.29. Texinfo-4.8
- 5.30. Util-linux-2.12r
- 5.31. 清理系统
- 5.32. 改变所有者
- III. 构建 LFS 系统
- 第六章 安装系统基础软件
- 6.1. 简介
- 6.2. 挂载虚拟内核文件系统
- 6.3. 包管理
- 6.4. 进入 Chroot 环境
- 6.5. 创建系统目录结构
- 6.6. 创建必需的文件与符号连接
- 6.7. Linux-Libc-Headers-2.6.12.0
- 6.8. Man-pages-2.34
- 6.9. Glibc-2.3.6
- 6.10. 再次调整工具链
- 6.11. Binutils-2.16.1
- 6.12. GCC-4.0.3
- 6.13. Berkeley DB-4.4.20
- 6.14. Coreutils-5.96
- 6.15. Iana-Etc-2.10
- 6.16. M4-1.4.4
- 6.17. Bison-2.2
- 6.18. Ncurses-5.5
- 6.19. Procps-3.2.6
- 6.20. Sed-4.1.5
- 6.21. Libtool-1.5.22
- 6.22. Perl-5.8.8
- 6.23. Readline-5.1
- 6.24. Zlib-1.2.3
- 6.25. Autoconf-2.59
- 6.26. Automake-1.9.6
- 6.27. Bash-3.1
- 6.28. Bzip2-1.0.3
- 6.29. Diffutils-2.8.1
- 6.30. E2fsprogs-1.39
- 6.31. File-4.17
- 6.32. Findutils-4.2.27
- 6.33. Flex-2.5.33
- 6.34. GRUB-0.97
- 6.35. Gawk-3.1.5
- 6.36. Gettext-0.14.5
- 6.37. Grep-2.5.1a
- 6.38. Groff-1.18.1.1
- 6.39. Gzip-1.3.5
- 6.40. Inetutils-1.4.2
- 6.41. IPRoute2-2.6.16-060323
- 6.42. Kbd-1.12
- 6.43. Less-394
- 6.44. Make-3.80
- 6.45. Man-DB-2.4.3
- 6.46. Mktemp-1.5
- 6.47. Module-Init-Tools-3.2.2
- 6.48. Patch-2.5.4
- 6.49. Psmisc-22.2
- 6.50. Shadow-4.0.15
- 6.51. Sysklogd-1.4.1
- 6.52. Sysvinit-2.86
- 6.53. Tar-1.15.1
- 6.54. Texinfo-4.8
- 6.55. Udev-096
- 6.56. Util-linux-2.12r
- 6.57. Vim-7.0
- 6.58. 关于调试符号
- 6.59. 再次清理系统
- 6.60. 最终的清理
- 7. 配置系统启动脚本
- 7.1. 简介
- 7.2. LFS-Bootscripts-6.2
- 7.3. 启动脚本是如何工作的?
- 7.4. LFS 系统的设备和模块处理
- 7.5. 配置 setclock 脚本
- 7.6. 配置 Linux 控制台
- 7.7. 配置 sysklogd 脚本
- 7.8. 创建 /etc/inputrc 文件
- 7.9. Bash Shell 启动文件
- 7.10. 配置 localnet 脚本
- 7.11. 定制 /etc/hosts 文件
- 7.12. 为设备创建惯用符号连接
- 7.13. 配置网络脚本
- 8. 使 LFS 系统能够启动
- 8.1. 简介
- 8.2. 创建 /etc/fstab 文件
- 8.3. Linux-2.6.16.27
- 8.4. 使 LFS 系统能够启动
- 9. 结束
- 9.1. 结束
- 9.3. 重启系统
- 9.4. 现在做什么?
- IV. 附录
- A. 缩写和名词
- B. 致谢
- C. 依赖关系
- 长索引