diff --git a/deployment_scripts/install.sh b/deployment_scripts/install.sh index e4b9489..87868d8 100644 --- a/deployment_scripts/install.sh +++ b/deployment_scripts/install.sh @@ -13,28 +13,28 @@ dpdk=$3 if [ $nsh = 'true' ] then wget -r -np -nH --cut-dirs=3 http://$host:8080/plugins/fuel-plugin-ovs-0.9/ovs-nsh/ + dpkg -i openvswitch-datapath-dkms_2.5.90-1.nsh_all.deb + dpkg -i openvswitch-common_2.5.90-1.nsh_amd64.deb + dpkg -i openvswitch-switch_2.5.90-1.nsh_amd64.deb + dpkg -i python-openvswitch_2.5.90-1.nsh_all.deb + if [ $dpdk = 'true' ] + then + dpkg -i libxenstore3.0*.deb + dpkg -i libdpdk0_16.04-1_amd64.deb + dpkg -i dpdk_16.04-1_amd64.deb + dpkg -i openvswitch-switch-dpdk_2.5.90-1.nsh_amd64.deb + fi +else + wget -r -np -nH --cut-dirs=3 http://$host:8080/plugins/fuel-plugin-ovs-0.9/ovs-dpdk/ dpkg -i openvswitch-datapath-dkms_2.5.90-1_all.deb dpkg -i openvswitch-common_2.5.90-1_amd64.deb dpkg -i openvswitch-switch_2.5.90-1_amd64.deb dpkg -i python-openvswitch_2.5.90-1_all.deb if [ $dpdk = 'true' ] then - dpkg -i libxenstore3.0_4.4.2-0ubuntu0.14.04.5_amd64.deb - dpkg -i libdpdk0_2.2.0-1_amd64.deb - dpkg -i dpdk_2.2.0-1_amd64.deb + dpkg -i libxenstore3.0*.deb + dpkg -i libdpdk0_16.04-1_amd64.deb + dpkg -i dpdk_16.04-1_amd64.deb dpkg -i openvswitch-switch-dpdk_2.5.90-1_amd64.deb fi -else - wget -r -np -nH --cut-dirs=3 http://$host:8080/plugins/fuel-plugin-ovs-0.9/ovs-dpdk/ - dpkg -i openvswitch-datapath-dkms_2.5.1-1_all.deb - dpkg -i openvswitch-common_2.5.1-1_amd64.deb - dpkg -i openvswitch-switch_2.5.1-1_amd64.deb - dpkg -i python-openvswitch_2.5.1-1_all.deb - if [ $dpdk = 'true' ] - then - dpkg -i libxenstore3.0_4.4.2-0ubuntu0.14.04.5_amd64.deb - dpkg -i libdpdk0_2.2.0-1_amd64.deb - dpkg -i dpdk_2.2.0-1_amd64.deb - dpkg -i openvswitch-switch-dpdk_2.5.1-1_amd64.deb - fi fi diff --git a/ovs_build/build-ovs-dpdk.sh b/ovs_build/build-ovs-dpdk.sh index 8b2ac2e..66334f2 100755 --- a/ovs_build/build-ovs-dpdk.sh +++ b/ovs_build/build-ovs-dpdk.sh @@ -1,8 +1,10 @@ #!/bin/bash -OVS_COMMIT=cd4764fdd8ce0aa0063525dad0e67f20b3bcf6e9 +set -eux + +OVS_COMMIT=7d8eadce4df70f563a0c0123c612f6117c8ff864 URL_OVS=https://github.com/openvswitch/ovs.git -OVS_VER=${OVS_VER:-2.5.1} +OVS_VER=${OVS_VER:-2.5.90} BUILD_HOME=$HOME/dpdk BUILD_DEST=${BUILD_DEST:-/deb} @@ -12,12 +14,14 @@ sudo apt-get build-dep openvswitch -y sudo apt-get -y install devscripts dpkg-dev git wget rm -rf ${BUILD_HOME}; mkdir -p ${BUILD_HOME} +cp `dirname $0`/rules ${BUILD_HOME} cd ${BUILD_HOME} wget -c https://launchpad.net/ubuntu/+archive/primary/+files/dpdk_2.2.0-0ubuntu8.dsc wget -c https://launchpad.net/ubuntu/+archive/primary/+files/dpdk_2.2.0.orig.tar.gz wget -c https://launchpad.net/ubuntu/+archive/primary/+files/dpdk_2.2.0-0ubuntu8.debian.tar.xz dpkg-source -x dpdk_2.2.0-0ubuntu8.dsc +wget -c http://fast.dpdk.org/rel/dpdk-16.04.tar.xz # copy from debian/control sudo apt-get install -y debhelper \ @@ -35,12 +39,15 @@ sudo apt-get install -y debhelper \ texlive-fonts-recommended \ texlive-latex-extra -cd dpdk-2.2.0; rm -rf debian/patches/; +cd dpdk-2.2.0; rm -rf debian/patches/; uupdate -v 16.04 ../dpdk-16.04.tar.xz +cd ${BUILD_HOME}/dpdk-16.04 cat << EOF > debian/changelog -dpdk (2.2.0-1) unstable; urgency=low - [ DPDK team] - * New upstream version +dpdk (16.04-1) unstable; urgency=low + * DPDK 16.04 + -- DPDK team EOF +mv debian/rules debian/rules.orig +cp ${BUILD_HOME}/rules debian/rules debian/rules build; fakeroot debian/rules binary cd ${BUILD_HOME}; sudo dpkg -i *.deb apt-get download libxenstore3.0 @@ -77,14 +84,13 @@ cd ${BUILD_HOME}; tar czvf ovs.tar.gz ovs rm -rf openvswitch-dpdk-${OVS_VER}* cd openvswitch-dpdk-2.4.0; uupdate -v ${OVS_VER} ../ovs.tar.gz cd ../openvswitch-dpdk-${OVS_VER} -sed -i "s/include\/rte_config.h/include\/dpdk\/rte_config.h/" acinclude.m4 -sed -i 's/DPDK_INCLUDE=.*/DPDK_INCLUDE=$RTE_SDK\/include\/dpdk/' acinclude.m4 +#sed -i 's~DPDK_LIB_DIR=.*~DPDK_LIB_DIR="$with_dpdk/x86_64-linux-gnu/lib"~' acinclude.m4 autoreconf --install rm -rf debian/patches/ .git; cat << EOF > debian/changelog openvswitch-dpdk (${OVS_VER}-1) unstable; urgency=low - [ Open vSwitch team ] - * Open vSwitch Upstream + * New upstream version + -- Open vSwitch team EOF debian/rules build; fakeroot debian/rules binary diff --git a/ovs_build/build-ovs-nsh-dpdk.sh b/ovs_build/build-ovs-nsh-dpdk.sh index 53bb617..c7bdeba 100755 --- a/ovs_build/build-ovs-nsh-dpdk.sh +++ b/ovs_build/build-ovs-nsh-dpdk.sh @@ -38,8 +38,8 @@ sudo apt-get install -y debhelper \ cd dpdk-2.2.0; rm -rf debian/patches/; cat << EOF > debian/changelog dpdk (2.2.0-1) unstable; urgency=low - [ DPDK team] - * New upstream version + * DPDK 2.2.0 + -- DPDK team EOF debian/rules build; fakeroot debian/rules binary cd ${BUILD_HOME}; sudo dpkg -i *.deb @@ -88,13 +88,17 @@ sed -i 's/DPDK_INCLUDE=.*/DPDK_INCLUDE=$RTE_SDK\/include\/dpdk/' acinclude.m4 autoreconf --install rm -rf debian/patches/ .git; cat << EOF > debian/changelog -openvswitch-dpdk (${OVS_VER}-1) unstable; urgency=low - [ Open vSwitch team ] - * Support NSH +openvswitch-dpdk (${OVS_VER}-1.nsh) unstable; urgency=low + * Support NSH + -- Open vSwitch team EOF debian/rules build; fakeroot debian/rules binary cd ${BUILD_HOME}/ovs +cat << EOF > debian/changelog +openvswitch (${OVS_VER}-1.nsh) unstable; urgency=low + * Support NSH + -- Open vSwitch team +EOF debian/rules build; fakeroot debian/rules binary - cp ${BUILD_HOME}/*.deb ${BUILD_DEST} diff --git a/ovs_build/rules b/ovs_build/rules new file mode 100755 index 0000000..f2f5a17 --- /dev/null +++ b/ovs_build/rules @@ -0,0 +1,150 @@ +#!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#export DH_VERBOSE = 1 + +# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/* +DPKG_EXPORT_BUILDFLAGS = 1 +include /usr/share/dpkg/default.mk + +DEB_HOST_GNU_CPU := $(shell dpkg-architecture -qDEB_HOST_GNU_CPU) + +# see FEATURE AREAS in dpkg-buildflags(1) +export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# build with debug symbols, dh_strip will create -dgbsyms packages by that +export EXTRA_CFLAGS = -g + +# see ENVIRONMENT in dpkg-buildflags(1) +# package maintainers to append CFLAGS +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# package maintainers to append LDFLAGS +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + +DPDK_CONFIG = "$(DEB_HOST_GNU_CPU)-native-linuxapp-gcc" +DPDK_STATIC_DIR = "debian/build/static-root" +DPDK_SHARED_DIR = "debian/build/shared-root" + +clean: + dh_testdir + rm -rf debian/build debian/tmp + dh_clean + +build-config: + dh_testdir + $(MAKE) O=$(DPDK_STATIC_DIR) T=$(DPDK_CONFIG) config + +build-indep: build-config + dh_testdir + $(MAKE) O=$(DPDK_STATIC_DIR) doc-api-html doc-guides-html + +build-arch: build-config + dh_testdir + $(MAKE) O=$(DPDK_STATIC_DIR) build + # Unfortunately the decision about having static or shared libraries is + # made for the whole build, which then produces only .a or .so files + # (but not both). + # And the target layout for target selection has no field for the + # type of library. + # Right now I hack this by doing a second build which only differs in + # the selection of shared libs. + # Shared libs should be default, so the previous static build is only + # used to get static libraries. + cp -a $(DPDK_STATIC_DIR) $(DPDK_SHARED_DIR) + sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1y,' \ + $(DPDK_SHARED_DIR)/.config + $(MAKE) O=$(DPDK_SHARED_DIR) build + +build: build-arch build-indep + +binary-indep: PACKAGE_NAME=dpdk-doc +binary-indep: DOCDIR=usr/share/doc/dpdk +binary-indep: export DH_OPTIONS=--indep +binary-indep: + dh_testroot + dh_prep + dh_testdir + dh_installdirs + dh_install + dh_installdocs + dh_installchangelogs + dh_lintian + # Package: dpdk-doc + # All files based on the install-doc rule (includes examples) + $(MAKE) O=$(DPDK_SHARED_DIR) prefix=/usr \ + DESTDIR=debian/dpdk-doc install-doc + dh_link + dh_compress + dh_fixperms + dh_installdeb + dh_gencontrol + dh_md5sums + dh_builddeb + +binary-arch: LIBDIR=usr/lib/$(shell dpkg-architecture -qDEB_HOST_MULTIARCH) +binary-arch: export DH_OPTIONS=--arch +binary-arch: + dh_testroot + dh_prep + dh_testdir + dh_installdirs + dh_install + dh_installdocs + dh_installchangelogs + dh_lintian + dh_systemd_enable + dh_installinit --no-start --no-restart-on-upgrade + dh_systemd_start --no-start --no-restart-on-upgrade + # Package: dpdk (runtime) + $(MAKE) O=$(DPDK_STATIC_DIR) prefix=/usr \ + DESTDIR=debian/dpdk install-runtime + $(MAKE) O=$(DPDK_SHARED_DIR) prefix=/usr \ + DESTDIR=debian/dpdk install-runtime + cp debian/dpdk.interfaces debian/dpdk/etc/dpdk/interfaces + rm debian/dpdk/usr/sbin/dpdk_nic_bind + ln -s /usr/share/dpdk/tools/dpdk_nic_bind.py \ + debian/dpdk/sbin/dpdk_nic_bind + # Package: libdpdk0 (bare runtime libs) + mkdir -p debian/libdpdk0/$(LIBDIR) + # NOTE so far upstream dpdk has not settled on really versioning the + # combined lib. There are discussions ongoing and various alternative + # approaches. + # We have to wait until that is clarified upstream (in a follow on dpdk + # version). + # One likely solution will make us ship the non combined .so and a + # linker script which replaces the combined lib. + # To easen package management a few notes how this will change if that + # happens: + # NOTE: linker script - this becomes a nop (linker skript has no sover + # on its own) + rm debian/dpdk/usr/lib/libdpdk.so + cp -a $(DPDK_SHARED_DIR)/lib/* debian/libdpdk0/$(LIBDIR)/ + # NOTE: linker script - insert basenames loop for all .so's + # NOTE: linker script - we also will need multiple symbol files then + # Package: dpdk-dev (build environment) + $(MAKE) O=$(DPDK_SHARED_DIR) prefix=/usr \ + DESTDIR=debian/dpdk-dev install-sdk + cp $(DPDK_SHARED_DIR)/.config debian/dpdk-dev/usr/share/dpdk/config + # Package: libdpdk-dev (bare headers and static devel libs) + mkdir -p debian/libdpdk-dev/usr/lib/ + # NOTE: linker script - insert basenames loop for all .a's + #ln -s /$(LIBDIR)/libdpdk.so \ + # debian/libdpdk-dev/$(LIBDIR)/libdpdk.so.0 + cp -a $(DPDK_STATIC_DIR)/lib/* debian/libdpdk-dev/usr/lib/ + mv debian/dpdk-dev/usr/include/dpdk debian/libdpdk-dev/usr/include/ + # NOTE: linker script - package instead of removing all sublibs + rm -rf debian/dpdk/usr/lib* + dh_python2 + dh_perl + dh_link + dh_compress + dh_fixperms + dh_strip + dh_makeshlibs + dh_shlibdeps + dh_installdeb + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-arch binary-indep diff --git a/vagrant/Vagrantfile b/vagrant/Vagrantfile index bd4ed6b..06bbc95 100644 --- a/vagrant/Vagrantfile +++ b/vagrant/Vagrantfile @@ -11,7 +11,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.define "fuel" do | h | h.vm.host_name = "fuel" - h.vm.provision :shell, :inline => "/vagrant/build_fuel_plugin.sh" + h.vm.provision :shell, :inline => "/vagrant/build_fuel_plugin.sh", privileged: false h.vm.synced_folder "..", "/fuel-plugin" h.vm.provider :virtualbox do |v| v.customize ["modifyvm", :id, "--memory", 4096]