はじめに
KVM サーバーを構築して、ゲストマシンとして動作確認用の Ubuntu を何度もインストールするようになりました。
毎回ゲスト Ubuntu をインストールするのが大変なので、Preseed を使って自動化するんですが、「 KVM virt-install でディストリビューションツリーを指定した時に Preseed で自動設定 」 だとどうしてもネットワーク環境が必要なようです。
ネットワーク環境がなくても Preseed を使い、更に DVD メディアから全てをインストールする方法を調べてみました。インストール画面の表示も VNC コンソールではなく、virt-install を実行するターミナルに表示するようにします。
Preseed の設定ファイルをあらかじめ用意した TFTP サーバーに置く方法もあるようですが、なんとなく TFTP サーバーとか構築したくないですし、そもそもネットワーク環境が無い場合を想定しているので aufs を利用して Ubuntu インストール用 ISO イメージの中に擬似的に設定ファイルを埋め込むような方法でやってみます。
ISO イメージをループバックマウント
ゲスト Ubuntu も 12.04.3 Server にします。
Ubuntu のサイトから ubuntu-12.04.3-server-amd64.iso をダウンロード
マウントポイントを作成して、ダウンロードした ISO イメージをループバックマウント
$ mkdir Iso
$ sudo mount --read-only --options loop ubuntu-12.04.3-server-amd64.iso Iso/
ISO イメージの内容を擬似的に上書きするためのディレクトリ、ファイル準備
ディレクトリ作成
$ mkdir -p ForOverwrite/{isolinux,preseed}
以下の内容で ForOverwrite/isolinux/isolinux.cfg 設置
default install
label install
kernel /install/vmlinuz
append auto=true file=/cdrom/preseed/Custom.seed initrd=/install/initrd.gz quiet console=ttyS0 --
以下の内容で ForOverwrite/preseed/Custom.seed 設置
d-i netcfg/get_hostname string TestMachine
d-i user-setup/encrypt-home boolean false
d-i passwd/user-fullname string testuser
d-i passwd/username string testuser
# ここにパスワードを書き込むとファイルとしてパスワードが残ってしまうので
# 以下をコメントアウトし、パスワードをコンソールから入力した方が良いです。
d-i passwd/user-password password testpasswd
d-i passwd/user-password-again password testpasswd
d-i debian-installer/language string en
d-i debian-installer/country string JP
d-i localechooser/preferred-locale select en_US.UTF-8
d-i time/zone string Asia/Tokyo
d-i netcfg/disable_autoconfig boolean true
d-i netcfg/get_ipaddress string 192.168.122.100
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.168.122.1
d-i netcfg/get_nameservers string 192.168.122.1
d-i netcfg/get_domain string
#d-i mirror/country string Japan
#d-i mirror/http/mirror string jp.archive.ubuntu.com
# ssh コンソールでのインストール
#d-i anna/choose_modules string network-console
#d-i network-console/password password HogeHoge
#d-i network-console/password-again password HogeHoge
#d-i console-setup/ask_detect boolean true
#d-i console-setup/layoutcode string jp
#d-i console-setup/charmap select UTF-8
d-i partman-auto/method string lvm
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-auto-lvm/guided_size string max
d-i partman/choose_partition select finish
d-i partman/confirm_nooverwrite boolean true
d-i mirror/http/proxy string
d-i pkgsel/update-policy select none
d-i pkgsel/install-language-support boolean false
d-i tasksel/first multiselect OpenSSH server
d-i grub-installer/only_debian boolean true
d-i clock-setup/utc boolean true
d-i finish-install/reboot_in_progress note
ゲスト Ubuntu インストール用 DVD イメージ作成
まず、現段階で ForOverwrite/、Iso/ はそれぞれ以下のようなファイル配置になってます。
ForOverwrite/
├── isolinux/
│ └── isolinux.cfg
└── preseed/
└── Custom.seed
Iso/
├── ...
├── isolinux/
│ ├── ...
│ ├── isolinux.cfg
│ └── ...
├── preseed/
│ ├── cli.seed
│ ├── cloud.seed
│ ├── ubuntu-server-minimal.seed
│ ├── ubuntu-server-minimalvm.seed
│ └── ubuntu-server.seed
└── ...
- この状態でこの2つのディレクトリを aufs で Custom/ へひとつにまとめます。
$ mkdir Custom $ sudo mount -t aufs -o br:ForOverwrite/:Iso/ aufs Custom/
Custom/ のファイル配置はこのようになります。
Custom/ ├── ... ├── isolinux/ │ ├── ... │ ├── isolinux.cfg │ └── ... ├── preseed/ │ ├── cli.seed │ ├── cloud.seed │ ├── Custom.seed │ ├── ubuntu-server-minimal.seed │ ├── ubuntu-server-minimalvm.seed │ └── ubuntu-server.seed └── ...
isolinux/isolinux.cfg は ForOverwrite/ と Iso/ のどちらにもあるので、Custom/isolinux/isolinux.cfg は mount -t aufs の引数で先に指定した ForOverwrite/isolinux/isolinux.cfg の内容となります。
最終的に、Custom/ は Iso/ の内容 (ubuntu-12.04.3-server-amd64.iso の内容) を ForOverwrite/ の内容で上書きした状態になっています。
ゲスト Ubuntu インストール用 DVD イメージ作成
$ sudo mkisofs \
-r \
-V 'Custom Ubuntu Install CD' \
-cache-inodes \
-J \
-l \
-b isolinux/isolinux.bin \
-c isolinux/boot.cat \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-input-charset utf-8 \
-o Custom_ubuntu-12.04.3-server-amd64.iso \
Custom/
Custom/, Iso/ は不要になったのでマウントを解除
$ sudo umount Custom/
$ sudo umount Iso/
ゲスト Ubuntu インストール
インストールディスクイメージ作成
$ sudo qemu-img create -f qcow2 /var/lib/libvirt/images/TestMachine.qcow2 30G
- ゲスト Ubuntu インストール
$ sudo virt-install \ --name TestMachine \ --ram 2048 \ --vcpus 1 \ --os-variant ubuntuprecise \ --hvm \ --virt-type kvm \ --disk /var/lib/libvirt/images/TestMachine.qcow2,format=qcow2 \ --cdrom Custom_ubuntu-12.04.3-server-amd64.iso \ --network bridge:virbr0 \ --serial pty \ --keymap ja
数秒待つとインストール画面が表示されます
インストールが終了すると最後にゲストマシンの再起動がかかり、インストールした OS で起動します。 コンソールにはゲスト OS のログインプロンプトが出てくるので ‘Ctrl + ]’ でコンソールを切断します。
- 再度コンソールに接続する場合
$ sudo virsh console TestMachine
コンソールから切断する場合は同様に ‘Ctrl + ]’ です。
参考
- http://bugcy013.blogspot.jp/2012/09/how-to-addchange-preseed-files-on.html
- http://gihyo.jp/admin/serial/01/ubuntu-recipe/0154?page=2
- http://d.hatena.ne.jp/kinneko/20130203/p1
- https://help.ubuntu.com/12.04/installation-guide/i386/preseed-intro.html
- https://help.ubuntu.com/12.04/installation-guide/i386/preseed-using.html
- https://help.ubuntu.com/12.04/installation-guide/i386/preseed-contents.html
- http://www.usupi.org/sysad/187.html
- http://akagisho.hatenablog.com/entry/2013/11/10/200956
0 件のコメント:
コメントを投稿