分为以下几个部分
第一部分——介绍Part I - Introduction
第一部分中介绍了一些LFS安装过程中的重要说明。本节也提供了一些本书的元信息。
第二部分——准备工作Part II - Preparing for the Build
第二部分介绍构建准备过程——分区、下载包、编译过程工具。
第三部分——构建LFS系统Part III - Building the LFS System
第三部分指导读者构建LFS系统——一个一个的编译安装包,设置启动脚步,安装内核。成果系统是其他软件可以扩展的基础。最后,有一个简单的使用参考列出所有程序、库和重要的已安装文件。
为了易于阅读,这里做一些排版约定。本节包含了一些LFS中排版格式的例子。
./configure --prefix=/usr这种格式说明文本就是你看到那个意思,除非周围有注明。同时也注明章节中的引用。
一些情况下,一个逻辑行分为多个物理行,行尾用一个反斜杠。
CC="gcc -B/usr/bin/" ../binutils-2.18/configure \ --prefix=/tools --disable-nls --disable-werror需注意这个反斜杠紧跟一个回车。否则空格或制表符将产生不正确的结果。
install-info: unknown option '--dir-file=/mnt/lfs/usr/info/dir'这种格式 (fixed-width text) 表示屏幕输出, 通常是命令行结果. 此格式通常也用于显示文件,例如:/etc/ld.so.conf.
Emphasis
这种格式有多种目的。一个主要目的是表示强调重点。
http://www.linuxfromscratch.org/
这种格式用于超链接。包含知识、下载地址和网站。
cat > $LFS/etc/group << "EOF"root:x:0:bin:x:1:......EOF这种格式用于创建配置文件。第一个命令告诉系统创建文件从下面的命令直到文件结束。因此,这整段就是和看到的一样。
<REPLACED TEXT>
这种格式用于不是表达括号内看到的意思,而是复制粘贴操作。
[OPTIONAL TEXT]
这种格式说明括号内的文本是可选的。
passwd(5)
这种格式用于引用指定的手册页。括号内的数字用于说明手册内的章节。例如,passwd有两个手册页。对于每隔LFS安装,这两个手册页就位于 /usr/share/man/man1/passwd.1 和/usr/share/man/man5/passwd.5.。当使用 passwd(5)时就指向/usr/share/man/man5/passwd.5. man passwd 将打印第一个手册页。和 “passwd”匹配, 就是/usr/share/man/man1/passwd.1.如果,你需要读指定的页,你需要运行 man 5 passwd。 It需要指出的是大多数手册页没有重复的名字存在不同的章节中。因此, man <program name> 已经足够了。
软件构建知识Software-Building-HOWTO http://www.tldp.org/HOWTO/Software-Building-HOWTO.html
在Linux下构建一般Unix软件的综合性指南。虽然是很久以前写的,但是它仍然很好的总结了构建和安装软件的基本技术。Linux用户手册The Linux Users' Guide http://www.linuxhq.com/guides/LUG/guide.html
覆盖了Linux软件的使用。老资料了,也依然有效。
基础阅读?The Essential Pre-Reading Hint http://www.linuxfromscratch.org/hints/downloads/files/essential_prereading.txt
特别适用Linux新用户。包含一个广泛课题的优秀的信息源列表。任何尝试安装LFS系统的人应该理解其中的大部分课题。
宿主系统应该遵从下面这些软件的最低版本要求。这对于现在大多数Linux发行版都不是一个问题。需要注意的是很多发行版将软件的头文件分散的不同的包,例如这种形式:“<package-name>-devel” 或 “<package-name>-dev”。请确保你的发行版安装了这些东西。
早期版本的软件也许可以工作,但是没有经过测试。
Bash-3.2 (/bin/sh bash的符号链接或者硬链接)
Binutils-2.17 (不推荐大于2.21的版本,因为没有测试过)
Bison-2.3 (/usr/bin/yacc bison的链接或一个执行bison的小脚步n)
Bzip2-1.0.4
Coreutils-6.9
Diffutils-2.8.1
Findutils-4.2.31
Gawk-3.1.5 (/usr/bin/awk gawk的链接)
Gcc-4.1.2 (不推荐大于4.6.1的版本,因为没有测试过)
Glibc-2.5.1 (不推荐大于2.14.1的版本,因为没有测试过)
Grep-2.5.1a
Gzip-1.3.12
Linux Kernel-2.6.25 (用GCC 4.1.2或以上版本编译)
内核版本需求是因为第6章构建glibc中开发人员建议我们提到的版本要求。
如果内核版本低于2.6.25或者不是使用GCC4.1.2或以上版本编译,你需要一个符合要求的内核替代。 这里有两种方法。首先,看看你的Linux发行商是否提供2.6.25或更高版本的内核,如果是,你可以安装这个发行版。如果发行商没有提供一个可接收的内核,你可以自己编译一个。第8章指导你如何编译内核和配置引导程序(假设宿主使用GRUB)。
M4-1.4.10
Make-3.81
Patch-2.5.4
Perl-5.8.8
Sed-4.1.5
Tar-1.18
Texinfo-4.9
Xz-5.0.3
上面提到的符号链接需要用来构建LFS系统。符号链接指向其他软件(如:dash、mawk等)可以工作,但是LFS开发组不提供测试和支持,可能需要一些差异说明,有些包需要附加的补丁。
检测你的系统是否符合版本要求,是否可以编译程序,运行如下代码:
cat > version-check.sh << "EOF"#!/bin/bashexport LC_ALL=C# Simple script to list version numbers of critical development toolsbash --version | head -n1 | cut -d" " -f2-4echo "/bin/sh -> `readlink -f /bin/sh`"echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-bison --version | head -n1if [ -e /usr/bin/yacc ]; then echo "/usr/bin/yacc -> `readlink -f /usr/bin/yacc`"; else echo "yacc not found"; fibzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2diff --version | head -n1find --version | head -n1gawk --version | head -n1if [ -e /usr/bin/awk ]; then echo "/usr/bin/awk -> `readlink -f /usr/bin/awk`"; else echo "awk not found"; figcc --version | head -n1/lib/libc.so.6 | head -n1 | cut -d"," -f1grep --version | head -n1gzip --version | head -n1cat /proc/versionm4 --version | head -n1make --version | head -n1patch --version | head -n1echo Perl `perl -V:version`sed --version | head -n1tar --version | head -n1echo "Texinfo: `makeinfo --version | head -n1`"xz --version | head -n1echo 'main(){}' > dummy.c && gcc -o dummy dummy.cif [ -x dummy ]; then echo "Compilation OK"; else echo "Compilation failed"; firm -f dummy.c dummyEOFbash version-check.shAutoconf
这个包包含了根据开发人员模版产生的shell脚本可以自动配置源码。通常需要重新构建包在更新了构建过程后。Automake
这个包包含从模版生成Make file的程序。通常需要重新构建包在更新了构建过程后。Bash
这个包满足Linux基础标准的核心需求,为系统提供一个Bourne Shell的界面。作为其他Shell包之上的选择是因为他的通用性和广泛的兼容性超越了基本的shell功能。Binutils
这个包是处理目标文件的连接器、汇编器和其他工具。包里的程序需要用来编译LFS和BLFS系统的大部分包。Bison
这是GNU版本的 yacc (Yet Another Compiler Compiler) 用来编译一些LFS程序。
Bzip2
压缩和解压缩程序。用来解压很多LFS包。
Coreutils
查看操作文件和目录的基本程序包。用于命令行文件管理,也用作LFS每个包的安装过程。DejaGNU
测试其他程序的框架。仅在临时工具链安装。This package contains a framework for testing other programs. It is only installed in the temporary toolchain.Diffutils
比较文件或目录的差异。用来创建补丁,也用在很多包的构建过程中。Expect
这是一个程序进行脚本与交互程序对话的程序。它通常用于测试其它程序装。只有安装在临时工具链。E2fsprogs
用于处理ext2,ext3,ext4文件系统的工具集。是常规和彻底测试Linux支持的文件系统。File
判断文件类型的工具集。用来编译一些包。Findutils
在文件系统中查找文件。用于很多包的编译脚本。Flex
生成文本模式识别程序的工具。是GNU版本的lex(词法分析器)程序。用来编译很多LFS包。Gawk
用于处理文本文件。是GNU版本的awk (Aho-Weinberg-Kernighan)。用于很多包的编译脚本。Gcc
GNU的编译器集合。包含C和C++编译器。GDBM
GNU的数据库管理库。用于Man-DB。Gettext
用于本地化和国际化的工具和库。
Glibc
主要的C库。Linux程序运行必须。GMP
任意精度算法的很有用的数学库。用来编译Gcc。Grep
在文件中进行查找的程序。用于很多包的编译脚本。Groff
用于处理和格式化文本。一个重要的用处是用于格式化手册页。GRUB
Grand Unified Boot Loader。众多引导程序中的一个,也是最灵活的。Gzip
压缩和解压缩文件的程序。用于LFS和BLFS中解压很多包。Iana-etc
提供网络服务和协议的数据。用于启动网络功能。This package provides data for network services and protocols. It is needed to enable proper networking capabilities.Inetutils
基本网络管理的程序。IProute2
基本和高级功能的IPv4、IPv6程序。用于支撑其他网络工具包的IPv6功能。This package contains programs for basic and advanced IPv4 and IPv6 networking. It was chosen over the other common network tools package (net-tools) for its IPv6 capabilities.Kbd
键值表数据文件,非美国键盘的工具,很多控制台字体。Less
很漂亮的文本查看器,在查看文件时可以上下滚动。Man-DB用来查看手册页。Libtool
This package contains the GNU generic library support script. It wraps the complexity of using shared libraries in a consistent, portable interface. It is needed by the test suites in other LFS packages.
Linux Kernel
Linux操作系统内核。This package is the Operating System. It is the Linux in the GNU/Linux environment.M4
通用的文本宏处理器程序,用于构建工具和其他程序。Make
直接的构建工具。几乎LFS的所有包都需要它。Man-DB
查找和查看手册页。有很强的国际化功能,支持手册程序。Man-pages
Linux系统相关内容手册页。Module-Init-Tools
管理Linux内核模块的程序。MPC
复数计算程序。用于GCC。MPFR
多精度算法程序。用于GCC。Ncurses
独立终端的屏幕字符处理库。常用于菜单系统中的光标处理。很多LFS包都用到它。Patch
提供一个比较程序创建的补丁包来修改或创建文件。用于很多LFS包的构建过程中。PCRE
用于和Perl 5相同的正则表达式模式匹配。依赖于Glib,可用于Grep。Perl
运行时语言PERL的解释器。用于很多LFS包的安装和测试。Procps
进程监控。用于系统管理和LFS的Bootscripts。Psmisc
显示运行进程的信息。有用的系统管理工具。Readline
工具集用于命令行的编辑和历史功能。用于Bash。Sed
不用文本编辑器来编辑文本内容。用于很多的LFS包的配置脚本。Shadow
用于安全的处理密码。Sysklogd
记录系统信息日志,例如内核记录或守护进程发生的不寻常事件。Sysvinit
初始化程序,是Linux系统中所有其他进程的父进程。Tar
用于LFS中几乎所有包的存档和解包功能。Tcl
Tcl语言用于很多LFS包的测试。仅包含于临时工具链。Texinfo
读、写、转换信息页。用于很多包的安装过程。Udev
用于动态创建设备借点。一种创建/dev目录下大量静态设备的选择。Util-linux
包含很多工具程序。在这当中被用来处理文件系统,This package contains miscellaneous utility programs. Among them are utilities for handling file systems, consoles, partitions, and messages.Vim
一个编辑器。选择它是因为兼容传统的vi编辑器和大量强大的兼容能力。编辑器是一个比较个人的选择,如果需要也可以选择其他的。XZ Utils
文件压缩和解压程序。提供很高的压缩率,常用来解压XZ或者LZMA格式。Zlib
常用的压缩和解压程序。
Linux Standard Base (LSB) Core Specification 4.0
LSB 有五个分离的标准: Core, C++, Desktop, Runtime Languages, and Printing. 除了一般需求也有构架描述需求。LFS尝试明确上节讨论的构架。
注意很多人不同意LSB的需求。定义它的主要目的是确保合适的软件能够安装和运行在操作系统上。既然LFS基于源码,用户完全掌握哪些程序需要安装,哪些LSB需求的不被安装。
创建一个通过LSB认证的LFS系统是可能的。但是附加包超出了LFS的范围。大多数附加包的安装教程将在BLFS中。
满足LSB需求的LFS包
LSB Core: | Bash, Binutils, Coreutils, Diffutils, File, Findutils, Gawk, Grep, Gzip, M4, Man-DB, Ncurses, Procps, Psmisc, Sed, Shadow, Tar, Util-linux, Zlib |
LSB C++: | Gcc |
LSB Desktop: | None |
LSB Runtime Languages: | Perl |
LSB Printing: | None |
LSB Multimeda: | None |
满足LSB需求的BLFS包
LSB Core: | Bc, Cpio, Ed, Fcrontab, Initd-tools, PAM, Sendmail (or Postfix or Exim) |
LSB C++: | None |
LSB Desktop: | ATK, Cairo, Desktop-file-utils, Freetype, Fontconfig, Glib2, GTK+2, Icon-naming-utils, Libjpeg, Libpng, Libxml2, MesaLib, Pango, Qt3, Qt4, Xorg |
LSB Runtime Languages: | Python |
LSB Printing: | CUPS |
LSB Multimeda: | Alsa Libraries, NSPR, NSS, OpenSSL, Java |
满足LSB需求未包含在LFS或BLFS中的包
LSB Core: | At, Batch, Lsb_release |
LSB C++: | None |
LSB Desktop: | None |
LSB Runtime Languages: | None |
LSB Printing: | None |
LSB Multimeda: | Xdg-utils |
Autoconf
这个包包含了根据开发人员模版产生的shell脚本可以自动配置源码。通常需要重新构建包在更新了构建过程后。Automake
这个包包含从模版生成Make file的程序。通常需要重新构建包在更新了构建过程后。Bash
这个包满足Linux基础标准的核心需求,为系统提供一个Bourne Shell的界面。作为其他Shell包之上的选择是因为他的通用性和广泛的兼容性超越了基本的shell功能。Binutils
这个包是处理目标文件的连接器、汇编器和其他工具。包里的程序需要用来编译LFS和BLFS系统的大部分包。Bison
这是GNU版本的 yacc (Yet Another Compiler Compiler) 用来编译一些LFS程序。
Bzip2
压缩和解压缩程序。用来解压很多LFS包。
Coreutils
查看操作文件和目录的基本程序包。用于命令行文件管理,也用作LFS每个包的安装过程。DejaGNU
测试其他程序的框架。仅在临时工具链安装。This package contains a framework for testing other programs. It is only installed in the temporary toolchain.Diffutils
比较文件或目录的差异。用来创建补丁,也用在很多包的构建过程中。Expect
这是一个程序进行脚本与交互程序对话的程序。它通常用于测试其它程序装。只有安装在临时工具链。E2fsprogs
用于处理ext2,ext3,ext4文件系统的工具集。是常规和彻底测试Linux支持的文件系统。File
判断文件类型的工具集。用来编译一些包。Findutils
在文件系统中查找文件。用于很多包的编译脚本。Flex
生成文本模式识别程序的工具。是GNU版本的lex(词法分析器)程序。用来编译很多LFS包。Gawk
用于处理文本文件。是GNU版本的awk (Aho-Weinberg-Kernighan)。用于很多包的编译脚本。Gcc
GNU的编译器集合。包含C和C++编译器。GDBM
GNU的数据库管理库。用于Man-DB。Gettext
用于本地化和国际化的工具和库。
Glibc
主要的C库。Linux程序运行必须。GMP
任意精度算法的很有用的数学库。用来编译Gcc。Grep
在文件中进行查找的程序。用于很多包的编译脚本。Groff
用于处理和格式化文本。一个重要的用处是用于格式化手册页。GRUB
Grand Unified Boot Loader。众多引导程序中的一个,也是最灵活的。Gzip
压缩和解压缩文件的程序。用于LFS和BLFS中解压很多包。Iana-etc
提供网络服务和协议的数据。用于启动网络功能。This package provides data for network services and protocols. It is needed to enable proper networking capabilities.Inetutils
基本网络管理的程序。IProute2
基本和高级功能的IPv4、IPv6程序。用于支撑其他网络工具包的IPv6功能。This package contains programs for basic and advanced IPv4 and IPv6 networking. It was chosen over the other common network tools package (net-tools) for its IPv6 capabilities.Kbd
键值表数据文件,非美国键盘的工具,很多控制台字体。Less
很漂亮的文本查看器,在查看文件时可以上下滚动。Man-DB用来查看手册页。Libtool
This package contains the GNU generic library support script. It wraps the complexity of using shared libraries in a consistent, portable interface. It is needed by the test suites in other LFS packages.
Linux Kernel
Linux操作系统内核。This package is the Operating System. It is the Linux in the GNU/Linux environment.M4
通用的文本宏处理器程序,用于构建工具和其他程序。Make
直接的构建工具。几乎LFS的所有包都需要它。Man-DB
查找和查看手册页。有很强的国际化功能,支持手册程序。Man-pages
Linux系统相关内容手册页。Module-Init-Tools
管理Linux内核模块的程序。MPC
复数计算程序。用于GCC。MPFR
多精度算法程序。用于GCC。Ncurses
独立终端的屏幕字符处理库。常用于菜单系统中的光标处理。很多LFS包都用到它。Patch
提供一个比较程序创建的补丁包来修改或创建文件。用于很多LFS包的构建过程中。PCRE
用于和Perl 5相同的正则表达式模式匹配。依赖于Glib,可用于Grep。Perl
运行时语言PERL的解释器。用于很多LFS包的安装和测试。Procps
进程监控。用于系统管理和LFS的Bootscripts。Psmisc
显示运行进程的信息。有用的系统管理工具。Readline
工具集用于命令行的编辑和历史功能。用于Bash。Sed
不用文本编辑器来编辑文本内容。用于很多的LFS包的配置脚本。Shadow
用于安全的处理密码。Sysklogd
记录系统信息日志,例如内核记录或守护进程发生的不寻常事件。Sysvinit
初始化程序,是Linux系统中所有其他进程的父进程。Tar
用于LFS中几乎所有包的存档和解包功能。Tcl
Tcl语言用于很多LFS包的测试。仅包含于临时工具链。Texinfo
读、写、转换信息页。用于很多包的安装过程。Udev
用于动态创建设备借点。一种创建/dev目录下大量静态设备的选择。Util-linux
包含很多工具程序。在这当中被用来处理文件系统,This package contains miscellaneous utility programs. Among them are utilities for handling file systems, consoles, partitions, and messages.Vim
一个编辑器。选择它是因为兼容传统的vi编辑器和大量强大的兼容能力。编辑器是一个比较个人的选择,如果需要也可以选择其他的。XZ Utils
文件压缩和解压程序。提供很高的压缩率,常用来解压XZ或者LZMA格式。Zlib
常用的压缩和解压程序。
LFS的目标构架是英特尔32位处理器.如果你以前没有构建过LFS,最好从这个构架开始。32位构架受到Linux系统的最广泛支持,也兼容大部分开源软件和版权软件。
其他一些因素列在这里。比较32位系统,64位的可执行程序更大,执行时间更快。例如LFS6.5构建在酷睿2双核处理的上的统计如下:
构架 构建时间 程序大小
32-bit 198.5 分钟 648 MB
64-bit 190.6 分钟 709 MB
