自宅仮想環境 - QEMU+libvirt+virtinstで仮想マシンを作る

自宅環境で仮想マシンVM)を立てるまでです。

必要パッケージのインストール

$ sudo apt install qemu qemu-kvm libvirt-bin virtinst

ディレクトリの整備

/virtual 以下で仮想環境関係のものを管理しようと思っているので、まずはその準備をします。
具体的には以下5つの作業をします。

  1. /virtual などのディレクトリを作る
  2. 仮想環境をいじるグループを作る *1
  3. /virtual上記グループ所有にする
  4. /virtualパーミッションを設定する
  5. アカウントをグループに追加する
$ sudo mkdir /virtual/
$ sudo groupadd virtadmin
$ sudo -R chown :virtadmin /virtual
$ sudo chmod 2770 /virtual
$ mkdir /virtual/{disk,iso}
$ sudo chown root /virtual/{disk,iso}
$ sudo usermod -aG virtadmin <user>
$ sudo usermod -aG virtadmin libvirt-qemu

*2 *3

OSイメージのダウンロード

$ cd /virtual/iso
$ wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.3.0-amd64-netinst.iso

VMの作成

次の非常に長いコマンドでVMを作成できます。

$ virt-install --name=first --disk=/virtual/disk/first.qcow2,format=qcow2,size=4 --vcpus=1 --ram=1024 --cdrom=/virtual/iso/debian-9.3.0-amd64-netinst.iso --noautoconsole --graphics vnc,port=5900,listen=127.0.0.1 --network bridge=virbr0,model=virtio --os-type=linux --virt-type=kvm

出力は以下です。

WARNING  /virtual/disk/first.qcow2 may not be accessible by the hypervisor. You will need to grant the 'libvirt-qemu' user search permissions for the following directories: ['/virtual/disk', '/virtual']

Starting install...
Allocating 'first.qcow2'                                                                         | 4.0 GB  00:00:00
Creating domain...                                                                               |    0 B  00:00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.

Allocating 'xxxx.qcow2'が出ていて、その後にRemoving disk 'xxxx.qcow2'が出ていなければ上手くいっていることが多い印象です。
WARNING が出てますが、上記libvirt-qemuパーミッションを与えているので問題ないはずです。

VMへの接続

VMの作成でのコマンドでは、debian のディスクからブートしただけなので、debianをイチからインストールしていく必要があります。
インストールするには画面につなぐ必要があり、上記コマンドでは --graphics vnc,port=5900,listen=127.0.0.1VMの画面へのつなぎ方を指定しています。
今回は、VNCで画面が見れるようにしています。

$ ss -tna | grep 5900
LISTEN     0      1      127.0.0.1:5900                     *:*

ローカルループバックIPアドレスからのみを許可しているので、SSHポートフォワード経由でVNC接続すれば画面が見れるので、インストールできます。
(今回はやってませんが。自動インストールしたい。自動インストールしたら画面とか不要じゃない?SSHだけで良くない?)

補足

VMの一覧を見る

現在libvirtdで管理されているVMの一覧はvirsh list --allで確認できます。

$ virsh list --all
 Id    Name                           State
----------------------------------------------------
 3     first                          running

--allを付けているとシャットダウン中のlibvirtdが管理しているVMも表示されます。

libvirtd

ここまで説明ゼロで申し訳ありませんが、libvirt-binをインストールすると、仮想環境の維持管理を行ってくれる libvirtd というデーモンに、 virsh でアクセスして操作するようになります。
QEMU だと本来は qemu-system-x86 ...... のようなコマンドで、VMが終了するまで実行する形ですが、そこをlibvirtdが裏でやってくれる。)

本来 virshVMを作るとけっこうめんどくさい XML を書く必要がありますが、virt-install を使うとコマンドだけでVMを作成できるようになります。 *4
virt-install はブリッジインターフェースなどの設定も勝手にやってくれる(はず)なので非常に便利です。

VMの強制終了

VMを強制終了(いわゆる電プチ)するにはvirsh destroy <domain>します。
<domain>上記virsh listで出てくるName部分です。

*1:お前しか触らんやないかいってツッコミは無粋です

*2:usermod でグループを追加するのはミスりやすいからやめとけって記事がヒットしたりしますが私は知りません

*3:SGID 立ってても root でファイル作ったら引き継がれないんですね。

*4:けっこうめんどくさいXML 第22章 virsh でゲストを管理 - Red Hat Customer Portal

*5:URL長すぎでビビる