Ubuntu(debian) の /etc/network/interfaces
で openvswitch の bridge や port も設定できるらしいことが /usr/share/doc/openvswitch-switch/README.Debian
に書いてある。
allow-ovs br1
iface br1 inet manual
ovs_type OVSBridge
ovs_ports p5p1
しかし動かない!何が起こっているのか?
まず allow-ovs というのは、openvswitch の daemon 類が起動した後に ifup --allow ovs br1
と呼び出してもらうために書いてある。openvswitch の daemon 類が起動するためには、ovsdb が利用可能にならないといけない。つまりファイルシステムが用意できた後でないといけない。というわけで auto でなく allow-ovs となっているのは、起動順をそこまで遅延させるためのようだ。
ifup --allow ovs br1
を呼ぶのは、openvswitch の起動スクリプトであるはずだった。
ところが Upstart への移行の混乱に紛れて、現在 openvswitch の起動スクリプトは二種類インストールされる。ひとつは /etc/init/openvswitch-switch.conf
で、もう一つは /etc/init.d/openvswitch-switch
になっている。後者は有効になっていない(/etc/rc.N から symlink が張られていない)。有効なほうの /etc/init/openvswitch-switch.conf
を使って openvswitch daemon は起動する。ややこしいことに、/etc/init.d/openvswitch-switch
は ifup --allow ovs {bridges} を呼び出すが、/etc/init/openvswitch-switch.conf
ではその部分が抜け落ちている。
つまり ifup --allow ovs br1 は結局呼び出されない。よって動かない!というわけだった。やるやる詐欺状態。
Workaround 1
/etc/init.d/openvswitch-switch
を使い、/etc/init/openvswitch-switch.conf
を無効化する。せっかく Upstart に移行したのに…という感を拭えない。
Workaround 2
/etc/init/openvswitch-switch.conf
を修正する。設定ファイルとマークされていないファイルを書き換えるのが難点。
--- /etc/init/openvswitch-switch.conf 2014-01-20 21:30:49.000000000 +0900
+++ /tmp/openvswitch-switch.conf 2014-05-01 10:21:39.249793837 +0900
@@ -32,11 +32,13 @@
fi
set "$@" $OVS_CTL_OPTS
"$@"
+ ifup --allow ovs `ifquery --allow ovs --list`
end script
post-stop script
. /usr/share/openvswitch/scripts/ovs-lib
test -e /etc/default/openvswitch-switch && . /etc/default/openvswitch-switch
+ ifdown --allow ovs `ifquery --allow ovs --list`
ovs_ctl stop
end script
Workaround 3
/etc/network/interfaces
に書くのを諦める。/etc/rc.local
にやりたいことを書く。workaround としては最も筋が良いが、こちらも非 Upstart 的な流儀なのがイマイチ。
Workaround 4
/etc/network/interfaces
に書くのを諦める。openvswitch 起動時に Upstart のイベントを投げるようにする。
--- /etc/init/openvswitch-switch.conf 2014-05-01 10:42:27.055806142 +0900
+++ /tmp/openvswitch-switch.conf 2014-05-01 10:41:31.499597240 +0900
@@ -2,6 +2,9 @@
description "Open vSwitch switch"
author "James Page <james.page@ubuntu.com"
+emits ovs-up
+emits ovs-pre-down
+
start on (local-filesystems and net-device-up IFACE=lo)
stop on runlevel [!2345]
@@ -32,11 +35,13 @@
fi
set "$@" $OVS_CTL_OPTS
"$@"
+ initctl emit ovs-up
end script
post-stop script
. /usr/share/openvswitch/scripts/ovs-lib
test -e /etc/default/openvswitch-switch && . /etc/default/openvswitch-switch
+ initctl emit ovs-pre-down
ovs_ctl stop
end script
やりたいことを Upstart 流に書く。最も起動順序を柔軟に制御できる。
description "custom network settings"
start on (ovs-up and net-device-up IFACE=p5p1)
pre-start script
ovs-vsctl add-br br1
ovs-vsctl add-port br1 p5p1
end script