summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Maximets <i.maximets@ovn.org>2022-07-14 17:55:46 +0200
committerIlya Maximets <i.maximets@ovn.org>2022-07-15 13:45:55 +0200
commit16bec677aab8482a0fc9e26a4356fb5cce502e5a (patch)
treefcc1a3f818020bf22136e6f06b1833ad68f1477d
parentc78e7efa7b786f1e4170d025676a0dc69b20ad53 (diff)
downloadopenvswitch-16bec677aab8482a0fc9e26a4356fb5cce502e5a.tar.gz
debian: Add option to build without DPDK.
Co-authored-by: Frode Nordahl <frode.nordahl@canonical.com> Signed-off-by: Frode Nordahl <frode.nordahl@canonical.com> Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
-rwxr-xr-x.ci/linux-build.sh3
-rw-r--r--.github/workflows/build-and-test.yml15
-rw-r--r--.gitignore1
-rw-r--r--Documentation/intro/install/debian.rst36
-rw-r--r--debian/.gitignore21
-rw-r--r--debian/automake.mk51
-rw-r--r--debian/clean4
-rw-r--r--debian/control.in (renamed from debian/control)60
-rwxr-xr-xdebian/rules6
9 files changed, 134 insertions, 63 deletions
diff --git a/.ci/linux-build.sh b/.ci/linux-build.sh
index a8c437aaf..b7d93f36b 100755
--- a/.ci/linux-build.sh
+++ b/.ci/linux-build.sh
@@ -204,9 +204,10 @@ function build_ovs()
}
if [ "$DEB_PACKAGE" ]; then
+ ./boot.sh && ./configure --with-dpdk=$DPDK && make debian
mk-build-deps --install --root-cmd sudo --remove debian/control
dpkg-checkbuilddeps
- DEB_BUILD_OPTIONS='parallel=4 nocheck' fakeroot debian/rules binary
+ make debian-deb
packages=$(ls $(pwd)/../*.deb)
deps=""
for pkg in $packages; do
diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
index 90fe17377..4c84b3a96 100644
--- a/.github/workflows/build-and-test.yml
+++ b/.github/workflows/build-and-test.yml
@@ -216,11 +216,19 @@ jobs:
deb_dependencies: |
linux-headers-$(uname -r) build-essential fakeroot devscripts equivs
DEB_PACKAGE: yes
+ DPDK: ${{ matrix.dpdk }}
- name: linux deb
+ name: linux deb ${{ matrix.dpdk }} dpdk
runs-on: ubuntu-22.04
timeout-minutes: 30
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - dpdk: no
+ - dpdk: shared
+
steps:
- name: checkout
uses: actions/checkout@v2
@@ -234,6 +242,9 @@ jobs:
run: sudo apt update || true
- name: install dependencies for debian packages
run: sudo apt install -y ${{ env.deb_dependencies }}
+ - name: install dpdk-dev
+ if: matrix.dpdk != 'no'
+ run: sudo apt install -y libdpdk-dev
- name: prepare
run: ./.ci/linux-prepare.sh
@@ -244,5 +255,5 @@ jobs:
- name: upload deb packages
uses: actions/upload-artifact@v2
with:
- name: deb-packages
+ name: deb-packages-${{ matrix.dpdk }}-dpdk
path: '/home/runner/work/ovs/*.deb'
diff --git a/.gitignore b/.gitignore
index f1cdcf124..b0098f46a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -68,6 +68,7 @@ TAGS
cscope.*
tags
_debian
+_dpdk
odp-netlink.h
odp-netlink-macros.h
OvsDpInterface.h
diff --git a/Documentation/intro/install/debian.rst b/Documentation/intro/install/debian.rst
index 4024dc07a..6d2687830 100644
--- a/Documentation/intro/install/debian.rst
+++ b/Documentation/intro/install/debian.rst
@@ -58,38 +58,28 @@ You do not need to be the superuser to build the Debian packages.
top level directory.
3. Install the build dependencies listed under "Build-Depends:" near the top of
- ``debian/control``. You can install these any way you like, e.g. with
+ ``debian/control.in``. You can install these any way you like, e.g. with
``apt-get install``.
-Check your work by running ``dpkg-checkbuilddeps`` in the top level of your OVS
-directory. If you've installed all the dependencies properly,
-``dpkg-checkbuilddeps`` will exit without printing anything. If you forgot to
-install some dependencies, it will tell you which ones.
-
-4. Build the package::
-
- $ fakeroot debian/rules binary
+4. Prepare the package source.
- This will do a serial build that runs the unit tests. This will take
- approximately 8 to 10 minutes. If you prefer, you can run a faster parallel
- build::
+ If you want to build the package with DPDK support execute the following
+ command::
- $ DEB_BUILD_OPTIONS='parallel=8' fakeroot debian/rules binary
+ $ ./boot.sh && ./configure --with-dpdk=shared && make debian
- If you are in a big hurry, you can even skip the unit tests::
+ If not::
- $ DEB_BUILD_OPTIONS='parallel=8 nocheck' fakeroot debian/rules binary
+ $ ./boot.sh && ./configure && make debian
-.. note::
-
- There are a few pitfalls in the Debian packaging building system so that,
- occasionally, you may find that in a tree that you have using for a while,
- the build command above exits immediately without actually building anything.
- To fix the problem, run::
+Check your work by running ``dpkg-checkbuilddeps`` in the top level of your OVS
+directory. If you've installed all the dependencies properly,
+``dpkg-checkbuilddeps`` will exit without printing anything. If you forgot to
+install some dependencies, it will tell you which ones.
- $ fakeroot debian/rules clean
+5. Build the package::
- or start over from a fresh copy of the source tree.
+ $ make debian-deb
5. The generated .deb files will be in the parent directory of the Open vSwitch
source distribution.
diff --git a/debian/.gitignore b/debian/.gitignore
new file mode 100644
index 000000000..0523941c6
--- /dev/null
+++ b/debian/.gitignore
@@ -0,0 +1,21 @@
+*.debhelper
+*.debhelper.log
+*.substvars
+/autoreconf.after
+/autoreconf.before
+/control
+/copyright
+/debhelper-build-stamp
+/files
+/openvswitch-common
+/openvswitch-doc
+/openvswitch-ipsec
+/openvswitch-pki
+/openvswitch-source
+/openvswitch-switch
+/openvswitch-switch-dpdk
+/openvswitch-test
+/openvswitch-testcontroller
+/openvswitch-vtep
+/python3-openvswitch
+/tmp
diff --git a/debian/automake.mk b/debian/automake.mk
index a3c2d7289..7b2afafae 100644
--- a/debian/automake.mk
+++ b/debian/automake.mk
@@ -2,8 +2,7 @@ EXTRA_DIST += \
debian/README.Debian \
debian/changelog \
debian/clean \
- debian/control \
- debian/copyright \
+ debian/control.in \
debian/copyright.in \
debian/dirs \
debian/gbp.conf \
@@ -80,12 +79,54 @@ check-debian-changelog-version:
ALL_LOCAL += check-debian-changelog-version
DIST_HOOKS += check-debian-changelog-version
-$(srcdir)/debian/copyright: AUTHORS.rst debian/copyright.in
+
+update_deb_copyright = \
$(AM_V_GEN) \
{ sed -n -e '/%AUTHORS%/q' -e p < $(srcdir)/debian/copyright.in; \
tail -n +28 $(srcdir)/AUTHORS.rst | sed '1,/^$$/d' | \
sed -n -e '/^$$/q' -e 's/^/ /p'; \
sed -e '1,/%AUTHORS%/d' $(srcdir)/debian/copyright.in; \
- } > $@
+ } > debian/copyright
+
+debian/copyright: AUTHORS.rst debian/copyright.in
+ $(update_deb_copyright)
+
+CLEANFILES += debian/copyright
+
+
+if DPDK_NETDEV
+update_deb_control = \
+ $(AM_V_GEN) sed -e 's/^\# DPDK_NETDEV //' \
+ < $(srcdir)/debian/control.in > debian/control
+else
+update_deb_control = \
+ $(AM_V_GEN) grep -v '^\# DPDK_NETDEV' \
+ < $(srcdir)/debian/control.in > debian/control
+endif
+
+debian/control: $(srcdir)/debian/control.in Makefile
+ $(update_deb_control)
-DISTCLEANFILES += debian/copyright
+CLEANFILES += debian/control
+
+
+debian: debian/copyright debian/control
+.PHONY: debian
+
+
+debian-deb: debian
+ @if test X"$(srcdir)" != X"$(top_builddir)"; then \
+ echo "Debian packages should be built from $(abs_srcdir)/"; \
+ exit 1; \
+ fi
+ $(MAKE) distclean
+ $(update_deb_copyright)
+ $(update_deb_control)
+ $(AM_V_GEN) fakeroot debian/rules clean
+if DPDK_NETDEV
+ $(AM_V_GEN) DEB_BUILD_OPTIONS="nocheck parallel=`nproc`" \
+ fakeroot debian/rules binary
+else
+ $(AM_V_GEN) DEB_BUILD_OPTIONS="nocheck parallel=`nproc` nodpdk" \
+ fakeroot debian/rules binary
+endif
diff --git a/debian/clean b/debian/clean
index 3b2e48901..43da304ce 100644
--- a/debian/clean
+++ b/debian/clean
@@ -1,2 +1,2 @@
-_debian
-_dpdk
+_debian/
+_dpdk/
diff --git a/debian/control b/debian/control.in
index 0ff894461..fa7ee7932 100644
--- a/debian/control
+++ b/debian/control.in
@@ -12,7 +12,7 @@ Build-Depends:
autoconf (>= 2.64),
automake (>= 1.10),
bzip2,
- debhelper-compat (= 13),
+ debhelper-compat (= 10),
dh-exec,
dh-python,
dh-sequence-python3,
@@ -21,7 +21,7 @@ Build-Depends:
iproute2,
libcap-ng-dev,
libdbus-1-dev [amd64 i386 ppc64el arm64],
- libdpdk-dev (>= 21.11) [amd64 i386 ppc64el arm64],
+# DPDK_NETDEV libdpdk-dev (>= 21.11) [amd64 i386 ppc64el arm64],
libnuma-dev [amd64 i386 ppc64el arm64],
libpcap-dev [amd64 i386 ppc64el arm64],
libssl-dev,
@@ -176,34 +176,34 @@ Description: Open vSwitch switch implementations
openvswitch-switch provides the userspace components and utilities for
the Open vSwitch kernel-based switch.
-Package: openvswitch-switch-dpdk
-Architecture: amd64 arm64 i386 ppc64el
-Pre-Depends: ${misc:Pre-Depends},
-Depends:
- dpdk,
- openvswitch-switch (= ${binary:Version}),
- ${misc:Depends},
- ${python3:Depends},
- ${shlibs:Depends},
-Enhances:
- openvswitch-switch,
-Description: DPDK enabled Open vSwitch switch implementation
- Open vSwitch is a production quality, multilayer, software-based,
- Ethernet virtual switch. It is designed to enable massive network
- automation through programmatic extension, while still supporting
- standard management interfaces and protocols (e.g. NetFlow, IPFIX,
- sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag). In addition, it is designed
- to support distribution across multiple physical servers similar to
- VMware's vNetwork distributed vswitch or Cisco's Nexus 1000V.
- .
- openvswitch-switch provides the userspace components and utilities for
- the Open vSwitch kernel-based switch.
- .
- DPDK is a set of libraries for fast packet processing. Applications run
- in user-space and communicate directly with dedicated network interfaces.
- .
- This package provides a DPDK enabled implementation of the ovs-vswitchd
- binary.
+# DPDK_NETDEV Package: openvswitch-switch-dpdk
+# DPDK_NETDEV Architecture: amd64 arm64 i386 ppc64el
+# DPDK_NETDEV Pre-Depends: ${misc:Pre-Depends},
+# DPDK_NETDEV Depends:
+# DPDK_NETDEV dpdk,
+# DPDK_NETDEV openvswitch-switch (= ${binary:Version}),
+# DPDK_NETDEV ${misc:Depends},
+# DPDK_NETDEV ${python3:Depends},
+# DPDK_NETDEV ${shlibs:Depends},
+# DPDK_NETDEV Enhances:
+# DPDK_NETDEV openvswitch-switch,
+# DPDK_NETDEV Description: DPDK enabled Open vSwitch switch implementation
+# DPDK_NETDEV Open vSwitch is a production quality, multilayer, software-based,
+# DPDK_NETDEV Ethernet virtual switch. It is designed to enable massive network
+# DPDK_NETDEV automation through programmatic extension, while still supporting
+# DPDK_NETDEV standard management interfaces and protocols (e.g. NetFlow, IPFIX,
+# DPDK_NETDEV sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag). In addition, it is designed
+# DPDK_NETDEV to support distribution across multiple physical servers similar to
+# DPDK_NETDEV VMware's vNetwork distributed vswitch or Cisco's Nexus 1000V.
+# DPDK_NETDEV .
+# DPDK_NETDEV openvswitch-switch provides the userspace components and utilities for
+# DPDK_NETDEV the Open vSwitch kernel-based switch.
+# DPDK_NETDEV .
+# DPDK_NETDEV DPDK is a set of libraries for fast packet processing. Applications run
+# DPDK_NETDEV in user-space and communicate directly with dedicated network interfaces.
+# DPDK_NETDEV .
+# DPDK_NETDEV This package provides a DPDK enabled implementation of the ovs-vswitchd
+# DPDK_NETDEV binary.
Package: openvswitch-test
Architecture: all
diff --git a/debian/rules b/debian/rules
index 9a2f8ac1c..f3202ac30 100755
--- a/debian/rules
+++ b/debian/rules
@@ -28,6 +28,7 @@ override_dh_auto_configure:
$(EXTRA_CONFIGURE_OPTS) \
)
ifneq (,$(filter i386 amd64 ppc64el arm64, $(DEB_HOST_ARCH)))
+ifeq (,$(filter nodpdk, $(DEB_BUILD_OPTIONS)))
test -d _dpdk || mkdir _dpdk
cd _dpdk && ( \
test -e Makefile || \
@@ -37,6 +38,7 @@ ifneq (,$(filter i386 amd64 ppc64el arm64, $(DEB_HOST_ARCH)))
$(EXTRA_CONFIGURE_OPTS) \
)
endif
+endif
# NOTE(jamespage): by default, just run all tests
@@ -61,12 +63,14 @@ ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
# Skip DPDK testing on arm64 as builders don't have crc32 support
# which is used in aarch64 based crc optimization in ovs >= 2.12.0~
ifneq (,$(filter i386 amd64 ppc64el, $(DEB_HOST_ARCH)))
+ifeq (,$(filter nodpdk, $(DEB_BUILD_OPTIONS)))
if $(MAKE) -C _dpdk check TESTSUITEFLAGS='$(PARALLEL) $(TEST_LIST_DPDK)' || \
$(MAKE) -C _dpdk check TESTSUITEFLAGS='--recheck'; then :; \
else \
cat _dpdk/tests/testsuite.log; \
exit 1; \
fi
+endif # nodpdk
endif # i386/amd64/ppc64el
endif # nocheck
@@ -74,8 +78,10 @@ override_dh_auto_build:
dh_auto_build --sourcedirectory=_debian -- dist distdir=openvswitch
dh_auto_build --sourcedirectory=_debian
ifneq (,$(filter i386 amd64 ppc64el arm64, $(DEB_HOST_ARCH)))
+ifeq (,$(filter nodpdk, $(DEB_BUILD_OPTIONS)))
dh_auto_build --sourcedirectory=_dpdk
endif
+endif
execute_before_dh_auto_clean:
find . -name "*.pyc" -delete