Linux中國

LFS編譯過程必備輔助手冊(一)

從7月初開始我們團隊裡面兩個人為了更加深入的學習Linux方面的知識。也為了瞻仰LFS大神們的光輝。 開始了LFS的旅程,因為LFS官方文檔寫的雖然非常具體,但是多多少少對於一些Linux新手來說造成很多困擾。

因此我們團隊做完LFS之後寫了這篇輔助性質的說明,對新手遇到問題的時候提供幫助。

進行LFS旅程的前提條件

  1. 比較熟悉Linux操作
  2. 有一定Linux開發基礎
  3. 在LFS之前有過從源碼編譯軟體的經驗。
  4. 有一定的英文基本功,除了看手冊之外,有的時候拋出錯誤的時候應該有google查找並解決錯誤的能力。

文檔使用方法:

  1. 首先對本輔助文檔完整的瀏覽一遍,這樣有助於理解LFS的整個過程做什麼
  2. 然後掃一遍LFS官方文檔的目錄,這樣至少知道每個章節的目的。
  3. 當你進行到LFS某一步時,遇到問題後可以對應上本輔助手冊的具體問題的解決方案

LFS全過程概括

  1. 對磁碟的準備和用戶的準備
  2. 建立temp系統
  3. 編譯LFS系統
  4. 最後調整

LFS 編譯完成的成果

LFS在編譯完成的最後除了Linux基礎內核目錄結構(bin etc lib proc dev等等這些)還有一個tools這個目錄(過程概括中的第2部分),它的存在是為了編譯LFS整個系統的。所以在第五章這一部分中,就是利用ubuntu或centos主機系統的編譯環境(稱之為HOST)來編譯出tools這個目錄下的編譯環境。

提示:其實製作LFS所有用到的工具鏈接,就是在ubuntu或centos下編譯出一個新的交叉編譯器(就是/tools目錄下的所有工具),而這個新的交叉編譯器在編譯出來後,就不會依賴於現有操作系統編譯器和庫文件(ubuntu or centos),此時我們就可以利用這個全新的交叉編譯工具(/tools目錄下的所有工具)製造屬於我們自己的Linux了,利用這個新的工具,從源碼開始編譯出所有我們需要的軟體和庫,最後編譯Linux內核,設置bash腳本,啟動腳本,tmpfs文件系統需要的配置文件,整個LFS的過程就結束了。

A: Linux發行版本的選擇

  1. CentOS 6.3 (虛擬機雙硬碟)
  2. Ubuntu 14.04 with GCC4.4(64bit) (筆記本電腦+雙硬碟+LFS系統構建在SSD硬碟上)
  3. 在以上兩種Linux發行版上分別進行編譯運行,且最終都取得成功。
  4. 使用LFS官網上LFS7.5的源碼進行編譯製作

B:前四章的內容:硬碟分區、用戶準備篇

主機所用操作系統的準備工作: (ubuntu14.04 64位下需要安裝的軟體)

1.在ubunt下安裝bison(ubuntu下默認沒有安裝)

sudo apt-get install bison 
#LFS 手冊要求

2.不能用gcc4.8,需要換成gcc4.4(ubuntu14.04默認gcc4.8)

 sudo apt-get install gcc-4.4 g++-4.4
 sudo rm which gcc
 sudo rm  which g++
 sudo ln -sv /usr/bin/gcc-4.4  /usr/bin/gcc
 sudo ln -sv /usr/bin/g++-4.4  /usr/bin/g++

這裡CentOS沒有什麼特別要說的。主要因為全部都用默認的,就可以了。各種依賴C6-Media就可以解決

3.到LFS官網上下載LFS7.5的所有源碼: ftp://ftp.lfs-matrix.net/pub/lfs/lfs-packages/

1.磁碟分區準備

  1. plan: 準備一個10到20GB的分區,這一步請謹慎操作
  2. action: 創建分區(表)並格式化。創建分區表請使用fdisk , 如果需要圖形界面下的請使用GPartion,如果這兩種工具都不會請到windows下分區(無需格式化)
#格式化分區
sudo mkfs -v -t ext4  /dev/sdaX #這裡的X是填上自己的分區號

PS:因為現在計算機的內存都比較大,所以可以不需要swap分區。(第一次進行LFS,一個根「/」分區就夠了,等以後有經驗了,在進行多分區的操作)

2.用戶準備

直接參考手冊上的來就行了。

小建議:

PS1='[[e[32m]###[e[31m]u@[e[36m]h w]$[e[m]'

PS1修改成這個變數看著能舒服點。

注意:每次開機,或是重啟後,在進入lfs用戶前,都要對 LFS變數進行檢查,查看LFS=/mnt/lfs變數是否存在,然後對lfs使用的分區進行掛載

