Ubuntu Weekly Recipe

第344回 uvtoolでKVM/libvirt向け仮想マシンをお手軽に構築する

この記事を読むのに必要な時間:およそ 4 分

Ubuntu 14.04 LTSで進化したuvtoolは,Ubuntuにおける新しいKVM向け仮想マシン構築ツールです。

適切なイメージをこの手に

Ubuntuを使ううえで最初のハードルとなるのが,「インストールイメージのダウンロード」です。どこから,どのイメージを,どうやってダウンロードすれば良いか,初心者はもちろんのことそこそこ詳しい人でも悩むことはあるでしょう。

初心者であればリリースとフレーバーとアーキテクチャあたりが悩むポイントになりますし,詳しい人だとデイリーイメージにするのかどうかや,インストール済みイメージを使うのか,インストーラーはどれを使うのかも選択肢に出てきます。

そのためUbuntuでは数年前から,イメージのダウンロードスクリプトをいろいろ用意してきました。たとえば第317回で坂本さんが紹介したTestDriveはUbuntu開発者向け開発版デイリービルドのインストールイメージのダウンローダーとも言えます。第329回で使った,lxc-createのubuntu-cloudテンプレートは「--flush-cache」オプションを付ければ,毎回cloud-images.ubuntu.comから最新リリースビルドのクラウドイメージをダウンロードして使うようになっています注1)。

そんな中,おもにKVM/libvirt向けのイメージダウンローダー兼ラッパースクリプトとして導入されたのがuvtoolです注2)。このツールを使えば,cloud-images.ubuntu.comから最新のインストール済みqcow2イメージをダウンロードできるうえに,そのイメージを使って仮想マシンもコマンド1つで構築できます。Ubuntu 13.10のリリース直前に追加されたこのツールはUbuntu 14.04 LTSでようやくそれらしく使えるようになってきました注3)。

注1)
cloud-iamges.ubuntu.comでは,「クラウドイメージ」という名称で,Amazon EC2やOpenStack,LXC,KVMなどで使えるインストール済みのリリースイメージを配布しています。定期的に最新のアーカイブに追随するようになっていますので,サーバー用の仮想マシンイメージとしてクラウドイメージを利用すれば,インストール後のアップデート量が少なくて済みます。
注2)
そういえばubuntu-vm-builderなんてのもありましたね。
注3)
パッケージの説明にはLXCでも使えることを想定しているように見えますが,今のところはまだそういう実装はありません。

手始めにuvtoolを

公式リポジトリにすでにパッケージが存在するため,Ubuntu 14.04 LTS以降ならインストールはとてもかんたんです。

$ sudo apt install uvtool

これだけ。uvtoolに加えてQEMUやsimplestreamsといったパッケージも一緒にインストールされます注4)。ちなみにaptに「--no-install-recommends」オプションを追加している場合は,uvtool-libvirtなどがインストールされません。現時点ではほぼ必須なので明示的にインストールしましょう。

インストールするとlibvirtグループが追加され,sudoグループのユーザーがlibvirtグループに追加されます。今後の作業を管理者権限なしに実行するにはlibvirtグループに入っておく必要があるため,一度ログインしなおしてください。

注4)
実はこの「simplestreams」のほうがUbuntu的には重要な機能で,MAASやOpenStackにおけるイメージの同期ライブラリとして現在利用が進んでいます。

uvt-simplestreams-libvirtでイメージのダウンロード

イメージのダウンロードにはuvt-simplestreams-libvirtのsyncサブコマンドを使用します。

$ uvt-simplestreams-libvirt sync release=trusty arch=amd64

releaseやarchはそれぞれ必要なリリース名やアーキテクチャ名です。どちらも省いた場合は,ホストのアーキテクチャと同じすべてのリリースのイメージをダウンロードしますので,ダウンロード完了まで時間がかかるでしょう。

ちなみにリリースイメージではなくテスト前のデイリーイメージを利用したい場合は,次のように「--source」オプションを追加します注5)。

$ uvt-simplestreams-libvirt sync \
    --source http://cloud-images.ubuntu.com/daily \
    release=trusty arch=amd64

ダウンロードが完了したイメージはqueryサブコマンドで確認できます。

$ uvt-simplestreams-libvirt query
release=trusty arch=amd64 label=release (20140927)

