Linux From Scratch (LFS)

2025年3月17日 | 阅读 7 分钟

什么是 LFS?

Linux From Scratch(LFS)是一种 Linux 安装方式,它提供了详细的步骤,让用户可以从源代码构建自己的 Linux 系统。此外,它还允许您手动创建自定义的 Linux 组件。不仅如此,LFS 还允许您根据特定的需求和要求创建自己的 Linux 环境。

关于 LFS 还有一本详细指南的书籍,用户可以利用这本书从源代码开发 Linux 系统。这本书由 Gerard Beekmans 撰写,可在 Linux From Scratch 的官方网站免费获取。

Linux From Scratch (LFS)

LFS 提供的功能

  • LFS 是一个教育项目。它提供了用户了解 Linux 系统工作原理所需的所有信息,方法是通过从头开始创建 Linux 环境。
  • 用户可以控制系统的组件和配置设置,从而能够自定义 Linux 系统。
  • 用户可以通过利用所需软件和组件,轻松地从头开始开发 LFS。
  • LFS 书籍提供了关于构建系统的详细说明,从设置环境到编译内核和系统库。

要求

要创建 LFS,您应该具备 Linux 系统的实际操作知识以及如何将其用作主机。主机系统应已安装必要的开发工具和库,并有 20 GB 的可用磁盘空间。建议从 LFS 开始时拥有 2 GB RAM。此外,您必须拥有 GCC、Binutils、make 等开发工具以及其他必要的工具和软件。

必需软件

在此,您可以看到所有软件名称以及构建自己的 Linux From Scratch 所需的最低版本。

软件版本
Binutils2.25
Glibc2.11
Bash3.2
Bison2.7
Coreutils6.9
Gzip1.3.12
Diffutils2.8.1
GCC6.2
Grep2.5.1a
Findutils4.2.31
Linux 内核3.2
Bzip21.0.4
Gawk4.0.1

构建 LFS 的步骤

  1. 准备好主机系统:确保您有一个可用的 Linux 系统作为构建 LFS 的主机。
  2. 创建 LFS 分区:您需要为您的 LFS 系统设置一个专用分区或虚拟机。
  3. 创建工作环境:创建目录以挂载 LFS 分区是必要的。之后,设置 LFS 构建过程的环境变量。此外,下载必需的源代码包。
  4. 现在,下载 LFS 书籍:LFS 书籍将帮助您完成从开始到结束创建自己的 Linux 系统的所有步骤。您可以从 Linux From Scratch 官方网站下载这本书。
  5. 编译必需的软件包:编译创建 LFS 所需的每个软件包。为此,您也可以遵循 LFS 书籍中提供的说明。
  6. 创建临时系统:现在,在临时系统中编译并运行 Binutils 工具。此外,编译并安装 GCC 和 Glibc 工具。然后,安装内核头文件并安装其他必需的软件包。
  7. 进入 Chroot 环境:更改根目录到 LFS 分区以创建最终系统。此外,在 Chroot 中设置基本环境。
  8. 创建 LFS 系统:在此步骤中,您需要下载、安装和配置 Linux 内核。此外,安装必要的引导脚本。之后,编译并安装 systemd 或任何类似的 init 系统。然后,配置一些系统文件和设置。
  9. 最后步骤:在创建 LFS 的最后阶段,您需要安装和配置引导加载程序,例如 GRUB。然后,在引导系统之前清理所有临时和不必要的文件。最后,退出 chroot 环境并卸载 LFS 分区。
  10. 重新启动系统:重新启动系统并从引导加载程序中选择 LFS 条目。重新启动后,您将看到新的 LFS 系统。

优点

  • 高级 Linux 知识:用户将获得对 Linux 组件的深入理解。
  • 优化:您可以针对特定的硬件或用例优化 Linux 系统。
  • 控制:您可以理解所有基本和高级的 Linux 系统组件,并可以看到 Linux 系统环境中包含的内容。

缺点

  • 耗时过程:开发 LFS 系统可能是一个耗时的过程,需要更多的耐心和注意力。
  • 维护:LFS 需要持续的手动维护和更新。
  • 适用于高级 Linux 用户:LFS 主要适用于熟悉 Linux 和系统管理的有经验的用户。

