使いやすい自分色に染まったubuntu。
これを実現するために試行錯誤をしました。何日も調べて試して失敗をしてを繰り返しました。
最初はインストール後にbashを走らせて実現をすれば良いかなとも思いました。しかし、それだとインストール毎にカスタマイズをしないといけません。ちょっと面倒だなと思いました。
では、どうすればよいだろうか。
ubuntu Japan Team では事前に日本語化されたRemixを配布していることを思い出しました。そこに気付いてからは素早かったです。自分のISOも事前にMy Remixにすればいいのだと。
色々と調べたのですが、いまいちしっくり来なかったのですが、最終的には「Desktop CDのカスタマイズは 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 モジュールを読み込み、作業用ディレクトリとマウントポイントを作成します。
その後にループバックマウントします。
$ 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環境が作成されます。
ここで環境を確認してもらうと分かりますが、かなりカオスな状態になっています。
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 をコピーします。
ネットワーク設定が終了したら 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」を利用しています。
squashFSとManifestファイルの作成
⑦不要ファイルの削除
# apt-get clean # rm -rf ~/.bash_history # rm -rf /tmp/* # rm -rf /root/* # rm /etc/hosts
インストール後もパッケージの残骸が残って、容量肥大の原因になりますので、パッケージ追加などのカスタマイズが終了したら、apt-get cleanを実行して削除してください。
apt-get clean を実行した後に、中間作業用のデータの不要なファイルの作業を行います。
⑧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 」 でします。
参考文献
- LiveCDCustomization – Community Help Wiki
- https://help.ubuntu.com/community/LiveCDCustomization2016