LFS 是Linux From Scratch的縮寫。"From Scratch"是一個詞組,它的意思是"從零作起,白手起家,從無到有"的意思,所以"Linux From Scratch"本質上不該當理解爲一個Linux發行版名稱。它最貼切的含義應當是一種"方法/思想":一切從源代碼開始的方法/思想。若是把 LFS 比做建築房子,那麼LFS 提供房子的框架藍圖,可是須要你本身建造它。linux
要基於源代碼的方式來編譯整個系統,那首先要解決的就是工具鏈的問題,即須要一個編譯環境。因此構造LFS系統分兩大步:一是構造一個臨時的編譯環境;二是構建LFS系統。c++
注:如下列表基於LFS-7.6整理shell
臨時編譯環境其實也至關於一個小的 Linux 系統。只不過這個系統將僅包含必要的工具,可以構建最終的LFS系統。構建這個小系統分兩步進行,第一步是構建一個新的不依賴於宿主系統的工具鏈(編譯器、彙編器、鏈接器、庫文件以及一些有用的軟件),第二個步驟是利用這個工具鏈去構建其它基本的工具。 在工具鏈中最基本的是:Binutils、GCC和Glibc。Binutils 是一組開發工具,包括鏈接器,彙編器和其它用於目標文件和檔案的工具。GCC 軟件包包含 GNU 編譯器,其中有 C 和 C++ 編譯器。Glibc 包含了主要的C庫。這個庫提供了基本的例程,用於分配內存、搜索目錄、打開關閉文件、讀寫文件、字串處理、模式匹配、數學計算等等。其它的工具必須在他們的基礎上創建。編包順序依次以下表所示數據庫
編包順序依次以下vim |
包的描述安全 |
kylin對應包bash |
binutils網絡 |
軟件包包含一個連接器,一個彙編器和其餘處理目標文件的工具。安裝的第一個軟件包是 Binutils ,這很是重要,由於 Glibc 和 GCC 會針對可用的鏈接器 和彙編器進行多種測試,以決定啓用它們本身的哪些特性。框架 |
binutilsless |
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編譯了兩次。緣由第一遍是編譯獨立的環境,第二遍是用編好的環境編譯獨立的系統,一切只爲了與宿主系統脫離關係。
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 |
沿用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