KVMで使うvirshって、Xenの時代からあって、使いこなすと結構いろんなことができる。例えば、CPUのダイナミックアップダウンができたりする。仮想化環境を動かすためのフロントエンドなので、確かvSphereとかも操作できたような気がする。KVMの場合、別にvirsh (libvirt)を使わなくてもQemu直叩きで動かすことができるが、こう言うフロントエンドAPIがあると管理しやすい。
閑話休題
リモートコマンドでQNAPの仮想化、コンテナを使いたいというのがある。
今回は、Virtualization Station編。Container Station編はこちら。
この方法は、あくまでもVirtualization Stationのエンジンである、Libvirtに直接接続をしているので、Virtualization Stationに直接接続をしているわけではないので注意。
よって、あくまでも逸般の誤家庭へのご紹介であって、直接操作するのはおすすめしないし、設定を変えるのは、もっとお勧めしない。設定を変えて動かなくなったといっても責任は持てない。
(なので、virshコマンドで何ができるかは記載しない。調べればわかると思うが。でも自己責任)
電源オンオフなどの単純操作、モニタリング向け。設定の微調整(マニアックしかしないだろうが)は都度調整。仮想マシンの作成はオブジェクト自体は同じところを見ているだろうがVirtualize Stationのお作法と異なると問題が起きる可能性あり。
QNAPで動いているVirtualization Stationは、実質Libvirtで動いているKVMなので、virshなどが使える。しかし、Libvirtの環境がchrootされた環境なので、簡単には使えない。
ちょっとしたコツがいる。また、環境によってパスが違う(/share/CACHEDEV1_DATA/.qpkg/QKVM/)ので自身のパスを確認すること。
事前に、QNAPのadminユーザを有効にして、鍵認証でSSHログインができるようにしておく。
ssh でログイン
一般ユーザでvirshを実行する場合:
/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/virsh -c qemu:///system list –all
以下のような結果が表示されるはず。以降、すべて同じ結果が得られるはず。

adminユーザの場合:
/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/virsh list –all
リモート接続の場合:
条件
-
手元の端末にvirshが入っていることを想定
-
NASのユーザに対してsshの証明書認証されていること。(パスワード認証はだめ。少なくともvirt-managerからはダメだった。)
Ubuntu Serverでvirshを入れる場合は
sudo apt install -y libvirt-clients virtinst
sshセッション経由でログイン
ssh nasuser@192.168.100.40 ‘/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/virsh -c qemu:///system list –all’
virtshにURIだけで接続:
これが知りたかった。URIがわかればvirt-managerから接続ができるので。
QNAPのncコマンドは、Notification Centerのコマンドで、virshが要求するのは、netcat だった。URIにnetcatを教える方法を調べるのに小一時間かかった。
sshの証明書認証されていること。(パスワード認証はだめ。少なくともvirt-managerからはダメだった。)
virsh -c ‘qemu+ssh://nasuser@192.168.100.40/system?socket=/share/CACHEDEV1_DATA/.qpkg/QKVM/var/run/libvirt/libvirt-sock&netcat=/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/sbin/nc.static’ list –all
ちなみにvirt-managerから接続する場合は、
以下のCustom URIに

qemu+ssh://nasuser@192.168.100.40/system?socket=/share/CACHEDEV1_DATA/.qpkg/QKVM/var/run/libvirt/libvirt-sock&netcat=/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/sbin/nc.static
を入力する。

コンソールは繋がらない。

以下のコマンドラインでVirt-viewerで接続すると、つながりにいこうとするが、VNCを有効にしていないので繋がらなかった。
virt-viewer –connect ‘qemu+ssh://nasuser@192.168.100.40/system?socket=/share/CACHEDEV1_DATA/.qpkg/QKVM/var/run/libvirt/libvirt-sock&netcat=/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/sbin/nc.static’


しかし、設定の参照や変更はできそう。設定変更しておかしくなる可能性もあるので注意だが。
QEMUを直接叩きたい
用途はあまりないが、qemu-system-x86_64を叩きたい場合、バイナリは以下に入っているが、これを実行してもライブラリ不足で動かない。
/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/qemu-system-x86_64
LD_LIBRARY_PATH=/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/lib /share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/qemu-system-x86_64 –version
/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/qemu-system-x86_64: error while loading shared libraries: libpixman-1.so.0: cannot open shared object file: No such file or directory
以下のようにすると動作する。
LD_LIBRARY_PATH=/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/lib /share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/qemu-system-x86_64 –version
QEMU emulator version 7.0.0
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
QEMUがちょっと古い様な。
ちなみに、QemuやKVMでサポートされているデバイスを調べるには。
LD_LIBRARY_PATH=/share/CACHEDEV1_DATA/.qpkg/QKVM/usr/lib /share/CACHEDEV1_DATA/.qpkg/QKVM/usr/bin/qemu-system-x86_64 -device help
name “i82801b11-bridge”, bus PCI
以下略(実際に実行して確認してみてください。)