libvirtdがネットワーク設定にebtablesを使うようになってたのでlibvirtのネットワークが起動してなかった

今回のめもはArch Linux以外だと多分関係ないかも。パッケージの依存関係でebtablesが必須になっていれば多分問題無いはず。

仮想環境でも立ち上げようと思ってvirsh start ~なんてやったら↓のようなエラーが。

virsh Requested operation is not valid: network 'default' is not active

とりあえず確認をしてみるとホントにinactiveに。

masami@saga:~$ sudo virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              inactive   yes           yes

こんなのは昔もあったなーと思いつつその時の手順を実行して見る。

masami@saga:~$ sudo virsh net-start default
error: Failed to start network default
error: Unable to create bridge virbr0: File exists

えー、virbr0はいらっしゃると。

masami@saga:~$ brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.000000000000       yes

ということでlibvirdが起動しているかチェックしてみるとこいつはactiveになっているのが分かる。

masami@saga:~$ systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled)
   Active: active (running) since Mon 2014-05-12 21:38:05 JST; 2min 54s ago
     Docs: man:libvirtd(8)
           http://libvirt.org
 Main PID: 444 (libvirtd)
   CGroup: /system.slice/libvirtd.service
           └─444 /usr/bin/libvirtd -p /var/run/libvirtd.pid

May 12 21:38:06 saga libvirtd[444]: libvirt version: 1.2.4
May 12 21:38:06 saga libvirtd[444]: direct firewall backend requested, but /sbin/ebtables is not available: No such file or directory
May 12 21:38:06 saga libvirtd[444]: internal error: Failed to find path for dmidecode binary
May 12 21:38:06 saga libvirtd[444]: internal error: Failed to find path for dmidecode binary
May 12 21:38:06 saga libvirtd[444]: Unable to delete bridge virbr0: Device or resource busy
May 12 21:40:20 saga libvirtd[444]: Unable to create bridge virbr0: File exists

しかしよく見るとdirect firewall backend requested, but /sbin/ebtables is not available: No such file or directoryなどと言っていてちょっと怪しい感じが。

というわけでebtablesを入れてみる。 まずはこいつがどんなものなのか。

masami@saga:~$ yaourt -Ss ebtables
community/ebtables 2.0.10_4-4 [installed]
    Ethernet bridge filtering utilities

なるほど、bridge用のフィルタリングツールかってことでインストールを。

masami@saga:~$ yaourt -S ebtables
resolving dependencies...
looking for inter-conflicts...

Packages (1): ebtables-2.0.10_4-4

Total Installed Size:   0.24 MiB
〜略〜

そしてvirbr0をipコマンドでDOWNさせて、virbr0を一旦削除する。

masami@saga:~$ sudo ip link set down virbr0
masami@saga:~$ sudo brctl delbr virbr0
masami@saga:~$ brctl show
bridge name     bridge id               STP enabled     interfaces

これでもう一度ipコマンドでvirbr0がなくなっていることを確認し、次にlibvirtdを再起動する。

masami@saga:~$ sudo systemctl restart libvirtd
masami@saga:~$ systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled)
   Active: active (running) since Mon 2014-05-12 21:47:11 JST; 8s ago
     Docs: man:libvirtd(8)
           http://libvirt.org
 Main PID: 6005 (libvirtd)
   CGroup: /system.slice/libvirtd.service
           ├─6005 /usr/bin/libvirtd -p /var/run/libvirtd.pid
           └─6182 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf

May 12 21:47:12 saga libvirtd[6005]: internal error: Failed to find path for dmidecode binary
May 12 21:47:12 saga dnsmasq[6182]: started, version 2.70 cachesize 150
May 12 21:47:12 saga dnsmasq[6182]: compile time options: IPv6 GNU-getopt DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth DNSSEC
May 12 21:47:12 saga dnsmasq-dhcp[6182]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
May 12 21:47:12 saga dnsmasq-dhcp[6182]: DHCP, sockets bound exclusively to interface virbr0
May 12 21:47:12 saga dnsmasq[6182]: reading /etc/resolv.conf
May 12 21:47:12 saga dnsmasq[6182]: using nameserver 192.168.1.1#53
May 12 21:47:12 saga dnsmasq[6182]: read /etc/hosts - 2 addresses
May 12 21:47:12 saga dnsmasq[6182]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
May 12 21:47:12 saga dnsmasq-dhcp[6182]: read /var/lib/libvirt/dnsmasq/default.hostsfile

先ほどのebtablesのエラーがなくなっているのでvirshコマンドでネットワークの様子を確認。

masami@saga:~$ sudo virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes

これで対応完了( ´ー`)フゥー...