手把手教你如何創建本身的Linux系統 第二版
做者:孫海勇
因爲篇幅比較長因此不免出現一些錯誤或者筆誤,也有可能加入新內容,所以不免會進行修正或增刪一些內容,若是本文被轉載能夠在www.linuxsir.org的LFS版中或者在本人的Blog中查看最新版本。
linuxsir:http://www.linuxsir.org/bbs/showthread.php?t=322894
個人Blog:http://youbest.cublog.cn
如須轉載請註明做者爲孫海勇(沖天飛豹),並提供轉載出處。
更新日誌(具體更新內容見文末)
2008年7月7日:增長內核支持顯示UTF-8編碼文字
2008年7月6日:修改筆誤兩處
2008年3月16日:修改筆誤一處
2008年3月8日:修改命令一處
2008年3月3日:修改命令一處
2008年2月12日:修改/etc/profile的內容
2008年2月12日:修改筆誤一處
2008年2月10日:本文發佈。
前言:
這是本文的第二版本,據初版本發佈已經將近兩年的時間,初版針對LFS-6.1.1的手冊進行講解,LFS-6.3相對於LFS-6.1.1方法 上有了一些變化,軟件包也大量更新,爲了方便新手可以快速進入狀態,決定再次撰寫此文的第二版,並針對LFS-6.3來編寫。
本文在內容和形式上徹底繼承初版本的風格,內容上根據版本進行變化,但總體沒有本質的變化,在這裏首先感謝哪些在初版中提出意見和問題的網友,使得本文變的愈來愈完善。
LFS是一部很是好的製做一個完整的操做系統的手冊,但LFS是屬於指導性的手冊,所以它默認的前提條件是具有必定的Linux使用經驗的用戶羣,所 以它在每一個軟件包的安裝部分只給出了在目錄中的所有操做指令,而對於解壓縮之類的則交給用戶本身去解決,但對於不少第一次使用LFS的用戶每每會出現一些 不清楚某條命令應該是在哪裏執行的問題,本文力圖從實例上來解釋這些問題。
本文雖然是採用VMWare Workstation 5.5的環境下製做的,但仍然符合使用真實機器上的過程,只是會在某些地方要根據具體機器進行更改,文中會在這些地方作出說明。
使用WMWare來寫這篇文章是爲了說明方便,由於VMWare在各類不一樣機器環境下模擬的虛擬設備幾乎相同,因此用它來講明一些須要實際例子才說的 清楚的地方很是合適,並且用VMWare來作即便出錯也不會對真實的系統形成破壞,很適合新手使用,惟一的缺點就是速度慢了些,通常只有真實機器的一半左 右的速度。
本文力爭完成一個完整的製做命令,能夠根據本文提供的命令順序輸入就能夠完成LFS了,一般命令表示爲
因爲製做過程比較漫長,特別是在一些比較慢的機器上,關於在製做過程當中從新啓動後恢復到工做狀態的方法在文中有詳細的介紹,但因爲篇幅比較長可能看起來比較麻煩,能夠看我專門將這部分提取出來後完成的一篇
《製做LFS過程當中各個階段恢復工做狀態的方法 第二版(適合LFS6.3)》,內容比較集中容易查看。
恢復工做的方法更加適合在真實機器上製做LFS的朋友,若是使用VMWare也能夠直接使用VMWare的暫停功能來保存現場,繼續的時候恢復現場就能夠了。
更新,因爲篇幅比較長因此不免出現一些錯誤或者筆誤,也有可能加入新內容,所以不免會進行修正或增刪一些內容,若是本文被轉載能夠在www.linuxsir.org的LFS版中或者在本人的Blog中查看最新版本。
linuxsir:http://www.linuxsir.org/bbs/showthread.php?t=322894
個人Blog:http://youbest.cublog.cn
如須轉載請註明做者爲孫海勇(沖天飛豹),並提供轉載出處。
準備工做:
下載LiveCD的ISO文件(由於在製做本文時最新正式版只有6.3-r2145下載):http://ftp.osuosl.org/pub/lfs-livecd/lfslivecd-x86-6.3-r2145.iso
刻錄ISO文件到光盤上,若是你是用真實機器固然少不了這步,不過若是你用VMWare的話,就能夠直接使用ISO文件了。
以VMWare Workstation 5.5爲例(真實機器可跳過此部分)
選擇File->New->Virtual Machine...啓動向導
選擇Custom,並選擇New-Workstation 5而後在選擇Guest operating system裏選擇Linux,在Version裏選擇Other Linux 2.6.x kernel
存放目錄、處理器數量和內存大小根據實際狀況,建議內存不得小於128M,最好256M以上
相關知識點:
LFS-6.3採用了GCC4.1.2,若是使用128M編譯GCC4.x.x話就須要使用swap了,但若是配置了256M就能夠在沒有swap的狀況下完成編譯,因此條件容許的狀況下使用256M。
Network connection裏選擇Use network address translation(NAT)
SCSI Adpters選擇默認的LSI Logic就能夠了
注意點:
這裏選擇的磁盤類型對於最後編譯內核使用選項是有影響的,我在本文的初版中使用BusLogic來創建系統,所以這裏選擇使用LSI Logic來用,若是使用BusLogic的話能夠參考本文初版中的內核編譯選項來代替後面的內核選項部分。
選擇Create a new virtual disk
在Virtual Disk Type這步比較重要,你能夠選擇IDE也能夠選擇SCSI,但這裏的選擇直接影響到最後編譯內核時的選項。這裏以選擇IDE爲例子。
相關知識點:
若是選擇了IDE,則內核的默認設置就能夠支持,但若是選擇了SCSI,就必須在內核中加入對SCSI Adpters的支持,由於前面選擇了LSI Logic,因此內核中就必須加入對LSI Logic的支持,不然將沒法啓動,相關部分在最後的內核編譯部分有說明。
不過這裏我建議選擇使用IDE,一方面方便驅動,另外彷佛LFS-6.3-r2145尚不能支持LSI Logic的SCSI磁盤,用該LiveCD啓動後可能沒法識別出硬盤來。
對於磁盤大小,使用4G足夠編譯LFS了,但若是你打算編譯更多的BLFS,這裏能夠考慮適當的增長一些大小,若是磁盤空間比較富裕就用默認的8G好了。
完成嚮導後在虛擬機的界面裏選擇Edit virtual machine settings,將CD-ROM改成Use ISO image,而後選擇LiveCD的ISO文件,若是你已經刻錄好了光盤,將光盤放入光驅就好了。
點Start this virtual machine開是虛擬機
因爲虛擬盤上沒有任何信息,所以將自動從LiveCD中啓動,在啓動過程當中會出現選擇時區等信息,你能夠按照實際狀況選擇,也能夠按照默認選擇,簡單 點就是等待一會系統會自動進行選擇。這裏我選擇時區爲Asia/Shanghai,選擇本地語言爲Chinese (Simplified, UTF-8),其它的都按默認選擇了。
啓動完成LiveCD後就開始建造本身的LFS的歷程了。
這裏先介紹如下兩個LiveCD下的重要目錄
/usr/share/LFS-BOOK-6.3-HTML目錄存放的就是LFS手冊了
/lfs-sources裏面存放的就是建造LFS所須要的源碼包,不須要處處下軟件了。
磁盤分區:
輸入命令:
將出現分區界面
這裏能夠按照你本身的須要的分區,這裏我按照設置一個根分區和一個交換分區爲例,交換分區佔用512M,其他的所有分給根分區。
磁盤分區 做用
/dev/hda1 swap
/dev/hda2 做爲目標系統根目錄
保存退出後進行磁盤分區的格式化
代碼:
mkswap /dev/hda1
mkfs.xfs /dev/hda2
相關知識點:
磁盤格式化必定要在磁盤分區未進行加載前進行。
mkswap是用於將磁盤分區格式化爲交換分區的命令。
這裏我將/dev/hda2格式化了爲Xfs格式,若是你喜歡其它格式的文件系統,你可使用相應的命令來格式化。
注意:這裏要根據實際狀況創建和設置分區,若是你不太清楚這個問題,請先不要開始,不然可能形成難以恢復的損失!(這裏只是根據VMWare裏面的狀況作的例子,在VMWare中相對安全些,建議初學者在虛擬機中開始。)
若是你的內存不太大,想在編譯期間就使用上交換分區的話,可以使用下面的命令激活交換分區
swapon /dev/hda1
相關知識點:
swapon用於激活交換分區
swapoff用於將激活的交換分區停用
能夠經過free命令來查看當前的內存使用狀況
建立LFS的「創做基地」
代碼:
export LFS=/mnt/lfs
mkdir -pv $LFS
相關知識點:
export LFS=/mnt/lfs這條命令的做用是爲了後面引用「創做基地」的絕對路徑方便而設置LFS這樣的環境變量。
加載/dev/hda2到「創做基地」
建立必要的目錄並設置屬性
建立源代碼編譯用目錄
代碼:
mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
相關知識點:
chmod a+wt是將目錄或文件的屬性設置爲1777,這樣任何人均可以對其進行讀寫。
建立工具鏈目錄
代碼:
mkdir -v $LFS/tools
ln -sv $LFS/tools /
注意:
ln -sv $LFS/tools執行後應該會輸出
`/tools' -> `/mnt/lfs/tools'
表示正確。
相關知識點:
上面這兩句就創建了神奇的工具鏈目錄(是工具鏈目錄不是工具鏈),這樣的建立方式是爲了在建立工具鏈和使用工具鏈建立目標系統的時候對於工具鏈的位置都是/tools,這樣可保證工具鏈的正常使用
建立lfs用戶
代碼:
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
設置lfs密碼,設置爲空就好了,也就是輸入密碼的時候直接回車就成。
將tools和sources目錄的用戶改成lfs,以便後面使用lfs來操做這兩個目錄
代碼:
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources
登錄到lfs用戶
這時候你會發現命令行提示符已經由#改成了$
相關知識點:
其實若是不使用lfs用root也是能完成工具鏈的,不過須要對root的環境變量進行修改,還要防止由於輸入錯誤而致使覆蓋主系統下的文件,因此LFS手冊中製做工具鏈部分就是爲了解決這種意外的發生而用lfs用戶來創建工具鏈
創建lfs用戶的環境
代碼:
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH
EOF
source ~/.bash_profile
這裏利用了bash的環境變量的設置文件將lfs的環境設置爲符合編譯工具鏈要求的最少的環境參數
這裏面最重要的就 是PATH這個參數,目的是爲了可以利用工具鏈裏面的工具製做工具鏈:首先查找/tools/bin下是否有須要的命令,若是沒有再到/bin和/usr /bin下找,而後用/bin或/usr/bin下面的命令來幫助生成須要的命令並放在/tools/bin下,這樣此消彼漲,最終可完成一個自給自足的 工具鏈。
到此爲止就能夠開始工具鏈的製做了,不過製做LFS是一個漫長而浩大的工程,因此要一直開機直到完成有時候比較困 難,特別是在機器速度比較慢的狀況下,可以從新啓動到最後工做的狀態是很重要的。在不一樣的階段從新啓動並恢復狀態的步驟不徹底相同,因此本文會在不一樣的階 段討論從新啓動恢復到工做狀態的方法和步驟。
從如今開始一直到第五章結束,也就是完成Stripping中間的步驟中若是從新啓動的恢復步驟:
1.從新啓動計算機,並從LiveCD啓動
相關知識點:在VMWare中由於磁盤已經有了信息了,因此會從磁盤啓動,須要在啓動虛擬機中的機器時按F2進入虛擬機的虛擬BIOS,而後在BOOT中設置第一啓動爲CD-ROM,保存退出便可。
2.LiveCD啓動過程同第一次啓動選擇同樣。
3.加載分區
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/hda2 $LFS
4.加載交換分區(若是不想用交換分區或者沒有交換分區可跳過此步驟)
swapon /dev/hda1
5.創建工具鏈的連接
ln -sv $LFS/tools /
6.建立lfs用戶
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources
su - lfs
7.創建lfs用戶的環境
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH
EOF
source ~/.bash_profile
8.檢查一下
export命令查看輸出,應該是
declare -x HOME="/home/lfs"
declare -x LC_ALL="POSIX"
declare -x LFS="/mnt/lfs"
declare -x OLDPWD
declare -x PATH="/tools/bin:/bin:/usr/bin"
declare -x PS1="
\\u:\\w\\\$ "
declare -x PWD="/home/lfs"
declare -x SHLVL="1"
declare -x TERM="linux"
9.進入編譯目錄
cd $LFS/sources
基本上就恢復工做狀態了。
開始工具鏈的製做
進入LFS包編譯目錄
Binutils-2.17 - Pass 1
代碼:
tar xvf /lfs-sources/binutils-2.17.tar.bz2
cd binutils-2.17
相關知識點:
你們能夠注意到後面全部的解包命令均使用tar xvf來完成,而無論文件的壓縮方式是bz2仍是gz,這是由於較新的tar程序都具備自動識別後綴名並自動調用相應的解壓縮工具的能力,因此能夠不須要 指定壓縮方式,但對於早期的tar命令則可能不具有這個功能所以須要你根據包的壓縮方式來指定,如bz2使用j,gz使用z,對應上面的binutils 則是tar xvjf /lfs-sources/binutils-2.17.tar.bz2
因LFS的LiveCD中提供的tar版本比較新,後面製做的tar版本也比較新,所以支持自動識別的能力,同時爲了使文章的解壓命令看起來比較統一方便維護(一樣對於想製做成腳本的朋友也會比較方便)所以後面統一使用tar xvf來解壓。
接着咱們須要創建一個目錄,由於binutils建議使用一個空目錄來編譯,因此
代碼:
mkdir -v ../binutils-build
cd ../binutils-build
CC="gcc -B/usr/bin/" ../binutils-2.17/configure --prefix=/tools --disable-nls --disable-werror
make
make install
make -C ld clean
make -C ld LIB_PATH=/tools/lib
cp -v ld/ld-new /tools/bin
cd ..
rm -rf binutils-build
rm -rf binutils-2.17
-------------- 博主注:今天開始搞LFS,網上如今有很好的現成的詳細指導,過程比較長,不能一會兒搞完,作到哪步就轉貼到哪步,目前到這,一切順利。