From aeafbf6215e8e9ace61c7b692fe7a37340e946cb Mon Sep 17 00:00:00 2001 From: Deepak Tiwari Date: Fri, 19 Jul 2019 15:54:39 -0500 Subject: [PATCH] Add capability to source compile dpdk/ovs Add following capability to ubuntu bionic DPDK dockerfile: 1. Option to either compile ovs-dpdk from source (DPDK and OVS) or install it from package. By default package install is enabled. For src compile pass these build-args: OVS_SRC_COMPILE_VERSION and DPDK_SRC_COMPILE_VERSION. 2. Option to apply any patch to DPDK or OVS sources, in case using source compilation. For this ensure the patch file is kept in same folder as the Dockerfile.ubuntu_bionic-dpdk, and pass these build-args: OVS_PATCH_FILE_NAME and/or DPDK_PATCH_FILE_NAME. Change-Id: If806b241890deff77e9ae76f27d375a2bd680b11 --- Makefile | 14 +++ openvswitch/Dockerfile.ubuntu_bionic-dpdk | 125 ++++++++++++++++++++-- 2 files changed, 133 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 0162f682..c99cd127 100644 --- a/Makefile +++ b/Makefile @@ -47,6 +47,20 @@ ifeq ($(OS_RELEASE), ubuntu_xenial) $(EXTRA_BUILD_ARGS) \ -t $(IMAGE) \ . +else ifeq ($(OS_RELEASE), ubuntu_bionic) + IMAGE := ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}-${OS_RELEASE} + docker build -f $(IMAGE_NAME)/Dockerfile.$(OS_RELEASE) \ + --network host \ + $(EXTRA_BUILD_ARGS) \ + -t $(IMAGE) \ + . +else ifeq ($(OS_RELEASE), ubuntu_bionic-dpdk) + IMAGE := ${DOCKER_REGISTRY}/${IMAGE_PREFIX}/${IMAGE_NAME}:${IMAGE_TAG}-${OS_RELEASE} + docker build -f $(IMAGE_NAME)/Dockerfile.$(OS_RELEASE) \ + --network host \ + $(EXTRA_BUILD_ARGS) \ + -t $(IMAGE) \ + . else ifeq ($(OS_RELEASE), suse_15) docker build -f $(IMAGE_NAME)/Dockerfile.$(OS_RELEASE) \ --network host \ diff --git a/openvswitch/Dockerfile.ubuntu_bionic-dpdk b/openvswitch/Dockerfile.ubuntu_bionic-dpdk index 758cdc9e..129c7589 100644 --- a/openvswitch/Dockerfile.ubuntu_bionic-dpdk +++ b/openvswitch/Dockerfile.ubuntu_bionic-dpdk @@ -1,9 +1,122 @@ -FROM docker.io/ubuntu:bionic +ARG FROM=docker.io/ubuntu:bionic +FROM ${FROM} LABEL maintainer="cheng1.li@intel.com" -RUN set -ex;\ - apt-get update; \ - apt-get install -y openvswitch-switch-dpdk; \ - update-alternatives --set ovs-vswitchd /usr/lib/openvswitch-switch-dpdk/ovs-vswitchd-dpdk; \ - rm -rf /var/lib/apt/lists/* +# Options to compile ovs-dpdk either from source (DPDK and OVS) or +# install it from package. By default package install is enabled. +# For src compile pass following build-args. +ARG OVS_SRC_COMPILE_VERSION="" +ARG DPDK_SRC_COMPILE_VERSION="" +# URL to fetch the code package from. The package name should follow +# this naming convention: openvswitch-${OVS_SRC_COMPILE_VERSION}.tar.gz +ARG OVS_SRC_URL="http://openvswitch.org/releases" + +# URL to fetch the code package from. The package name should follow +# this naming convention: dpdk-${DPDK_SRC_COMPILE_VERSION}.tar.xz +ARG DPDK_SRC_URL="http://fast.dpdk.org/rel" + +# Option to apply any patch to DPDK or OVS sources, in case using +# source compilation. For this ensure the patch file is kept in +# same folder as this Dockerfile, and pass following build-args. +ARG OVS_PATCH_FILE_NAME="" +ARG DPDK_PATCH_FILE_NAME="" + +# Any extra compile-time flags for OVS +ARG OVS_EXTRA_COMPILE_FLAGS="" + +# Any extra compile-time flags for DPDK +ARG DPDK_EXTRA_COMPILE_FLAGS="" + +ADD Dockerfile.ubuntu_bionic-dpdk ${OVS_PATCH_FILE_NAME}* ${DPDK_PATCH_FILE_NAME}* ./ + +RUN set -ex;\ + rm -rf Dockerfile.ubuntu_bionic-dpdk ;\ + apt-get update; \ + if [ -n "$OVS_SRC_COMPILE_VERSION" -a -n "$DPDK_SRC_COMPILE_VERSION" ]; then \ + if [ -n "$OVS_PATCH_FILE_NAME" ]; then \ + OVS_PATCH_TMP_DIR=$(mktemp -d) ;\ + mv ./${OVS_PATCH_FILE_NAME} ${OVS_PATCH_TMP_DIR}/${OVS_PATCH_FILE_NAME} ;\ + fi ;\ + if [ -n "$DPDK_PATCH_FILE_NAME" ]; then \ + DPDK_PATCH_TMP_DIR=$(mktemp -d) ;\ + mv ./${DPDK_PATCH_FILE_NAME} ${DPDK_PATCH_TMP_DIR}/${DPDK_PATCH_FILE_NAME} ;\ + fi ;\ + apt-get upgrade -y ;\ + apt-get install --no-install-recommends -y \ + bash ;\ + apt-get install --no-install-recommends -y \ + build-essential \ + curl \ + libatomic1 \ + libssl1.1 \ + openssl \ + uuid-runtime \ + graphviz \ + autoconf \ + automake \ + bzip2 \ + debhelper \ + dh-autoreconf \ + libssl-dev \ + libtool \ + python-all \ + python-six \ + python-twisted-conch \ + python-zopeinterface \ + libpcap-dev \ + libnuma-dev ;\ + TMP_DIR=$(mktemp -d) ;\ + curl -sSL ${DPDK_SRC_URL}/dpdk-${DPDK_SRC_COMPILE_VERSION}.tar.xz | tar xJ -C ${TMP_DIR} --strip-components=1 ;\ + export DPDK_DIR=${TMP_DIR} ;\ + cd ${DPDK_DIR} ;\ + if [ -d "$DPDK_PATCH_TMP_DIR" ]; then \ + patch -p1 < ${DPDK_PATCH_TMP_DIR}/${DPDK_PATCH_FILE_NAME} ;\ + fi ;\ + export DPDK_TARGET=x86_64-native-linuxapp-gcc ;\ + export DPDK_BUILD=${DPDK_DIR}/build ;\ + make config T=${DPDK_TARGET} ;\ + cd ${DPDK_BUILD} ;\ + sed -i 's/CONFIG_RTE_KNI_KMOD=.*$/CONFIG_RTE_KNI_KMOD=n/' .config ;\ + sed -i 's/CONFIG_RTE_LIBRTE_KNI=.*$/CONFIG_RTE_LIBRTE_KNI=n/' .config ;\ + sed -i 's/CONFIG_RTE_EAL_IGB_UIO=.*$/CONFIG_RTE_EAL_IGB_UIO=n/' .config ;\ + make -j $(nproc) EXTRA_CFLAGS='-Ofast -fPIC' MACHINE_CFLAGS="-march=native" ${DPDK_EXTRA_COMPILE_FLAGS};\ + make install ;\ + TMP_DIR=$(mktemp -d) ;\ + curl -sSL ${OVS_SRC_URL}/openvswitch-${OVS_SRC_COMPILE_VERSION}.tar.gz | tar xz -C ${TMP_DIR} --strip-components=1 ;\ + cd ${TMP_DIR} ;\ + if [ -d "$OVS_PATCH_TMP_DIR" ]; then \ + patch -p1 < ${OVS_PATCH_TMP_DIR}/${OVS_PATCH_FILE_NAME} ;\ + fi ;\ + ./boot.sh ;\ + ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-dpdk=$DPDK_BUILD CFLAGS="-Ofast -g -march=native" ${OVS_EXTRA_COMPILE_FLAGS} ;\ + make -j $(nproc) CFLAGS="-Ofast -g -march=native" ${OVS_EXTRA_COMPILE_FLAGS} ;\ + make install ;\ + cd / ;\ + rm -rf ${DPDK_DIR} ;\ + rm -rf ${TMP_DIR} ;\ + rm -rf ${OVS_PATCH_TMP_DIR} ;\ + rm -rf ${DPDK_PATCH_TMP_DIR} ;\ + apt-get purge --auto-remove -y \ + build-essential \ + curl \ + graphviz \ + autoconf \ + automake \ + bzip2 \ + debhelper \ + dh-autoreconf \ + libssl-dev \ + libtool \ + python-all \ + python-six \ + python-twisted-conch \ + python-zopeinterface ;\ + else \ + apt-get install -y openvswitch-switch-dpdk ;\ + update-alternatives --set ovs-vswitchd /usr/lib/openvswitch-switch-dpdk/ovs-vswitchd-dpdk ;\ + fi ;\ + apt-get install -y iproute2 tcpdump conntrack ;\ + apt-get install -y python python-dev python-pip ;\ + pip install ovs netifaces ;\ + rm -rf /var/lib/apt/lists/* ;\