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]。
手始めにuvtoolを
公式リポジトリにすでにパッケージが存在するため、Ubuntu 14.04 LTS以降ならインストールはとてもかんたんです。
これだけ。uvtoolに加えてQEMUやsimplestreamsといったパッケージも一緒にインストールされます[4]。ちなみにaptに「--no-install-recommends」オプションを追加している場合は、uvtool-libvirtなどがインストールされません。現時点ではほぼ必須なので明示的にインストールしましょう。
インストールするとlibvirtグループが追加され、sudoグループのユーザーがlibvirtグループに追加されます。今後の作業を管理者権限なしに実行するにはlibvirtグループに入っておく必要があるため、一度ログインしなおしてください。
uvt-simplestreams-libvirtでイメージのダウンロード
イメージのダウンロードにはuvt-simplestreams-libvirtのsyncサブコマンドを使用します。
releaseやarchはそれぞれ必要なリリース名やアーキテクチャ名です。どちらも省いた場合は、ホストのアーキテクチャと同じすべてのリリースのイメージをダウンロードしますので、ダウンロード完了まで時間がかかるでしょう。
ちなみにリリースイメージではなくテスト前のデイリーイメージを利用したい場合は、次のように「--source」オプションを追加します[5]。
ダウンロードが完了したイメージはqueryサブコマンドで確認できます。
このファイルの実体は/var/lib/uvtool/libvirt/images/にあり、/var/lib/uvtool/libvirt/metadata/にメタデータが存在しますので、一度覗いておくと良いでしょう。ちなみにダウンロードされたイメージはQCOW2フォーマットですので、必要ならqemu-imgコマンドで他のフォーマットに変更して利用することも可能です。
uvt-kvmで仮想マシンの構築
ダウンロードしたイメージをKVMで使えるようにセットアップするのがuvt-kvmコマンドです。さっそく仮想マシンを1つ作ってみましょう。なお、SSHの鍵を作成していない場合は、あらかじめ「ssh-keygen」で鍵を作成しておいてください。
ここで「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ページに掲載されています。
uvt-kvmで仮想マシンの状態確認
作成した仮想マシンのリストは「uvt-kvm list」で確認できます。
また起動中の仮想マシンへはsshサブコマンドでもログインできます。
ここで「--insecure」オプションを付けているのは、このアクセスが自動的に以下のオプションを設定していることを明確にするためです。
今のところ「--insecure」を付けない場合は単純にエラー終了するようになっています。将来的に「--insecure」オプションを付けないときは上記オプションを外してアクセスできるようにするかもしれません。sshサブコマンドの末尾には、通常のsshと同様のオプションを指定できます。
ところでKVMで作成した仮想マシンにsshアクセスできるようになるには、仮想マシンの作成が完了したうえで起動し、IPアドレスを割り当て、sshサーバーが起動していなければなりません。waitサブコマンドはその一通りの処理が完了するまで待つコマンドです。
と言ってもやっていることは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」でも可能です。
他のツールとも一緒に
uvtoolはlibvirtを使っているため、libvirtと連携しているツールなら一緒に使うことが可能です。というよりも仮想マシンの作成と破棄以外の管理は他のツールを使わないとできません。
virshでも操作可能
libvirtに対応したツールといえばlibvirtdと一緒に付いてくるvirshでしょう。
GNOME Boxesで管理する
「GNOME Boxes」はGNOMEで開発している仮想マシンを管理するGUIツールの1つです。libvirtのGUIツールと言えばvirt-managerが有名ですが、Boxesはよりデスクトップのエンドユーザー向けに使いやすさとシンプルさを重視した作りになっています。
Ubuntu 14.04 LTSでインストールされるBoxesは3.8とだいぶ古いバージョンであることに注意してください。第320回であわしろいくやさんが説明しているように、gnome3-staging PPAを使えば、3.12のBoxesをインストールすることも可能です。
VirtualBoxのようにISOインストールイメージから仮想マシンを作ることもできますが、今回は既に作成済みの仮想マシンに接続してみましょう。
仮想マシンを右クリックするとプロパティの表示や仮想マシンのシャットダウンを行えます。左クリックするとコンソールに接続できます。ここからアクセスしたい場合は、アカウントのパスワードを設定し、ロックを解除しましょう。作成時に設定していない場合は、sshログインして次のように変更できます。
ubuntu-desktopパッケージをインストールすればデスクトップとしてログインできます。ただしUnityの3Dアクセラレーションは動作しませんし、描画もたまにおかしくなります。日本語キーボードをつなぐ場合はいくつか設定を行わなくてはいけないので[7]、デスクトップ用途ならVirtualBoxを使ったほうが良いかもしれません。