このファイルの実体は/var/lib/uvtool/libvirt/images/にあり,/var/lib/uvtool/libvirt/metadata/にメタデータが存在しますので,一度覗いておくと良いでしょう。ちなみにダウンロードされたイメージはQCOW2フォーマットですので,必要ならqemu-imgコマンドで他のフォーマットに変更して利用することも可能です。

注5)
蛇足ではありますが,この「クラウドイメージのデイリービルド」,今後は「リポジトリに変更があったらビルドする」方式に変更すると言う話があります。これが通常リリースでも適用されれば,「最新のイメージ」のダウンロードはより効率的に行えるようになります。

uvt-kvmで仮想マシンの構築

ダウンロードしたイメージをKVMで使えるようにセットアップするのがuvt-kvmコマンドです。さっそく仮想マシンを1つ作ってみましょう。なお,SSHの鍵を作成していない場合は,あらかじめ「ssh-keygen」で鍵を作成しておいてください。

$ uvt-kvm create hana release=trusty

ここで「hana」と指定しているところが仮想マシンの名前になります注6)。virshなどではドメインと呼ばれるものです。release以降はフィルタールールで,uvt-simplestreams-libvirtでダウンロードしたイメージの中からルールにマッチするイメージを使用して仮想マシンを作成します。ちなみにreleaseを省略すると,最新の「LTSリリース」を利用します。

createサブコマンドは/usr/share/uvtool/libvirt/template.xmlを使って仮想マシンを作成します。このとき,いくつかのオプションを指定可能です。たとえば--memory,--disk,--cpuは仮想マシンのメモリ,ディスク容量,CPUコア数を設定します。初期値はそれぞれ512MiB,8GiB,1コアです。

クラウドイメージは最初からCloudInitがインストールされていますので,EC2などと同様に--user-dataオプションを渡せば構築時に追加の設定を行うことが可能です。さらに--packagesなど,userdataの一部の設定を上書きするオプションも存在します。

何も指定しない場合,仮想マシンの初期ユーザー名は「ubuntu」です。また,実行ユーザーの公開鍵(~/.ssh/id_rsa.pub)がauthorized_keysにコピーされるため,最初からsshログインできるようになっています。それに対して,パスワードは設定されないためパスワードログインはできません。VTログインなどを行う必要があるのなら--passwordオプションでパスワードを設定はできますが,--user-dataを使うほうが安全でしょう。なお--passwordは--user-dataオプションとは同時には使えません。

構築した仮想マシンは「uvt-kvm destroy」で削除できます。

他のオプションも含めて詳しいことはuvt-kvmのmanページに掲載されています。

注6)
「/var/run/libvirt/libvirt-sock」に接続できないというエラーが表示される場合は,ユーザーがlibvirtグループに参加していません。再度ログインしなおしてください。「no supported architecture」と表示される場合は,CPUの仮想支援機構が動いていない状態です。BIOSの設定等も見直してください。

uvt-kvmで仮想マシンの状態確認

作成した仮想マシンのリストは「uvt-kvm list」で確認できます。

$ uvt-kvm list
hana
naru
yaya
tami
machi

また起動中の仮想マシンへはsshサブコマンドでもログインできます。

$ uvt-kvm ssh hana --insecure

ここで「--insecure」オプションを付けているのは,このアクセスが自動的に以下のオプションを設定していることを明確にするためです。

UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no
CheckHostIP=no

今のところ「--insecure」を付けない場合は単純にエラー終了するようになっています。将来的に「--insecure」オプションを付けないときは上記オプションを外してアクセスできるようにするかもしれません。sshサブコマンドの末尾には,通常のsshと同様のオプションを指定できます。

ところでKVMで作成した仮想マシンにsshアクセスできるようになるには,仮想マシンの作成が完了したうえで起動し,IPアドレスを割り当て,sshサーバーが起動していなければなりません。waitサブコマンドはその一通りの処理が完了するまで待つコマンドです。

$ uvt-kvm wait hana --insecure

と言ってもやっていることはlibvirtに問い合わせてIPアドレスが割り当てられているかどうかを確認し,割り当てられたらsshコマンドでログインし,/usr/share/uvtool/libvirt/remote-wait.shコマンドを実行して,runlevelコマンドが2を返し,/var/lib/cloud/instance/boot-finishedファイルが作成されるのを待つだけです。「--remote-wait-script」オプションを使えば,remote-wait.sh以外の任意のスクリプトも実行できますので,環境に合わせてカスタマイズするのも良いでしょう。

ちなみに割り当てられたIPアドレスを表示するだけであれば,「uvt-kvm ip hana」でも可能です。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入