LoginSignup
6
6

More than 5 years have passed since last update.

Ubuntu(debian) の /etc/network/interfaces で openvswitch の bridge や port も設定できるらしいことが /usr/share/doc/openvswitch-switch/README.Debian に書いてある。

/etc/network/interfaces
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 流に書く。最も起動順序を柔軟に制御できる。

/etc/init/local.conf
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
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6