LFS (版本6.1.1) 安裝心得
發表于:2007-05-26來源:作者:點擊數:
標簽:
---前序: 好多年前,安裝過早期的Slackware. 兩三年前安裝過RedHat9. 基本上就是安裝好后, 進桌面系統打一下小 游戲 ,然后就刪除掉.因為我的硬盤一直很小,20G. 當然一個很主要的原因是我不喜歡這些發行版中一大堆的東西,太亂,看不明白怎么組織的. 前幾天換了4
---前序:
好多年前,安裝過早期的Slackware.
兩三年前安裝過RedHat9.
基本上就是安裝好后, 進桌面系統打一下小
游戲,然后就刪除掉.因為我的硬盤一直很小,20G.
當然一個很主要的原因是我不喜歡這些發行版中一大堆的東西,太亂,看不明白怎么組織的.
前幾天換了40G硬盤,于是劃分了8G安裝了Debian.裝好了后一看也是一大堆的軟件,各式各樣.正要準備刪除.
不知道在哪里看到了LFS一下,頓時被吸引了,于是計劃安裝一個LFS.而Debian正好作為host system.
下面是我的安裝心得,花了周5,周6兩個通宵. (glibc, g
clearcase/" target="_blank" >cc, firefox, Xorg耗時很多,在筆記本上安裝.)
寫點自己的體會,主要是整理自己對LFS安裝過程的理解, 特別是ld和gcc的多次編譯.
----目標:
為了創建一個干凈的LFS系統.
----實現的大步驟:
1. 盡可能的擺脫host system的影響, 首先創建一個最基本的自治的Toolchain.
這個Toolchain中最基本的需要是: binutils(最基本的binary工具), gcc(編譯器), glibc(函數庫)
因為其它的tools就可以由這三個創建出來了.
2. 當所有的基本Toolchain工具準備好了,就可以chroot.
3. 在Chroot后的虛擬根/環境下, 用toolchain中的工具生成出最后的LFS系統.
---一個說明:
為什么要創建/tools這個link
初始的Toolchain工具創建在/mnt/lfs/tools目錄下.
同時為了將來chroot后, 工具中的Interpreter信息仍然指向正確,使用了一個小技巧.
在host system中的/目錄下創建一個名為tools的link, 指向/tools --> /mnt/lfs/tools
這個作用打個比方來說就是,當我們在使用host system的時候,我們可以使用/tools/bin/ld找到ld程序,
將來chroot后,/tools/bin/ld還是能找到這個ld.
否則我們在使用host system的時候,使用/mnt/lfs/tools/bin/ld來找到ld,
換句話說生成的程序包含/mnt/lfs這樣的信息,將來chroot之后,可就不太好了.
----符號說明:
(為了行文方便)
bin-0 -----> host system的binutils
ld-0 -----> host system 的ld
bin-1 -----> 第一遍編譯出的binutils
ld-1 -----> bin-1中的ld
ld-a -----> 第一次調正后的ld
bin-2 -----> 第二遍編譯的binutils
ld-2 -----> bin-2中的ld
ld-b -----> 第二次調正后的ld
bin-3 -----> 第三遍編譯生成的binutils
ld-3 -----> bin-3中的ld
gcc-0, gcc-1, gcc-2, gcc-3分別表示host system中的gcc, 和Toolchain中的兩遍gcc和最后LFS系統的gcc.
----步驟分析:
好,現在讓我們從頭開始看LFS是如何生成的.
** bin-1和gcc-1的編譯:
第一步,我們用host system中編譯出bin-1時候,
使用的是host system的binutils(ld), gcc-0和glibc函數庫.
(a) 生成的Program無可避免的受到host system的影響, 例如:
使用生成的ld-1程序將會link默認/lib下的libarary.
第二步,我們也許可以用host system直接來編譯glibc,但是我們更希望使用自己的gcc來編譯glibc,
所以我們先用host system來編譯出gcc-1.
注意:編譯gcc-1使用的是bin-1/ld-1, gcc-0, glibc-0.生成的gcc-1仍然受到host system的影響.
gcc-1會使用/lib目錄下的dynamic linker (ld-
linux.so.2), 而不是/tools/lib/ld-linux.so.2.
有了bin-1, gcc-1, 我們就可以立刻使用新生成的bintuils和gcc來編譯glibc了.
要注意./configure的參數,它表明了glibc的編譯工具都是用的/tools/bin下的ld, gcc了,
而不在是host system中的ld, gcc.雖然這個選項并不重要.
** 第一次進行Toolchain調正
當glibc-1編譯完成,是時候修改(a)中提到的問題了.
這次調正的目標就是要讓在以后的編譯過程中,要求ld和gcc都只使用/tools/lib下的函數庫,也就是剛剛編譯好的glibc.
調整的辦法是:
1.)對于ld,
make -C ld clean (先清空ld)
make -C ld LIB_PATH=/tools/lib (重新編譯ld, 告訴ld以后要link /tools/lib下的函授庫)
(這兩步寫在了Binutils-2.15.94.0.2.2 - Pass 1這一節,
我認為不好,應該放到第一次Toolchain調正中,更加連貫.)
make -C ld install (重新install到/tools/bin)
這就生成了ld-a (請注意,ld程序實際上在整個創建LFS過程中編譯了5次!!!)
2.)對于gcc,
修改目的:告訴gcc要使用/tools/lib下的dynamic linker.
修改gcc的SPEC文件,把定義dynamic linker的地方修改成/tools/lib/ld-linux.so.2
(建議用vi自己改,更有把握,我第一次拷貝sed命令好像出錯了,沒有重試).
做完后,務必要做
測試, 一定保證以后編譯出來的程序使用正確的函數庫(/tools/lib的glibc)
這個gcc可以稱之為gcc-a
(這里是我們第一遍編譯binutils和gcc.在整個系統的創建過程中,bintuils和gcc是要編譯三次,
其它的基本Toolchain工具是編譯兩次, 額外的LFS系統軟件僅需要一次.)
一個問題,在準備toolchain的時候為什么要編譯bintuils和gcc兩次呢?
因為在為了生成Toolchain中的gcc的過程中,我們希望生成的gcc是Self compile的,也就是自己能編譯出自己來.
第一遍的binutils和gcc是為了編譯出glibc并能自己編譯出第二遍的gcc(Self compile).
雖然實際上可以直接由host system編譯出Toolchain中的gcc和bintuils,但那樣的Toolchain就不是self compile了.
所以gcc和binutils比別的基本工具都多編譯了一次. (再次注意:ld共編譯了5次!在兩次調正中各還編譯一次)
** bin-2和gcc-2的編譯:
到這里后, 我們手里有了ld-a, gcc-a, 按道理我們應該立刻可以重新編譯bintuils和gcc來生成bin-2和gcc-2.
但是為了做將來gcc-2的測試, 先編譯了三個測試所需的軟件包: Tcl, Expect, DejaGNU.這三個包理論上可以不要.
Okay,現在開始編譯gcc-2
用到的編譯器,linker和函數庫分別是gcc-a, ld-a, glibc-1,可以看到已經沒有host system的影響了.
然后編譯bin-2,
用的分別是gcc-2, ld-a, glibc-1, 也不再受host system的影響了.
make install bin-2后, ld-a也更新為ld-2,
** 其它基本工具的編譯:
以后toolchain中的其它工具就可以很容易的創建了.
使用的都是(ld-2, gcc-2, glibc-1)
** Chroot之后的glibc-2:
當/tools目錄下這些工具準備齊全后,我們就可以開始chroot然后在基于根/分區的環境中,
利用這些工具生成最后的系統軟件了.
毫無疑問,我們想要最先生成的系統軟件就是bintuils和gcc.
但在創建它們之前,還有一個關鍵的包glibc-2需要編譯出來.
glibc-2編譯用到是:bin-2/ld-2, gcc-2, glibc-1.
** 第二次調正:
有了glibc-2后,我們就將開始第二次,也是最后一次Toolchain調正.
和第一次調正類似, 最關鍵的是要調正ld和gcc.
ld-2調正成ld-b:
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib (告訴ld以后從這兩個目錄去找lib)
make -C ld INSTALL=/tools/bin/install install
gcc-2調正成gcc-b:
修改gcc spec文件's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@g;
正好和第一次調正相反.
** bin-3和gc-3編譯:
有了調正后的ld-b, gcc-b,就可以開始最終系統的編譯了.
首先是bin-3. (使用的是: ld-b, gcc-b和glibc-2)
然后是gcc-3. (使用的是: ld-3, gcc-b和glibc-2)
** 系統的其它所需軟件:
再后面其它的系統軟件就都將由bin-2, gcc-3, glibc-2生成出來了.
走到這里,配置好系統Scripts和Kernel,以及grub.
Reboot!
!!!歡迎進入LFS!!!
----后記BLFS:
很開心, 參考LFS Book (v6.1.1)很順利地安裝好了LFS系統.
LFS最酷的地方,也是最吸引我的地方就是讓我知道系統每個軟件都有那些功能和哪些文件.
可以自主選擇需要安裝的軟件.
安裝好LFS之后, 立刻就刪除了的host system --> debian. :-), 騰出空間便于安裝X系統.
-gmp,便于拷貝粘貼.
-lynx,可以一邊
下載軟件包和一邊瀏覽BLFS Book.
-wget, 有些情況它比lynx下載快多了.
選擇了Xorg.
(很奇怪它沒有安裝到/usr/X11R6下面,和書上不一致,但是使用好像沒有問題,沒有深入檢查.)
Xorg自帶了tvm,但實在太丑.
閱讀了一下BLFS,權衡后選擇了Xfce.我覺得Xfce已經很漂亮,而且精悍.
最后安裝的三個軟件分別是:
gdb, gvim, firefox.
原文轉自:http://www.kjueaiud.com
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
|