一、更新和創建發行版
第一步:籌備
Fedora Core 3 帶有用於更新和重建安裝 CD 的所有所需的工具。這要求一個充足的磁盤空間 —— 大約 22 GB。Fedora Core 3 發行於總共約有 4.5 GB 的 CD ISO 鏡像上。空間要求如下:
1. 用於發行版 ISO 鏡像的空間 (4.5 GB)。
2. 用於從 ISO 鏡像生成的擴展安裝目錄樹的空間 (4.5 GB)。這棵樹將於更新 / 重建過程中被更新。
3. 用於將會按 ISO 鏡像容量分割的安裝目錄樹的分支目錄樹的空間。(4.5 GB)
4. 用於更新了的 ISO 鏡像的空間 (4.5 GB)。
5. 在重建過程中額外的工作空間 (1 到 3 GB)。
整理結果需要約 2 GB 空間。如果你重建可選擇的拯救 CD,你將需要額外的 1 到 2 GB 空間。
雖然更新和重建 CD 安裝盤可以在某些其他的系統上完成,但我們假定這是在一套 Fedora Core 3 系統上進行的。你將需要安裝以下軟件包:
anaconda-10.1.0.2-1
anaconda-help-10.1.0-1
anaconda-runtime-10.1.0.2-1
busybox-anaconda-1.00.rc1-5
然後你需要構建安裝目錄樹。以下所有操作需要以“root”身份執行。假定發行版 ISO 鏡像放在別的磁盤分區,這個分區需要擁有至少 10 GB 可用的空間(也或者是 15 GB,如果新的 ISO 鏡像將放在那裡的話)。在那個分區的一個子目錄內執行如下操作:
export PYTHONPATH=/usr/lib/anaconda
export PATH="$PATH:/usr/lib/anaconda-runtime"
export FCBASE=`pwd`
mkdir -p $FCBASE/fc3/i386
這是一些設置。現在執行下面的操作:
mount -o ro,loop FC3-i386-disc1.iso /mnt
cp -a /mnt/* $FCBASE/fc3/i386/
umount /mnt/
然後對另外三個 ISO i386的二進制鏡像及四個 SRPMS ISO 鏡像重復如上的操作。
注意:如果你有 DVD ISO 鏡像則你可以使用它來替代那四個二進制的 ISO 鏡像。然而,你將仍然需要復制四個 SRPMS ISO 的 CD 鏡像中的內容。
注意:如果你已經有一個正被用於 NFS 等安裝的擴展目錄樹,則只要簡單地復制它就行了。
你現在已經創建了安裝目錄樹。
第二步:更新
一般地,更新一個發行版在於把 RPM 和 源代碼 RPM 替換為更新了的版本。你需要確定你刪除了舊的(被替換的)版本。因為舊的和新版本軟件包的文件名會有不同,這可能是一個冗長的手工過程。我確信有人已經創建了一個將會除去較舊版本並只留下新版本軟件包的腳本。
警告:少部分的軟件包存在多架構版本,你需要小心不要刪除了額外的的架構版本。i386 發行版明確如下:
1. glibc,nptl 和 openssl 軟件包用 i386 和 i686 版本的軟件包。
2. 內核和對稱多處理器(smp)內核有 i586 和 i686 版本的軟件包(但沒有 i386 版本)。
Fedora Core 3 的 64位 x86 發行版包含很多有 64位 x86 和 i386 (某些或者是 i686)版本的軟件包,因此 32位和 64位的軟件都可以被支持。
如果你需要一個特別的內核用於支持你正在進行的工作,你可以使用源代碼 RPM 重建一個定制的內核軟件包,然後在更新的發行版中使用這些重建的軟件包。你如何重建這個內核軟件包的方法不在本文檔范圍之內。
你也可以通過復制軟件包到 $FCBASE/fc3/i386/Fedora/RPMS 目錄和 $FCBASE/fc3/i386/SRPMS 目錄(用於源代碼 RPM)以添加軟件包。
編輯 comps 文件,請參閱《Editing the Comps File》。
第三步:清理
原始的構建會在創建 ISO 鏡像的時候留下一些額外的文件。這些文件可以用下面的命令清除:
find $FCBASE/fc3 -name TRANS.TBL -exec rm -f {} \;
find $FCBASE/fc3 -name boot.cat -exec rm -f {} \;
第四步:構建
OK,你現在有一個更新版本的安裝目錄樹,你需要執行如下命令:
1、 通過如下命令更新 hdlist 文件:
genhdlist --productpath=Fedora $FCBASE/fc3/i386
2、接著,創建軟件包順序文件:
pkgorder $FCBASE/fc3/i386 i386 Fedora | tee \
$FCBASE/fc3/pkgfile
3、然後,更新安裝文件:
buildinstall --pkgorder $FCBASE/fc3/pkgfile \
--version 3 --product "Fedora Core" \
--release "Fedora Core 3" \
--prodpath Fedora \
$FCBASE/fc3/i386
第五步:分離安裝目錄樹
若是創建 CD ISO 鏡像,你將需要把二進制 RPM 和源代碼 RPM 分離到八張 CD 目錄樹中:
rm -fr $FCBASE/fc3/i386-disc[1-9]
splittree.py --arch=i386 \
--total-discs=8 --bin-discs=4 --src-discs=4 \
--release-string="Fedora Core 3" \
--pkgorderfile=$FCBASE/fc3/pkgfile \
--distdir=$FCBASE/fc3/i386 \
--srcdir=$FCBASE/fc3/i386/SRPMS \
--productpath=Fedora
rm -f $FCBASE/fc3/i386-disc1/Fedora/base/hdlist
genhdlist --productpath=Fedora --withnumbers \
--fileorder $FCBASE/fc3/pkgfile \
$FCBASE/fc3/i386-disc[1234]
分支目錄樹被創建於 $FCBASE/fc3,並被命名為 i386-disc[1-8]。
注意:參數“--distdir=$FCBASE/fc3/i386”刻意不以“/”結尾。如果它以“/”結尾,則分支目錄樹將被命名為 -disc[12345678] 並且作為子目錄被置於 $FCBASE/fc3/i386/ 中而不是置於 $FCBASE/fc3 子目錄中的 i386-disc[1-8]。
splittree.py 程序當前不支持把安裝目錄樹分離到 DVD 容量的目錄樹中。然而,這可以被手工完成。這個選擇將修改你剛剛創建的或即將創建的兩個新的 DVD 容量的目錄樹。為了打到這個目的,兩個目錄樹將被創建如下:
mkdir -p $FCBASE/fc3/i386-dvd1
mkdir -p $FCBASE/fc3/i386-dvd2
cp -a $FCBASE/fc3/i386/* $FCBASE/fc3/i386-dvd1/
cp -p $FCBASE/fc3/i386/.discinfo $FCBASE/fc3/i386-dvd1/
cp -p $FCBASE/fc3/i386/* $FCBASE/fc3/i386-dvd2/
mv $FCBASE/i386-dvd1/SRPMS $FCBASE/fc3/i386-dvd2/
創建 DVD 鏡像的另一個途徑(感謝 Andrew Mann)在 anaconda-devel-list 信息中簡單地說明了。這說明改變需要 用 splittree.py 操作 DVD 鏡像:
cp /usr/lib/anaconda-runtime/splittree.py \
./splittree-dvd.py
然後在第 79 行附近,把
self.target_size = 640.0 * 1024.0 * 1024
修改為
self.target_size = 4.4 * 1024.0 * 1024.0 * 1024
你也可以把所有“-disc”改為“-dvd”,以至於 CD 和 DVD 分支樹都可以共存。
rm -fr $FCBASE/fc3/i386-dvd[1-9]
./splittree.py --arch=i386 \
--total-dvds=2 --bin-dvds=1 --src-dvds=1 \
--release-string="Fedora Core 3" \
--pkgorderfile=$FCBASE/fc3/pkgfile \
--distdir=$FCBASE/fc3/i386 \
--srcdir=$FCBASE/fc3/i386/SRPMS \
--productpath=Fedora
現在進行第六步,但僅僅創建第一個(可引導的)鏡像以及單個的 SRPMS 鏡像。
第六步:創建 CD 或 DVD ISO 鏡像
1、 第一個安裝鏡像不同於其他的鏡像,因為它是可引導的。以下命令將創建這個 ISO 鏡像。
cd $FCBASE/fc3
mkisofs -R -J -T -v \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-V "Fedora Core 3 (update or whatever)" \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-x "lost+found" \
-o FC3-i386-disc1.iso\
i386-disc1
或者,如果你創建一個 DVD 鏡像,則使用如下命令:
mkisofs -R -J -T -v \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-V "Fedora Core 3 (updated or whatever)" \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-x "lost+found" \
-o FC3-i386-dvd1.iso \
i386-dvd1
2、繼續創建其他二進制 CD 的 ISO 鏡像(如果正在制作 DVD 鏡像則跳過):
mkisofs -R -J -T -v \
-V "Fedora Core 3 (updated or whatever)" \
-x "lost+found" \
-o FC3-i386-disc2.iso \
i386-disc2
重復用於三號和四號光盤。
3、 然後如 disc[2-4] 般制作 SRPMS 光盤鏡像:
mkisofs -R -J -R -v \
-V "Fedora Core 3 (updated or whatever)" \
-x "lost+found" \
-o FC3-i386-SRPMS-disc1.iso \
i386-disc5
重復制作 disc2.iso 的步驟用於 disc6,重復制作 disc3.iso 的步驟用於 disc7,重復制作 disc4.iso 的步驟用於 disc8。
如果你正在創建一個 DVD SRPMS 鏡像,則操作如下:
mkisofs -R -J -R -v \
-V "Fedora Core 3 (updated or whatever)" \
-x "lost+found" \
-o FC3-i386-SRPMS-dvd1.iso \
i386-dvd2
cd $FCBASE
如此便完成了 ISO 鏡像的制作。
二、更新和創建拯救 CD
以下過程假定你已經擁有目錄樹等條件,如上文所述。
第一步:拯救 CD 的目錄樹
運行命令:
rm -fr $FCBASE/fc3/i386-rescueimage
mk-rescuecd.i386 $FCBASE/fc3/i386 \
$FCBASE/fc3 \
"FC 3" \
Fedora
如果你只是想要一個帶有更新了的軟件包(例如一個更新了的內核)的拯救 CD,則跳過第四步。
第二步:增加 RAMDISK 的容量
如果你意欲增加引導時內存虛擬磁盤(RAMDISK)的容量,則執行如下操作:
1、編輯 $FCBASE/rescue/i386-rescue/isolinux/isolinux.cfg 文件,把 ramdisk_size 的值從標准設置的 8192 改為某個更大的值,例如 16386。
2、 執行:
gunzip < $FCBASE/fc3/i386-rescueimage/isolinux/initrd.img \
> /tmp/initrd.old
mount -o ro,loop /tmp/initrd.old /mnt/xx
3、然後創建更新了的鏡像:
dd if=/dev/zero of=/tmp/initrd.new bs=1k count=12288
mke2fs -F -i 4086 /tmp/initrd.new
mount -o loop /tmp/initrd.new /mnt/zz
cp -va /mnt/xx/* /mnt/zz
cp -vp /mnt/xx/.buildstamp /mnt/zz
umount /mnt/xx
umount /mnt/zz
4. 現在壓縮打包並替換原始的 initrd.img:
gzip -9 > $FCBASE/fc3/i386-rescueimage/isolinux/initrd.img
第三步:添加軟件
執行如下操作:
mount -o ro,loop \
$FCBASE/fc3/i386-rescueimage/Fedora/base/stage2.img \
/mnt/xx
mkdir $FCBASE/stage2
cp -va /mnt/xx/* $FCBASE/stage2
cp -vp /mnt/xx/.buildstamp $FCBASE/stage2
現在用你的素材更新 stage2 目錄,例如把程序放進 $FCBASE/stage2/usr/bin 。這裡要小心,你的軟件並不需要附加的庫(靜態鏈接程序使用這個方法)。一旦你把所有東西更新好了,則執行:
mkcramfs $FCBASE/stage2/ /tmp/stage2.new
cp -vp /tmp/stage2.new \
$FCBASE/fc3/i386-rescueimage/Fedora/base/stage2
第四步:創建 CD
和可引導的安裝 CD 相似,執行如下操作:
cd $FCBASE/fc3
mkisofs -R -J -T -v \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-V "Fedora Core 3 Rescue CD (or whatever)" \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-x "lost+found" \
-o FC3-i386-rescuecd.iso \
i386-rescue
cd $FCBASE