ライブCDのカスタマイズ

2007/12/27

ねらい

livecd-toolsを用いたFedoraライブCD作成手法では細かい設定をおこなうことは出来ない。
そこでchrootを用いた自由度の高いカスタマイズ方法について述べる。

環境

LiveCDのバージョン : fedora8
母艦PCのOS : fedora8( できるだけLiveCDのバージョンに合わせること )

基本方針

以下の流れでカスタマイズをおこなう。

[1] livecd-tools を使ってベースとなるLiveCDを作成する

[2] chroot により詳細にカスタマイズ



[1] livecd-toolsによるベースLiveCDの作成

(1) ローカルレポジトリの作成

コピーサイズが多いので、DVDに含まれるrpmファイルからローカルレポジトリを作成する。

はじめにcreaterepoをインストールする。
$ su
# yum install createrepo
しばらくはsuのままで作業する。 今回は/var/www/html/yum/baseにレポジトリを作成することにして DVD( /media/CDROM にマウントされたとする )中のrpmをコピーする。
# mkdir -pv /var/www/html/yum/base
# cp /media/CDROM/Packages/*.rpm /var/www/html/yum/base
グループファイルリスト(Fedora-8-comps.xml)をコピーしてレポジトリを作成する。
# cp /media/CDROM/repodata/Fedora-8-comps.xml /var/www/html/yum/base
# createrepo -g Fedora-8-comps.xml /var/www/html/yum/base
この段階で ls /var/www/html/yum/base/repodata/ を実行して

Fedora-8-comps.xml filelists.xml.gz other.xml.gz primary.xml.gz repomd.xml

と表示されれば正常にレポジトリが出来ているのでDVDを取り除き、exitしてsuから抜ける。

(2) livecd-toolsのインストール

$ su
# yum install livecd-tools
$ exit

(3) キックスタートファイル(*.ks)を編集

以下は一般ユーザで作業する。 また作業ディレクトリを /tmp/basecd とする。
$ mkdir -pv /tmp/basecd
$ cd /tmp/basecd
キックスタートファイル(*.ks)のテンプレートをコピーして編集する。
$ cp /usr/share/livecd-tools/livecd-fedora-8-base-desktop.ks .
$ cp /usr/share/livecd-tools/livecd-fedora-8-desktop.ks .
上で作成したローカルレポジトリの指定は次のようにする。

repo --name=myrepo --baseurl=file:///var/www/html/yum/base

日本語化したい場合は次のようにする。

lang ja_JP.UTF-8
keyboard jp106
timezone Asia/Tokyo

また@はグループ指定で、グループに属するrpmは/var/www/html/yum/base/repodata/Fedora-8-comps.xml の中に書いてある。
-で指定されたrpmはグループの中から除外される。

カスタマイズしたキックスタートファイルのサンプル

livecd-fedora-8-base-desktop.ks
livecd-fedora-8-desktop.ks

注意

・ Fedora8のlivecd-tools用
・ 拡張子をtxtに変更している
・ selinuxは--disabled指定にしている
・ 完成すると約680Mのisoファイルが出来る

(4) isoの作成

suになってlivecd-toolsを用いてベースとなるisoファイルを作成する(若干時間がかかる)。
$ su
# livecd-creator -c ./livecd-fedora-8-desktop.ks
# exit

(5) VMWare Playerのインストール

動作確認のためVMWare Playerをインストールする。
$ su
# rpm -Uvh VMware-player-*.i386.rpm
# vmware-config.pl 
(質問は全部enterでOK)
# exit

(6) VMware Playerで動作確認

VMware Playerで動作確認をおこなう。
isoファイルと同じディレクトリに以下の仮想マシンファイル(今回は livecd.vmx とする)を作成する。
vmxファイル中の ide1:0.fileName には作成したisoファイル名を入れること(今回は livecd.isoとしている)
livecd.vmxを作成したら vmplayer livecd.vmx を実行して起動確認をする。

livecd.vmx の中身
displayName = "livecd"
guestOS = "other26xlinux"

## memory size (Mbyte)
memsize = "384"

ide1:0.present = "TRUE"
ide1:0.startConnected = "TRUE"
ide1:0.deviceType = "cdrom-image"
ide1:0.fileName = "livecd.iso"

ethernet0.present = "TRUE"
ethernet0.connectionType = "nat"

usb.present = "TRUE"

sound.present = "TRUE"
sound.virtualDev = "es1371"

config.version = "8"
virtualHW.version = "4"
nvram = "other26xlinux.nvram"

(7) CD/DVD-Rにisoを焼く

