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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/56522.html