正如前文所述,LFS 的目标是构建一个完整可用的基本系统。该系统包含自复制所需的所有软件包,因此,用户可以从一个相对小的基础开始,依选择配置一个相对复杂的系统。所以,严格意义上说,LFS 并不是最小可用系统的代名词。甚至某些最重要的软件包都不一定必须安装。下面的列表介绍了本书中选择每个软件包的理由。
Acl
这个软件包包括了管理访问控制列表(ACL)的工具,用于定义文件和目录更细粒度的自主访问权。
Attr
这个软件包包括了管理文件系统的对象扩展属性的程序。
Autoconf
这个软件包包括了能根据开发者的模板自动生成配置源代码的 shell 脚本的程序。更新了构建过程之后重新构建软件包通常需要这个。
Automake
这个软件包包括了从模板生成 Make 文件的程序。更新了构建过程之后重新构建软件包通常需要这个。
Bash
这个软件包能满足提供到系统的 Bourne Shell 接口的 LSB 核心需求。由于其通用性和在基本 shell 功能上的扩展能力,所以选择它而不是其它的 shell 软件包。
Bc
这个软件包提供了一种任意精度的数值处理语言。在构建 Linux 内核时需要它。
Binutils
这个软件包包括了一个链接器、汇编器和其它处理对象文件的工具。编译 LFS 系统以及之上的大部分软件包需要这个软件包中的程序。
Bison
这个软件包中有 yacc(Yet Another Compiler Compiler) 的 GNU 版本,需要用来构建一些其它的 LFS 程序。
Bzip2
这个软件包包括了用来压缩和解压缩文件的程序。在解压缩很多 LFS 软件包的时候需要它。
Check
这个软件包包括了一个用于其它程序的测试工具。它只安装在临时工具链中。
Coreutils
这个软件包包括了一些查看和管理文件和目录的重要程序。在命令行里管理文件和每个 LFS 软件包的安装过程中需要它。
D-Bus
这个软件包包括了一个用于提供消息总线的程序,消息总线是一种应用程序之间通信的简单方式。systemd 也需要它。
DejaGNU
这个软件包包括了一个测试其它程序的框架。只安装在临时工具链中。
Diffutils
这个软件包包括了一些显示文件和目录差异的程序。这些程序可以用来创建补丁,也用于很多软件包的构建过程。
E2fsprogs
这个软件包包括了一些处理 ext2、ext3 和 ext4 文件系统的工具。这些是 Linux 上支持的最常用而且完全经过考验的文件系统。
Expat
这个软件包包括了一个相对小的 XML 解析库。Perl 模块 XML::Parser 需要用到这个。
Expect
这个软件包包括了一个生成与其它程序交互的脚本对话框的程序。通常用来测试其它软件包。只安装在临时工具链中。
File
这个软件包包括了一个能判断给定文件的类型的工具。一些软件包需要用它来构建。
Findutils
这个软件包包括了一些在文件系统中查找文件的程序。在很多软件包构建脚本中会用到它。
Flex
这个软件包包括了一个能生成识别文本模式程序的工具。是 lex(lexical analyzer) 程序的 GNU 版本。构建很多 LFS 软件包需要用到它。
Gawk
这个软件包包括了一些操作文本文件的程序。是 awk(Aho-Weinberg-Kernighan) 的 GNU 版本。在很多软件包的构建脚本中会用到它。
Gcc
这个软件包是 GNU 编译器工具集。它包括 C 和 C++ 的编译器以及其它一些不是由 LFS 构建的软件包。
GDBM
这个软件包包括了 GNU 数据库管理库。LFS 的另一个软件包 Man-DB 会用到它。
Gettext
这个软件包包括了很多软件包国际化和本地化需要用到的工具和库。
Glibc
这个软件包包括了主要的 C 语言库。缺少它 Linux 程序就运行不了。
GMP
这个软件包包括了能提供任意精度数值运算的数学库。编译 Gcc 会用到它。
Gperf
这个软件包包括了一个能从一个键集生成完美哈希函数的程序。sysetmd 会用到它。
Grep
这个软件包包括了一些在文件中搜索的程序。大部分软件包的构建脚本会用到它。
Groff
这个软件包包括了处理和格式化文本的程序。其中一个重要的功能是格式化 man 页面。
GRUB
这个包是 Grand Unified Boot Loader。是可用的引导加载器之一,但最灵活。
Gzip
这个包包括了一些压缩和解压缩文件的程序。解压很多 LFS 以及之上的软件包时会需要它。
Iana-etc
这个软件包提供了网络服务和协议的数据。启用合适的网络功能会用到它。
Inetutils
这个包包括了基本网络管理的程序。
Intltool
这个包包括了能从源文件中抽取可翻译字符串的工具。
IProute2
这个包包括了一些基本和高级的 IPv4 和 IPv6 网络的程序。由于其 IPv6 功能,所以选择它而不选择其它的常见网络工具包(net-tools)。
Kbd
这个包包括了一些键盘映射文件,用于非 US 键盘的键盘工具以及一些控制台字体。
Kmod
这个软件包包括了一些用于管理 Linux 内核模块的程序。
Less
这个软件包包括了一个很好的文本文件查看器,允许查看文件的时候向上或向下滚动。Man-DB 用它来查看 man 页面。
Libcap
这个包实现了可以用于 Linux 内核的,从用户空间到 POSIX 1003.1e 的接口。
Libpipeline
这个包包括了一个以灵活和便捷的方式操作子进程流水线的库。Man-DB 软件包会用到它。
Libtool
这个软件包包括一些 GNU 通用库支持脚本。它降低了在一致、可移植的接口上使用共享库的复杂度。在其他 LFS 软件包的测试套件里需要它。
Linux Kernel
这个包就是操作系统。即我们常说的 “GNU/Linux” 中的 “Linux”。
M4
这个包包括了一个普通的文本宏处理器,作为其它程序的构建工具使用。
Make
这个包包括了一个指导软件包构建的程序。LFS 中的几乎每个包都需要它。
Man-DB
这个包包括了一些查找和查看 man 页面的程序。由于其更好的国际化功能,用来代替 man软件包。它提供了 man 程序。
Man-pages
这个包包括了基本的 Linux man 页面的真正内容。
MPC
这个包包括了复数运算的函数。Gcc 需要它。
MPFR
这个包包括了多精度运算的函数。Gcc 需要它。
Ncurses
这个包包括了一些处理字符界面的不依赖特定终端的库。通常用来为菜单系统提供光标控制。一些 LFS 的软件包会用到它。
Patch
这个包包括了一个通过补丁文件来修改或新建文件的程序,补丁文件通常是由 diff 程序创建的。一些 LFS 软件包的构建过程会需要它。
Perl
这个包包括了一个运行时语言 PERL 的解析器。一些 LFS 软件包的安装和测试套件会需要它。
Pkg-config
这个包提供了一个返回已安装库或软件包的元数据的程序。
Procps-NG
这个包包括了一些监视进程的程序。这些程序对系统管理非常有用,也用于 LFS 的启动脚本。
Psmisc
这个包包括了一些显示运行中进程信息的程序。这些程序对系统管理非常有用。
Readline
这个包提供了一些命令行编辑和历史功能的库。Bash 会使用它。
Sed
这个包提供了不通过文本编辑器而直接编辑文本的功能。大部分 LFS 软件包的配置脚本需要它。
Shadow
这个包包括了一些以安全方式处理密码的程序。
Systemd
作为 Sysvinit 的替代品,这个包提供了一个 init 程序以及一些其它的引导和系统控制功能。很多 Linux 发行版都用它。
Tar
这个软件包提供了归档和提取 LFS 中的几乎所有软件包的能力。
Tcl
这个包包括了在很多 LFS 软件包测试套件中使用的工具命令语言。只安装在临时工具链中。
Texinfo
这个包包括了一些读、写以及转换信息页面的程序。在很多 LFS 软件包的安装过程中会使用它。
Util-linux
该软件包包括了许多工具。其中有处理文件系统、控制台、分区和消息的工具。
Vim
这个包包括了一个编辑器。由于 vi 编辑器的经典以及大量的强大功能而选择它。对很多用户来说一个编辑器是一个非常个人的选择,如果需要的话也可以选择其它编辑器。
XML::Parser
这个包是和 Expat 交互的 Perl 模块。
XZ Utils
这个包包括了一些压缩和解压缩文件的程序。通常它的压缩率最高,在解压 XZ 或者 LZMA 格式的软件包时非常有用。
Zlib
这个包包括了一些程序所使用的压缩和解压缩功能。