LFS 中的软件包列表

在 Linux From Scratch (LFS) 中,您需要安装几个软件包来创建 Linux 系统。这些软件包包括系统运行所需的工具和库。以下是 LFS 构建过程中涉及的核心软件包列表。

组成部分描述
Binutils它被称为汇编器和链接器。
Expect这是用于自动化交互式应用程序的工具。
M4它是一个宏处理器。
Bash这是一个免费的 Unix Shell 软件。
Grep此实用程序用于使用模式搜索文本。
Diffutils这些是用于比较文件的工具。
Sed这是一个用于过滤和转换文本的编辑器。
Expat这是一个 XML 解析库。
Iana-Etc这是一个网络协议和服务文件。
文件此命令确定文件类型。
MPFR-此库用于多精度浮点计算。
Gawk这是 AWK 编程语言的 GNU 版本。
Util-linux这是杂项系统实用程序。
Gzip这些工具用于压缩文件。
Glibc这是 GNU C 库。
Man-pages这是 Linux man pages。
Pkg-config此工具用于管理库编译/链接标志。
Linux 内核这是内核头文件。
Texinfo这基本上是用于获取在线信息的文档系统。
Make这是用于控制可执行文件生成的工具。
Coreutils这些工具用于操作 Basic 文件和 shell 的文本。
DejaGNU这是一个用于测试软件的框架。
Tar这用作归档工具。
GCC这是 GNU Compiler Collection 的集合。
文件此工具用于确定文件类型。
Findutils这些实用程序用于查找符合指定条件的文件。
Ncurses这些库用于处理终端。
Glibc这是 GNU C 库。
Tcl这被称为工具命令语言。
Grep这用于匹配模式。
GCC这是 GNU Compiler Collection。
Zlib这是一个压缩库。
Binutils汇编器和链接器
Bzip2这些用作压缩实用程序。
Acl此命令用于显示访问控制列表。
Xz这些是使用 LZMA 算法压缩文件的压缩实用程序。
PATCH这是一个用于将补丁文件应用于原始文件的工具。
Gettext这被称为 GNU internationalization library。
Attr此工具用作扩展属性支持。
Readline这是一个命令行界面库。
Libpipeline这是一个管道操作库。
Libcap这是用于 POSIX 功能的库。
Libtool这是一个通用库支持脚本。
Bison这用作解析器生成器。
Psmisc这些实用程序用于进程管理。
Gperf这是完美哈希函数生成器。
GDBM这是一个 GNU 数据库管理器。
MPC此库用于多精度复数浮点计算。
GMP它是一个算术库。
Python这是一种编程语言。
Intltool此工具用于国际化。
Check这是一个在 C 单元测试中使用的框架。
OpenSSL这是一个安全套接字层工具包。
Automake此命令用于生成 Makefile.in 文件。
Groff这用作文档格式化系统。
Ninja这是一个小型构建系统,主要关注速度。
XML::Parser这是用于解析 XML 的 Perl 模块。
Libelf它是 ELF 对象文件访问库。
Libffi这是外部函数接口库。
Perl这是 Perl 编程语言。
Flex这是快速词法分析器。
Inetutils这些用作基本的网络工具。
GRUB -这是 GRand Unified Bootloader(通用引导加载程序)。
Sysklogd-这被称为系统日志工具。
Autoconf此命令用于生成配置脚本。
较少用作文件分页程序。
Eudev这是 Linux 内核中使用的设备管理器。
Sysvinit这是 init 系统和工具。
E2fsprogs这些是用于 ext2、ext3 和 ext4 文件系统的工具。
Vim这是一个在 Linux 环境中用于编辑文本的文本编辑器。
Meson这是一个开源构建系统。
Kbd这是键盘工具。
IPRoute2这些程序用于网络控制。
Kmod这些是内核模块工具。
Man-DB这是一个用作文档查看器的工具。

结论

Linux From Scratch 为用户提供了一种从源代码构建自定义 Linux 系统的方式。此外,它还为用户提供了无与伦比的控制和定制能力,非常适合学习 Linux 内部机制和创建优化系统。然而,整个过程非常耗时。