カスタムDVDのISOファイルを作成する前準備
次に、上で作った雛型LinuxのファイルシステムとUbuntuのオリジナルライブCDのISOイメージからカスタムDVDのISOファイルを作成する。先ずはその準備。
ここでの前提は、2台目のHDDに上でインストールした雛型のrootファイルシステムが入っている。1台目のHDDは空のままで、ここに作業用のLinuxをインストールする。通常のインストールと同じで、ただし、雛型Linuxが入っている1台目のHDDはインストール時には“どこにも接続しない”状態にしておく。1台目のHDDのLinuxは作業用なので、自分の好みに合わせてインストール、設定して構わない。
用意が整ったら作業用のLinuxを(1台目のHDDから)起動して、作業ディレクトリを作る。ここでは /livedvd というディレクトリを想定する。以降の作業はスーパーユーザ権限が必要ものが多いので、最初に sudo -s しておく。
% sudo -s # mkdir /livedvd # cd /livedvd
ここを作業領域として以下の準備をする。
1. オリジナルライブCDのISOイメージをコピーする
2. 雛型Linuxのディスク(2台目のHDD)をマウントする
3. 雛型Linuxのファイルをコピーする
4. squashfs-toolsパッケージのインストール
5. ライブ起動時に起動前設定を行う各種ファイルやプログラムを置く
まず、ライブCDのイメージファイルを作業用ディレクトリ(/livedvd)へコピー(もしくはUbuntuのホームページからダウンロード)する。>|
# dd if=/dev/sr0 of=/livedvd/ubuntu-8.10-desktop-amd64.iso bs=100M
次に、filesystem.org というディレクトリを作り、そこに雛型Linuxの入っている2台目のディスクを読み出し専用でマウントする。
# mkdir filesystem.org # mount -o ro /dev/sdb1 filesystem.org
2台目に入っている雛型Linuxはそのまま残しておいて、その内容に手を加えるため、filesystemというディレクトリを作成してファイルシステムを丸ごとコピーする。
# mkdir filesystem # rsync -ax filesystem.org/ filesystem/
ライブDVDを作る過程で、雛型のファイルシステムをsquashFSという読出し専用圧縮ファイルイメージとして保存する。そのsquashFSイメージファイルを作成するための mksquashfs というコマンドを使えるようにsquashfs-toolsというパッケージをインストールしておく。
# apt-get install squashfs-tools
ライブ起動時にinitrdの状態で起動前設定を行うためのシェルスクリプトやファイルを作成して、miscというディレクトリに集める。
# mkdir misc : : # ls misc 11adduserhome 18hostname 60setupnfs 61setupsmb 62setupntp 63setupbind ubuntu_home.cpio.gz
ここで“ubuntu_home.cpio.gz”はubuntuのホームディレクトリをcpio形式でアーカイブしたものである。ライブDVDを作成する際に、雛型Linuxから一旦 ubuntuアカントを抹消する。ライブ環境で立ち上げる時はcasperがubuntuアカウントを作成するが、新規に作られるため雛型Linuxでカスタマイズした設定は失われている。これを起動前設定の段階(initrdの段階)で復旧するためのデータである。このアーカイブは手動で作成も出来るが、後で出てくるISO作成用シェルスクリプトの中で自動的に作成することもできる。
そしてそのアーカイブを/home/ubuntuへ展開ためのシェルスクリプトが“11adduserhome”になる。
#!/bin/sh PREREQ="" DESCRIPTION="Adding live session user home directory..." . /scripts/casper-functions prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac log_begin_msg "$DESCRIPTION" if [ -f /var/backups/ubuntu_home.cpio.gz ]; then if [ -d /root/home/ubuntu ]; then ( cd /root/home/ubuntu ; gzip -dc /var/backups/ubuntu_home.cpio.gz | cpio -i) fi fi log_end_msg
このシェルスクリプトはcasperから呼び出されるので、それに合わせた形式で書かれている。
次の“18hostname”はオリジナルCDにもあるのだが、ライブCD(もしくはDVD)のISOファイルを使ってディスクレスクライアントを動かす場合、DHCPサーバからホスト名を取得するように改造したもの。“ライブUbuntuをネットワークブートする − ディスクレスサーバ構築”を参照。
#! /bin/sh PREREQ="" DESCRIPTION="Setting hostname..." . /scripts/casper-functions prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac log_begin_msg "$DESCRIPTION" NETCONFIG=/netboot.config ADDR=127.0.1.1 DOMAIN= if [ -f $NETCONFIG ]; then NET_HOST=$(grep '^ host :' $NETCONFIG | cut -f6 -d ' ' ) if [ ! -z "$NET_HOST" ]; then HOST=$NET_HOST; fi export HOST NET_DOMN=$(grep '^ domain :' $NETCONFIG | cut -f4 -d ' ' ) if [ ! -z "$NET_DOMN" ]; then DOMAIN=$NET_DOMN; fi NET_ADDR=$(grep '^ address:' $NETCONFIG | cut -f3 -d ' ' ) if [ ! -z "$NET_ADDR" ]; then ADDR=$NET_ADDR; fi fi echo "$HOST" > /root/etc/hostname cat > /root/etc/hosts <<EOF 127.0.0.1 localhost $ADDR $HOST $HOST.$DOMAIN # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts EOF hostname "$HOST" log_end_msg
以下“60setupnfs”はNFSの設定プログラム、“ 61setupsmb”はSMB設定用プログラム、“ 62setupntp”はNTP設定用、“ 63setupbind”はBIND設定用のプログラムとなっていて、これらはオリジナルCDには無い。ここでは参考のために1つだけ書いてく。(その他のプログラムリストは終わりの方にまとめて書いておく。)
60setupnfs:/etc/exportsに変更を加え/tmpをネットワークからマウントできるようにしている。
#!/bin/sh PREREQ="" DESCRIPTION="Setting up NFS configuration..." . /scripts/casper-functions prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac log_begin_msg "$DESCRIPTION" if [ -f /root/etc/exports ]; then echo '/tmp *(rw,all_squash,no_subtree_check,fsid=0)' >> /root/etc/exports fi log_end_msg