歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> LFS (版本6.1.1) 安裝心得

LFS (版本6.1.1) 安裝心得

日期:2017/2/27 9:25:06   编辑:更多Linux

---前序:好多年前,安裝過早期的Slackware.兩三年前安裝過RedHat9.基本上就是安裝好後, 進桌面系統打一下小游戲,然後就刪除掉.因為我的硬盤一直很小,20G.當然一個很主要的原因是我不喜歡這些發行版中一大堆的東西,太亂,看不明白怎麼組織的.前幾天換了40G硬盤,於是劃分了8G安裝了Debian.裝好了後一看也是一大堆的軟件,各式各樣.正要准備刪除.不知道在哪裡看到了LFS一下,頓時被吸引了,於是計劃安裝一個LFS.而Debian正好作為host system.下面是我的安裝心得,花了周5,周6兩個通宵. (glibc, gcc, 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的binutilsld-0 -----> host system 的ldbin-1 -----> 第一遍編譯出的binutilsld-1 -----> bin-1中的ldld-a -----> 第一次調正後的ldbin-2 -----> 第二遍編譯的binutilsld-2 -----> bin-2中的ldld-b -----> 第二次調正後的ldbin-3 -----> 第三遍編譯生成的binutilsld-3 -----> bin-3中的ldgcc-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 cleanmake -C ld LIB_PATH=/usr/lib:/lib (告訴ld以後從這兩個目錄去找lib)make -C ld INSTALL=/tools/bin/install installgcc-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.



** 第二次調正:有了glibc-2後,我們就將開始第二次,也是最後一次Toolchain調正.和第一次調正類似, 最關鍵的是要調正ld和gcc.ld-2調正成ld-b:make -C ld cleanmake -C ld LIB_PATH=/usr/lib:/lib (告訴ld以後從這兩個目錄去找lib)make -C ld INSTALL=/tools/bin/install installgcc-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.



Copyright © Linux教程網 All Rights Reserved