4 set -o nounset #Do not allow for unset variables
5 set -e #Exit script if a command fails
10 if [[ "${OVS_VERSION}" != "2.6.1" && "${OVS_VERSION}" != "2.9.2" ]]; then
11 echo "Unsupported OVS version ${OVS_VERSION}"
15 echo "Building OVS ${OVS_VERSION}"
17 # install running kernel devel packages
18 sudo yum -y install centos-release yum-utils @'Development Tools' rpm-build
19 REPO=$(repoquery --enablerepo=C* -i kernel-devel-${K_VERSION} | grep Repository | sed 's/Repo.*:[ \t]*//')
20 sudo yum -y --enablerepo=${REPO} install kernel-{devel,debug-devel,headers}-${K_VERSION}
25 git clone https://github.com/openvswitch/ovs.git
27 git checkout v${OVS_VERSION}
29 if [[ "${OVS_VERSION}" == "2.6.1" ]]; then
30 echo "Will apply nsh patches for OVS version 2.6.1"
31 git clone https://github.com/yyang13/ovs_nsh_patches.git ../ovs_nsh_patches
32 git apply ../ovs_nsh_patches/v2.6.1_centos7/*.patch
35 sed -e 's/@VERSION@/0.0.1/' rhel/openvswitch-fedora.spec.in > /tmp/ovs.spec
36 sudo yum-builddep -y /tmp/ovs.spec
39 ./configure --with-linux=/lib/modules/${K_VERSION}/build --prefix=/usr/local --disable-libcapng
40 # dont use libcap, we wont have the proper libraries in the docker image
41 make rpm-fedora RPMBUILD_OPT="--without check --without libcapng"
42 # we dont need the kernel module (yet)
43 # make rpm-fedora-kmod RPMBUILD_OPT="-D 'kversion ${K_VERSION}'"
44 make DESTDIR=${TMP}/ovs_install/openvswitch_${OVS_VERSION} install
48 # copy rpms and installation
50 find ${TMP}/ovs/rpm/rpmbuild/RPMS -name "*.rpm" | xargs -i cp {} ovs_package/
51 tar cvzf ovs_package/openvswitch_${OVS_VERSION}.tgz -C ${TMP}/ovs_install .
59 [ "${ODL_STREAM}" == "oxygen" ] && OVS_VERSION="2.6.1" || OVS_VERSION="2.9.2"
63 sudo yum -y install ovs_package/openvswitch-${OVS_VERSION}-*.rpm
64 # without libcapng, we have to run as root
65 sudo sed -i 's/^OVS_USER_ID/#OVS_USER_ID/' /etc/sysconfig/openvswitch
66 sudo systemctl enable openvswitch
67 sudo systemctl start openvswitch
68 sudo ovs-vsctl --retry -t 10 show
70 # download supervisor to run OVS as a service inside the docker busybox image
71 wget https://raw.githubusercontent.com/socketplane/docker-ovs/master/configure-ovs.sh
72 chmod a+x configure-ovs.sh
73 wget https://raw.githubusercontent.com/socketplane/docker-ovs/master/supervisord.conf
74 wget https://pypi.python.org/packages/source/s/supervisor-stdout/supervisor-stdout-0.1.1.tar.gz --no-check-certificate
76 # busybox image is missing some libs, take them from the host
77 cp /usr/lib64/libcrypto.so.10 .
78 cp /usr/lib64/libssl.so.10 .
79 cp /usr/lib64/libgssapi_krb5.so.2 .
80 cp /usr/lib64/libkrb5.so.3 .
81 cp /usr/lib64/libcom_err.so.2 .
82 cp /usr/lib64/libk5crypto.so.3 .
83 cp /usr/lib64/libkrb5support.so.0 .
84 cp /usr/lib64/libkeyutils.so.1 .
85 cp /usr/lib64/libselinux.so.1 .
86 cp /usr/lib64/libpcre.so.1 .
87 cp /usr/lib64/liblzma.so.5 .
90 sudo docker build -t ovs-docker --build-arg OVS_VERSION=${OVS_VERSION} .