Rebase: docker tag reuse context adj
[armband.git] / patches / fuel-plugin-ovs / 0006-build-install-pre_build_hook-Prepare-multiarch.patch
1 From: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
2 Date: Sun, 26 Jun 2016 20:17:59 +0200
3 Subject: [PATCH] build, install, pre_build_hook: Prepare multiarch
4
5 install.sh: Factor out dpkg arch into var, read it from dpkg.
6 install.sh: Relax DPDK/OVS/OVS-DPDK version hardcodes
7
8 Instead of putting all debs in one archive, and possibly wasting
9 bandwidth / space with unused foreign packages, split plugin
10 archive(s) into arch-specific archives, with <_${arch}> suffix.
11 E.g. <ovs-dpdk.tar.gz> for <amd64> becomes <ovs-dpdk_amd64.tar.gz>
12
13 Since only one (DPDK/OVS/OVS-DPDK) set of packages is shipped per
14 archive, we can safely wildcard the installed version of libdpdk,
15 which previously hardcoded 2.2.0 and 16.04 for NSH/non-NSH.
16
17 This is helpful for arm64, which has a custom deb subversion
18 for DPDK16.07 and also requires DPDK16.07 for OVS-DPDK-NSH, instead
19 of 2.2.0.
20
21 Pass UBUNTU_ARCH from pre_build_hook and make install.sh more
22 arch-independant.
23
24 CHANGE:
25  UBUNTU_ARCH specifies the complete list of supported architectures
26  of the resulting RPM, in `dpkg --print-architecture` format.
27  e.g. UBUNTU_ARCH='arm64 amd64' will result in x86 + AArch64 support
28
29 Change-Id: I04ac0a78319b460270545708efc4b53f02f7dd05
30 Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
31 ---
32  deployment_scripts/install.sh   | 51 +++++++++++-----------
33  ovs_build/build-ovs-dpdk.sh     | 64 ++++++++++++++++------------
34  ovs_build/build-ovs-nsh-dpdk.sh | 93 ++++++++++++++++++++++++-----------------
35  pre_build_hook                  | 24 +++++++----
36  4 files changed, 136 insertions(+), 96 deletions(-)
37
38 diff --git a/deployment_scripts/install.sh b/deployment_scripts/install.sh
39 index efbed72..46d74bb 100644
40 --- a/deployment_scripts/install.sh
41 +++ b/deployment_scripts/install.sh
42 @@ -9,34 +9,33 @@ host=$1
43  nsh=$2
44  dpdk=$3
45  dpdk_socket_mem=${4:-''}
46 +arch=$(dpkg --print-architecture)
47 +ovs="ovs-dpdk_${arch}.tar.gz"
48  
49 -if [ $nsh = 'true' ]
50 -then
51 -    curl  http://$host:8080/plugins/fuel-plugin-ovs-0.9/repositories/ubuntu/ovs-nsh-dpdk.tar.gz | tar -xzv
52 -    dpkg -i openvswitch-datapath-dkms_2.5.90-1.nsh_all.deb
53 -    dpkg -i openvswitch-common_2.5.90-1.nsh_amd64.deb
54 -    dpkg -i openvswitch-switch_2.5.90-1.nsh_amd64.deb
55 -    dpkg -i python-openvswitch_2.5.90-1.nsh_all.deb
56 -    if [ $dpdk = 'true' ]
57 -    then
58 +if [ $nsh = 'true' ]; then
59 +    ovs="ovs-nsh-dpdk_${arch}.tar.gz"
60 +fi
61
62 +curl  http://$host:8080/plugins/fuel-plugin-ovs-0.9/repositories/ubuntu/${ovs} | tar -xzv
63 +dpkg -i openvswitch-datapath-dkms_*.deb
64 +dpkg -i openvswitch-common_*.deb
65 +dpkg -i openvswitch-switch_*.deb
66 +dpkg -i python-openvswitch_*.deb
67 +if [ $dpdk = 'true' ]; then
68 +    if [ $nsh = 'true' -o -n $dpdk_socket_mem ]; then
69          dpkg -i libxenstore3.0*.deb
70 -        dpkg -i libdpdk0_2.2.0-1_amd64.deb
71 -        dpkg -i dpdk_2.2.0-1_amd64.deb
72 -        dpkg -i openvswitch-switch-dpdk_2.5.90-1.nsh_amd64.deb
73 +        if [ $arch = 'arm64' ]; then
74 +          # FIXME(armband): arm64 DPDK ships individual libs, install them all
75 +          dpdk_deb_name=$(ls dpdk_*)
76 +          dpdk_deb_suffix=${dpdk_deb_name#dpdk_}
77 +          dpkg -i *${dpdk_deb_suffix%_*}*.deb
78 +        else
79 +          dpkg -i libdpdk0_*.deb
80 +          dpkg -i dpdk_*.deb
81 +        fi
82 +        dpkg -i openvswitch-switch-dpdk_*.deb
83      fi
84 -else
85 -    curl  http://$host:8080/plugins/fuel-plugin-ovs-0.9/repositories/ubuntu/ovs-dpdk.tar.gz | tar -xzv
86 -    dpkg -i openvswitch-datapath-dkms_2.5.90-1_all.deb
87 -    dpkg -i openvswitch-common_2.5.90-1_amd64.deb
88 -    dpkg -i openvswitch-switch_2.5.90-1_amd64.deb
89 -    dpkg -i python-openvswitch_2.5.90-1_all.deb
90 -    if [[ $dpdk = 'true' && -n $dpdk_socket_mem ]]
91 -    then
92 -        dpkg -i libxenstore3.0*.deb
93 -        dpkg -i libdpdk0_16.07-1_amd64.deb
94 -        dpkg -i dpdk_16.07-1_amd64.deb
95 -        dpkg -i openvswitch-switch-dpdk_2.5.90-1_amd64.deb
96 -
97 +    if ! [ $nsh = 'true' -a -n $dpdk_socket_mem ]; then
98          #Set to 0, dpdk init script mount hugepages but don't change current allocation
99          sed -i "s/[# ]*\(NR_2M_PAGES=\).*/\10/" /etc/dpdk/dpdk.conf
100          service dpdk start
101 @@ -47,3 +46,5 @@ else
102          service openvswitch-switch restart
103      fi
104  fi
105 +
106 +rm -rf $INSTALL_HOME
107 diff --git a/ovs_build/build-ovs-dpdk.sh b/ovs_build/build-ovs-dpdk.sh
108 index dd9c6ff..a14f5fd 100755
109 --- a/ovs_build/build-ovs-dpdk.sh
110 +++ b/ovs_build/build-ovs-dpdk.sh
111 @@ -10,18 +10,27 @@ BUILD_DEST=${BUILD_DEST:-/tmp/ovs-dpdk}
112  
113  export DEB_BUILD_OPTIONS='parallel=8 nocheck'
114  
115 -sudo apt-get -y --force-yes install devscripts dpkg-dev wget
116 +# Keep track of native arch (BUILD_ARCH) and target arch(s) (UBUNTU_ARCH)
117 +# All archs should be represented in `dpkg --print-architecture` format
118 +# UBUNTU_ARCH holds a space-separated list of target arch(s)
119 +# FIXME(armband): For now, only native building is supported!
120 +BUILD_ARCH=$(dpkg --print-architecture)
121 +UBUNTU_ARCH=${UBUNTU_ARCH:-${BUILD_ARCH}}
122  
123 -rm -rf ${BUILD_DEST}; mkdir -p ${BUILD_DEST}
124 +# Build and/or fetch precompiled packages for all arch(s) in UBUNTU_ARCH
125 +for ARCH in ${UBUNTU_ARCH}; do
126 +  rm -rf ${BUILD_DEST}; mkdir -p ${BUILD_DEST}; cd ${BUILD_DEST}
127 +  if [ ${ARCH} = ${BUILD_ARCH} ]; then
128 +    # Native building for: DPDK, OVS-DPDK, OVS
129 +    sudo apt-get -y --force-yes install devscripts dpkg-dev wget
130  
131 -cd ${BUILD_DEST}
132 -wget -c http://fast.dpdk.org/rel/dpdk-16.07.tar.xz
133 -xz -d dpdk-16.07.tar.xz; tar xvf dpdk-16.07.tar
134 -cd dpdk-16.07
135 -cp -r ${BUILD_SRC}/dpdk_16.07/debian .
136 +    wget -c http://fast.dpdk.org/rel/dpdk-16.07.tar.xz
137 +    xz -d dpdk-16.07.tar.xz; tar xvf dpdk-16.07.tar
138 +    cd dpdk-16.07
139 +    cp -r ${BUILD_SRC}/dpdk_16.07/debian .
140  
141 -# copy from debian/control
142 -sudo apt-get install -y --force-yes debhelper \
143 +    # DPDK build-dep install: copy from debian/control
144 +    sudo apt-get install -y --force-yes debhelper \
145                 dh-python \
146                 dh-systemd \
147                 doxygen  \
148 @@ -35,15 +44,15 @@ sudo apt-get install -y --force-yes debhelper \
149                 python-sphinx  \
150                 texlive-fonts-recommended  \
151                 texlive-latex-extra
152 -debian/rules build; fakeroot debian/rules binary
153 +    debian/rules build; fakeroot debian/rules binary
154  
155 -cd ${BUILD_DEST}
156 -sudo dpkg -i *.deb
157 -apt-get download libxenstore3.0
158 +    cd ${BUILD_DEST}
159 +    sudo dpkg -i *.deb
160 +    apt-get download libxenstore3.0
161  
162 -sudo apt-get build-dep openvswitch -y --force-yes
163 -# copy from debian/control
164 -sudo apt-get install -y --force-yes autoconf \
165 +    sudo apt-get build-dep openvswitch -y --force-yes
166 +    # OVS-DPDK build-dep install: copy from debian/control
167 +    sudo apt-get install -y --force-yes autoconf \
168                 automake \
169                 bzip2 \
170                 debhelper \
171 @@ -62,16 +71,19 @@ sudo apt-get install -y --force-yes autoconf \
172                 python-zopeinterface \
173                 python-six
174  
175 -wget -c ${URL_OVS_ARCHIVE}/${OVS_COMMIT}.tar.gz
176 -tar xzf ${OVS_COMMIT}.tar.gz; mv ovs-${OVS_COMMIT} ovs
177 -cp -r ovs ovs-dpdk
178 +    wget -c ${URL_OVS_ARCHIVE}/${OVS_COMMIT}.tar.gz
179 +    tar xzf ${OVS_COMMIT}.tar.gz; mv ovs-${OVS_COMMIT} ovs
180 +    cp -r ovs ovs-dpdk
181  
182 -cd ovs-dpdk
183 -cp -r ${BUILD_SRC}/openvswitch-dpdk_2.5.90/debian .
184 -debian/rules build; fakeroot debian/rules binary
185 +    cd ovs-dpdk
186 +    cp -r ${BUILD_SRC}/openvswitch-dpdk_2.5.90/debian .
187 +    debian/rules build; fakeroot debian/rules binary
188  
189 -cd ${BUILD_DEST}/ovs
190 -debian/rules build; fakeroot debian/rules binary
191 +    cd ${BUILD_DEST}/ovs
192 +    debian/rules build; fakeroot debian/rules binary
193 +  fi
194  
195 -cp -r ${BUILD_DEST}/*.deb ${BUILD_DEB}
196 -rm -rf ${BUILD_DEST}
197 +  # Store DEBs in <${BUILD_DEB}/${ARCH}/> dir and cleanup
198 +  rm -rf ${BUILD_DEB}/${ARCH}; mkdir -p ${BUILD_DEB}/${ARCH}; cd ${BUILD_DEB}/${ARCH}
199 +  cp ${BUILD_DEST}/*.deb .; rm -rf ${BUILD_DEST}
200 +done
201 diff --git a/ovs_build/build-ovs-nsh-dpdk.sh b/ovs_build/build-ovs-nsh-dpdk.sh
202 index 3751c02..a65a2bb 100755
203 --- a/ovs_build/build-ovs-nsh-dpdk.sh
204 +++ b/ovs_build/build-ovs-nsh-dpdk.sh
205 @@ -11,16 +11,24 @@ DIR="$(dirname `readlink -f $0`)"
206  
207  export DEB_BUILD_OPTIONS='parallel=8 nocheck'
208  
209 -sudo apt-get build-dep openvswitch -y --force-yes
210 -sudo apt-get -y --force-yes install devscripts dpkg-dev wget
211 +# Keep track of native arch (BUILD_ARCH) and target arch(s) (UBUNTU_ARCH)
212 +# All archs should be represented in `dpkg --print-architecture` format
213 +# UBUNTU_ARCH holds a space-separated list of target arch(s)
214 +# FIXME(armband): For now, only native building is supported!
215 +BUILD_ARCH=$(dpkg --print-architecture)
216 +UBUNTU_ARCH=${UBUNTU_ARCH:-${BUILD_ARCH}}
217  
218 -rm -rf ${BUILD_HOME}; mkdir -p ${BUILD_HOME}
219 +# Build and/or fetch precompiled packages for all arch(s) in UBUNTU_ARCH
220 +for ARCH in ${UBUNTU_ARCH}; do
221 +  rm -rf ${BUILD_HOME}; mkdir -p ${BUILD_HOME}; cd ${BUILD_HOME}
222 +  if [ ${ARCH} = ${BUILD_ARCH} ]; then
223 +    # Native building for: DPDK, OVS-DPDK, OVS
224 +    sudo apt-get build-dep openvswitch -y --force-yes
225 +    sudo apt-get -y --force-yes install devscripts dpkg-dev wget
226 +    dget -x -u https://launchpad.net/ubuntu/+archive/primary/+files/dpdk_2.2.0-0ubuntu8.dsc
227  
228 -cd ${BUILD_HOME}
229 -dget -x -u https://launchpad.net/ubuntu/+archive/primary/+files/dpdk_2.2.0-0ubuntu8.dsc
230 -
231 -# copy from debian/control
232 -sudo apt-get install -y --force-yes debhelper \
233 +    # DPDK build-dep install: copy from debian/control
234 +    sudo apt-get install -y --force-yes debhelper \
235                 dh-python \
236                 dh-systemd \
237                 doxygen  \
238 @@ -35,21 +43,22 @@ sudo apt-get install -y --force-yes debhelper \
239                 texlive-fonts-recommended  \
240                 texlive-latex-extra
241  
242 -cd dpdk-2.2.0; rm -rf debian/patches/
243 -cat << EOF > debian/changelog
244 +    cd dpdk-2.2.0; rm -rf debian/patches/
245 +    cat << EOF > debian/changelog
246  dpdk (2.2.0-1) unstable; urgency=low
247    * DPDK 2.2.0
248   -- DPDK team <dev@dpdk.org>  $(date --rfc-2822)
249  EOF
250 -debian/rules build; fakeroot debian/rules binary
251 -cd ${BUILD_HOME}; sudo dpkg -i *.deb
252 -apt-get download libxenstore3.0
253 +    # DPDK build & install (required for following native build of OVS-NSH)
254 +    debian/rules build; fakeroot debian/rules binary
255 +    cd ${BUILD_HOME}; sudo dpkg -i *.deb
256 +    apt-get download libxenstore3.0
257  
258 -cd ${BUILD_HOME}
259 -dget -x -u https://launchpad.net/ubuntu/+archive/primary/+files/openvswitch-dpdk_2.4.0-0ubuntu1.dsc
260 +    cd ${BUILD_HOME}
261 +    dget -x -u https://launchpad.net/ubuntu/+archive/primary/+files/openvswitch-dpdk_2.4.0-0ubuntu1.dsc
262  
263 -# copy from debian/control
264 -sudo apt-get install -y --force-yes autoconf \
265 +    # OVS-NSH build-dep install: copy from debian/control
266 +    sudo apt-get install -y --force-yes autoconf \
267                 automake \
268                 bzip2 \
269                 debhelper \
270 @@ -68,33 +77,41 @@ sudo apt-get install -y --force-yes autoconf \
271                 python-zopeinterface \
272                 python-six
273  
274 -wget -c ${URL_OVS_ARCHIVE}/${OVS_COMMIT}.tar.gz
275 -tar xzf ${OVS_COMMIT}.tar.gz; mv ovs-${OVS_COMMIT} ovs
276 -PATCHES=$(cd ${DIR}/patches; echo *patch)
277 -for patch in ${PATCHES}
278 -do
279 -    patch -p1 < ${DIR}/patches/${patch}
280 -done
281 -cd ${BUILD_HOME}; tar czvf ovs.tar.gz ovs
282 -rm -rf openvswitch-dpdk-${OVS_VER}*
283 -cd openvswitch-dpdk-2.4.0; uupdate -v ${OVS_VER} ../ovs.tar.gz
284 -cd ../openvswitch-dpdk-${OVS_VER}
285 -sed -i "s/include\/rte_config.h/include\/dpdk\/rte_config.h/" acinclude.m4
286 -sed -i 's/DPDK_INCLUDE=.*/DPDK_INCLUDE=$RTE_SDK\/include\/dpdk/'  acinclude.m4
287 -autoreconf --install
288 -rm -rf debian/patches/
289 -cat << EOF > debian/changelog
290 +    # OVS-NSH build preparations: download sources, patch if needed
291 +    wget -c ${URL_OVS_ARCHIVE}/${OVS_COMMIT}.tar.gz
292 +    tar xzf ${OVS_COMMIT}.tar.gz; mv ovs-${OVS_COMMIT} ovs; cd ovs
293 +
294 +    # Apply OVS-NSH patches, create a new orig tar archive
295 +    PATCHES=$(cd ${DIR}/patches; echo *patch)
296 +    for patch in ${PATCHES}
297 +    do
298 +      patch -p1 < ${DIR}/patches/${patch}
299 +    done
300 +    cd ${BUILD_HOME}; tar czvf ovs.tar.gz ovs
301 +    rm -rf openvswitch-dpdk-${OVS_VER}*
302 +    cd openvswitch-dpdk-2.4.0; uupdate -v ${OVS_VER} ../ovs.tar.gz
303 +    cd ../openvswitch-dpdk-${OVS_VER}
304 +    sed -i "s/include\/rte_config.h/include\/dpdk\/rte_config.h/" acinclude.m4
305 +    sed -i 's/DPDK_INCLUDE=.*/DPDK_INCLUDE=$RTE_SDK\/include\/dpdk/'  acinclude.m4
306 +    autoreconf --install
307 +    rm -rf debian/patches/
308 +    cat << EOF > debian/changelog
309  openvswitch-dpdk (${OVS_VER}-1.nsh) unstable; urgency=low
310    * Support NSH
311   -- Open vSwitch team <dev@openvswitch.org>  $(date --rfc-2822)
312  EOF
313 -debian/rules build; fakeroot debian/rules binary
314 +    debian/rules build; fakeroot debian/rules binary
315  
316 -cd ${BUILD_HOME}/ovs
317 -cat << EOF > debian/changelog
318 +    cd ${BUILD_HOME}/ovs
319 +    cat << EOF > debian/changelog
320  openvswitch (${OVS_VER}-1.nsh) unstable; urgency=low
321    * Support NSH
322   -- Open vSwitch team <dev@openvswitch.org>  $(date --rfc-2822)
323  EOF
324 -debian/rules build; fakeroot debian/rules binary
325 -cp ${BUILD_HOME}/*.deb ${BUILD_DEST}
326 +    debian/rules build; fakeroot debian/rules binary
327 +  fi
328 +
329 +  # Store DEBs in <${BUILD_DEST}/${ARCH}/> dir and cleanup
330 +  rm -rf ${BUILD_DEST}/${ARCH}; mkdir -p ${BUILD_DEST}/${ARCH}; cd ${BUILD_DEST}/${ARCH}
331 +  cp ${BUILD_HOME}/*.deb .
332 +done
333 diff --git a/pre_build_hook b/pre_build_hook
334 index b9ae6bb..3e46a37 100755
335 --- a/pre_build_hook
336 +++ b/pre_build_hook
337 @@ -10,6 +10,11 @@ if [ `uname -m` = 'aarch64' ]; then
338    USE_DOCKER=false
339  fi
340  
341 +# Pass target arch(s) (UBUNTU_ARCH) to build scripts.
342 +# All archs should be represented in `dpkg --print-architecture` format
343 +# UBUNTU_ARCH holds a space-separated list of target arch(s)
344 +export UBUNTU_ARCH=${UBUNTU_ARCH:-$(dpkg --print-architecture)}
345 +
346  function build_pkg {
347    case $1 in
348      ubuntu)
349 @@ -23,8 +28,10 @@ function build_pkg {
350        cd ${DIR}/ovs_build
351        if [ "${USE_DOCKER}" = true ]; then
352          sudo docker build -t ovs_build .
353 -        sudo docker run -v ${DEB_DIR}:/deb -t ovs_build /ovs_build/build-ovs-dpdk.sh
354 -        sudo docker run -v ${DEB_DIR_NSH}:/deb -t ovs_build /ovs_build/build-ovs-nsh-dpdk.sh
355 +        sudo docker run -e "UBUNTU_ARCH=${UBUNTU_ARCH}" -v ${DEB_DIR}:/deb \
356 +          -t ovs_build /ovs_build/build-ovs-dpdk.sh
357 +        sudo docker run -e "UBUNTU_ARCH=${UBUNTU_ARCH}" -v ${DEB_DIR_NSH}:/deb \
358 +          -t ovs_build /ovs_build/build-ovs-nsh-dpdk.sh
359        else
360          rm -rf /tmp/ovs-build-{,nsh-}dpdk; mkdir -p /tmp/ovs-build-{,nsh-}dpdk
361          BUILD_HOME=/tmp/ovs-build-dpdk BUILD_DEB=${DEB_DIR} ./build-ovs-dpdk.sh
362 @@ -32,11 +39,14 @@ function build_pkg {
363          rm -rf /tmp/ovs-build-{,nsh-}dpdk
364        fi
365  
366 -      cd ${DEB_DIR}; tar czvf ../repositories/ubuntu/ovs-dpdk.tar.gz .;
367 -      cd ..; rm -rf ${DEB_DIR}
368 -
369 -      cd ${DEB_DIR_NSH}; tar czvf ../repositories/ubuntu/ovs-nsh-dpdk.tar.gz .;
370 -      cd ..; rm -rf ${DEB_DIR_NSH}
371 +      # Gather packages for each arch(s) in UBUNTU_ARCH in a separate archive
372 +      for ARCH in ${UBUNTU_ARCH}; do
373 +        cd ${DEB_DIR}/${ARCH}
374 +        tar czvf ../../repositories/ubuntu/ovs-dpdk_${ARCH}.tar.gz .
375 +        cd ${DEB_DIR_NSH}/${ARCH}
376 +        tar czvf ../../repositories/ubuntu/ovs-nsh-dpdk_${ARCH}.tar.gz .
377 +      done
378 +      cd ${DIR}; sudo rm -rf ${DEB_DIR} ${DEB_DIR_NSH}
379  
380        ;;
381      *) echo "Not supported system"; exit 1;;