みなさん、いかがお過ごしだったでしょうか。
どうも、れきをくん(@rekiwokun)です。
あることを実現させたくて、数日もの間、何度も失敗をして試行錯誤しました。
それは『自分色に染まった使いやすいubuntu』です。
インストールした直後から使えることが望ましいと思っていたので、インストール直後にbashを走らせて実現させる方法を考えました。
そうすると、インストール直後に毎回bashを走らせなければいけません。
ちょっと面倒です・・・
では、どうすればいいでしょうか。
少し考えてみると、Ubuntu Japanese Team では既に日本語化されたRemixを配布していることを思い出しました。
ということは、自分の ISO ファイルも事前に My Remixにすればいいのだと気付きました。
調べると色々な方法がネット上にありましたが、ほぼすべての方法が上手くいきませんでした。
最終的に行き着いた方法は『Desktop CDのカスタマイズは SquashFS 形式で圧縮したルートファイルシステムに手を加える』ことによって簡単にカスタマイズをすることができました。
ただし、【簡単に】とは書きましたが、全然簡単ではありません。
少しでも間違えると、1からの作り直しになるので慣れるまではかなり難しいです。
では、今回の講義を始めます。
「 casper/filesystem.squashfs 」に手を加えます。
カスタマイズの準備
① 必要なパッケージのインストール
$ sudo apt-get install squashfs-tools genisoimage
カスタマイズを実行する前にインストールするソフトが2つあります。
この2つのパッケージが iso イメージファイルを改変するツールとなります。
- squashfs-tools
- genisoimage
② カスタマイズしたいisoイメージのダウンロード
$ wget -v {$URL}
wget でご紹介しましたが、普通にWEBページからダウンロードしても大丈夫です。
私はもろに WEB ページからのダウンロード派です。
③iso のカスタマイズの前の準備
$ mkdir -p ~/remix/mnt
$ mv ubuntu-◯◯◯-i386.iso ~/remix
$ cd ~/remix
$ sudo mount -o loop ubuntu-◯◯◯-i386.iso mnt
squashfs モジュールを読み込み、作業用ディレクトリとマウントポイントを作成していきます。
作業用ディレクトリはどこでもいいのですが、後で確認しやすい名前がいいと思います。
私は専ら「 /remix 」という名前で作成しています。
その後にループバックマウントします。
$ mkdir extract-cd
$ rsync --exclude=/casper/filesystem.squashfs -a mnt/ extract-cd
$ sudo unsquashfs -d edit mnt/casper/filesystem.squashfs
$ sudo umount mnt
カスタマイズをしたい iso イメージファイルをマウントしたら、編集用に filesystem.squashfs 以外のすべてのファイルをコピーしていきます。
重要なのは filesystem.squashfs 以外のコピーをすることです。
filesystem.squashfs 以外のコピーしたら、casper/fiflesystem.squashfs を作業用ディレクトリに展開します。
そうすると、「 ~/remix/edit/ 」にLiveCD環境が作成されます。
ここで環境を確認してもらうと分かりますが、かなりカオスな状態になっています。
ここからは「 casper/fiflesystem.squashfs 」にひたすら手を加えていきます。
chrootによる作業・再圧縮
④ ネットワーク環境設定
$ sudo cp /etc/resolv.conf edit/etc/
$ sudo cp /etc/hosts edit/etc/
$ sudo cp setup.sh edit/
apt-get などのツール群を利用するには、ネットワーク環境が必然的に必要になります。
chroot を行う前にネットワーク設定用に resolv.conf と hosts を忘れずにコピーしましょう。
私はここで resolv.conf のコピーを忘れて失敗しました。
ネットワーク設定が終了したら chroot していきます。
⑤ chrootを行う
$ sudo chroot edit
chroot は作業用環境の root ディレクトリを変更する機能を提供するものです。
chroort を利用すると、CD 内のファイルやアプリケーションに直接アクセスすることができます。
つまり、chroot を使うことによって apt-get などのツール群を利用することが可能となるわけです。
⑥ chrootによる作業
# mount -t proc none /proc
# mount -t sysfs none /sys
# mount -t devpts none /dev/pts
# export HOME=/root
# export LC_ALL=C
# chmod +x setup.sh
# ./setup.sh
# rm setup.sh
カネール作業用に /proc と /sys などのボリュームをマウントしないと作業にあり得ないくらい支障が出るので、マウントを忘れないようにマウントします。
次に、ロケールとGPGに関連した問題の発生防止用に必要な情報をエクスポートします。
ここまで来たら、 apt-get などのパッケージ操作を行えるので個人に合うようにカスタマイズしまくって下さい。
私は専ら「 setup.sh 」で自動化しています。
私はここで /proc と /sys をマウントするのを忘れて数時間悩みました。
squashFSとManifestファイルの作成
⑦ 不要ファイルの削除
# apt-get clean
# rm -rf ~/.bash_history
# rm -rf /tmp/*
# rm -rf /root/*
# rm /etc/hosts
インストールをすると、パッケージの残骸が大量に残ります。
このパッケージの残骸が原因で iso イメージファイルの容量が肥大化します。
少しでもスリム化させたいので、パッケージの追加などのカスタマイズが終了したら、必ず【 apt-get clean 】を実行してください。
そして、【 apt-get clean 】を実行した後は、中間作業に使用した不要なファイルの削除を行います。
参照したサイトには「 resolv.conf 」の削除も記載されていますが、12.04 LTS 以降では削除しないように注意してください。
私は「resolv.conf 」を削除し、原因が分からずに朝を迎えました。
⑧ proc, sys, devptsfsをアンマウント
# umount /proc || umount -lf /proc
# umount /sys
# umount /dev/pts
# exit
$ sudo umount edit/dev
chroot 環境でマウントした /proc と /sys と /devptsfs をアンマウントし、「 exit 」を実行します。
⑨ squashFSの生成
$ sudo chmod +w extract-cd/casper/filesystem.manifest
$ sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n'>extract-cd/casper/filesystem.manifest
$ sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
$ sudo sed -ie '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop
$ sudo rm -f extract-cd/casper/filesystem.squashfs
$ sudo mksquashfs edit extract-cd/casper/filesystem.squashfs
manifest ファイルを再作成します。
このファイルは CD に導入されたパッケージの一覧です。
再作成が終わったら、必要なディレクトリ中にコピーします。
SquashFS を生成して、ファイルシステム全体を圧縮します。
⑩ ISOの作成
$ sudo /bin/sh -c "rm extract-cd/md5sum.txt"
$ sudo /bin/sh -c "(cd extract-cd && find . -type f -print0 | xargs -0 md5sum> md5sum.txt)"
メディアチェックに利用される MD5 ハッシュを更新します。
$ cd extract-cd
$ sudo genisoimage -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-◯◯◯-i386-custom.iso .
$IMAGE_NAME を適宜変更した後に、コマンドを実行すると、ISO イメージが出力されます。
念願のインストールメディアの完成です。
⑪ isoのテスト
$ qemu-system-i386 -cdrom ubunt-○○○-custom.iso -boot d -m 1000
☆ 半自動化するスクリプト
現在は、ubuntu-defaults-builder があるので比較的簡単に ISO をカスタマイズする事が可能となっています。
Ubuntu Japanese Team が配布している Japanse Remix は、ubuntu-defaults-builder によって作られています。
しかし、現在は Ubuntu MATE には対応していないので、コマンドによる改変も身に付けておくと比較的自由に ISO 改変することが可能です。
しかし、毎回何度もコマンドを打ち込むのは億劫ですので、半自動スクリプトを作成しました。
それが 「 Ubuntu Tomo Remaster Script 」 です。
詳しい話は 「 Ubuntu Tomo Remaster Script 」 でします。
まとめ
今回のこのカスタマイズを成功させるために、かなりの日数を要しました。
何度も失敗をして、何枚もDVDを無駄にしました。
そこまでして成功したカスタマイズDVDは感動の1枚でした。
是非、皆さんも私と同じ感動を味わって頂きたいと思います。
今回の講義はこれで終わります。
では、またお会いしましょう!