From a7155293dba7c21f060b671b15fc36a66b84de83 Mon Sep 17 00:00:00 2001 From: Romanos Skiadas Date: Fri, 20 Jan 2017 16:49:26 -0500 Subject: Adding Quagga to build Builds 6Wind ZRPC, Quagga, and dependencies required for OpenDaylight with BGPVPN scenario. Packages are built into RPMs, and left on the overcloud disk in /root/quagga. They are then installed at deploy time if VPN feature flag is enabled. Note, for proper upstream we should create a zrpc OOO service, but that can be a follow up patch. For that we would also need official packaging/build system upstream somewhere. JIRA: APEX-357 Changes Include: - Build thrift rpm - Build c-capnproto rpm - Build quagga rpm - Build zrpcd rpm - Configure bgpd - Detect deploy with VPN and install pkgs - Enable zrpcd with systemd Change-Id: I9825694f46aaab48a3d1cd5fc4d9a24c7370e8fa Signed-off-by: Tim Rozet Signed-off-by: Nikolas Hermanns Signed-off-by: Romanos Skiadas --- build/build_quagga.sh | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100755 build/build_quagga.sh (limited to 'build/build_quagga.sh') diff --git a/build/build_quagga.sh b/build/build_quagga.sh new file mode 100755 index 00000000..7d298e57 --- /dev/null +++ b/build/build_quagga.sh @@ -0,0 +1,250 @@ +#!/usr/bin/env bash +############################################################################## +# Copyright (c) 2017 Tim Rozet (Red Hat) and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +set -xe + +ARTIFACT=None + +# Builds Quagga, Zebra and other dependency RPMs for CentOS 7 +# Install package dependencies +install_quagga_build_deps() { + sudo yum -y install automake bison flex libtool make readline-devel \ + texinfo texi2html rpm-build libcap-devel groff net-snmp-devel pam-devel glib2 glib2-devel epel-release spectool \ + wget git gcc-c++ openssl-devel boost-devel boost-static gtest zeromq-4.1.4 zeromq-devel-4.1.4 \ + capnproto-devel capnproto-libs capnproto + sudo yum -y groupinstall "Development Tools" +} + +display_usage () +{ +cat << EOF +$0 Builds Quagga/ZRPC and Dependency RPMs + +usage: $0 [ [-a | --artifact] artifact ] + +OPTIONS: + -a artifact to build (thrift, capnproto, quagga, zrpc). Default: All artifacts. + -c clean all build directories + -h help, prints this help text + +Example: +build_quagga.sh -a thrift +EOF +} + +parse_cmdline() { + while [ "${1:0:1}" = "-" ] + do + case "$1" in + -h|--help) + display_usage + exit 0 + ;; + -a|--artifact) + ARTIFACT=${2} + shift 2 + ;; + -c|--clean) + CLEAN="True" + shift 1 + ;; + *) + display_usage + exit 1 + ;; + esac + done + +} + +# Removes build directory folder and re-creates RPM DIRs to use +function quagga_clean(){ + rm -rf ${QUAGGA_BUILD_DIR} + sudo yum remove -y zrpc* quagga* thrift* c-capnproto* +} + +# Build Thrift RPM +function build_thrift(){ + rm -rf thrift + git clone https://git-wip-us.apache.org/repos/asf/thrift.git + pushd thrift + git checkout 0.10.0 + wget https://issues.apache.org/jira/secure/attachment/12840511/0002-THRIFT-3986-using-autoreconf-i-fails-because-of-miss.patch + wget https://issues.apache.org/jira/secure/attachment/12840512/0001-THRIFT-3987-externalise-declaration-of-thrift-server.patch + patch -p1 < 0002-THRIFT-3986-using-autoreconf-i-fails-because-of-miss.patch + patch -p1 < 0001-THRIFT-3987-externalise-declaration-of-thrift-server.patch + autoreconf -i + ./configure --without-qt4 --without-qt5 --without-csharp --without-java \ + --without-erlang --without-nodejs --without-perl --without-python \ + --without-php --without-php_extension --without-dart --without-ruby \ + --without-haskell --without-go --without-haxe --without-d + # Hack somehow the testing file of php is not there + # We will disable php anyhow later on. + touch lib/php/src/ext/thrift_protocol/run-tests.php + make dist + pushd contrib/ + spectool -g -R thrift.spec + mv ../thrift-*.tar.gz $rpmbuild/SOURCES/ + rpmbuild --define "_topdir $rpmbuild" -ba thrift.spec --define "without_ruby 1" --define "without-php 1" + popd > /dev/null + popd > /dev/null +} + +# c-capnproto RPM +# This is a library for capnproto in C. Not to be confused with +# the capnproto provided by the repos +function build_capnproto(){ + rm -rf c-capnproto + git clone https://github.com/opensourcerouting/c-capnproto + pushd c-capnproto + git checkout 332076e52257 + autoreconf -i + ./configure --without-gtest + make dist + + cp ${BUILD_ROOT}/rpm_specs/c_capnproto.spec $rpmbuild/SPECS/ + cp c-capnproto-*.tar.gz $rpmbuild/SOURCES/ + rpmbuild --define "_topdir $rpmbuild" -ba $rpmbuild/SPECS/c_capnproto.spec + popd > /dev/null +} + +build_quagga(){ + # Build Quagga + rm -rf quagga + sudo yum -y install $rpmbuild/RPMS/x86_64/*.rpm + git clone https://github.com/6WIND/quagga.git + pushd quagga > /dev/null + # checkout the parent of the bellow patch. + # Once the issue addressed by the patch is fixed + # these two lines can be removed. + git checkout 95bb0f4a + patch -p1 < ${PATCHES_DIR}/fix_quagga_make_dist.patch + autoreconf -i + ./configure --with-zeromq --with-ccapnproto --enable-user=quagga \ + --enable-group=quagga --enable-vty-group=quagga \ + --disable-doc --enable-multipath=64 + + # Quagga RPM + make dist + cp ${BUILD_ROOT}/rpm_specs/quagga.spec $rpmbuild/SPECS/ + cp quagga*.tar.gz $rpmbuild/SOURCES/ + cat > $rpmbuild/SOURCES/bgpd.conf < /dev/null +} + +# Build ZPRC +build_zrpc(){ + sudo yum -y install $rpmbuild/RPMS/x86_64/*.rpm + rm -rf zrpcd + git clone https://github.com/6WIND/zrpcd.git + pushd zrpcd > /dev/null + touch NEWS README + export QUAGGA_CFLAGS='-I/usr/include/quagga/' + # checkout the parent of the bellow patch. + # Once the issue addressed by the patch is fixed + # these two lines can be removed. + git checkout 9bd1ee8e + patch -p1 < ${PATCHES_DIR}/fix_zrpcd_make_dist.patch + patch -p1 < ${PATCHES_DIR}/zrpcd_hardcoded_paths.patch + autoreconf -i + + # ZRPC RPM + ./configure --enable-zrpcd \ + --enable-user=quagga --enable-group=quagga \ + --enable-vty-group=quagga + make dist + + cat > $rpmbuild/SOURCES/zrpcd.service < /dev/null + +case "$ARTIFACT" in + thrift) + build_thrift + ;; + capnproto) + build_capnproto + ;; + quagga) + build_quagga + ;; + zrpc) + build_zrpc + ;; + *) + build_thrift + build_capnproto + build_quagga + build_zprc + ;; +esac + +popd > /dev/null -- cgit 1.2.3-korg