第521回の
QEMUを利用した仮想マシンサポート
繰り返しになりますが、
もちろん
LXDは今風のコマンド体系を導入することで、
LXDの仮想マシン対応の正体は、
ところでQEMUのラッパーツールという意味では、
むしろmultipassには
同じQEMUを使うツールとは言え、
multipassのインスタンス上に最新のLXDをインストールする
さて、
仮想マシン機能が導入されたのはLXD 3.
おそらく本連載の読者のほとんどは、
Nested KVMが有効かされているかどうかは次のコマンドで確認できます。
$ cat /sys/module/kvm_intel/parameters/nested N
Nなら無効になっていて、kvm_
」kvm_
」
Ubuntuは19.
$ echo 'options kvm_intel nested=1' | sudo tee -a /etc/modprobe.d/kvm.conf optionns kvm_amd nested=1 $ sudo modprobe -r kvm_intel $ sudo modprobe kvm_intel $ cat /sys/module/kvm_intel/parameters/nested Y
ちなみにqemu-system-x86パッケージをインストールしている場合、
Nested KVMの準備ができたら、--beta
」
$ sudo snap install multipass --classic
無事にインストールできたら、multipass exec
」
$ multipass launch -c 2 -m 8G -d 100G --name nested lts $ multipass exec nested -- sudo sh -c "apt update && apt full-upgrade -y" $ multipass exec nested -- cat /sys/module/kvm_intel/parameters/nested N
ちなみに、
ここに最新のLXDをインストールします。
$ multipass exec nested -- sudo snap install lxd --stable 2020-02-25T20:13:23+09:00 INFO Waiting for restart... lxd 3.21 from Canonical✓ installed
「--stable
」--channel=3.
」
Ubuntu 18.
$ multipass exec nested -- sudo lxd.migrate => Connecting to destination server => Running sanity checks The source server is empty, no migration needed. The migration is now complete and your containers should be back online. Do you want to uninstall the old LXD (yes/no) [default=yes]? yes All done. You may need to close your current shell and open a new one to have the "lxc" command work. To migrate your existing client configuration, move ~/.config/lxc to ~/snap/lxd/current/.config/lxc
途中で
さらにlxd init
」
$ multipass exec nested -- sudo lxd init \ --storage-backend btrfs \ --storage-create-loop 80 \ --auto
これで準備完了です。LXDそのものの使い方については、
LXD上で仮想マシンインスタンスを作る
multipass上のLXDから仮想マシンインスタンスを作成しましょう。まず、
$ multipass shell nested
multipassインスタンス内部のコマンドプロンプトは、nested$
」
もちろんここまで説明したようなホスト上からmultipass exec
」multipass exec
」
$ multipass exec nested -- sudo -i -u ubuntu lxc (LXDコマンドのオプション)
仮想マシン用プロファイルの作成
さて、
nested$ lxc profile create vm Profile vm created nested$ openssl passwd -6 ubuntupassword $6$iFWJK0DR0buaZcAC$h16dzYSH2/iEBwK0PG6eZ1.eCft.Dk3997aVkYA5/a33c29JDyrIbr76xQd.OMUfGjgmFvF0PZJ2jwZ0cRqVB. nested$ cat <<'EOF' | lxc profile edit vm config: user.user-data: | #cloud-config ssh_pwauth: yes apt_mirror: http://jp.archive.ubuntu.com/ubuntu/ users: - name: ubuntu passwd: "$6$iFWJK0DR0buaZcAC$h16dzYSH2/iEBwK0PG6eZ1.eCft.Dk3997aVkYA5/a33c29JDyrIbr76xQd.OMUfGjgmFvF0PZJ2jwZ0cRqVB." ssh_import_id: - gh:m-shibata lock_passwd: false groups: lxd shell: /bin/bash sudo: ALL=(ALL) NOPASSWD:ALL description: VM specific configuration devices: config: source: cloud-init:config type: disk EOF
プロファイルに最低限設定すべきものは次のふたつです。
- ログイン用のアカウント
- 設定用ストレージデバイス
LXDの仮想マシンインスタンスは、
パスワードを設定しているのは、openssl
コマンドを使ってパスワード文字列
もうひとつ必要なのが
仮想マシンインスタンスの起動と初期設定
プロファイルができたので、
nested$ lxc launch ubuntu:18.04 vmachine --vm --profile default --profile vm Creating vmachine Starting vmachine
ポイントは--vm
」lxc image list ubuntu:bionic/
」TYPE
」VIRTUAL-MACHINE
」
仮想マシン用のベースイメージのダウンロードから開始するので、lxc list
」
無事に起動したら、lxc exec
」lxc console
」ssh
」
nested$ lxc console vmachine To detach from the console, press: <ctrl>+a q Ubuntu 18.04.4 LTS vmachine ttyS0 vmachine login: ubuntu Password:(cloud-initで指定したパスワード) Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-88-generic x86_64) (中略) Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. ubuntu@vmachine:~$
「lxc console
」
LXDエージェントの起動スクリプトは設定用ストレージデバイスにデバイスに格納されています。前述の仮想マシン用プロファイルで指定したあれです。このデバイスはQEMUの9pプロトコルを経由して、
ubuntu@vmachine:~$ sudo mount -t 9p config /mnt/ ubuntu@vmachine:~$ cd /mnt/ ubuntu@vmachine:/mnt$ sudo ./install.sh Created symlink /etc/systemd/system/multi-user.target.wants/lxd-agent.service → /lib/systemd/system/lxd-agent.service. Created symlink /etc/systemd/system/multi-user.target.wants/lxd-agent-9p.service → /lib/systemd/system/lxd-agent-9p.service. LXD agent has been installed, reboot to confirm setup. To start it now, unmount this filesystem and run: systemctl start lxd-agent-9p lxd-agent ubuntu@vmachine:~$ cd ubuntu@vmachine:~$ sudo umount /mnt/ ubuntu@vmachine:~$ sudo reboot
インストールスクリプト自体は、
最後に仮想マシンを再起動して設定を反映しておきましょう。
仮想マシンの設定の変更方法
LXDの仮想マシンインスタンスは、
nested$ lxc exec vmachine -- dmesg | egrep "EFI v|secureboot" [ 0.000000] efi: EFI v2.70 by EDK II [ 0.000000] secureboot: Secure boot enabled
このため、
LXDの設定として
nested$ lxc stop vmachine nested$ lxc config set vmachine security.secureboot false nested$ lxc start vmachine nested$ lxc exec vmachine -- dmesg | egrep "EFI v|secureboot" [ 0.000000] efi: EFI v2.70 by EDK II [ 0.000000] secureboot: Secure boot could not be determined (mode 0)
無事にセキュアブートがオフになりました。
LXDのサイトには、
仮想マシンを使う上でもっとも便利な設定が
nested$ lxc stop vmachine nested$ lxc config set vmachine raw.qemu -- '-m 4G' nested$ lxc start vmachine nested$ lxc exec vmachine -- free -h total used free shared buff/cache available Mem: 3.9G 84M 3.6G 656K 163M 3.6G Swap: 0B 0B 0B
反映されているようですね。メモリーサイズだけならLXDの標準的な設定でも可能ですが、
仮想マシンインスタンス上でVirtualBoxを起動する
最後に仮想マシンインスタンスの上で、
本記事の手順通りに実施していたら、
まず、-cpu host
」
nested$ echo 'options kvm_intel nested=1' | sudo tee -a /etc/modprobe.d/kvm.conf optionns kvm_amd nested=1 nested$ sudo modprobe -r kvm_intel nested$ sudo modprobe kvm_intel nested$ cat /sys/module/kvm_intel/parameters/nested Y nested$ lxc restart vmachine
これでLXDの仮想マシンインスタンスでも
次にLXDの仮想マシンインスタンスにVirtualBoxをインストールします。VirtualBoxの基本的なことに関しては先日
VirtualBoxのインストール
今回は公式が配布している最新版を使うことにします。まずはLinux版のダウンロードページからLinux版のDebianパッケージをダウンロードしておきます。
このダウンロードしたファイルをホストからmultipassのインスタンスへ、
まずはホストの
$ multipass transfer \ ~/ダウンロード/virtualbox-6.1_6.1.4-136177~Ubuntu~bionic_amd64.deb \ nested:/home/ubuntu/vbox.deb
「multipass transfer
」multipass exec
」
$ multipass exec nested -- \ sudo -i -u ubuntu lxc file push vbox.deb \ vmachine/home/ubuntu/
「lxc file
」
コピーしたVirtualBoxのパッケージをインストールします。ちなみにセキュアブートがオンのままだと、lxc console
」
$ multipass exec nested -- \ sudo -i -u ubuntu lxc exec vmachine -- \ sh -c "apt install -y dkms /home/ubuntu/vbox.deb" (中略) 0 upgraded, 249 newly installed, 0 to remove and 0 not upgraded. Need to get 94.4 MB/188 MB of archives. After this operation, 835 MB of additional disk space will be used. (後略)
アカウントをvboxusersグループに追加して、
$ multipass exec nested -- \ sudo -i -u ubuntu lxc exec vmachine -- \ usermod -a -G vboxusers ubuntu $ multipass exec nested -- \ sudo -i -u ubuntu lxc restart vmachine
VirtualBox Extension Packのインストール
VirtualBoxはGUIで操作することが一般的です。しかしながらLXDで作成した仮想マシンインスタンスではデスクトップ環境は動いていません。そこで今回はVBoxManageコマンドを利用してCLIからVirtualBoxを操作することにします。
さらにVirtualBox上で動く仮想マシンのディスプレイに接続する方法が必要です。VirtualBoxのExtension PackにはVirtualBox用のリモートデスクトッププロトコルであるVRDP機能があります。本記事ではこのExtension PackもLXDの仮想マシンにインストールして使うことにしましょう。
VirtualBoxのダウンロードページから
$ multipass transfer \ ~/ダウンロード/Oracle_VM_VirtualBox_Extension_Pack-6.1.4.vbox-extpack \ nested:/home/ubuntu/Oracle_VM_VirtualBox_Extension_Pack-6.1.4.vbox-extpack $ multipass exec nested -- \ sudo -i -u ubuntu lxc file push Oracle_VM_VirtualBox_Extension_Pack-6.1.4.vbox-extpack \ vmachine/home/ubuntu/
ちなみにExtension Packはバージョンの整合性の判断にファイル名も使用しているらしく、
Extension PackはVBoxManage
」
$ multipass exec nested -- \ sudo -i -u ubuntu lxc exec vmachine -- \ sudo VBoxManage extpack install /home/ubuntu/Oracle_VM_VirtualBox_Extension_Pack-6.1.4.vbox-extpack VirtualBox Extension Pack Personal Use and Evaluation License (PUEL) License version 10, 20 July 2017 (中略) Do you agree to these license terms and conditions (y/n)? y License accepted. For batch installation add --accept-license=56be48f923303c8cababb0bb4c478284b688ed23f16d775d729b89a2e8e5f9eb to the VBoxManage command line. 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Successfully installed "Oracle VM VirtualBox Extension Pack".
ライセンスの同意を求められるので、
インストール状態はVBoxManage list extpacks
」
$ multipass exec nested -- \ sudo -i -u ubuntu lxc exec vmachine -- \ VBoxManage list extpacks Extension Packs: 1 Pack no. 0: Oracle VM VirtualBox Extension Pack Version: 6.1.4 Revision: 136177 Edition: Description: Oracle Cloud Infrastructure integration, USB 2.0 and USB 3.0 Host Controller, Host Webcam, VirtualBox RDP, PXE ROM, Disk Encryption, NVMe. VRDE Module: VBoxVRDP Usable: true Why unusable:
VirtualBoxのインスタンスの作成と起動
もろもろ準備できたのでLXDの仮想マシンインスタンス内部に移動し、
$ multipass exec nested -- \ sudo -i -u ubuntu lxc exec vmachine -- \ sudo -i -u ubuntu bash
まずは仮想マシンの作成と設定です。
vmachine$ VBoxManage createvm --name bionic --ostype Ubuntu_64 --register vmachine$ VBoxManage modifyvm bionic --memory 2048 --vram 128 \ --accelerate3d on --boot1 dvd --boot2 disk --vrde on --vrdeport default
「--vrde on --vrdeport default
」
ストレージを作成し、
vmachine$ VBoxManage createmedium disk --filename bionic --size 16384 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Medium created. UUID: 7cb06bf4-c127-4ac4-8921-5e3a5c330edf vmachine$ VBoxManage storagectl bionic --name sata0 --add sata \ --controller IntelAHCI --bootable on vmachine$ VBoxManage storageattach bionic --storagectl sata0 \ --port 0 --device 0 --type hdd --medium bionic.vdi vmachine$ VBoxManage storagectl bionic --name ide0 --add ide \ --controller PIIX4 vmachine$ VBoxManage storageattach bionic --storagectl ide0 \ --port 0 --device 0 --type dvddrive \ --medium ubuntu-18.04.4-desktop-amd64.iso
これで仮想マシン側の準備は整ったので、
vmachine$ VBoxHeadless --startvm bionic
デスクトップ環境がない状態で起動するのでVBoxHeadless
」
VRDPの画面には、lxc config device
」
nested$ sudo iptables -t nat -A PREROUTING -p tcp -i ens4 \ --dport 3389 -j DNAT --to-destination 10.53.195.92 nested$ sudo iptables -t nat -A POSTROUTING -o ens4 \ -j SNAT --to-source 10.18.154.201 nested$ sudo iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT
「ens4」
あとはRDPクライアントでmultipassのインスタンスのIPアドレス
図1 Remminaからアクセスした、
ちなみにmultipassはQCOW2イメージを、
multipassの上でVirtualBoxを動かすのは
ただし見も蓋もない言い方をすると、