UbuntuでカスタムライブDVDを作る

このページ、2009/02/05に大幅改定した。
2009/02/10にプログラムを更新。

起動後に直ぐサーバ(SSH/NFS/SMB/WEB 等)が使えるUbuntuの自作ライブDVDを作成した。

Ubuntu Desktop版では、インストールCD=ライブCD となっていて、“コンピュータに変更を加えないでUbuntuをつかてみる”でデモではなく実際のUbuntuの環境が(HDDにインストールすることなく)直ぐに利用できる。このライブCDは便利なので良く利用する。保守やトラブル対応に便利だ。時々、1〜2日電源を入れたままでWindowsのPCをUbuntuのPCとして使う事もある。

しかし、オリジナルのライブCDでは利用できるユーティリティが制限されているし、何よりCDからブートした状態だと、ネットワークからSSHでログインしたり、vino(リモートデスクトップ)でネットワークから操作できない。これを行うにはライブCDを立ち上げた後、パッケージをインストールしたり設定を変更しなければならない。

私の“おうちサーバ”はリビングにおいて別の部屋からネットワークを通して使う。従って、運用管理やトラブル時もネットワーク通して行うことになる。(リビングのテレビに接続して使えないこともないが、接続ケーブルの切替とかがめんどくさい。)そこで、Ubuntu Desktop CDをカスタマイズして、いちいちSSHサーバのインストールしたりvinoの環境を設定しなくても、CDから立ち上げれば直ぐにネットワークからのアクセスを受け付けるようにした。つまり、自分専用のライブCDを作成した。

更に、UbuntuはライブCDは容量が約700MBを超えないように作られているが、自作のカスタムであればライブDVDでもいい。必要な(というか不必要なもの含めて)テンコ盛りのライブDVDを作った。DVDから起動すると、SSHサーバだけでなく、nfsサーバ、sambaサーバ、DNSサーバ、Webサーバ等などが動いている状態になる。

ライブCDの中身は?

色々と試している内に分かって来たのは、Ubuntu Desktopの場合、HDDへのOSのインストールは一々debパッケージから解凍・設定するのではなく、ライブCDのOSイメージをそのままコピーして、その後で必要に応じて設定を変更したり、不必要なパッケージを削除したりしているようだ。逆に言えば、HDDの内容を読み出し専用のCDイメージとして書込み、これを使ってあたかも読み書きできるように見せかけてライブシステムを実現している。これを実現しているのがcasper*1というシステムであり、その中核にはaufs(another unionfs)というファイルシステムを使っている。(このcasperを使えば、ディスククライアントも簡単に構成できる。“ライブUbuntuをネットワークブートする − ディスクレスサーバ構築”参照。)

ライブCDのUbuntu環境で使っているパッケージとHDDにインストール直後のパッケージの状態を比べると、ライブCDから次のパッケージが削除されていることが分かる。(Ubuntu Desktop 8.10 amd64

casper, gimp-help-common, gimp-help-en, gparted, grub, hunspell-en-us, jfsutils,
language-pack-en, language-pack-en-base, language-pack-es,
language-pack-es-base, language-pack-gnome-en, language-pack-gnome-en-base,
language-pack-gnome-es, language-pack-gnome-es-base, language-pack-gnome-xh,
language-pack-gnome-xh-base, language-pack-xh, language-pack-xh-base,
language-support-en, language-support-translations-en,
language-support-writing-en, libdebconfclient0, libdebian-installer4, libntfs10,
localechooser-data, lupin-casper, myspell-en-au, myspell-en-gb, myspell-en-za,
ntfsprogs, openoffice.org-help-en-gb, openoffice.org-help-en-us,
openoffice.org-hyphenation, openoffice.org-hyphenation-en-us,
openoffice.org-l10n-common, openoffice.org-l10n-en-gb,
openoffice.org-l10n-en-za, openoffice.org-thesaurus-en-au,
openoffice.org-thesaurus-en-us, os-prober, rdate, thunderbird-locale-en-gb,
ubiquity, ubiquity-casper, ubiquity-frontend-gtk, ubiquity-ubuntu-artwork,
user-setup, wamerican, wbritish, xfsprogs

逆言えば、インストール直後のOSにこのパッケージを“再”インストールすればライブCDと同じ環境ができる。

そしてライブCDでは“/casper/filesystem.squashfs”というファイルに“rootファイルシステム”の本体が格納されていて、このイメージファイルを / にマウントすることでライブ環境を実現している。(squashFSLZMAという圧縮方式を使った読出し専用圧縮ファイルシステムで、結構高速で動くらしい。)従って、カスタムDVD用に作成したファイルシステムsquashFSでこのファイルと置き換えれば良いことになる。

一方、Ubuntu Server版は全く異なるCDの構造をしている。CDの“/pool/”というディレクトリの下に“main”と“restricted”に分かれてdebパッケージの形でソフトウェアが格納されていて、これをインストール時に展開する。Ubuntu Desktop版では/pool/の下に格納されているソフトウェアはごく僅かで、殆どがデバイス依存しているドライバ類とコンパイラ類の様だ。環境に合わせてインストールが必要なためだろうか。

ここでライブDVDのrootファイルシステム(/casper/filesystem.squashfs)を作成する方法に大きく2つの方法がある。一つはオリジナルCDの中にある“/casper/filesystem.squashfs”を適当なディレクトリにマウントしてコピーをとり、そのコピーにchrootして変更を加える方法。これはオリジナルのCDに一番近いカスタムDVDを作成できるが、作業が基本的にコマンドラインだけであり、GUIのカスタマズが(不可能ではないが)大変手間がかかる。

もう一つは、普通にHDDにLinuxをインストールして、それをベースに/casper/filesystem.squashfsを作成する方法。GUI環境でのカスタマイズもできるが、casper関連の設定がマニュアルが無いので手さぐりになってしまう(どこかに落ちているとは思うのだが)。しかし、今回はこの方法で作成しみた。

大まかな手順

大まかな手順は以下の通りとなる。

1.ライブDVDで使うファイルシステムの元となるLinuxをHDDにクリーン・インストールする
2.インストールしたLinuxを使いやすい様にカスタマイズする
3.Ubuntu Desktop CDとLinuxファイルシステムから新しいDVDを作成する準備をする
4.Ubuntu Desktop CDとLinuxファイルシステムから新しいDVDを作成する
最後の第4ステップはシェルスクリプトによるプログラムを実行するだけである。カスタムDVDを作成するシェルスクリプトを“mkudvdプログラムリスト”に載せておいた。

各ステップの具体的な説明の前に、作業環境について触れておく。私は今回、VMware仮想マシン環境を作業場所とした。この仮想マシンには2つの仮想ディスクを付けていて、次のような構成である。
1. DVD作成用マシンのOS(Ubuntu Desktop 8.10)の仮想HDD(作業領域が必要なので12GB以上)
2. ライブDVDのための雛型Linuxがインストールされている仮想HDD
以降の説明は基本的にこの環境を使った場合について話すが、勿論、実マシンでも作業は出来る。最低2パーティションが必要で、マシンを動かすためのOSのパーティションと、もう1つは雛型Linuxのためである。(これらの2つのパーティションは同じHDDにあっても異なるHDD上にあっても構わない。)

以降では、分かりやすいように1ディスク1パーティションとして話を進める。(パーティションは論理パーティションではなく物理(プライマリ)パーティションとする。)

*1:Run a "live" preinstalled system from read-only media:読出し専用メディアに予めインストールされた“ライブ”システムを実行する