はじめに
自宅のサーバ(FUJITU PRIMERGY TX1310)にubuntu 18.04をクリーンインストールしたので、仮想マシンを動かすまでの設定を記録しておく。サーバ本体は母艦として最小限の環境を作り、学習環境は仮想マシン上に構築し、コピーや廃棄を可能としたい。
必要なパッケージだけ入れる
virshコマンドが実行できるようにする。
$ virsh
Command 'virsh' not found, but can be installed with:
sudo apt install libvirt-clients
$ sudo apt install libvirt-clients
仮想マシンイメージを作るときに使用する。
$ qemu-img
Command 'qemu-img' not found, but can be installed with:
sudo apt install qemu-utils
$ sudo apt install qemu-utils
kvmで動かしたいのでこれも入れる。
$ kvm
Command 'kvm' not found, but can be installed with:
sudo apt install qemu-kvm
$ sudo apt install qemu-kvm
$ virt-install
Command 'virt-install' not found, but can be installed with:
sudo apt install virtinst
$ sudo apt install virtinst
virsh listしてみるもこの時点ではまだ動かない。
$ sudo virsh list
error: failed to connect to the hypervisor
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
これも必要っぽいので入れる。
$ sudo apt install libvirt-bin
$ sudo virsh list
Id Name State
----------------------------------------------------
これで一旦、準備完了。ubuntu 16.04のときはlibvirt-binを個別にインストール必要がなかったので、何か変化があったのかもしれない。
ここでいったん再起動しておく。
$ sudo shutdown -r now
仮想マシンを作る
まずはディスクイメージの作成。下の例では150GBのQCOW2イメージを作っている。
$ qemu-img create -f qcow2 main.qcow2 150G
Formatting 'main.qcow2', fmt=qcow2 size=161061273600 cluster_size=65536 lazy_refcounts=off refcount_bits=16
$ file main.qcow2
main.qcow2: QEMU QCOW Image (v3), 161061273600 bytes
ディスクにOSをインストールする。今回はubuntu 18.04上にubuntu 18.04をインストールする。
$ virt-install -n main -r 8192 --disk=/usr/devel/vm/main.qcow2,bus=virtio --graphics vnc,password=vnc,listen=0.0.0.0,keymap=ja --noautoconsole -v --boot hd --cdrom /usr/devel/iso/ubuntu-18.04-live-server-amd64.iso
WARNING No operating system detected, VM performance may suffer. Specify an OS with --os-variant for optimal results.
Starting install...
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
仮想マシン上にOSをインストール
先ほどの手順まで正常に進んでいると、仮想マシンがインストールCDで起動している状態になっているはずなので、VNCで接続する。Macであれば
- Finderを右クリック
- サーバへ接続
- vnc://<サーバのIPアドレス>/ に接続
- パスワードはvnc
インストールの段階においては、IPアドレスはDHCPで取得する設定で進める。あとで静的IPアドレスが割り当てられるよう設定を変更する。インストールが完了したら再起動する。
仮想マシンに静的IPアドレスを設定する
今の状態だとlinux bridgeがDHCPでIPアドレスを払い出し、仮想マシンからインターネット向けの通信についてはNATされて出て行くので、固定IPアドレスが割り当てられるように設定していく。サーバの物理ポートが一個余っているので、VMには母艦とは別のポートを使用し、アドレスは母艦と同じセグメントの値を割り当てることにする。
これから仮想マシンの設定を変えることになるので、一旦仮想マシンをshutdownする。
$ virsh shutdown main # mainという名の仮想マシンをshutdown
今後、仮想マシンを複数立てる予定なので、物理ポート直結ではなく、bridge経由にする。bridgeは私の趣味によりovsにする。
$ ovs-vsctl
Command 'ovs-vsctl' not found, but can be installed with:
sudo apt install openvswitch-switch
$ sudo apt install openvswitch-switch
$ sudo ovs-vsctl add-br ovs-ext # ovs-extという名のbridgeを作る
$ sudo ovs-vsctl add-port ovs-ext enp2s0 # 空きの物理ポートを取り付け
$ sudo ovs-vsctl show
5202f5fe-f794-4d79-b2d1-0036dde8e5ae
Bridge ovs-ext
Port "enp2s0"
Interface "enp2s0"
Port ovs-ext
Interface ovs-ext
type: internal
ovs_version: "2.9.0"
$
デフォルトで作られたlinux bridgeは不要なので停止する。
仮想マシンを増やす予定がある場合はこの操作は不要。(2019/02/16更新)
$ virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
default active yes yes
$ virsh net-info default
Name: default
UUID: 30379418-5670-4ba0-8d11-6588bb33c722
Active: yes
Persistent: yes
Autostart: yes
Bridge: virbr0
$ virsh net-destroy default
Network default destroyed
$ virsh net-autostart default --disable
Network default unmarked as autostarted
仮想マシン側がovs-extを使用するよう、定義ファイルを編集する。
$ virsh edit main
interfaceの箇所を探し、以下のように編集する。
<interface type='network'>
<mac address='52:54:00:0e:5c:fe'/>
<source network='default'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<interface type='bridge'>
<source bridge='ovs-ext'/>
<virtualport type='openvswitch'/>
<model type='virtio'/>
</interface>
macアドレスやaddressについては、省略しても問題ない。自動的に再割り当てが行われる。
これで仮想マシン側に静的IPアドレスを設定すれば、直接(NATなしで)ネットワークにでることが可能になる。
編集後記
ovs bridgeに追加した物理ポートenp2s0
だが、何も設定しないと物理的にリンクアップしない。ubuntu 16.04までは/etc/network/interfaces
に
auto iface enp2s0
iface enp2s0 inet static
address 0.0.0.0
と書いておけばインターフェースがUPしていた。
ubuntu 18.04からは/etc/netplan/50-cloud-init.yaml
を編集することになる。
これについても同じように
network:
ethernets:
enp0s25:
-- 省略 --
enp2s0:
addresses:
- 0.0.0.0/0
optional: true
version: 2
と書いてみたのだが、構文エラーになるようで肝心のenp0s25のIPアドレスすら設定されずに起動してくる有様だった。(サーバにモニターを接続して、再編集するのに時間を取られてしまった...)
実際下記のように設定するとうまくいったのでここに記録しておく。
network:
ethernets:
enp0s25:
-- 省略 --
enp2s0:
addresses:
- 0.0.0.0/32
optional: true
version: 2
ネットマスク長を32にすることで無事インターフェースがUPしたが、なぜだかenp2s0には10.0.0.1/32が設定されていた。気持ちが悪いので今は192.168.255.255/32
を設定している。
0.0.0.0/32を設定すると10.0.0.1/32が設定されるのが仕様なのかは、時間ができたら調べてみようと思う。
2018/12/02 編集
ディスクが故障して再インストールした。手順を更新。