Ubuntu Linux:定製Ubuntu安裝CD(轉)
Ubuntu Linux:定製Ubuntu安裝CD(轉)[@more@]定製Ubuntu CD的過程並不複雜,但是她有一些繁瑣和過分的講究。我對這過程的所知並不完美,因此,希望有人可以作適當修改。
安裝CD有三個主要部分:
啟動引導器:(如ISOLINUX用於amd64/i386,yaboot用於powerpc)開機時核心映象的選擇與配置;
Debian安裝程式(d-i):其實就是一個特殊的微Ubuntu系統;
Debian軟體庫:放在"pool"和"dists"目錄,它將佔據光碟的大部分空間。
建立這個新的CD就包涵了這三部分的修改。
用"Presseed"檔案修改安裝行為
當CD啟動時,Linux核心就被裝載且開始安裝任務。安裝程式的行為可以用一個"preseed"檔案來修改,這些檔案給Debian安裝程式(d-i)回答如何配置軟體包或其它相關的問題。如果您仔細看你的安裝CD,您會找到這些選項(例如server,expert,oem)都有對應的preseed檔案。
所以,假設您想在一群的相同配置電腦上安裝breezy,並且您已經知道安裝時必問問題的答案(您所在的國家和時區,您你的鍵盤佈局,您的網路設定,您需要如何分割槽等等)。您可以透過"preseed"在一簡單的配置檔案裡回答這些問題.
改變isolinux.cfg確定您的preseed
首先,您必須告訴"d-i"找到您的preseed檔案的正確位置。在標準的光碟上有個/preseed目錄;您可以把您的這些檔案放這裡。您要修改啟動引導器的配置檔案/isolinux/isolinux.cfg中的相關核心引數,來告訴"d-i"找到這個檔案。我的檔案裡有下列行:
DEFAULT /install/vmlinuz
APPEND preseed/file=/cdrom/preseed/learnexchange.seed kbd-chooser/method=us debian-installer/locale=en_CA vga=normal initrd=/install/initrd.gz ramdisk_size=16384 root=/dev/rd/0 DEBCONF_PRIORITY=critical debconf/priority=critical rw --
"DEFAULT"是指我在boot提示符下直接按Enter鍵裝載的核心。APPEND 包涵了要傳給核心的引數。preseed/file 是這兒最重要的引數;接著的那兩個指出我的鍵盤佈局用及本地為加拿大;DEBCONF_PRIORITY 用來確定我不想看到不必要的配置軟體包提問。
根據你的情況小心修改這檔案.
寫preseed檔案
這裡有很多例項;看看這個在安裝盤裡的--server.seed:
# Don't install usplash.
d-i base-installer/kernel/linux/extra-packages-2.6 string
# Desktop system not installed; don't waste time and disk space copying it.
d-i archive-copier/desktop-task string ubuntu-standard
d-i archive-copier/ship-task string
# Only install the standard system and language packs in the second stage.
base-config base-config/package-selection string ~t^ubuntu-standard$
base-config base-config/language-pack-patterns string language-pack-$LL
# No language support packages.
base-config base-config/install-language-support boolean false
(Note that the version of this file on breezy CD images was buggy: it set base-config/package-selection to "~tubuntu-standard" rather than "~t^ubuntu-standard$". Use the new version in preference; the old one will break with Ubuntu 6.04.)
首先注意格式,有 4 個部分:
取得變數的程式名稱
答案的變數名
變數型別
變數值
兩個要注意的地方:現在,d-i 期望有精確的型別和值;在breezy這個版本不支援用 來處理多行(新的版本支援)。
我建議您從一些現有的 preseed 來修改--這兒有一個可以用的 點選。 如果您沒能在這兒找到,那就試著執行這些命令:
debconf-get-selections --installer > somefile.txt
debconf-get-selections >> somefile.txt
這會輸出一個您在安裝時候作出的選擇的列表;這檔案相當地長,並且實際上不那麼適合用在安裝盤裡。特別是,NOTE: debconf-get-selections 會在型別和只之間放 2 個空格。您得在把她放在安裝盤上以前修改他們。
如果您想讓 d-i 安裝額外的軟體包,或者一個最小的系統,您需要在preseed裡修改 "base-config base-config/package-selection"。This should be set to an aptitude pattern; see the aptitude documentation for more information on these. 例如,標準安裝一個SSH服務,用這一行:
base-config base-config/package-selection string ~t^ubuntu-standard$|~t^ubuntu-desktop$|~n^openssh-server$
To install support for additional languages, a different mechanism is available, namely to preseed the detailed locale question asked by the installer in expert mode. See the first column of /usr/share/i18n/SUPPORTED for the locale names you can use here. 例如, 增加孟加拉語和泰米爾語的支援,用這一行:
d-i localechooser/supported-locales multiselect ba_IN, ta_IN
修改pool目錄,增加或刪除軟體包
也許制定您自己的安裝CD的主要原因是想改變所安裝軟體包;特別是您想增加一些包到CD裡。這有好幾個方法來做到,不需要完全地理解。最容易的事情是建立一個最小的倉庫放您想要增加的包,再在製作光碟映象檔案之前合併到光碟檔案體系裡。這兒棘手的地方是:製作讓Debian軟體包管理系統知道這個倉庫的相關檔案;寫一個更高版本的Release檔案;並簽上 GPG 。下面是我所做的。
. 選定一個檔案目錄作為您的工作空間;在這個目錄裡,
mkdir -p dists/breezy/extras/binary-i386 pool/extras/ isolinux preseed
把您修改過的isolinux.cfg放在目錄isolinux/,把您的preseed檔案放在目錄preseed裡。 Put your modified isolinux.cfg in isolinux/, and your preseed file in preseed/.
. 把您需要的所有額外的包放在目錄 pool/extras/ 裡。您還需要包括一個新版本的 ubuntu-keyring 包,我將馬上解釋一下
. 建立並編輯檔案dists/breezy/extras/binary-i386/Release,寫入下面的內容:
Archive: breezy
Version: 5.10
Component: extras
Origin: Ubuntu
Label: Ubuntu
Architecture: i386
. 把您做的修改這樣合併到CD裡:
掛載您下載的官方ISO檔案:mount /path/to/iso /some/mountpoint/ -o loop
b. 把光碟裡的全部檔案複製到某個目錄(您會需要1到2G的空間);我用rsync:sudo rsync -azvb --delete --backup-dir=/yeowe/usr/cdbuilder/old/ $MOUNT $BUILD ( 這兒的 $MOUNT 是掛載點,$BUILD 是額外的包的目錄)
c. 最重要的地方. 我們將用apt-ftparchive工具來產生軟體包相關和更高版本的Release檔案。我們還要用GPG來籤這個Release檔案。安裝程式會用包ubuntu-keyring 的公匙來檢測簽名。但是您的簽名不一樣。所以您得建立一個新版本的 ubuntu-keyring 包。這做起來很容易,但是要確保正確無誤。下面是執行的命令:
apt-get source ubuntu-keyring
cd ubuntu-keyring--2005.01.11/keyring
gpg --import < ubuntu-archive-keyring.gpg
gpg --list-keys "Your Name"
gpg --export FBB75451 437D05B5 YOURKEYID > ubuntu-archive-keyring.gpg
cd ..
dpkg-buildpackage -rfakeroot -m"Your Name -k"Your Name "
cp ubuntu-keyring*deb $BUILD/pool/extras/
OK -- what we've done here is import the 2 Ubuntu keys into your main keyring, then exported them along with your own key into a replacement keyring. "YOURKEYID" should be replaced with the 8-digit hexadecimal code that gpg tells you when you do the --list-keys command above. And really, the best policy would be to do all that first, and copy a version into your $STAGE file structure so that you have it permanently available.
Note: If you do not have an existing gpg signing key, use the following code:
gpg --gen-key
Accept all defaults, select "No expiry", and enter an appropriate passphrase.
In order to use apt-ftparchive, we will need to provide it with some defaults. Create the files "apt-ftparchive-deb.conf, "apt-ftparchive-udeb.conf", and "apt-ftparchive-extras.conf" as follows (substitude $BUILD for the absolute path to your BUILD directory, and /path/to/indices to the location of the indices files, which you can download from ):
apt-ftparchive-deb.conf:
Dir {
ArchiveDir "$BUILD";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/breezy/main/binary-i386/Packages";
BinOverride "/path/to/indices/override.breezy.main";
ExtraOverride "path/to/indices/override.breezy.extra.main";
};
Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
apt-ftparchive-udeb.conf:
Dir {
ArchiveDir "$BUILD";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/breezy/main/debian-installer/binary-i386/Packages";
BinOverride "/path/to/indices/override.breezy.main.debian-installer";
};
Default {
Packages {
Extensions ".udeb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
apt-ftparchive-extras.conf:
Dir {
ArchiveDir "$BUILD";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/extras" {
Packages "dists/breezy/extras/binary-i386/Packages";
};
Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
. 現在就用apt-ftparchive來建立Packages和Release檔案:
cd $BUILD
sudo apt-ftparchive -c $APTCONF generate /path/to/apt-ftparchive-deb.conf
sudo apt-ftparchive -c $APTCONF generate /path/to/apt-ftparchive-udeb.conf
sudo apt-ftparchive -c $APTCONF generate /path/to/apt-ftparchive-extras.conf
$APTCONF is a file somewhere that looks about like this:
APT::FTPArchive::Release::Origin "Ubuntu";
APT::FTPArchive::Release::Label "Ubuntu";
APT::FTPArchive::Release::Suite "breezy";
APT::FTPArchive::Release::Version "5.10";
APT::FTPArchive::Release::Codename "breezy";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Components "main restricted extras";
APT::FTPArchive::Release::Description "Ubuntu Breezy";
給Release檔案籤gpg:
sudo gpg --default-key "MY GPG KEY ID" --output $BUILD/dists/breezy/Release.gpg -ba $BUILD/dists/breezy/Release
*. Regenerate the md5 checksums:
cd $BUILD
find . -type f -print0 | xargs -0 md5sum > md5sum.txt
. 現在可以來生成光碟映象檔案:
sudo mkisofs -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -hide-rr-moved -o $IMAGE -R $BUILD/
‘$IMAGE’表示您的光碟映象檔案.
. 最後,可以用cdrecord或其它燒錄工具來燒錄您的CD了:
sudo nice -18 cdrecord dev=ATA:1,1,0 speed=12 --blank=fast -v -gracetime=2 -tao $IMAGE
that will burn the image on the second cd drive; if your cd-burner is the first or only cd-drive, change dev argument to ATA:1,0,0. I strongly recommend using rewritable media -- I've burned a LOT of coasters on this project.
好了,搞定! 如果誰感興趣,我寫了一個小指令碼(很簡單)來自動完成這個步驟。我想我正好可以放在這兒
#!/bin/bash
# usage
# update-learningexchange.sh kubuntu|ubuntu|xubuntu
# a very primitive script with no structure of controls etc
# no default behaviour, etc etc
# all ofthis should be trivial to implement but my
# bash syntax sucks
# obvious thing to do would be to convert to python
# & add a simple gtk front end too
# but I'm rushed at the moment
# Notes;Bugs:
# REMEMBER: this absolutely will not work if you haven't built a new version of ubuntu-keyring
# package & included that in $STAGE/pool/extras/! You do that thusly:
# apt-get source ubuntu-keyring
# cd ubuntu-keyring-version-info/keyring
# gpg --import < ubuntu-server-keyring.gpg
# gpg --output=ubuntu-server-keyring.gpg --export "ubuntu" "Your Name"
# dpkg-buildpackage -rfakeroot -m"My Name "
# cp ../ubuntu-keyring*deb $BUILD/pool/extras/
# VARIABLES
# this script relies on the existence of several files and directories:
# Original = $ORIG: location of the "clean", unmodified CD .iso
# CD mount point = $MOUNT: mount point of clean CD
# Staging area = $STAGE: where you keep all your files
# this area should include main dirs isolinux/, pool/, and dists/ at a minimum
# as written the script assumes you have a directory pool/extras with your
# extra debs, and that dists/breezy/extras/binary-i386/Release exists (copy it over
# from dists/breezy/main/binary-i386, and replace "main" with "extras")
# There is no doubt a better way to do this but it involves work...
# Building Area = $BUILD: location where your changes are merged into the "clean" directory
# structure.
# Image location = $IMAGE: name of the new .iso file you want to build
# apt.conf file = $APTCONF: location of the file used to feed instructions to apt-ftparchive
ORIG="/var/www/jigdo/$1-breezy-install-i386.iso"
STAGE="/home/matt/LearningExchangeCD/$1/"
MOUNT=/mnt/iso/
BUILD="/yeowe/usr/cdbuilder/$1"
IMAGE="/yeowe/usr/cdbuilder/$1-learningexchange.iso"
APTCONF=/home/matt/LearningExchangeCD/apt.conf
# sync with latest image
sudo umount $MOUNT
sudo mount $ORIG $MOUNT -o loop
# sudo rsync -azvb --delete --exclude="language-pack*" --backup-dir=/yeowe/usr/cdbuilder/old/ $MOUNT $BUILD
sudo rsync -azvb --delete $MOUNT $BUILD
# now get rid of the old ubuntu-keyring package
sudo rm -r $BUILD/pool/u/ubuntu-keyring/
# note I've excluded a few files, shouldn't matter much for you I reckon
sudo rsync -avzb --exclude='*~' --exclude='INSTRUCTIONS.txt' --backup-dir=/yeowe/usr/cdbuilder/old/ --exclude='example-preseed.txt' $STAGE $BUILD
# generate Packages, Release, Release.gpg
# first thing to realize is, that we only need to generate the Packages files,
# the top-level Release file, and top-level Release.gpg.
# everything else should be in your $STAGE file structure or usable unchanged
# in the original form
# remove Release file otherwise you'll have trouble writing to it.
sudo rm $BUILD/dists/breezy/Release*
# ubuntu-keyring must be included in main/, so main NEEDS to be rebuilt!
for component in main extras; do
sudo apt-ftparchive packages "$BUILD/pool/$component/" > "$BUILD/dists/breezy/$component/binary-i386/Packages"
gzip -c "$BUILD/dists/breezy/$component/binary-i386/Packages" |
sudo tee "$BUILD/dists/breezy/$component/binary-i386/Packages.gz" > /dev/null
done
sudo apt-ftparchive -c $APTCONF release $BUILD/dists/breezy > $BUILD/dists/breezy/Release
# gpg options: -ba = armored, detached-sig
sudo gpg --output $BUILD/dists/breezy/Release.gpg -ba $BUILD/dists/breezy/Release
# build the actual image. Note the options to mkisofs, which make the image bootable
sudo chown -R root:root $BUILD/isolinux $BUILD/preseed
sudo mkisofs -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -hide-rr-moved -o $IMAGE -R $BUILD/
# burn the image to 2nd cd drive on most setups
sudo nice -18 cdrecord dev=ATA:1,1,0 speed=12 --blank=fast -v -gracetime=2 -tao $IMAGE
CategoryDocumentation CategoryCleanup
安裝CD有三個主要部分:
啟動引導器:(如ISOLINUX用於amd64/i386,yaboot用於powerpc)開機時核心映象的選擇與配置;
Debian安裝程式(d-i):其實就是一個特殊的微Ubuntu系統;
Debian軟體庫:放在"pool"和"dists"目錄,它將佔據光碟的大部分空間。
建立這個新的CD就包涵了這三部分的修改。
用"Presseed"檔案修改安裝行為
當CD啟動時,Linux核心就被裝載且開始安裝任務。安裝程式的行為可以用一個"preseed"檔案來修改,這些檔案給Debian安裝程式(d-i)回答如何配置軟體包或其它相關的問題。如果您仔細看你的安裝CD,您會找到這些選項(例如server,expert,oem)都有對應的preseed檔案。
所以,假設您想在一群的相同配置電腦上安裝breezy,並且您已經知道安裝時必問問題的答案(您所在的國家和時區,您你的鍵盤佈局,您的網路設定,您需要如何分割槽等等)。您可以透過"preseed"在一簡單的配置檔案裡回答這些問題.
改變isolinux.cfg確定您的preseed
首先,您必須告訴"d-i"找到您的preseed檔案的正確位置。在標準的光碟上有個/preseed目錄;您可以把您的這些檔案放這裡。您要修改啟動引導器的配置檔案/isolinux/isolinux.cfg中的相關核心引數,來告訴"d-i"找到這個檔案。我的檔案裡有下列行:
DEFAULT /install/vmlinuz
APPEND preseed/file=/cdrom/preseed/learnexchange.seed kbd-chooser/method=us debian-installer/locale=en_CA vga=normal initrd=/install/initrd.gz ramdisk_size=16384 root=/dev/rd/0 DEBCONF_PRIORITY=critical debconf/priority=critical rw --
"DEFAULT"是指我在boot提示符下直接按Enter鍵裝載的核心。APPEND 包涵了要傳給核心的引數。preseed/file 是這兒最重要的引數;接著的那兩個指出我的鍵盤佈局用及本地為加拿大;DEBCONF_PRIORITY 用來確定我不想看到不必要的配置軟體包提問。
根據你的情況小心修改這檔案.
寫preseed檔案
這裡有很多例項;看看這個在安裝盤裡的--server.seed:
# Don't install usplash.
d-i base-installer/kernel/linux/extra-packages-2.6 string
# Desktop system not installed; don't waste time and disk space copying it.
d-i archive-copier/desktop-task string ubuntu-standard
d-i archive-copier/ship-task string
# Only install the standard system and language packs in the second stage.
base-config base-config/package-selection string ~t^ubuntu-standard$
base-config base-config/language-pack-patterns string language-pack-$LL
# No language support packages.
base-config base-config/install-language-support boolean false
(Note that the version of this file on breezy CD images was buggy: it set base-config/package-selection to "~tubuntu-standard" rather than "~t^ubuntu-standard$". Use the new version in preference; the old one will break with Ubuntu 6.04.)
首先注意格式,有 4 個部分:
取得變數的程式名稱
答案的變數名
變數型別
變數值
兩個要注意的地方:現在,d-i 期望有精確的型別和值;在breezy這個版本不支援用 來處理多行(新的版本支援)。
我建議您從一些現有的 preseed 來修改--這兒有一個可以用的 點選。 如果您沒能在這兒找到,那就試著執行這些命令:
debconf-get-selections --installer > somefile.txt
debconf-get-selections >> somefile.txt
這會輸出一個您在安裝時候作出的選擇的列表;這檔案相當地長,並且實際上不那麼適合用在安裝盤裡。特別是,NOTE: debconf-get-selections 會在型別和只之間放 2 個空格。您得在把她放在安裝盤上以前修改他們。
如果您想讓 d-i 安裝額外的軟體包,或者一個最小的系統,您需要在preseed裡修改 "base-config base-config/package-selection"。This should be set to an aptitude pattern; see the aptitude documentation for more information on these. 例如,標準安裝一個SSH服務,用這一行:
base-config base-config/package-selection string ~t^ubuntu-standard$|~t^ubuntu-desktop$|~n^openssh-server$
To install support for additional languages, a different mechanism is available, namely to preseed the detailed locale question asked by the installer in expert mode. See the first column of /usr/share/i18n/SUPPORTED for the locale names you can use here. 例如, 增加孟加拉語和泰米爾語的支援,用這一行:
d-i localechooser/supported-locales multiselect ba_IN, ta_IN
修改pool目錄,增加或刪除軟體包
也許制定您自己的安裝CD的主要原因是想改變所安裝軟體包;特別是您想增加一些包到CD裡。這有好幾個方法來做到,不需要完全地理解。最容易的事情是建立一個最小的倉庫放您想要增加的包,再在製作光碟映象檔案之前合併到光碟檔案體系裡。這兒棘手的地方是:製作讓Debian軟體包管理系統知道這個倉庫的相關檔案;寫一個更高版本的Release檔案;並簽上 GPG 。下面是我所做的。
. 選定一個檔案目錄作為您的工作空間;在這個目錄裡,
mkdir -p dists/breezy/extras/binary-i386 pool/extras/ isolinux preseed
把您修改過的isolinux.cfg放在目錄isolinux/,把您的preseed檔案放在目錄preseed裡。 Put your modified isolinux.cfg in isolinux/, and your preseed file in preseed/.
. 把您需要的所有額外的包放在目錄 pool/extras/ 裡。您還需要包括一個新版本的 ubuntu-keyring 包,我將馬上解釋一下
. 建立並編輯檔案dists/breezy/extras/binary-i386/Release,寫入下面的內容:
Archive: breezy
Version: 5.10
Component: extras
Origin: Ubuntu
Label: Ubuntu
Architecture: i386
. 把您做的修改這樣合併到CD裡:
掛載您下載的官方ISO檔案:mount /path/to/iso /some/mountpoint/ -o loop
b. 把光碟裡的全部檔案複製到某個目錄(您會需要1到2G的空間);我用rsync:sudo rsync -azvb --delete --backup-dir=/yeowe/usr/cdbuilder/old/ $MOUNT $BUILD ( 這兒的 $MOUNT 是掛載點,$BUILD 是額外的包的目錄)
c. 最重要的地方. 我們將用apt-ftparchive工具來產生軟體包相關和更高版本的Release檔案。我們還要用GPG來籤這個Release檔案。安裝程式會用包ubuntu-keyring 的公匙來檢測簽名。但是您的簽名不一樣。所以您得建立一個新版本的 ubuntu-keyring 包。這做起來很容易,但是要確保正確無誤。下面是執行的命令:
apt-get source ubuntu-keyring
cd ubuntu-keyring--2005.01.11/keyring
gpg --import < ubuntu-archive-keyring.gpg
gpg --list-keys "Your Name"
gpg --export FBB75451 437D05B5 YOURKEYID > ubuntu-archive-keyring.gpg
cd ..
dpkg-buildpackage -rfakeroot -m"Your Name -k"Your Name "
cp ubuntu-keyring*deb $BUILD/pool/extras/
OK -- what we've done here is import the 2 Ubuntu keys into your main keyring, then exported them along with your own key into a replacement keyring. "YOURKEYID" should be replaced with the 8-digit hexadecimal code that gpg tells you when you do the --list-keys command above. And really, the best policy would be to do all that first, and copy a version into your $STAGE file structure so that you have it permanently available.
Note: If you do not have an existing gpg signing key, use the following code:
gpg --gen-key
Accept all defaults, select "No expiry", and enter an appropriate passphrase.
In order to use apt-ftparchive, we will need to provide it with some defaults. Create the files "apt-ftparchive-deb.conf, "apt-ftparchive-udeb.conf", and "apt-ftparchive-extras.conf" as follows (substitude $BUILD for the absolute path to your BUILD directory, and /path/to/indices to the location of the indices files, which you can download from ):
apt-ftparchive-deb.conf:
Dir {
ArchiveDir "$BUILD";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/breezy/main/binary-i386/Packages";
BinOverride "/path/to/indices/override.breezy.main";
ExtraOverride "path/to/indices/override.breezy.extra.main";
};
Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
apt-ftparchive-udeb.conf:
Dir {
ArchiveDir "$BUILD";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/main" {
Packages "dists/breezy/main/debian-installer/binary-i386/Packages";
BinOverride "/path/to/indices/override.breezy.main.debian-installer";
};
Default {
Packages {
Extensions ".udeb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
apt-ftparchive-extras.conf:
Dir {
ArchiveDir "$BUILD";
};
TreeDefault {
Directory "pool/";
};
BinDirectory "pool/extras" {
Packages "dists/breezy/extras/binary-i386/Packages";
};
Default {
Packages {
Extensions ".deb";
Compress ". gzip";
};
};
Contents {
Compress "gzip";
};
. 現在就用apt-ftparchive來建立Packages和Release檔案:
cd $BUILD
sudo apt-ftparchive -c $APTCONF generate /path/to/apt-ftparchive-deb.conf
sudo apt-ftparchive -c $APTCONF generate /path/to/apt-ftparchive-udeb.conf
sudo apt-ftparchive -c $APTCONF generate /path/to/apt-ftparchive-extras.conf
$APTCONF is a file somewhere that looks about like this:
APT::FTPArchive::Release::Origin "Ubuntu";
APT::FTPArchive::Release::Label "Ubuntu";
APT::FTPArchive::Release::Suite "breezy";
APT::FTPArchive::Release::Version "5.10";
APT::FTPArchive::Release::Codename "breezy";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Components "main restricted extras";
APT::FTPArchive::Release::Description "Ubuntu Breezy";
給Release檔案籤gpg:
sudo gpg --default-key "MY GPG KEY ID" --output $BUILD/dists/breezy/Release.gpg -ba $BUILD/dists/breezy/Release
*. Regenerate the md5 checksums:
cd $BUILD
find . -type f -print0 | xargs -0 md5sum > md5sum.txt
. 現在可以來生成光碟映象檔案:
sudo mkisofs -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -hide-rr-moved -o $IMAGE -R $BUILD/
‘$IMAGE’表示您的光碟映象檔案.
. 最後,可以用cdrecord或其它燒錄工具來燒錄您的CD了:
sudo nice -18 cdrecord dev=ATA:1,1,0 speed=12 --blank=fast -v -gracetime=2 -tao $IMAGE
that will burn the image on the second cd drive; if your cd-burner is the first or only cd-drive, change dev argument to ATA:1,0,0. I strongly recommend using rewritable media -- I've burned a LOT of coasters on this project.
好了,搞定! 如果誰感興趣,我寫了一個小指令碼(很簡單)來自動完成這個步驟。我想我正好可以放在這兒
#!/bin/bash
# usage
# update-learningexchange.sh kubuntu|ubuntu|xubuntu
# a very primitive script with no structure of controls etc
# no default behaviour, etc etc
# all ofthis should be trivial to implement but my
# bash syntax sucks
# obvious thing to do would be to convert to python
# & add a simple gtk front end too
# but I'm rushed at the moment
# Notes;Bugs:
# REMEMBER: this absolutely will not work if you haven't built a new version of ubuntu-keyring
# package & included that in $STAGE/pool/extras/! You do that thusly:
# apt-get source ubuntu-keyring
# cd ubuntu-keyring-version-info/keyring
# gpg --import < ubuntu-server-keyring.gpg
# gpg --output=ubuntu-server-keyring.gpg --export "ubuntu" "Your Name"
# dpkg-buildpackage -rfakeroot -m"My Name "
# cp ../ubuntu-keyring*deb $BUILD/pool/extras/
# VARIABLES
# this script relies on the existence of several files and directories:
# Original = $ORIG: location of the "clean", unmodified CD .iso
# CD mount point = $MOUNT: mount point of clean CD
# Staging area = $STAGE: where you keep all your files
# this area should include main dirs isolinux/, pool/, and dists/ at a minimum
# as written the script assumes you have a directory pool/extras with your
# extra debs, and that dists/breezy/extras/binary-i386/Release exists (copy it over
# from dists/breezy/main/binary-i386, and replace "main" with "extras")
# There is no doubt a better way to do this but it involves work...
# Building Area = $BUILD: location where your changes are merged into the "clean" directory
# structure.
# Image location = $IMAGE: name of the new .iso file you want to build
# apt.conf file = $APTCONF: location of the file used to feed instructions to apt-ftparchive
ORIG="/var/www/jigdo/$1-breezy-install-i386.iso"
STAGE="/home/matt/LearningExchangeCD/$1/"
MOUNT=/mnt/iso/
BUILD="/yeowe/usr/cdbuilder/$1"
IMAGE="/yeowe/usr/cdbuilder/$1-learningexchange.iso"
APTCONF=/home/matt/LearningExchangeCD/apt.conf
# sync with latest image
sudo umount $MOUNT
sudo mount $ORIG $MOUNT -o loop
# sudo rsync -azvb --delete --exclude="language-pack*" --backup-dir=/yeowe/usr/cdbuilder/old/ $MOUNT $BUILD
sudo rsync -azvb --delete $MOUNT $BUILD
# now get rid of the old ubuntu-keyring package
sudo rm -r $BUILD/pool/u/ubuntu-keyring/
# note I've excluded a few files, shouldn't matter much for you I reckon
sudo rsync -avzb --exclude='*~' --exclude='INSTRUCTIONS.txt' --backup-dir=/yeowe/usr/cdbuilder/old/ --exclude='example-preseed.txt' $STAGE $BUILD
# generate Packages, Release, Release.gpg
# first thing to realize is, that we only need to generate the Packages files,
# the top-level Release file, and top-level Release.gpg.
# everything else should be in your $STAGE file structure or usable unchanged
# in the original form
# remove Release file otherwise you'll have trouble writing to it.
sudo rm $BUILD/dists/breezy/Release*
# ubuntu-keyring must be included in main/, so main NEEDS to be rebuilt!
for component in main extras; do
sudo apt-ftparchive packages "$BUILD/pool/$component/" > "$BUILD/dists/breezy/$component/binary-i386/Packages"
gzip -c "$BUILD/dists/breezy/$component/binary-i386/Packages" |
sudo tee "$BUILD/dists/breezy/$component/binary-i386/Packages.gz" > /dev/null
done
sudo apt-ftparchive -c $APTCONF release $BUILD/dists/breezy > $BUILD/dists/breezy/Release
# gpg options: -ba = armored, detached-sig
sudo gpg --output $BUILD/dists/breezy/Release.gpg -ba $BUILD/dists/breezy/Release
# build the actual image. Note the options to mkisofs, which make the image bootable
sudo chown -R root:root $BUILD/isolinux $BUILD/preseed
sudo mkisofs -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -J -hide-rr-moved -o $IMAGE -R $BUILD/
# burn the image to 2nd cd drive on most setups
sudo nice -18 cdrecord dev=ATA:1,1,0 speed=12 --blank=fast -v -gracetime=2 -tao $IMAGE
CategoryDocumentation CategoryCleanup
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-958877/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Ubuntu Linux:Apache安裝設定(轉)UbuntuLinuxApache
- Ubuntu Linux:MySQL安裝指南(轉)UbuntuLinuxMySql
- Ubuntu安裝設定Ubuntu
- 轉: Ubuntu 安裝字型方法Ubuntu
- 如何建立定製的 Ubuntu Live CD 映象Ubuntu
- [linux]ubuntu線上安裝mysqlLinuxUbuntuMySql
- Linux Ubuntu安裝配置教程LinuxUbuntu
- Linux-Ubuntu-mysql-安裝&解除安裝LinuxUbuntuMySql
- 【Linux Ubuntu】華為雲ECS安裝桌面版UbuntuLinuxUbuntu
- 在Ubuntu上安裝openssh(轉)Ubuntu
- 硬碟安裝ubuntu 6.10(轉)硬碟Ubuntu
- 安裝 UbuntuUbuntu
- ubuntu安裝Ubuntu
- 【Ubuntu】在Ubuntu上安裝微信Ubuntu
- Mac OS製作Ubuntu安裝U盤MacUbuntu
- 使用隨身碟安裝Linux(Debian/Ubuntu)(轉)LinuxUbuntu
- [ubuntu][轉載]ubuntu安裝中文輸入法不裝sogou方法UbuntuGo
- ubuntu 安裝 Microsoft To-Do (unofficial) on UbuntuUbuntuROS
- Ubuntu:ATI顯示卡安裝配置指南(轉)Ubuntu
- 從硬碟安裝ubuntu 6.06(轉)硬碟Ubuntu
- 定製ubuntu13.10Ubuntu
- ubuntu安裝CMakeUbuntu
- Ubuntu 安裝 RabbitMQUbuntuMQ
- ubuntu 安裝 ElasticSearchUbuntuElasticsearch
- Ubuntu 安裝 ImagickUbuntu
- ubuntu安裝redisUbuntuRedis
- Ubuntu安裝FSearchUbuntu
- Ubuntu硬碟安裝Ubuntu硬碟
- Ubuntu Docker 安裝UbuntuDocker
- ubuntu工具安裝Ubuntu
- Ubuntu 安裝 MemcachedUbuntu
- Ubuntu 安裝 ZooKeeperUbuntu
- Ubuntu 安裝 JDKUbuntuJDK
- Ubuntu 安裝 MavenUbuntuMaven
- ubuntu安裝memcachedUbuntu
- ubuntu 安裝mysqlUbuntuMySql
- kaldi安裝(Ubuntu)Ubuntu
- Ubuntu SDK 安裝Ubuntu