KVMをコマンドラインから使うの術

結構前に自宅サーバーの仮想化はXenにしていたのをこれからはKVMらしいのでKVMに変えてみるか、とやってみたときは、ホストOSにX入れないとうまく動かなかったりそういう点が嫌だなぁと思っていたが、だいぶ環境や情報が揃ってきて、Xenで作ったりするのと同程度には楽にできるようになったようだなと思ったので、部屋の模様替えして再起動したついでにえいや、とやってみた。

ちょっと覚え書き程度にまとめておく。

sudo -H virt-install -n natty -r 256 --vcpus=1 \ 
   -f /var/lib/libvirt/images/natty.img -s 5 \
   --os-type=linux --os-variant=virtio26 \
   --network bridge=br0 \ 
   --location='http://jp.archive.ubuntu.com/ubuntu/dists/natty/main/installer-amd64/' \ 
   --nographics \
   --extra-args='console=tty0 console=ttyS0,115200n8 preseed/url=http://192.168.0.101/preseed-natty.cfg preseed/url/checksum=7e717ea622372d92d0a461f07d8d4e1a language=en locale=en_US.UTF-8 hostname=natty'

起動CDのISOイメージをDownlooadしてくるのがめんどうな場合は--locationでURLを指定して直で起動できるようだ。(Debian/Ubuntu/CentOSあたりのメジャーなやつはだいたいURLがあるようだ)

--locationするURLがググっても出てこない場合は、インストールCDのisoファイルを手元にダウンロードしてきて、-cで指定する方法もあるようだ。

LinuxをCLIでインストールするのに重要なのが、--nographicsと、--extra-argsの'console=ttyS0, 115200n8'で、これがないと起動しているが画面には何も表示されなかったりする。シリアルコンソール以外で遠隔インストールをするには、VNCとかをつかってやるのがメジャーなようだ。(シリアルコンソール経由でインストールできないOS(?)の場合は使う必要がありそう)

115200n8という謎の文字が何を意味しているのか、というと、
http://lxr.linux.no/linux+v2.6.32/Documentation/kernel-parameters.txt#L514
http://lxr.linux.no/linux+v2.6.32/Documentation/serial-console.txt#L514

ただのオプションのようだ。115200は、serial-console.txtによるとスピードの最大値らしいので、最大値を指定する、というのが慣例になっているのかもしれない。n8は8bitごとに転送する、ということなのかな。オプションはこの数字じゃなくてもいけそうな気がするな。

なお、FreeBSDの場合はまたシリアルコンソール経由での起動の仕方が違っていて、

wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/ISO-IMAGES/8.2/FreeBSD-8.2-RELEASE-amd64-bootonly.iso
bsdtar -C bsdiso-serial -pxvf FreeBSD-8.2-RELEASE-amd64-bootonly.iso
sudo bash -c "echo 'console=\"comconsole\"' >> bsdiso-serial/boot/loader.conf"
sudo -H genisoimage --no-emul-boot -R -J -b boot/cdboot -v -o FreeBSD-8.2-RELEASE-amd64-bootonly-serial.iso bsdiso-serial

みたいにして、起動ディスクのISOイメージファイルを書きかえたあと、-cでISOファイルを指定しつつ起動する、という方法でなんとかなるようだ。(なお、mkisofsじゃなくgenisoimageをつかっていたり、bsdtarをつかっていたり、Debianでの実行を前提にして書いている)

preseed/url、preseed/url/checksumは、Debian/Ubuntuのインストーラーで毎回ポチポチ入力しないですむように、preseedを動作させるための指定であるが、VMの複製はvirt-cloneでやった方が早いし、楽なので、クリーンに入れなおしたいことが頻繁になければがんばって作る必要はなかったようだ。

インストールの途中で強制終了したときは、

sudo -H virsh destroy natty
sudo -H virsh undefine natty

することで、また同じ名前で作れるようになるようだ。

ということで、Xenと違ってホストOSにゲストOSが限定される、ということがないので、自宅で色々マシンを作って実験して遊んだりするのはだいぶ快適になったはず。