歡迎您光臨本站 註冊首頁

自定義Linux發行版光碟

←手機掃碼閱讀     火星人 @ 2014-03-23 , reply:0

需要自定義Linux發行版光碟的原因有很多,例如:想學習、想自己發布產品、為管理方便、更新Bug軟體包等等。而最近由於工作的需要,也研究了一下Linux發行光碟的構造。這裡主要是對沿用紅帽發行方式的版本,例如CentOS等。他們都是使用anaconda安裝環境的。下面的說明也只針對該環境,以組合紅旗兩CD光碟為1張DVD光碟為例說明。

另外,網上也有很多可以參考的資料,在附錄中有鏈接。不過,若完全按照這些資料的步驟,會在最後執行buildinstall時出現很多的rpm依賴問題。所以,我繞過了這個腳本,使用更簡單、更簡單的方式處理。

一、架構
以紅旗 5.0 SP2發行版為例,其使用的也是anaconda安裝環境。安裝光碟架構如下:

# ll
total 14
drwxr-sr-x 5 root root 2048 Jan 11 06:10 Asianux <-安裝嚮導鏡像及rpm包
drwxr-sr-x 2 root root 2048 Jan 11 06:18 Documents <-License協議及相關說明文檔
-r--r--r-- 1 root root 1319 Jan 11 06:19 TRANS.TBL <-當前目錄的列表
drwxr-sr-x 7 root root 4096 Jan 11 06:10 dosutils <-為Dos下特殊安裝準備的工具
drwxr-sr-x 4 root root 2048 Jan 11 06:19 images <-其他引導img鏡像及額外驅動
drwxr-sr-x 2 root root 2048 Jan 11 06:10 isolinux <-光碟引導程序及msg提示信息

需要留意的,其實只有Asianux目錄及isolinux目錄。其他目錄及文件在一般情況下是不需要修改的。

另外,還需要留意Asianux/base目錄的內容:
# pwd
/mnt/disk/Asianux/base
# ll stage2.img comps.xml
-rw-r--r-- 2 root root 368715 Jan 11 06:05 comps.xml <-軟體包組
-rw-r--r-- 2 root root 77488128 Jan 11 06:10 stage2.img <-stage2.img是CD介質安裝的鏡像文件

stage2.img是光碟引導的鏡像文件,如果自定義安裝過程中的說明(個性化),需要修改它。而該目錄下的其他文件則是硬碟等安裝方式的鏡像文件:

hdstg1.img、hdstg2.img:都是硬碟介質安裝的鏡像文件
netstg1.img、netstg2.img:都是FTP、NFS等介質安裝方式的鏡像文件

而comps.xml是安裝時候在「定製安裝」中可以選擇的組,如要增加「定製組」,則需要編輯該文件。

二、準備
首先,把原始介質準備好,以紅旗DC 5.0 for x86為例說明。

1、準備anaconda運行環境
如果您的系統中沒有安裝下述的軟體,請安裝上:
rpm -qa|grep anaconda
busybox-anaconda-1.00-4
anaconda-runtime-10.1.1.13-1.21AX
anaconda-10.1.1.13-1.21AX

另外,我使用的是簡化方式,不直接運行buildinstall命令,所以,其他的軟體包可以不用安裝。而如果您想重新生成stage2.img等文件,請參考附錄的信息。

2、獲取介質
假設我們已經把兩張紅旗安裝光碟做成.iso文件:
redflag-dc5.0-sp2-x86-release-disc1.iso
redflag-dc5.0-sp2-x86-release-disc2.iso

通過下面的命令,掛載CD1並釋放到/data/disk/install目錄中:
mkdir /mnt/disk
mkdir -p /data/disk/install
mount -o loop redflag-dc5.0-sp2-x86-release-disc1.iso /mnt/disk
cd /mnt/disk
tar cf - ./|tar xf - -C /data/disk/install

用同樣的方式處理CD2:
cd -
umount /mnt/disk
mount -o loop redflag-dc5.0-sp2-x86-release-disc2.iso /mnt/disk
cd /mnt/disk
tar cf - ./|tar xf - -C /data/disk/install

說明一下:為什麼使用tar?而不使用cp等命令?

原因是,在光碟的根目錄下會有寫隱含的文件,例如.discinfo,而這些文件使用cp命令是比較麻煩的,但這些文件又是很重要的文件,所以,使用tar比較安全。.discinfo是記錄光碟發行信息的文件,若丟失,在安裝的時候會提示找不到安裝介質。

3、刪除多於的文件
TRANS.TBL文件會在後面使用mkisofs的時候自動生成,這裡可以刪掉:

cd /data/disk/install/
find ./ -name 'TRANS.TBL' -exec rm {} \;

三、修改光碟內容

1、修改光碟內容
正如前面說到的,接下來您可以根據自己的情況,添加或刪除Asianux/RPMS中的rpm包。而這裡的依賴關係必須自行解決的。您可以先在正規系統中嘗試后再更新或放入該目錄中。

2、修改comps.xml文件
根據前面的架構分析,如果您添加了新rpm文件,則需要修改comps.xml的信息。其中需要增加或刪除您的rpm文件,或增加新的組和成員包等。

Asianux/bas/comps.xml

該文件使用XML架構,很容易明白,簡單的方式用手工修改即可。若修改比較複雜的,可通過編程解決。因我只是把兩CD合併,沒有增加或刪除rpm,所以,不需要修改該文件。

3、修改.discinfo
當前該文件的內容是CD2的,把第四行的「2」改為「1」,表示只從第一張光碟獲取內容。

# cat .discinfo
1168466978.826122
Asianux 2.0 SP2
i386
1 <-修改這裡
Asianux/base
Asianux/RPMS
Asianux/pixmaps

四、生成新光碟
一切準備妥當后,就可以生成新光碟了。

1、運行環境
設置好命令和庫的路徑:

export PYTHONPATH=/usr/lib/anaconda:/usr/lib/anaconda-runtime:$PYTHONPATH
export PATH="$PATH:/usr/lib/anaconda-runtime"

2、更新光碟的文件樹信息
genhdlist --productpath "Asianux" /data/disk/install/

會生成Asianux/base目錄下的新hdlist和hdlist2文件

3、生成pkgfile文件
pkgorder --product Asianux /data/disk/install/ Asianux > /data/disk/pkgorder.txt

該文件會分析rpm的運行腳本,並生成rpm list表。

4、劃分光碟
這一步通常是發行CD版本的時候必須做的。因為1張CD不夠空間存放整一套系統,所以要分開多張CD。當然,在這個例子中,是不需要的:

splittree.py --arch=i386 --total-discs=1 --bin-discs=1 \
--src-discs=0 --release-string="Asianux" --productpath=Asianux \
--pkgorderfile=/data/disk/pkgorder.txt --distdir=/data/disk/install \
--srcdir=/data/disk/install/pool/SRPMS

5、使用pkgfile再更新一次文件樹信息
genhdlist --withnumbers --fileorder /data/disk/pkgorder.txt \
--productpath "Asianux" /data/disk/install/

這樣做的目的,是為了讓hdlist和hdlist2中反應rpm對應的光碟號。在這裡不是必須的,但建議運行。而如果您運行了splittree.py腳本,則是必須的。

6、生成光碟
mkisofs -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 \
-boot-info-table -c isolinux/boot.cat -l -J \
-o /data/disk/Asianux_2.0.iso -R -T -V "Asianux 2.0" /data/disk/install/

至此,新光碟完成。

[火星人 ] 自定義Linux發行版光碟已經有551次圍觀

http://coctec.com/docs/linux/show-post-119695.html