ubuntu 14.10安装openvswitch 2.4.0

作者:张华  发表于:2015-09-09
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

http://blog.csdn.net/quqi99 )

wget http://openvswitch.org/releases/openvswitch-2.4.0.tar.gz
tar zxvf openvswitch-2.4.0.tar.gz && cd openvswitch-2.4.0
dpkg-checkbuilddeps
DEB_BUILD_OPTIONS='parallel=8 nocheck' fakeroot debian/rules binary
ll ../*.deb && cd ../

dpkg -i openvswitch-common_2.4.0-1_amd64.deb openvswitch-switch_2.4.0-1_amd64.deb


修改/usr/share/openvswitch/scripts/ovs-lib 文件,令rundir=${OVS_RUNDIR-'/usr/local/var/run/openvswitch'},解决'sudo ovs-vsctl show'的问题。

但是在运行neutron时又出错了

root@hua-ThinkPad-T440p:/bak/java# sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf ovs-vsctl --db=unix:/usr/local/var/run/openvswitch/db.sock show
02783079-5d2d-44b6-ba4b-bf2bdbbf6ddb
    ovs_version: "2.4.0"
root@hua-ThinkPad-T440p:/bak/java# sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf ovs-vsctl show
ovs-vsctl: unix:/var/run/openvswitch/db.sock: database connection failed (Connection refused)


./utilities/ovs-vsctl.c
static char *
default_db(void)
{
    static char *def;
    if (!def) {
        def = xasprintf("unix:%s/db.sock", ovs_rundir());
    }
    return def;
}


./lib/dirs.c.in
const char *
ovs_rundir(void)
{
    static struct directory d = {
        NULL, @RUNDIR@, "OVS_RUNDIR", OVSTHREAD_ONCE_INITIALIZER
    };


    return get_dir(&d);
}
static const char *
get_dir(struct directory *d)
{
    if (ovsthread_once_start(&d->once)) {
        d->value = getenv(d->var_name);
        if (!d->value || !d->value[0]) {
            d->value = d->default_value;
        }
        ovsthread_once_done(&d->once);
    }
    return d->value;
}


./python/ovs/dirs.py
RUNDIR = os.environ.get("OVS_RUNDIR", """/var/run""")


root@hua-ThinkPad-T440p:/bak/java/openvswitch-2.4.0# sudo OVS_RUNDIR=/usr/local/var/run/openvswitch /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf ovs-vsctl show
02783079-5d2d-44b6-ba4b-bf2bdbbf6ddb
    ovs_version: "2.4.0"

这个命令在root用户执行没问题,但在普通用户下执行有问题:

hua@hua-ThinkPad-T440p:/bak/openstack/devstack$ sudo OVS_RUNDIR=/usr/local/var/run/openvswitch /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf ovs-vsctl show
sudo: sorry, you are not allowed to set the following environment variables: OVS_RUNDIR

添加如下文件解决:

hua@hua-ThinkPad-T440p:/bak/openstack/devstack$ sudo cat /etc/sudoers.d/ovs_rundir

Defaults env_keep += "OVS_RUNDIR"


所以解决办法是在devstack脚本中添加:

Q_USE_ROOTWRAP_DAEMON=False

hua@hua-ThinkPad-T440p:/bak/openstack/devstack$ git diff
diff --git a/lib/neutron-legacy b/lib/neutron-legacy
index d1865d8..83ee0bd 100755
--- a/lib/neutron-legacy
+++ b/lib/neutron-legacy
@@ -224,9 +224,9 @@ if [[ "$Q_USE_ROOTWRAP" == "False" ]]; then
     Q_RR_COMMAND="sudo"
 else
     NEUTRON_ROOTWRAP=$(get_rootwrap_location neutron)
-    Q_RR_COMMAND="sudo $NEUTRON_ROOTWRAP $Q_RR_CONF_FILE"
+    Q_RR_COMMAND="sudo OVS_RUNDIR=/usr/local/var/run/openvswitch $NEUTRON_ROOTWRAP $Q_RR_CONF_FILE"
     if [[ "$Q_USE_ROOTWRAP_DAEMON" == "True" ]]; then
-        Q_RR_DAEMON_COMMAND="sudo $NEUTRON_ROOTWRAP-daemon $Q_RR_CONF_FILE"
+        Q_RR_DAEMON_COMMAND="sudo OVS_RUNDIR=/usr/local/var/run/openvswitch $NEUTRON_ROOTWRAP-daemon $Q_RR_CONF_FILE"
     fi
 fi


nova端的也要处理, sudo OVS_RUNDIR=/usr/local/var/run/openvswitch nova-rootwrap  /etc/nova/rootwrap.conf ovs-vsctl show

hua@hua-ThinkPad-T440p:/bak/openstack/nova$ git diff
diff --git a/nova/utils.py b/nova/utils.py
index e5c4922..524c665 100644
--- a/nova/utils.py
+++ b/nova/utils.py
@@ -249,9 +249,9 @@ def vpn_ping(address, port, timeout=0.05, session_id=None):
 
 def get_root_helper():
     if CONF.workarounds.disable_rootwrap:
-        cmd = 'sudo'
+        cmd = 'sudo OVS_RUNDIR=/usr/local/var/run/openvswitch nova-rootwrap'
     else:
-        cmd = 'sudo nova-rootwrap %s' % CONF.rootwrap_config
+        cmd = 'sudo OVS_RUNDIR=/usr/local/var/run/openvswitch nova-rootwrap %s' % CONF.rootwrap_config
     return cmd
 
 
@@ -282,7 +282,7 @@ class RootwrapDaemonHelper(RootwrapProcessHelper):
         except KeyError:
             from oslo_rootwrap import client
             new_client = client.Client([
-                "sudo", "nova-rootwrap-daemon", rootwrap_config])
+                "sudo", "OVS_RUNDIR=/usr/local/var/run/openvswitch nova-rootwrap", "nova-rootwrap-daemon", rootwrap_config])
             cls._clients[rootwrap_config] = new_client
             return new_client


在/var/log/syslog里也是一堆这样的错:

Sep 24 09:02:22 hua-ThinkPad-T440p ovs-vswitchd: ovs|21625|reconnect|INFO|unix:/var/run/openvswitch/db.sock: connection attempt failed (Connection refused)

在~/.bashrc中添加下列环境变量解决

export OVS_RUNDIR=/usr/local/var/run/openvswitch



这时候发现ovs重启之后端口无法重建,且报错如下, 我执行“/etc/init.d/openvswitch-switch force-reload-kmod”命令后问题消失。

2015-09-23T11:24:38.385Z|00004|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connecting...
2015-09-23T11:24:38.385Z|00005|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connected
2015-09-23T11:24:38.387Z|00006|ofproto_dpif|INFO|system@ovs-system: Datapath supports recirculation
2015-09-23T11:24:38.387Z|00007|ofproto_dpif|INFO|system@ovs-system: MPLS label stack length probed as 1
2015-09-23T11:24:38.387Z|00008|ofproto_dpif|INFO|system@ovs-system: Datapath supports unique flow ids
2015-09-23T11:24:38.389Z|00009|bridge|INFO|bridge br-phy: added interface br-phy on port 65534
2015-09-23T11:24:38.390Z|00010|bridge|INFO|bridge br-phy: using datapath ID 00006ab2df6d334e
2015-09-23T11:24:38.390Z|00011|connmgr|INFO|br-phy: added service controller "punix:/usr/local/var/run/openvswitch/br-phy.mgmt"
2015-09-23T11:24:38.390Z|00001|ofproto_dpif_upcall(handler1)|INFO|received packet on unassociated datapath port 0
2015-09-23T11:24:38.392Z|00012|bridge|INFO|ovs-vswitchd (Open vSwitch) 2.4.0
2015-09-23T11:24:41.354Z|00013|ofproto|WARN|br-phy: cannot get STP status on nonexistent port 65534
2015-09-23T11:24:41.354Z|00014|ofproto|WARN|br-phy: cannot get RSTP status on nonexistent port 65534
2015-09-23T11:24:41.360Z|00015|netdev_linux|INFO|ioctl(SIOCGIFHWADDR) on br-phy device failed: No such device
2015-09-23T11:24:41.361Z|00016|netdev_linux|WARN|ioctl(SIOCGIFINDEX) on br-phy device failed: No such device
2015-09-23T11:24:43.391Z|00017|ofproto|WARN|br-phy: cannot get STP stats on nonexistent port 65534
2015-09-23T11:24:48.391Z|00018|memory|INFO|32548 kB peak resident set size after 10.0 seconds
2015-09-23T11:24:48.391Z|00019|memory|INFO|handlers:1 revalidators:1 rules:5
2015-09-23T11:24:48.391Z|00020|ofproto|WARN|br-phy: cannot get STP stats on nonexistent port 65534
2015-09-23T11:24:53.392Z|00021|ofproto|WARN|br-phy: cannot get STP stats on nonexistent port 65534


源码编译见:http://blog.onos.top/linux/2015/01/06/install-openvswitch-on-ubuntu14.04lts/


20160419更新

现在的做法是:

1, 修改环境变量:export OVS_RUNDIR=/var/run/openvswitch

2, 

hua@node1:/bak/openstack/devstack$ git diff
diff --git a/stack.sh b/stack.sh
index 739d939..7ac5f6c 100755
--- a/stack.sh
+++ b/stack.sh
@@ -714,7 +714,8 @@ source $TOP_DIR/tools/install_prereqs.sh
 
 # Configure an appropriate Python environment
 if [[ "$OFFLINE" != "True" ]]; then
-    PYPI_ALTERNATIVE_URL=${PYPI_ALTERNATIVE_URL:-""} $TOP_DIR/tools/install_pip.sh
+    #PYPI_ALTERNATIVE_URL=${PYPI_ALTERNATIVE_URL:-""} $TOP_DIR/tools/install_pip.sh
+    echo 'aaaaaaaaaaaaaaaaaaaaaaaa'
 fi
 
 # Install subunit for the subunit output stream

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

quqi99

你的鼓励就是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值