一、什么是LFS
LFS 是Linux From Scratch的缩写。"From Scratch"是一个词组,它的意思是"从零做起,白手起家,从无到有"的意思,因此"Linux From Scratch"本质上不应当理解为一个Linux发行版名称。它最贴切的含义应当是一种"方法/思想":一切从源代码开始的方法/思想。如果把 LFS 比作建筑房子,那么LFS 提供房子的框架蓝图,但是需要你自己建造它。
二、LFS的构造
要基于源代码的方式来编译整个系统,那首先要解决的就是工具链的问题,即需要一个编译环境。所以构造LFS系统分两大步:一是构造一个临时的编译环境;二是构建LFS系统。
注:以下列表基于LFS-7.6整理
2.1、构造临时的编译环境
临时编译环境其实也相当于一个小的 Linux 系统。只不过这个系统将仅包含必要的工具,能够构建最终的LFS系统。构建这个小系统分两步进行,第一步是构建一个新的不依赖于宿主系统的工具链(编译器、汇编器、连接器、库文件以及一些有用的软件),第二个步骤是利用这个工具链去构建其它基本的工具。 在工具链中最基本的是:Binutils、GCC和Glibc。Binutils 是一组开发工具,包括连接器,汇编器和其它用于目标文件和档案的工具。GCC 软件包包含 GNU 编译器,其中有 C 和 C++ 编译器。Glibc 包含了主要的C库。这个库提供了基本的例程,用于分配内存、搜索目录、打开关闭文件、读写文件、字串处理、模式匹配、数学计算等等。其它的工具必须在他们的基础上建立。编包顺序依次如下表所示
编包顺序依次如下 | 包的描述 | kylin对应包 |
binutils | 软件包包含一个链接器,一个汇编器和其他处理目标文件的工具。安装的第一个软件包是 Binutils ,这非常重要,因为 Glibc 和 GCC 会针对可用的连接器 和汇编器进行多种测试,以决定启用它们自己的哪些特性。 | binutils |
gcc | GCC 软件包包含 GNU 编译器集合,包括 C 和 C++ 编译器。 | gcc |
kernel | 为了供系统C库(在LFS中是Glibc)使用,Linux 内核需要公开应用程序接口 (API) 。 这是通过处理Linux内核源程序tar包中的各种C头文件而实现的。 | kernel |
glibc | Glibc 包含主要的 C 库。这个库提供了基本例程, 用于分配内存、搜索目录、 打开关闭文件、 读写文件、 字串处理、 模式匹配、 数学计算等等。 | glibc |
libstdc++ | 提供标准c++库。g++编译器所需要的。 | libstdc++ |
binutils | 同上 | binutils |
gcc | 同上 | gcc |
tcl | Tcl 软件包包含工具命令语言(Tool Command Language)。该个软件包和接下来安装的两个软件包(Expect 和 DejaGNU)是为了给运行 GCC 和 Binutils 的测试程序提供支持。 | tcl |
expect | Expect 软件包包含一个通过执行脚本对话框与其它交互式程序通信的工具。 | expect |
dejagnu | DejaGNU 软件包包含了一个测试其它程序的框架。 | dejagnu |
check | c语言的单元测试框架 | check |
ncurses | Ncurses 提供独立于终端的字符终端处理库。 | ncurses |
bash | Bash 软件包包含 Bourne-Again SHell。 | bash |
bzip2 | Bzip2 包含了对文件进行压缩和解压缩的工具,对于文本文件,bzip2 比传统的 gzip拥有更高压缩比。 | bzip2 |
coreutils | 包括一整套用于显示和设置基本系统特征的工具 | coreutils |
diffutils | 包含可以显示两个文件或目录差异的程序 | diffutils |
file | 确定文件类型的工具 | file |
findutils | Findutils 软件包包含查找文件的程序。这些程序被用来递归搜索目录树,并会创建,处理和搜索一个数据库 (通常比递归查找快但是在数据库没有及时更新的情况下, 结果并不可靠)。 | findutils |
gawk | Gawk 软件包包含处理文本文件的程序。 | gawk |
gettext | 包含用于系统的国际化和本地化的工具。这些工具允许用NLS(本国语言支持)来编译程序,而以用户本国的语言输出消息 | gettext |
grep | Grep 包含查找文件中内容的程序。 | grep |
gzip | 包含压缩和解压文件的工具 | gzip |
m4 | M4 软件包包含一个宏处理器。 | m4 |
make | Make 软件包包含一个编译软件包的程序。 | make |
patch | Patch 软件包包含一个根据“patch”文件来修改或建立文件的程序。补丁文件通常是用 diff 程序创建的。 | patch |
perl | Perl 软件包包含实用萃取与报告语言(Practical Extraction and Report Language)。 | perl |
sed | Sed 软件包包含一个流编辑器。 | sed |
tar | Tar 软件包含有一个归档程序。 | tar |
texinfo | Texinfo 软件包包含读取、写入和转换成 Info 文档的程序。 | info |
util-linux | 包含许多基本工具 | util-linux-ng |
xz | 支持lzma和xz格式的压缩和减压 | xz |
由上表发现binutils和gcc编译了两次。原因第一遍是编译独立的环境,第二遍是用编好的环境编译独立的系统,一切只为了与宿主系统脱离关系。
2.2、构造LFS系统
chroot到一个新环境,使用上面构建的临时编译环境开始编译真正的系统。编包顺序如下:
LFS编包顺序 | 包描述 | kylin对应包 |
kernel | Linux API Headers 是为了用户 Glibc 而公开的内核 API。 | kernel |
man-pages | man pages描述了 C 语言的函数、 重要的设备文件、 以及一些重要的配置文件。 | man-pages |
glibc | Glibc 软件包包含主要的 C 库。这个库提供了基本例程, 用于分配内存、 搜索目录、 打开关闭文件、 读写文件、 字串处理、模式匹配、数学计算等等。 | glibc |
zlib | Zlib 包含了一些程序会用到的压缩和解压程序。 | zlib |
file | File 软件包包含用来判断一个或一组文件类型的工具。 | file |
binutils | Binutils 软件包包含一个链接器,一个汇编器和其他处理目标文件的工具。 | binutils |
gmp | GMP 包含数学库,它们为任意精度计算提供了有用的函数。 | gmp |
mpfr | MPFR 软件包包含多精度数学函数。 | mpfr |
mpc | MPC包含复数等高精度函数 | 没有 |
gcc | GCC 软件包包含 GNU 编译器集合,包括 C 和 C++ 编译器。 | gcc |
bzip2 | Bzip2 包含了对文件进行压缩和解压缩的工具 | bzip2 |
pkg-config | pkg-config 包含一个工具,它在配置和编译可执行文件的过程中,通过include目录和/或 library目录构建工具。 | pkgconfig |
ncurses | Ncurses 程序包提供字符终端处理库。 | ncurses |
attr | 管理文件系统的扩展属性 | attr |
acl | 管理访问控制列表,定义细粒度文件和目录的自主访问权限 | acl |
libcap | 获取和设置POSIX.1e功能 | libcap |
sed | Sed 软件包包含一个流编辑器。 | sed |
shadow | Shadow 软件包包含用于安全方式下处理密码的程序。 | shadow-utils |
psmisc | Psmisc 包含有用于显示进程信息的程序。 | psmisc |
procps-ng | Procps 软件包包含监测程序的程序。 | procps |
e2fsprogs | E2fsprogs 软件包包含处理ext2 文件系统的工具。 它还支持ext3 和 ext4 日志文件系统。 | e2fsprogs |
coreutils | Coreutils 软件包包括一套显示、设置基本系统属性的工具。 | coreutils |
iana-etc | Iana-Etc 软件包,提供了网络服务和协议的数据。 | setup |
m4 | M4 软件包包含一个宏处理器。 | m4 |
flex | Flex软件包包含一个能生成识别文本模式程序的工具。 | flex |
bison | Bison 软件包包含一个语法分析程序生成器。 | bison |
grep | Grep 可以搜索文件中符合指定匹配模式的行。 | grep |
readline | Readline 软件包是一个提供命令行编辑和历史纪录功能的库集合。 | readline |
bash | bash, bashbug, and sh | bash |
bc | 任意精度的数字处理 | bc |
libtool | Libtool 是一个GNU通用库支持脚本, 将使用动态库的复杂性隐藏在统一的、可移植的接口中。 | libtool |
gdbm | GDBM 包含GNU数据库管理器。 这是一个在单个文件中存储关键字/数据对的磁盘文件格式数据库。 这些存储的真实记录数据单一的关键字进行索引,这会比存在文本文件中节省时间。 | gdbm |
expat | 解析XML的库 | expat |
inetutils | Inetutils 软件包包含基础网络程序。 | net-tools iputils ftp tftp telnet traceroute |
perl | Perl 软件包包含实用萃取与报告语言(Practical Extraction and Report Language)。 | perl |
XML::Parser | 解析xml的perl接口 | perl-XML-Parser |
autoconf | Autoconf 能生成用于自动配置源代码的 shell 脚本 | autoconf |
automake | Automake 与 Autoconf 配合使用,产生 Makefile 文件。 | automake |
diffutils | Diffutils 软件包里的程序向你显示两个文件或目录的差异。 | diffutils |
gawk | Gawk 包含处理文本文件的程序。 | gawk |
findutils | Findutils 包含查找文件的工具, 既能即时查找(递归的搜索目录, 并可以显示、 创建和维护文件), 也能在数据库里查找 (通常比递归查找快但是在数据库没有及时更新的情况下, 结果并不可靠)。 | findutils |
gettext | Gettext 软件包包含国际化和本地化的工具。 这些工具允许在编译程序的时候使用 NLS (本国语言支持),可以使程序的输出使用用户设置的语言。 | gettext |
intltool | 从源码中提取翻译字符串的国际化工具 | intltool |
gperf | 完美的哈希函数生成器 | gperf |
groff | Groff 软件包包含一些处理和格式化文本的程序。 | groff |
xz | 支持lzma和xz格式的压缩和减压 | xz |
grub | GRUB 程序包包含 GRand 统一引导装载程序。 | grub |
less | Less 软件包包含一个文本文件查看器。 | less |
gzip | Gzip 软件包包含压缩和解压缩文件的程序。 | gzip |
IPRoute2 | IPRoute2 软件包包含了包含了基本的和高级的基于 IPv4 网络的程序。 | iproute net-tools |
kbd | Kbd 包含键盘映射表和键盘工具。 | kbd |
kmod | 加载内核模块的库和使用工具 | module-init-tools |
libpipeline | a library for manipulating pipelines of subprocesses in a flexible and convenient way. | 没有 |
make | Make 软件包包含一个编译软件包的程序。 | make |
patch | Patch 软件包包含一个根据“patch”文件来修改或建立文件的程序。补丁文件通常是用 diff 程序创建的。 | patch |
sysklogd | Sysklogd 包含记录系统日志信息的程序,比如内核处理意外事务的日志。 | 没有 |
sysvinit | Sysvinit 软件包包含一些控制系统启动、运行、关闭的程序。 | sysvinit(rhel5) upstart(rhel6) |
tar | Tar 软件包含有一个归档程序。 | tar |
texinfo | Texinfo 软件包包含读取、写入和转换成 Info 文档的程序。 | info |
udev | Udev 软件包包含动态地创建设备节点的程序。 | udev |
util-linux-ng | Util-linux-ng 包含各种各样的工具。其中包括处理文件系统,控制台,分区和信息的工具。 | util-linux-ng |
man-db | Man-DB 包含查找和显示 man 手册页的程序。 | man |
vim | Vim 软件包包含一个强大的文本编辑器。 | vim |
三、kylin编包
沿用2.1中的编包顺序,将2.2里2.1中未涉及的包追加
binutils
gcc
kernel
glibc
libstdc++
tcl
expect
dejagnu
check
ncurses
bash
bzip2
coreutils
diffutils
file
findutils
gawk
gettext
grep
gzip
m4
make
patch
perl
sed
tar
info
util-linux-ng
xz
man-pages
zlib
gmp
mpfr
pkgconfig
attr
acl
libcap
shadow-utils
psmisc
procps
e2fsprogs
setup
flex
bison
readline
bc
libtool
gdbm
expat
net-tools
iputils
ftp
tftp
telnet
traceroute
perl-XML-Parser
autoconf
automake
intltool
gperf
groff
grub
less
iproute
kbd
module-init-tools
upstart
udev
man
vim