CD/DVD-Rにisoを焼いて実機による動作確認をおこなって ベースとなるライブCDが完成する。


[2] chrootによる詳細なカスタマイズ

(1) squashfs-toolsをインストール

はじめにsquashfs-toolsをインストールする
$ su
# yum install squashfs-tools
# exit

(2) 作業ディレクトリ作成

作業ディレクトリ(今回は /tmp/livecd とする)を作成する。 以下、一般ユーザで作業をおこなう。
$ cd /tmp
$ mkdir livecd

(3) ライブCD内のファイルをコピー

マスター用のディレクトリ(今回は livecd/master とする )にファイルをコピーする。
CD/DVDをドライブに入れてマウントして( /media/CDROM にマウントしたとする )
$ cd /tmp/livecd
$ mkdir master
$ cp -rpv /media/CDROM/* master
を実行する。

(4) squashfs.imgの内容を展開

squashfs.imgの内容をlivecd/image以下に展開する。
$ cd /tmp/livecd
$ cp master/LiveOS/squashfs.img .
$ /usr/sbin/unsquashfs -d image squashfs.img
するとext3ファイルシステムのイメージ(image/LiveOS/ext3fs.img )が現れるので
$ su
# mount -o loop -t ext3 image/LiveOS/ext3fs.img /mnt
とループバックマウントしてイメージの中身を見れるか確認する(ここでは /mntにマウントしている )。

(5) 簡単な事前編集

簡単な設定はこの段階でおこなうことが出来る.
例えば母艦の yum の設定をコピーするには次のようにする
# cd /mnt/etc
# cp yum.conf yum.conf.org
# cp /etc/yum.conf .
# cp -r yum.repos.d yum.repos.d.org
# cp -rpv /etc/yum.repos.d/ .

(6) ループバックマウントを解除

umountしてsuから抜ける
# cd /tmp/livecd/
# umount /mnt
# exit

(7) squashfs イメージ作成

オリジナルのイメージをバックアップしてイメージを作成する(少し時間がかかる)。
$ cd /tmp/livecd
$ mv squashfs.img squashfs.img.org
$ /sbin/mksquashfs ./image squashfs.img
イメージが出来たらmasterのイメージと置き換える
$ chmod 777 master/LiveOS/   
$ mv squashfs.img master/LiveOS
$ chmod 555 master/LiveOS/

(8) isoイメージ作成

はじめに、mkisofsに失敗しないようにisolinux/isolinux.binのパーミッションを変更してから isoを作成(今回は livecd.iso とする )する。
$ chmod 644 master/isolinux/isolinux.bin
$ mkisofs -v -r -V 'ラベル:下の注意を見よ' -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table  -o livecd.iso master

(注意)

-Vで指定するラベルは master/isolinux/isolinux.cfgの root=CDLABEL=の後にある文字列を入れないとブートしないので注意すること。 root=CDLABEL=の方を書き換えても良い

(9) VMware Playerで動作確認

[1]で使用したlivecd.vmxのisoファイル名を書き換えて起動を確認する。

(10) chroot でカスタマイズ

ライブCDを入れて再起動する。grub画面が出たら Tab を押し、 起動パラメータの一番最後に 3 を追加してランレベル3で起動する。

ログイン画面が出たら root でログインし、 母艦PCのHDDをマウントする(今回は /dev/VolGroup00/LogVol00 を /mnt/hdd にマウントする )
# mkdir /mnt/hdd
# mount /dev/VolGroup00/LogVol00 /mnt/hdd
ext3イメージファイルをループバックマウントする(今回は /mnt/root とする)
# mkdir /mnt/root
# mount -o loop -t ext3 /mnt/hdd/tmp/livecd/image/LiveOS/ext3fs.img /mnt/root
ここでネットワークが起動していなければ ifup eth0 で起動しておく。

chrootの前準備として/etc/resolve.confをコピーし、chrootを実行する。
# cd /mnt/root
# cp etc/resolve.conf etc/resolve.conf.org
# cp /etc/resolve.conf etc/resolve.conf
# chroot /mnt/root
# mount -t proc /proc proc
あとは yum check-update を実行してから好きにカスタマイズする。 終わったら chrootを抜けて再起動する。
# yum clean all
# umount /proc
# exit
# mv etc/resolve.conf.org etc/resolve.conf
# rm root/.bash_history
# cd /
# umount /mnt/root
# umount /mnt/hdd
# reboot

(11) isoを焼いて完了

CD/DVDを除いて母艦のOSを再起動する。
カスタマイズした squashfs.imgを上と同じ要領で入れ替え、isoを作成し vmwareで確認して問題なければCD/DVDに焼く