Debianを使用している1台のマシンで、Ubuntuを実行している別のマシンでは再現できない奇妙な動作に気づきました。 virsh
ネットワークを通常のユーザーとしてリストすると、空のリストが表示されます。
〜$ virsh net-list --all 名前状態自動開始永続的 ------------------------------------ ----------------------
Sudo
を指定して同じコマンドを実行すると、デフォルトの接続が表示されます。
〜$ Sudo virsh net-list --all 名前状態自動開始永続的 ------------------------------------ ---------------------- デフォルトアクティブいいえはい
ファイル自体の権限は正しく設定されているようです:
〜$ ls -l/etc/libvirt/qemu/networks 合計8 drwxr-xr-x 2ルートルート4096 Jul 1 18:19 autostart -rw-r--r-- 1ルートルート228 Jul 1 18:19 default.xml
ユーザーはkvm
およびlibvirtd
グループに属しています。
何が起こっている?通常のユーザーとしてネットワークを一覧表示できないのはなぜですか?
そのようです :
明示的に述べられていない場合、virshバイナリーは 'qemu:/// session' URIを使用します(少なくともdebianでは)。
そのため、Sudo
で実行すると、virsh net-list
だけでなく、実際にはvirsh list
を含むすべてのコマンドの動作が異なります。つまり、virsh net-list
はグローバルスコープではなく、ユーザーのスコープを使用していました。
意味あり;デフォルト接続を作成してから開始すると、「ネットワークはすでにインターフェースvirbr0によって使用されています」というエラーが発生しました—知らないうちに、「デフォルト」という名前のsecond接続を開始しました、すでに実行されていました。
解決策は簡単です。
virsh --connect qemu:///system net-list
私が期待していたことをしている間、
virsh net-list
しません。
Ubuntuマシンに問題がないのはなぜですか?
ドキュメント によると:
Virshが環境変数
VIRSH_DEFAULT_CONNECT_URI
setを見つけると、デフォルトでこのURIを試します。ただし、libvirtがLIBVIRT_DEFAULT_URI
自体をサポートするようになったため、この環境変数の使用は廃止されました。
実際、Ubuntuマシンでは2番目の変数が定義されているようです。
ubuntu:〜$エコー$ VIRSH_DEFAULT_CONNECT_URIubuntu:〜$エコー$ LIBVIRT_DEFAULT_URI qemu:/// system
一方、Debianマシンでは、これらの変数は設定されていません。
debian:〜$エコー$ VIRSH_DEFAULT_CONNECT_URIdebian:〜$エコー$ LIBVIRT_DEFAULT_URI
これらの変数の1つをqemu:///system
に設定するとおそらく機能しますが、virsh
コマンドで直接接続文字列を指定する方が簡単です(少なくともスクリプトを記述するとき)。
/etc/libvirt/libvirt.confファイルのこの行のコメントを外します
uri_default = "qemu:///system"
fedora 29では私には十分でした。
編集:ここで言うように https://libvirt.org/uri.html 非rootユーザーの場合、ファイルにも必要$ XDG_CONFIG_HOME/libvirt/libvirt.confにあります
これは私の場合:
~/.config/libvirt/libvirt.conf
だから私はそこにファイルをコピーし(私の新鮮なインストールで)、そしてvirsh net-listは非ルートユーザーとして機能し、--connectを明示する必要はありません
ドキュメントから、root
は(ほとんど)必須であり、virsh
はデーモンをチャットしています(_/etc/libvirt
_ディレクトリ内のファイルを手動で探し回っていません。strace
またはsysdig
が確認します):
_ Most virsh operations rely upon the libvirt library being able to
connect to an already running libvirtd service. This can usually be
done using the command service libvirtd start.
Most virsh commands require root privileges to run due to the
communications channels used to talk to the hypervisor. Running as non
root will return an error.
_
したがって、_virsh list
_がエラーを返さない理由は、バグであるか、virsh(1)
のマニュアルページで説明が必要な場合があります...
ローカルユーザーで動作するようにvirshを設定することが可能です。詳細はこちら:
https://major.io/2015/04/11/run-virsh-and-access-libvirt-as-a-regular-user/
基本的には、polkitルールを設定してlibvirtdデーモンに接続する必要があります