web-dev-qa-db-ja.com

sudoなしでvirshネットワークをリストするにはどうすればよいですか?

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グループに属しています。

何が起こっている?通常のユーザーとしてネットワークを一覧表示できないのはなぜですか?

10

そのようです

明示的に述べられていない場合、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コマンドで直接接続文字列を指定する方が簡単です(少なくともスクリプトを記述するとき)。

10

/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を明示する必要はありません

9
Orlando Nuske

ドキュメントから、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)のマニュアルページで説明が必要な場合があります...

0
thrig

ローカルユーザーで動作するようにvirshを設定することが可能です。詳細はこちら:

https://major.io/2015/04/11/run-virsh-and-access-libvirt-as-a-regular-user/

基本的には、polkitルールを設定してlibvirtdデーモンに接続する必要があります

0
Martynas Saint