カスタム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