前回に引き続き,Ubuntuのデスクトップ向けインストールCD(Desktop CD)を用いて,オリジナルのLiveCDを作成するレシピを紹介します。
端末からのDesktop CDのカスタマイズ
UbuntuのDesktop CD(=LiveCD)には,RemastersysやUCKのような容易にカスタマイズを行う補助ツールが用意されています。今回はこれらのツールが内部で行っている,SquashFSの展開を始めとする操作をコマンドラインから行い,より細かな部分までカスタマイズする方法を紹介します。
カスタマイズの準備
前回も触れましたが,Desktop CDのLiveCD環境のカスタマイズは,SquashFS形式で圧縮されたルートファイルシステムである casper/filesystem.squashfs を改変することで行います。作業に必要な環境はRemastersys,UCKと同様に,5~10GBのディスク容量とある程度の搭載メモリです。手順を順番に見ていきましょう。
作業にはsquashfs-toolsとmkisofsパッケージが必要になりますので,インストールを行います。ここではapt-getを用いてインストールしていますが,Synapticなどからインストールしても構いません。
$ sudo apt-get install squashfs-tools mkisofs
補助ツールを用いる場合と同じく,コマンドラインからDesktop CDをカスタマイズする場合も既存のISOを改変することで行うのが普通です。http://cdimage.ubuntulinux.jp/releases/7.10/ubuntu-ja-7.10-desktop-i386.isoなどからベースとなるISOイメージをダウンロードしてください。ISOイメージがダウンロードできたら,作業ディレクトリとマウントポイントを作成してループバックマウントします(CDを光学ドライブに挿入して作業を行うことも可能です。この場合は~/livecd-work/mntを/media/cdromに読み替えてください)。
$ cd ~ $ wget http://cdimage.ubuntulinux.jp/releases/7.10/ubuntu-ja-7.10-desktop-i386.iso $ mkdir -p ~/livecd-work/mnt $ sudo mount -o loop ubuntu-ja-7.10-desktop-i386.iso ~/livecd-work/mnt $ cd ~/livecd-work
SOイメージをマウントしたら,filesystem.squashfs以外のファイルを編集用にコピーします。
$ mkdir extract-cd $ rsync --exclude=/casper/filesystem.squashfs -a livecd-work/ extract-cd
casper/filesystem.squashfsを作業用ディレクトリに展開します。~/livecd-work/squashfs以下にLiveCD環境で利用するルートファイルシステムが作成されます。
$ sudo unsquashfs -d edit mnt/casper/filesystem.squashfs
編集を始める前に,このルートファイルシステムの構造を確認しましょう。以下は該当ディレクトリでlsを発行した結果です。
$ ls -F ~/livecd-work/extract-cd bin/ boot/ dev/ etc/ home/ initrd/ initrd.img@ lib/ media/ mnt/ opt/ proc/ root/ sbin/ srv/ sys/ tmp/ usr/ var/ vmlinuz@
この中身は通常の(HDDにインストールした)Ubuntuのファイルシステムそのものです。Remastersysが既存のファイルシステムをSquashFSに圧縮することでLiveCDが構成できるのは,これが理由です。ただし,後の手順でも触れますが,LiveCD環境ではinitrd.imgとvmlinuzはここにあるファイルではなくISOイメージのcapser/以下にあるものが使われるため,別途作業を行う必要があります。
chrootによる作業・再圧縮
カスタマイズの準備が終了したら,展開したルートファイルシステムにchrootし,LiveCD環境を展開した~/livecd-work/extract-cdを/として作業を行います。
chrootする前に,(通常のLiveCD起動では起動時にスクリプトやDHCPクライアントによって生成される)/etc/resolv.confをコピーする必要があります。もしもお使いの環境で/etc/hostsを利用しているのであれば,それもコピーしてください。
$ cd ~/livecd-work $ sudo cp /etc/resolv.conf edit/etc/ $ sudo cp /etc/hosts edit/etc/
準備ができたらchrootを行います。chrootの実行時点で環境変数による影響を受けないように,su -でrootユーザの標準環境を読み込んでおきます。また,ほとんどいないと思いますが,rootユーザのSHELLをbash以外に変更している場合は,/bin/bashに戻しておく必要があります(正確にはUCKなどと同じように,「LiveCD環境に用意されていないシェルをセットしている」場合にこの作業が必要になります)。
$ sudo su - # chroot edit
このままでは作業に支障があるため,proc,sys,devpts fsをマウントします。
# mount -t proc none /proc # mount -t sysfs none /sys # mount -t devpts none /dev/pts
この状態でapt-getなどのパッケージ操作コマンドを実行することで,パッケージの導入が行えます。たとえば次のように,"trac"パッケージをインストールすることで,~/livecd-work/editに展開されたルートファイルシステム上に適用されます。同様に,/etc/skel/以下など,あらゆるファイルは~/livecd-work/edit以下のものです(この例の場合であれば,~/livecd-work/edit/etc/skelに変更を加えたことになります)。