前四章的小結:

  1. 這一部分沒有什麼難點,準備硬碟分區是因為要讓LFS作為獨立的硬碟來啟動。新建分區、格式化分區、準備lfs用戶是Linux操作的基礎素質。 注意 :為了下面的編譯過程能更快,可以在輸入make命令時在後面加入-j4,使用4個進程進行同時編譯,在多核處理器上編譯的速度有明顯提升

開始進入編譯代碼的環境(每次開機或重啟動後需要進行下面步驟進入lfs用戶環境)

  1. 首先導入LFS變數
export LFS=/mnt/lfs
#建議放到/etc/profile下方便一直用
  1. 然後掛載LFS的分區
sudo mount -v -t ext4 /dev/sdaX $LFS  #X為你的LFS硬碟分區號
  1. 最後就可以切換到lfs用戶了
su - lfs  #注意中間這個 - 符號是一定要的,代表為lfs用戶啟動一個login shell 

補充:通常我們在開機後,啟動的第一個shell稱之為login shell,當進入GUI界面後,不需要輸入密碼啟動的shell稱之為non-login shell。這兩種shell是有區別的。大家都知道shell的運行是需要環境變數的支持的。配置這些環境變數的文件就是配置shell工作環境的文件。兩種shell在讀取配置文件時有很大的不同,下面是總結它們分別讀取哪些配置文件:

  1. login shell 啟動--->讀取/etc/porfile文件--->讀取~/.bash_profile文件
  2. no-login shell 啟動--->讀取~/.bashrc文件
  3. exec env -i /bin/bash命令會開啟一個全新的non-login shell。

注意:每次重新開機或重啟後都需要進行下面的步驟,切換到lfs用戶,因為對於新手來說,不可能一天就編譯完lfs的所有源,可以把以上步驟保存到一個文件中,每次重啟系統進行LFS之前,參照以上步驟進入到LFS編譯環境。

C: 第五章的內容:編譯得到$LFS/tools/目錄下面的工具包

  • 第一步,編譯出一個全新的與主機系統無關的工具鏈。這些工具鏈包含了:compiler(就是我們常用的gcc,g++),assembler(就是把彙編程序變成a.obj文件的工具),linker(就是把很多*.obj文件和庫文件鏈接成可運行文件a.out的工具),還有各類庫文件(為後面編譯其它的軟體提供基礎設施),當然還有大量的其它工具
  • 第二步,得用第一步編譯出來的工具,編譯其它的工具(這裡可以看出,在製作LFS的過程中,編譯的先後順序是非常生要的,因為有了雞,才能下蛋)
  • 注意 1:上面兩步編譯出來的工具都會安裝到 $LFS/tools目錄下面(也就是/mnt/lfs/tools目錄下面)。LFS手冊中把這個稱之為臨時的文件系統,就是因為$LFS/tools這個目錄在第6章結束時就會被刪除,因為$LFS/tools已經使用完了,沒有利用價值了。
  • 注意 2:參照LFS手冊上的指令進行編譯,基本不會遇到錯誤,因為編譯代碼的步驟就是老三樣:configure && make && make install,但是有一點,一定要注意,所有的安裝包一定要打補丁,因為LFS手冊沒有強調打補丁的過程,所以自己如果發現這個源碼包有補丁文件,一定要記得打上。
  • 注意 3:因為需要編譯的軟體太多,到最後你可能不會願意自已每個單詞都輸入到命令行進行編譯,所以通常會直接複製LFS手冊中的命令。但是複製時,請一定注意先把指令複製到一個空的文件編輯器中,然後檢查一下,複製過來的內容是否正確,因為從PDF文件複製到文本中的內容,格式會發生很大的變化。這一點在你嘗試的過程中就會發現了。然後在文本編譯器或是vim中進行編輯後,在複製到lfs用戶的命令行中。
  • 注意 4:在編譯perl時,按照官方文檔打補丁會出現readonly的錯誤,下面是是正確的操作命令:
cd /mnt/lfs/sources
tar xvf perl-5.16.2
cd perl-5.16.2/hints
cp linux.sh linux.sh.org
cd ..
patch -Np1 -i ../perl-5.16.2-libc-1.patch
cd hints
diff linux.sh linux.sh.org   #輸出打補丁情況,則為正常打補丁,編譯過程參考手冊
  • 注意 5:手冊上的configure的位置一定剛要注意有三種情況,第一種是在源代碼目錄之外進行configure,第二種是在源代碼目錄裡面進行configure,第三種(特殊情況)是libstdc++是在gcc源碼目錄的子目錄裡面進行configure。所以在執行命令之前一定剛要看好執行命令的前提條件,不妨思考一下LFS的筆者為什麼這麼寫。
  • 溫馨提示: 第一次編譯GCC時可能會遇到環境問題,不要氣餒,失敗是正常的(我失敗了10次以上)。不過我們可以保證LFS手冊上的命令質量是非常高的。經過親身測試絕對沒有錯誤。

本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國