diff options
-rwxr-xr-x | build/BuildAndTestOVS.sh | 150 | ||||
-rwxr-xr-x | build/build_dpdk_rpm.sh | 142 | ||||
-rwxr-xr-x | build/build_ovs_rpm.sh | 214 | ||||
-rw-r--r-- | build/config | 31 | ||||
-rwxr-xr-x | build/instack_ovs.sh | 401 | ||||
-rwxr-xr-x | build/test_ovs_rpm.sh | 138 | ||||
-rwxr-xr-x | ci/build.sh | 1 | ||||
-rwxr-xr-x | ci/buildovs.sh | 143 | ||||
-rwxr-xr-x | ci/clean.sh | 43 | ||||
-rwxr-xr-x | ci/upload_artifacts.sh | 20 | ||||
-rw-r--r-- | fuel-plugin-ovsnfv/ovs_package/ubuntu/dependencies.txt | 6 |
11 files changed, 1173 insertions, 116 deletions
diff --git a/build/BuildAndTestOVS.sh b/build/BuildAndTestOVS.sh new file mode 100755 index 0000000..10a2f05 --- /dev/null +++ b/build/BuildAndTestOVS.sh @@ -0,0 +1,150 @@ +#!/bin/bash + +# Copyright (c) 2016 Open Platform for NFV Project, Inc. and its contributors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +echo "===============================" +echo executing $0 $@ +echo + +usage() { + echo "$0 -a <kernel major> -d -g <OVS TAG> -h\ + -i <kernel minor> -p <patch url> -t -u <OVS URL> -v <verbose\ + -a <kernel major> -- Specify major release if special kernel is required\ + The default kernel is Centos 7.2 kernel after upgrade.\ + -d <dpdk> -- Specify dpdk build.\ + The default is to build ovs for linux kernel data path.\ + -g <OVS TAG> -- OVS release tag or branch to build such as 2.4.\ + The default is master.\ + -h print this message\ + -i <kernel minor> -- Specify minor release if special kernel is required.\ + The default kernel is Centos 7.2 kernel after upgrade.\ + -p <patch url> -- Specify url to patches if required for ovs rpm.\ + -t -- Test rpm.\ + -u <OVS URL> -- path to OVS repo if using fork for patch.\ + The default is https://github.com/openvswitch/ovs.git\ + -v -- Set verbose mode." +} + +while getopts "a:dg:hi:p:tu:v" opt; do + case "$opt" in + a) + kernel_major=${OPTARG} + ;; + d) + DPDK="yes" + ;; + g) + TAG=${OPTARG} + ;; + h) + usage + exit 1 + ;; + i) + kernel_minor=${OPTARG} + ;; + p) + OVS_PATCH=${OPTARG} + ;; + t) + TESTRPM="yes" + ;; + u) + OVS_REPO_URL=${OPTARG} + ;; + v) + verbose="yes" + ;; + esac +done + +if [ -z $TAG ]; then + TAG=master +fi + +if [ -z $OVS_REPO_URL ]; then + OVS_REPO_URL=https://github.com/openvswitch/ovs.git +fi + +if [ ! -z $kernel_major ] && [ ! -z $kernel_minor ]; then + kernel_version=$kernel_major.$kernel_minor + echo =================== + echo Will install kernel version: major is $kernel_major and minor is $kernel_minor + echo =================== +else + echo Will use default kernel in ovs test vm +fi + +if [ ! -z $DPDK ]; then + setbuilddpdk="-d" +fi + +if [ -z ${WORKSPACE+1} ]; then + # We are not being run by Jenkins. + export WORKSPACE=$HOME/opnfv/ovsnfv + mkdir -p opnfv + cd opnfv + git clone https://git.opnfv.org/ovsnfv +fi + +export BUILD_BASE=$WORKSPACE/build + + + +if [ ! -d $BUILD_BASE ] +then + mkdir -p $BUILD_BASE +fi + +if [ ! -f $BUILD_BASE/config ]; then + touch $BUILD_BASE/config +fi + +export PATH=$PATH:$WORKSPACE/ci:$BUILD_BASE +source $BUILD_BASE/config + +cd $BUILD_BASE +export TOPDIR=$BUILD_BASE + +# build variables + +export TMP_RELEASE_DIR=$TOPDIR/release +export CACHE_DIR=$TOPDIR/cache +export TMPDIR=$TOPDIR/scratch +export RPMDIR=$TOPDIR/rpmbuild + + +mkdir -p $RPMDIR/RPMS +mkdir -p $RPMDIR/SOURCES +mkdir -p $RPMDIR/SPECS +mkdir -p $RPMDIR/SRPMS + + +if [ ! -z $TESTRPM ]; then + # Spawn VM to do the testing. + if [ ! -z $kernel_version ]; then + instack_ovs.sh -a $kernel_major -g $TAG -i $kernel_minor -p $OVS_PATCH -t -u $OVS_REPO_URL + else + instack_ovs.sh $setbuilddpdk -g $TAG -p $OVS_PATCH -t -u $OVS_REPO_URL + fi +else + # Run build locally. + build_ovs_rpm.sh $setbuilddpdk -g $TAG -p $OVS_PATCH -u $OVS_REPO_URL + cp $HOME/rpmbuild/RPMS/* $TMP_RELEASE_DIR +fi + +exit 0 diff --git a/build/build_dpdk_rpm.sh b/build/build_dpdk_rpm.sh new file mode 100755 index 0000000..1812dc3 --- /dev/null +++ b/build/build_dpdk_rpm.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +# Copyright (c) 2016 Open Platform for NFV Project, Inc. and its contributors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +echo "===============================" +echo executing $0 $@ +echo executing on machine `uname -a` + +usage() { + echo run BuildAndTestOVS -h for complete help on options on ovsnfv scripts. +} + +while getopts "g:hp:u:v" opt; do + case "$opt" in + g) + DPDK_VERSION=${OPTARG} + ;; + h|\?) + usage + exit 1 + ;; + p) + DPDK_PATCH=${OPTARG} + ;; + u) + DPDK_REPO_URL=${OPTARG} + ;; + v) + verbose="yes" + ;; + esac +done + +if [ -z $DPDK_REPO_URL ]; then + DPDK_REPO_URL=http://dpdk.org/git/dpdk +fi +if [ -z $DPDK_VERSION ]; then + DPDK_VERSION=2.2.0 +fi + +HOME=`pwd` +TOPDIR=$HOME +TMPDIR=$TOPDIR/rpms + +if [ -d $TMPDIR ] +then + rm -rf $TMPDIR +fi + +echo "---------------------" +echo "Install dependencies for dpdk" +echo +sudo yum -y install gcc make python-devel openssl-devel autoconf automake rpm-build \ + redhat-rpm-config libtool libpcap-devel numactl-devel python-sphinx \ + libvirt-devel + + +mkdir -p $TMPDIR + +cd $TMPDIR + +mkdir -p $HOME/rpmbuild/RPMS +mkdir -p $HOME/rpmbuild/SOURCES +mkdir -p $HOME/rpmbuild/SPECS +mkdir -p $HOME/rpmbuild/SRPMS + +RPMDIR=$HOME/rpmbuild + +# +# Use Fedora copr spec file +# +echo "---------------------" +echo "Get copr distribution git" +mkdir -p copr +cd copr +git clone https://github.com/tfherbert/dpdk-snap.git +cd dpdk-snap +git checkout $COPR_DPDK_VERSION + +echo "---------------------" +echo "Build DPDK RPM version $DPDK_VERSION" +echo +cd $TMPDIR +git clone $DPDK_REPO_URL +cd dpdk +if [[ "$DPDK_VERSION" =~ "master" ]]; then + git checkout master + snapgit=`git log --pretty=oneline -n1|cut -c1-8` +else + git checkout v$DPDK_VERSION + snapgit=`grep "define snapver" $TMPDIR/copr/dpdk-snap/dpdk.spec | cut -c25-33` +fi + +cp $TMPDIR/copr/dpdk-snap/dpdk.spec $TMPDIR/dpdk +cp $TMPDIR/copr/dpdk-snap/dpdk.spec $RPMDIR/SPECS +cp $TMPDIR/copr/dpdk-snap/*.patch $TMPDIR/copr/dpdk-snap/sources $TMPDIR/copr/dpdk-snap/dpdk-snapshot.sh $RPMDIR/SOURCES +snapser=`git log --pretty=oneline | wc -l` + +makever=`make showversion` +basever=`echo ${makever} | cut -d- -f1` +prefix=dpdk-${basever:0:5} + +archive=${prefix}.tar.gz +DPDK_VERSION=$basever + +echo "-------------------------------" +echo "Creating ${archive}" +echo +git archive --prefix=${prefix}/ HEAD | gzip -9 > ${archive} +cp ${archive} $RPMDIR/SOURCES/ +echo "-------------------------------" +echo building RPM for DPDK version $DPDK_VERSION +echo +rpmbuild -bb --define "_topdir $RPMDIR" dpdk.spec + +echo "-------------------------------" +echo Delete all rpms from $HOME +echo +set +e +rm $HOME/*.rpm +set -e + +echo "-------------------------------" +echo Copy dpdk RPM +echo +cp $RPMDIR/RPMS/x86_64/*.rpm $HOME + +exit 0 diff --git a/build/build_ovs_rpm.sh b/build/build_ovs_rpm.sh new file mode 100755 index 0000000..b03f4ab --- /dev/null +++ b/build/build_ovs_rpm.sh @@ -0,0 +1,214 @@ +#!/bin/bash + +# Copyright (c) 2016 Open Platform for NFV Project, Inc. and its contributors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +echo "===============================" +echo executing $0 $@ +echo executing on machine `uname -a` + +usage() { + echo run BuildAndTestOVS -h for help +} + +function delrpm() { + set +e + rpm -q $1 + if [ $? -eq 0 ]; then + sudo rpm -e --allmatches $1 + fi + set -e +} +function cleanrpms() { + delrpm openvswitch + delrpm dpdk-devel + delrpm dpdk-tools + delrpm dpdk-examples + delrpm dpdk +} + +while getopts "cdg:hkp:u:v" opt; do + case "$opt" in + c) + setnocheck="--without check" + ;; + d) + DPDK="yes" + ;; + g) + TAG=${OPTARG} + ;; + h|\?) + usage + exit 1 + ;; + k) + kmod="yes" + ;; + p) + OVS_PATCH=${OPTARG} + ;; + u) + OVS_REPO_URL=${OPTARG} + ;; + v) + verbose="yes" + ;; + esac +done + +HOME=`pwd` +TOPDIR=$HOME +TMPDIR=$TOPDIR/ovsrpm + +echo "---------------------------------------" +echo Clean out old working dir +echo +if [ -d $TMPDIR ] +then + rm -rf $TMPDIR +fi + +echo "----------------------------------------" +echo Install pre-reqs. +echo +sudo yum -y install gcc make python-devel openssl-devel kernel-devel graphviz \ + kernel-debug-devel autoconf automake rpm-build redhat-rpm-config \ + libtool python-twisted-core desktop-file-utils groff PyQt4 + +VERSION=2.3.90 +os_type=fedora +kernel_version=$(uname -a | awk '{print $3}') + +RPMDIR=$HOME/rpmbuild + +echo "---------------------------------------" +echo Clean out old reminents of old rpms and rpm _topdir. +echo + +rm openvswitch*.rpm || true +if [ -d $RPMDIR ]; then + rm -rf $RPMDIR +fi + +echo "---------------------------------------" +echo Create new rpm _topdir. +echo +mkdir -p $HOME/rpmbuild/RPMS +mkdir -p $HOME/rpmbuild/SOURCES +mkdir -p $HOME/rpmbuild/SPECS +mkdir -p $HOME/rpmbuild/SRPMS + + +mkdir -p $TMPDIR + +cd $TMPDIR + +if [ ! -z $DPDK ]; then + echo "----------------------------------" + echo "Build OVS for dpdk. Use Fedora copr repo" + echo + echo "----------------------------------" + echo "Clone Fedora copr repo and copy files." + echo + git clone https://github.com/tfherbert/ovs-snap.git + cd ovs-snap + git checkout $COPR_OVS_VERSION + cp $TMPDIR/ovs-snap/openvswitch.spec $RPMDIR/SPECS + cp $TMPDIR/ovs-snap/* $RPMDIR/SOURCES + snapgit=`grep "define snapver" $TMPDIR/ovs-snap/openvswitch.spec | cut -c26-33` + echo "-------------------------------------------" + echo "Remove old dpdk, ovs and dpdk development rpms" + echo + cleanrpms + + if [ -z $DPDK_VERSION ]; then + DPDK_VERSION=16.04.0 + fi + echo "-------------------------------------------" + echo "Install dpdk and dpdk development rpms for version $DPDK_VERSION" + echo + sudo rpm -ivh $HOME/dpdk-${DPDK_VERSION:0:1}*.rpm + sudo rpm -ivh $HOME/dpdk-devel*.rpm + echo "----------------------------------------" + echo "Copy DPDK RPM to SOURCES" + echo + cp $HOME/*.rpm $RPMDIR/SOURCES + echo "--------------------------------------------" + echo "Get commit from $snapgit User Space OVS version $TAG" + echo + cd $TMPDIR + git clone $OVS_REPO_URL + cd $TMPDIR/ovs + git checkout $snapgit + echo "--------------------------------------------" + echo "Creating snapshot, $archive with name same as in spec file." + echo + snapser=`git log --pretty=oneline | wc -l` + basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1` + prefix=openvswitch-${basever} + archive=${prefix}-${snapser}.git${snapgit}.tar.gz + git archive --prefix=${prefix}-${snapser}.git${snapgit}/ HEAD | gzip -9 > $RPMDIR/SOURCES/${archive} + cd $TMPDIR/ovs-snap + echo "--------------------------------------------" + echo "Build openvswitch RPM" + echo +else + echo "-------------------------------------------------" + echo "Build OVS without DPDK:" + echo "Use spec files for $os_type in OVS distribution." + echo + if [[ "$TAG" =~ "master" ]]; then + git clone $OVS_REPO_URL + cd ovs + + if [[ ! "$OVS_PATCH" =~ "no" ]]; then + echo "Apply patches from $OVS_PATCH" + fi + basever=`grep AC_INIT configure.ac | cut -d' ' -f2 | cut -d, -f1` + export VERSION=$basever + + echo "--------------------------------------------" + echo making distribution tarball for Open vswitch version $VERSION + echo + ./boot.sh + ./configure + make dist + + echo cp openvswitch-*.tar.gz $HOME/rpmbuild/SOURCES + cp openvswitch-*.tar.gz $HOME/rpmbuild/SOURCES + else + export VERSION=${TAG} + echo "---------------------------------------------" + echo "Get openvswith-${VERSION}.tar.gz" + echo + curl --silent --output $HOME/rpmbuild/SOURCES/openvswitch-${VERSION}.tar.gz http://openvswitch.org/releases/openvswitch-${VERSION}.tar.gz + fi + + if [ ! -z $kmod ]; then + echo "--------------------------------------------" + echo "Building openvswitch kernel module RPM" + echo + rpmbuild -bb -D "kversion $kernel_version" -D "kflavors default" --define "_topdir `echo $RPMDIR`" $setnocheck rhel/openvswitch-kmod-${os_type}.spec + fi + echo "--------------------------------------------" + echo "Build openvswitch RPM" + echo +fi +rpmbuild -bb --define "_topdir `echo $RPMDIR`" $setnocheck openvswitch.spec + +cp $RPMDIR/RPMS/x86_64/*.rpm $HOME + +exit 0 diff --git a/build/config b/build/config index bd2bf5e..350b192 100644 --- a/build/config +++ b/build/config @@ -15,6 +15,31 @@ # config file to be populated with configuration parameters for build. -# OVS TAG -export OVSTAG=master -#export NOCHECK=true +# OVS configuration. +# +# OVS TAG or revision to build. The default is master which causes an RPM to be +# built from the top of current master. The tag uses the current ovs naming and +# release convention. This option can be overriden in the command line. +# +export OVSTAG=2.4.0 +# +# when NOCHECK is yes, the ovs rpm is build with the --without check option which +# Disables running "make check" as the RPM is built. +# +export NOCHECK=yes +# +# URL to external URL for patches to be applied for Open vSwitch. +# +export PATCH=none +# +# DPDK configuration. +# +export WITH_DPDK=yes +export DPDK_PATCH=none +export DPDK_VERSION=16.04-rc4 +export COPR_DPDK_VERSION=039002f07eb1dd96a061235f0bf0493da386bba2 +export COPR_OVS_VERSION=5e311e125035edc706efbd9cc679f67e5972dbb4 +# +# When KMOD is set, the Linux kernel module is built and tested. +# +export KMOD=no diff --git a/build/instack_ovs.sh b/build/instack_ovs.sh new file mode 100755 index 0000000..4c258a4 --- /dev/null +++ b/build/instack_ovs.sh @@ -0,0 +1,401 @@ +#!/bin/bash +############################################################################## +# Copyright (c) 2015 Red Hat Inc. and others. +# therbert@redhat.com +# 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 -e +declare -i CNT + +echo "===============================" +echo executing $0 $@ +echo path is $PATH + +usage() { + echo run BuildAndTestOVS -h for help +} + +while getopts "a:dg:hi:p:tu:v" opt; do + case "$opt" in + a) + kernel_major=${OPTARG} + ;; + d) + DPDK="yes" + setdpdk="-d" + ;; + g) + TAG=${OPTARG} + ;; + h|\?) + usage + exit 1 + ;; + i) + kernel_minor=${OPTARG} + ;; + p) + OVS_PATCH=${OPTARG} + ;; + t) + TESTRPM="yes" + ;; + u) + OVS_REPO_URL=${OPTARG} + ;; + v) + verbose="yes" + ;; + esac +done +# +# Default Config options +# +echo =============================================== +echo Default Configuration Options. +echo =============================================== +echo option NOCHECK is set to $NOCHECK +echo build DPDK option is set to $DPDK +echo DPDK Patch URL is set to $DPDK_PATCH +echo DPDK Version is set to $DPDK_VERSION +echo Option for OVS Kernel Module is set to $KMOD +echo =============================================== +if [[ $NOCHECK =~ "yes" ]]; then + setnocheck="-c" +fi +if [[ $KMOD =~ "yes" ]]; then + setkmod="-k" +fi + + + +if [ -z $OVS_REPO_URL ]; then + OVS_REPO_URL=https://github.com/openvswitch/ovs.git +fi + +if [ ! -z $kernel_major ] && [ ! -z $kernel_minor ]; then + kernel_version=$kernel_major.$kernel_minor + echo =================== + echo Will install kernel version: major is $kernel_major and minor is $kernel_minor + echo =================== +else + echo Will use default kernel in ovs test vm +fi + +if [ -z ${WORKSPACE+1} ]; then + # We are not being run by Jenkins. + export WORKSPACE=$HOME/opnfv/ovsnfv + mkdir -p opnfv + cd opnfv + git clone https://git.opnfv.org/ovsnfv +fi + +export BUILD_BASE=$WORKSPACE/build + +if [ ! -d $BUILD_BASE ] +then + mkdir -p $BUILD_BASE +fi + +if [ ! -f $BUILD_BASE/config ]; then + touch $BUILD_BASE/config +fi + +export PATH=$PATH:$WORKSPACE/ci:$BUILD_BASE +source $BUILD_BASE/config + +cd $BUILD_BASE +export TOPDIR=$BUILD_BASE + +export TMP_RELEASE_DIR=$TOPDIR/release +if [ ! -d $TMP_RELEASE_DIR ]; then + mkdir -p $TMP_RELEASE_DIR +fi + +export CACHE_DIR=$TOPDIR/cache +if [ ! -d $CACHE_DIR ]; then + mkdir -p $CACHE_DIR +fi +export TMPDIR=$TOPDIR/scratch +if [ ! -d $SCRATCH_DIR ]; then + mkdir -p $SCRATCH_DIR +fi + +rdo_images_uri=https://ci.centos.org/artifacts/rdo/images/liberty/delorean/stable + +vm_index=4 +RDO_RELEASE=liberty +SSH_OPTIONS=(-o StrictHostKeyChecking=no -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null) +OPNFV_NETWORK_TYPES="admin_network private_network public_network storage_network" + +# check for dependancy packages +for i in rpm-build createrepo libguestfs-tools python-docutils bsdtar; do + if ! rpm -q $i > /dev/null; then + sudo yum install -y $i + fi +done + +# RDO Manager expects a stack user to exist, this checks for one +# and creates it if you are root +if ! id stack > /dev/null; then + sudo useradd stack; + sudo echo 'stack ALL=(root) NOPASSWD:ALL' | sudo tee -a /etc/sudoers.d/stack + sudo echo 'Defaults:stack !requiretty' | sudo tee -a /etc/sudoers.d/stack + sudo chmod 0440 /etc/sudoers.d/stack + echo 'Added user stack' +fi + +# ensure that I can ssh as the stack user +if ! sudo grep "$(cat ~/.ssh/id_rsa.pub)" /home/stack/.ssh/authorized_keys; then + if ! sudo ls -d /home/stack/.ssh/ ; then + sudo mkdir /home/stack/.ssh + sudo chown stack:stack /home/stack/.ssh + sudo chmod 700 /home/stack/.ssh + fi + USER=$(whoami) sudo sh -c "cat ~$USER/.ssh/id_rsa.pub >> /home/stack/.ssh/authorized_keys" + sudo chown stack:stack /home/stack/.ssh/authorized_keys +fi + +# clean up stack user previously build instack disk images +ssh -T ${SSH_OPTIONS[@]} stack@localhost "rm -f instack*.qcow2" + +# Yum repo setup for building the undercloud +if ! rpm -q rdo-release > /dev/null && [ "$1" != "-master" ]; then + sudo yum -y install yum-plugin-priorities + sudo yum-config-manager --disable openstack-${RDO_RELEASE} + sudo curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7-liberty/current-passed-ci/delorean.repo + sudo curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7-liberty/delorean-deps.repo + sudo rm -f /etc/yum.repos.d/delorean-current.repo +elif [ "$1" == "-master" ]; then + sudo yum -y install yum-plugin-priorities + sudo yum-config-manager --disable openstack-${RDO_RELEASE} + sudo curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7/current-passed-ci/delorean.repo + sudo curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7-liberty/delorean-deps.repo + sudo rm -f /etc/yum.repos.d/delorean-current.repo +fi + +# ensure the undercloud package is installed so we can build the undercloud +if ! rpm -q instack-undercloud > /dev/null; then + sudo yum install -y python-tripleoclient +fi + +# ensure openvswitch is installed +if ! rpm -q openvswitch > /dev/null; then + sudo yum install -y openvswitch +fi + +# ensure libvirt is installed +if ! rpm -q libvirt-daemon-kvm > /dev/null; then + sudo yum install -y libvirt-daemon-kvm +fi + +# clean this up incase it's there +sudo rm -f /tmp/instack.answers + +# ensure that no previous undercloud VMs are running +sudo ../ci/clean.sh +# and rebuild the bare undercloud VMs +ssh -T ${SSH_OPTIONS[@]} stack@localhost <<EOI + set -e + NODE_COUNT=5 NODE_CPU=2 NODE_MEM=8192 TESTENV_ARGS="--baremetal-bridge-names 'brbm brbm1 brbm2 brbm3'" instack-virt-setup +EOI + +# let dhcp happen so we can get the ip +# just wait instead of checking until we see an address +# because there may be a previous lease that needs +# to be cleaned up +sleep 5 + +# get the undercloud ip address +UNDERCLOUD=$(grep instack /var/lib/libvirt/dnsmasq/default.leases | awk '{print $3}' | head -n 1) +if [ -z "$UNDERCLOUD" ]; then + #if not found then dnsmasq may be using leasefile-ro + instack_mac=$(ssh -T ${SSH_OPTIONS[@]} stack@localhost "virsh domiflist instack" | grep default | \ + grep -Eo "[0-9a-f\]+:[0-9a-f\]+:[0-9a-f\]+:[0-9a-f\]+:[0-9a-f\]+:[0-9a-f\]+") + UNDERCLOUD=$(arp -e | grep ${instack_mac} | awk {'print $1'}) + + if [ -z "$UNDERCLOUD" ]; then + echo "\n\nNever got IP for Instack. Can Not Continue." + exit 1 + fi +else + echo -e "${blue}\rInstack VM has IP $UNDERCLOUD${reset}" +fi + +# ensure that we can ssh to the undercloud +CNT=10 +while ! ssh -T ${SSH_OPTIONS[@]} "root@$UNDERCLOUD" "echo ''" > /dev/null && [ $CNT -gt 0 ]; do + echo -n "." + sleep 3 + CNT=CNT-1 +done +# TODO fail if CNT=0 + +# yum update undercloud and reboot. +ssh -T ${SSH_OPTIONS[@]} "root@$UNDERCLOUD" <<EOI + set -e + + echo "----------------------------------------------------------------" + echo yum update and install pciutils prereqs for DPDK tools and samples. + echo + yum -y update + yum -y install pciutils libvirt +EOI + +# reboot VM +ssh -T ${SSH_OPTIONS[@]} stack@localhost <<EOI + virsh reboot instack +EOI +sleep 30 + +# yum repo, triple-o package and ssh key setup for the undercloud +echo "Install epel-release on undercloud" +ssh -T ${SSH_OPTIONS[@]} "root@$UNDERCLOUD" <<EOI + set -e + + if ! rpm -q epel-release > /dev/null; then + yum install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm + fi + + yum -y install yum-plugin-priorities + curl -o /etc/yum.repos.d/delorean.repo http://trunk.rdoproject.org/centos7-liberty/current-passed-ci/delorean.repo + curl -o /etc/yum.repos.d/delorean-deps.repo http://trunk.rdoproject.org/centos7-liberty/delorean-deps.repo + + cp /root/.ssh/authorized_keys /home/stack/.ssh/authorized_keys + chown stack:stack /home/stack/.ssh/authorized_keys +EOI +# +# If using special kernel version, install on undercloud vm. +# +if [ ! -z $kernel_version ]; then + echo "Install special kernel version $kernel_version on undercloud" + ssh -T ${SSH_OPTIONS[@]} "root@$UNDERCLOUD" <<EOI + set -e + yum -y install gcc ncurses ncurses-devel bc xz rpm-build + echo wget --quiet http://mirrors.neterra.net/elrepo/kernel/el6/x86_64/RPMS/kernel-ml-$kernel_version-1.el6.elrepo.x86_64.rpm + wget --quiet http://mirrors.neterra.net/elrepo/kernel/el6/x86_64/RPMS/kernel-ml-$kernel_version-1.el6.elrepo.x86_64.rpm + echo wget --quiet http://mirrors.neterra.net/elrepo/kernel/el6/x86_64/RPMS/kernel-ml-devel-$kernel_version-1.el6.elrepo.x86_64.rpm + wget --quiet http://mirrors.neterra.net/elrepo/kernel/el6/x86_64/RPMS/kernel-ml-devel-$kernel_version-1.el6.elrepo.x86_64.rpm + echo rpm -i kernel-ml-$kernel_version-1.el6.elrepo.x86_64.rpm + rpm -i kernel-ml-$kernel_version-1.el6.elrepo.x86_64.rpm + echo rpm -i kernel-ml-devel-$kernel_version-1.el6.elrepo.x86_64.rpm + rpm -i kernel-ml-devel-$kernel_version-1.el6.elrepo.x86_64.rpm + + echo cd /lib/modules/$kernel_version-1.el6.elrepo.x86_64 + cd /lib/modules/$kernel_version-1.el6.elrepo.x86_64 + echo rm -f build + rm -f build + echo ln -s /usr/src/kernels/$kernel_version-1.el6.elrepo.x86_64 build + ln -s /usr/src/kernels/$kernel_version-1.el6.elrepo.x86_64 build + #echo rm -f source + #rm -f source + #echo ln -s ./build source + #ln -s ./build source +EOI +else + # + # Install latest stable kernel. + # + echo "Install devel-kernel and elrepo on undercloud" + ssh -T ${SSH_OPTIONS[@]} "root@$UNDERCLOUD" <<EOI + echo Install latest stable kernel + set -e + yum install -y kernel kernel-devel + rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org + rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm +EOI +fi + +# copy instackenv file for future virt deployments +echo copy instackenv file for future virt deployments +if [ ! -d stack ]; then mkdir stack; fi +scp ${SSH_OPTIONS[@]} stack@$UNDERCLOUD:instackenv.json stack/instackenv.json + + +# +# If using special kernel version, reboot undercloud vm +# +echo If using special kernel version, reboot undercloud vm +if [ -z $kernel_version ]; then + ssh -T ${SSH_OPTIONS[@]} stack@localhost <<EOI + virsh reboot instack +EOI + sleep 15 +fi + +# +# Copy build and test scripts to undercloud vm. +# If special kernel is required, build rpm on undercloud vm otherwise build +# it locally. +# +echo Copy build and test scripts to undercloud vm. +echo BUILD_BASE is $BUILD_BASE +scp ${SSH_OPTIONS[@]} $BUILD_BASE/build_ovs_rpm.sh stack@$UNDERCLOUD: +scp ${SSH_OPTIONS[@]} $BUILD_BASE/test_ovs_rpm.sh stack@$UNDERCLOUD: +# +# build dpdk rpm locally. +# +if [[ "$DPDK" =~ "yes" ]]; then + echo Build DPDK RPMs + ./build_dpdk_rpm.sh -g $DPDK_VERSION +fi +# +# Build rpm on undercloud if custom kernel module is required otherwise build +# locally. +# +if [ ! -z $kernel_version ]; then + echo build rpm on undercloud with kernel version $kernel_version + ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI + ./build_ovs_rpm.sh -a $kernel_major $setnocheck -g $TAG -i $kernel_minor -k -p $OVS_PATCH -u $OVS_REPO_URL +EOI + scp ${SSH_OPTIONS[@]} stack@UNDERCLOUD:*.rpm $RPMDIR/RPMS/ +elif [[ "$DPDK" =~ "yes" ]]; then + echo Build ovs with DPDK locally + # + # Build locally and copy RPMS to undercloud vm for testing + # and copy RPMS to temporary release dir. + # + ./build_ovs_rpm.sh $setnocheck -d -g $TAG -p $OVS_PATCH -u $OVS_REPO_URL +else + # Build locally and copy RPMS to undercloud vm for testing + # and copy RPMS to temporary release dir. + # + echo build OVS rpm locally + ./build_ovs_rpm.sh $setnocheck -g $TAG $setkmod -p $OVS_PATCH -u $OVS_REPO_URL +fi +# +# Test rpm on undercloud vm +# TODO: Undercloud VM doesn't support sse3 instruction needed set to run DPDK +# +if [ ! -z $TESTRPM ]; then + if [ -z $DPDK ]; then + echo "-----------------------------------------" + echo Test rpm on undercloud vm + echo Copy all RPMS to undercloud for testing. + echo + scp ${SSH_OPTIONS[@]} $RPMDIR/RPMS/x86_64/* stack@$UNDERCLOUD: + scp ${SSH_OPTIONS[@]} $RPMDIR/SOURCES/dpdk*.rpm stack@$UNDERCLOUD: + ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI + ./test_ovs_rpm.sh $setdpdk $setkmod +EOI + else + echo "-----------------------------------------" + echo "TODO: Undercloud VM doesn't support sse3 instruction needed DPDK." + echo "DPDK is required, therefore test DPDK/OVS RPM in host" + echo + ./test_ovs_rpm.sh $setdpdk $setkmod + fi +fi + +# +# If tests pass, copy rpms to release dir +# +echo copy rpms to release dir +echo copy rpms from undercloud back to $TMP_RELEASE_DIR in host +cp $RPMDIR/RPMS/x86_64/* $TMP_RELEASE_DIR + +exit 0 diff --git a/build/test_ovs_rpm.sh b/build/test_ovs_rpm.sh new file mode 100755 index 0000000..d0b9174 --- /dev/null +++ b/build/test_ovs_rpm.sh @@ -0,0 +1,138 @@ +#!/bin/bash + +# Copyright (c) 2016 Open Platform for NFV Project, Inc. and its contributors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +echo "===============================" +echo executing $0 $@ +echo executing on machine `uname -a` + + +usage() { + echo run BuildAndTest -h for help +} + +function delrpm() { + set +e + rpm -q $1 + if [ $? -eq 0 ]; then + sudo rpm -e --allmatches $1 + fi + set -e +} +function cleanrpms() { + delrpm openvswitch + delrpm dpdk-devel + delrpm dpdk-tools + delrpm dpdk-examples + delrpm dpdk +} + +while getopts "dg:hkp:u:v" opt; do + case "$opt" in + d) + DPDK="yes" + ;; + g) + TAG=${OPTARG} + ;; + h|\?) + usage + exit 1 + ;; + k) + kmod="yes" + ;; + u) + OVS_REPO_URL=${OPTARG} + ;; + v) + verbose="yes" + ;; + esac +done + +HOME=`pwd` +TOPDIR=$HOME +TMPDIR=$TOPDIR/ovsrpm + +if [ -d $TMPDIR ] +then + rm -rf $TMPDIR +fi + +mkdir -p $TMPDIR + +cd $TMPDIR + +mkdir -p $HOME/rpmbuild/RPMS/x86_64 +mkdir -p $HOME/rpmbuild/SOURCES +mkdir -p $HOME/rpmbuild/SPECS +mkdir -p $HOME/rpmbuild/SRPMS + +RPMDIR=$HOME/rpmbuild +cp $HOME/*.rpm $RPMDIR/RPMS/x86_64 + +function stopovs() { + set +e + /bin/systemctl is-active openvswitch.service + if [ $? -eq 0 ]; then + sudo /bin/systemctl stop openvswitch.service + fi + set -e +} + +echo "-----------------------------------" +echo "Clean old dpdk and ovs installations" +echo +stopovs +cleanrpms + +if [ ! -z $DPDK ]; then + if [ -z $DPDK_VERSION ]; then + DPDK_VERSION=16.04.0 + fi + echo "-----------------------------------" + echo "Install DPDK RPMs for version $DPDK_VERSION" + echo + sudo rpm -ivh $RPMDIR/RPMS/x86_64/dpdk-${DPDK_VERSION:0:1}*.rpm + sudo rpm -ivh $RPMDIR/RPMS/x86_64/dpdk-tools-${DPDK_VERSION:0:1}*.rpm + sudo rpm -ivh $RPMDIR/RPMS/x86_64/dpdk-examples-${DPDK_VERSION:0:1}*.rpm +fi + +if [ ! -z $kmod ]; then + echo "-----------------------------------" + echo "Test installation of kmod RPM" + echo + sudo rpm -ivh $RPMDIR/RPMS/x86_64/openvswitch-kmod*.rpm +fi +echo "-----------------------------------" +echo "Test installation of user space RPM" +echo +sudo rpm -ivh $RPMDIR/RPMS/x86_64/openvswitch-2*.rpm + +echo "-----------------------------------" +echo "Start openvswitch service." +echo +sudo service openvswitch start + +sudo ovs-vsctl show +sudo ovs-vsctl add-br brtest +sudo ovs-ofctl dump-flows brtest +sudo ovs-vsctl del-br brtest +sudo service openvswitch stop + +exit 0 diff --git a/ci/build.sh b/ci/build.sh index c1655ad..2723abe 100755 --- a/ci/build.sh +++ b/ci/build.sh @@ -13,6 +13,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +set -e echo "Hello OVSNFV community!" diff --git a/ci/buildovs.sh b/ci/buildovs.sh index 77cb96d..5270f03 100755 --- a/ci/buildovs.sh +++ b/ci/buildovs.sh @@ -1,12 +1,23 @@ #!/bin/bash -############################################################################## -# Copyright (c) 2015 Red Hat Inc. and others. -# therbert@redhat.com -# 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 -############################################################################## + +# Copyright (c) 2016 Open Platform for NFV Project, Inc. and its contributors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e + +echo "===================================" +echo executing $0 $@ # Check to verify that I am being run by Jenkins CI. @@ -16,9 +27,7 @@ if [ -z ${WORKSPACE+1} ]; then fi -if [ -z ${OVSTAG+1} ]; then - export TAG=master -else +if [ ${OVSTAG} ]; then export TAG=$OVSTAG fi @@ -38,7 +47,6 @@ if [ ! -f $BUILD_BASE/config ]; then fi export PATH=$PATH:$WORKSPACE/ci:$BUILD_BASE - source $BUILD_BASE/config cd $BUILD_BASE @@ -51,10 +59,6 @@ export CACHE_DIR=$TOPDIR/cache export TMPDIR=$TOPDIR/scratch export RPMDIR=$TOPDIR/rpmbuild -echo "--------------------------------------------------" -echo "Build OVS RPM from upstream git $TAG" -echo - mkdir -p $RPMDIR/RPMS mkdir -p $RPMDIR/SOURCES mkdir -p $RPMDIR/SPECS @@ -65,97 +69,25 @@ then mkdir -p $TMP_RELEASE_DIR fi -# Centos build server should support the following build prerequisites - -# yum install gcc make python-devel openssl-devel kernel-devel graphviz \ -# kernel-debug-devel autoconf automake rpm-build redhat-rpm-config \ -# libtool - -if [ -d $TMPDIR ] -then - rm -rf $TMPDIR -fi - -mkdir $TMPDIR - -cd $TMPDIR - -echo "---------------------" -echo "Clone git repo $TAG" -echo -git clone https://github.com/openvswitch/ovs.git - -cd ovs -echo "--------------------" -echo "Checkout OVS $TAG" -echo -if [[ ! "$TAG" =~ "master" ]]; then - git checkout $TAG -fi -./boot.sh -./configure -echo "--------------------" -echo "Make OVS $TAG" -echo -make # -# Get version for master +# Build ovs rpm with DPDK # -echo "--------------------" -echo "Get OVS version for $TAG" +echo ============================================= +echo =======Build ovs rpm with DPDK and test in VM. echo -if [[ "$TAG" =~ "master" ]]; then - v=$($TMPDIR/ovs/utilities/ovs-vsctl --version | head -1 | cut -d' ' -f4) - export VERSION=$v -else - export VERSION=${TAG:1} -fi - -echo "--------------------" -echo "OVS version is $VERSION" -echo -echo "--------------------" -echo "Make OVS distribution $TAG" -echo - -make dist - -cd $TMPDIR/ovs - -cp openvswitch-$VERSION.tar.gz $TOPDIR/rpmbuild/SOURCES -cp openvswitch-$VERSION.tar.gz $TMPDIR - -cd $TMPDIR -tar -xzf openvswitch-$VERSION.tar.gz - -cd $TMPDIR/openvswitch-$VERSION - - -echo "--------------------" -echo "Build OVS RPM" -echo - -if [ ! -z ${NOCHECK+1} ]; then - # Build RPM without checks - # - rpmbuild -bb --define "_topdir `echo $RPMDIR`" --without check rhel/openvswitch.spec -else - rpmbuild -bb --define "_topdir `echo $RPMDIR`" rhel/openvswitch.spec -fi +$BUILD_BASE/BuildAndTestOVS.sh -d -g master -p none -t +# +# Build special version of ovs with patches --TODO +# # Once build is done copy product to artifactory. +# and cleanup -echo "---------------------------------------" -echo "Copy RPM into $TMP_RELEASE_DIR" -echo -cp $RPMDIR/RPMS/x86_64/*.rpm $TMP_RELEASE_DIR - -# cleanup echo "---------------------------------------" -echo "Cleanup $TMP_RELEASE_DIR" +echo "Cleanup temporary dirs" echo -cd $BUILDDIR +cd $BUILD_BASE if [ -d $TMPDIR ] then @@ -166,7 +98,20 @@ fi # copy artifacts. if [[ "$JOB_NAME" =~ "daily" ]]; then - upload_artifacts.sh + $BUILD_BASE/../ci/upload_artifacts.sh fi +if [ -d $TMP_RELEASE_DIR ]; then + rm -rf $CACHE_RELEASE_DIR +fi + +if [ -d $RPMDIR ]; then + rm -rf $RPMDIR +fi + +# Destroy VM if one has been deployed. Also remove any local installation of +# DPDK and OVS +# +sudo $BUILD_BASE/../ci/clean.sh + exit 0 diff --git a/ci/clean.sh b/ci/clean.sh new file mode 100755 index 0000000..b1033b0 --- /dev/null +++ b/ci/clean.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +############################################################################## +# Copyright (c) 2016 Red Hat Inc. and others. +# therbert@redhat.com +# 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 +############################################################################## +#Clean script to uninstall provisioning server for Apex +#author: Dan Radez (dradez@redhat.com) +# +vm_index=4 + +# Clean off instack VM +virsh destroy instack 2> /dev/null || echo -n '' +virsh undefine instack --remove-all-storage 2> /dev/null || echo -n '' +virsh vol-delete instack.qcow2 --pool default 2> /dev/null +rm -f /var/lib/libvirt/images/instack.qcow2 2> /dev/null + +# Clean off baremetal VMs in case they exist +for i in $(seq 0 $vm_index); do + virsh destroy baremetalbrbm_brbm1_$i 2> /dev/null || echo -n '' + virsh undefine baremetalbrbm_brbm1_$i --remove-all-storage 2> /dev/null || echo -n '' + virsh vol-delete baremetalbrbm_brbm1_${i}.qcow2 --pool default 2> /dev/null + rm -f /var/lib/libvirt/images/baremetalbrbm_brbm1_${i}.qcow2 2> /dev/null +done + +# Clean off brbm bridges +virsh net-destroy brbm 2> /dev/null +virsh net-undefine brbm 2> /dev/null +vs-vsctl del-br brbm 2> /dev/null + +virsh net-destroy brbm1 2> /dev/null +virsh net-undefine brbm1 2> /dev/null +vs-vsctl del-br brbm1 2> /dev/null + +# clean pub keys from root's auth keys +sed -i '/stack@instack.localdomain/d' /root/.ssh/authorized_keys +sed -i '/virtual-power-key/d' /root/.ssh/authorized_keys + + +echo "Cleanup Completed" diff --git a/ci/upload_artifacts.sh b/ci/upload_artifacts.sh index 470773d..45128bd 100755 --- a/ci/upload_artifacts.sh +++ b/ci/upload_artifacts.sh @@ -19,21 +19,19 @@ set -o nounset set -o pipefail # log info to console -echo "Uploading the OVS $VERSION RPM artifacts. " +echo "Uploading the OVS and DPDK RPM artifacts. " echo "-----------------------------------------" echo -export RPMFILE_D=openvswitch-debuginfo-$VERSION-1.x86_64.rpm -export RPMFILE=openvswitch-$VERSION-1.x86_64.rpm - -# upload artifact and additional files to google storage -echo gsutil cp $TMP_RELEASE_DIR/$RPMFILE_D gs://$GS_URL/opnfv-$DATE-$RPMFILE_D -gsutil cp $TMP_RELEASE_DIR/$RPMFILE_D gs://$GS_URL/opnfv-$DATE-$RPMFILE_D - -echo gsutil cp $TMP_RELEASE_DIR/$RPMFILE gs://$GS_URL/opnfv-$DATE-$RPMFILE -gsutil cp $TMP_RELEASE_DIR/$RPMFILE gs://$GS_URL/opnfv-$DATE-$RPMFILE +cd $TMP_RELEASE_DIR +for i in `ls *.rpm` +do + echo copying $i to gs://$GS_URL/ovs4opnfv + gsutil cp $TMP_RELEASE_DIR/$i gs://$GS_URL/ovs4opnfv-$i + echo +done echo echo "------------------------------------------------------" echo "Done!" -echo "Artifacts are available as http://$GS_URL/opnfv-$DATE-$RPMFILE" +echo "Artifacts are available in http://$GS_URL/ovs4opnfv/*.rpm" diff --git a/fuel-plugin-ovsnfv/ovs_package/ubuntu/dependencies.txt b/fuel-plugin-ovsnfv/ovs_package/ubuntu/dependencies.txt index 77188cf..08c6782 100644 --- a/fuel-plugin-ovsnfv/ovs_package/ubuntu/dependencies.txt +++ b/fuel-plugin-ovsnfv/ovs_package/ubuntu/dependencies.txt @@ -2,14 +2,14 @@ http://archive.ubuntu.com/ubuntu/pool/main/a/autoconf/autoconf_2.69-6_all.deb http://archive.ubuntu.com/ubuntu/pool/main/a/automake-1.14/automake_1.14.1-2ubuntu1_all.deb http://archive.ubuntu.com/ubuntu/pool/main/a/autotools-dev/autotools-dev_20130810.1_all.deb http://archive.ubuntu.com/ubuntu/pool/main/m/m4/m4_1.4.17-4_amd64.deb -http://archive.ubuntu.com/ubuntu/pool/main/p/pcre3/libpcre3_8.31-2ubuntu2.2_amd64.deb +http://archive.ubuntu.com/ubuntu/pool/main/p/pcre3/libpcre3_8.31-2ubuntu2.3_amd64.deb http://archive.ubuntu.com/ubuntu/pool/main/libs/libselinux/libselinux1_2.2.2-1ubuntu0.1_amd64.deb http://archive.ubuntu.com/ubuntu/pool/main/libs/libsepol/libsepol1_2.2-1ubuntu0.1_amd64.deb http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/fuse_2.9.2-4ubuntu4.14.04.1_amd64.deb http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/libfuse2_2.9.2-4ubuntu4.14.04.1_amd64.deb -http://archive.ubuntu.com/ubuntu/pool/main/p/pcre3/libpcrecpp0_8.31-2ubuntu2.2_amd64.deb +http://archive.ubuntu.com/ubuntu/pool/main/p/pcre3/libpcrecpp0_8.31-2ubuntu2.3_amd64.deb http://archive.ubuntu.com/ubuntu/pool/main/libs/libsepol/libsepol1-dev_2.2-1ubuntu0.1_amd64.deb -http://archive.ubuntu.com/ubuntu/pool/main/p/pcre3/libpcre3-dev_8.31-2ubuntu2.2_amd64.deb +http://archive.ubuntu.com/ubuntu/pool/main/p/pcre3/libpcre3-dev_8.31-2ubuntu2.3_amd64.deb http://archive.ubuntu.com/ubuntu/pool/main/libs/libselinux/libselinux1-dev_2.2.2-1ubuntu0.1_amd64.deb http://archive.ubuntu.com/ubuntu/pool/main/f/fuse/libfuse-dev_2.9.2-4ubuntu4.14.04.1_amd64.deb http://archive.ubuntu.com/ubuntu/pool/main/libt/libtool/libltdl-dev_2.4.2-1.7ubuntu1_amd64.deb |