一、什么是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