3 # Copyright (c) 2019 Cisco and/or its affiliates.
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at:
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
22 # Figure out what system we are running on
23 if [[ -f /etc/os-release ]];then
24 source /etc/os-release
26 echo "Cannot determine OS version"
29 echo "----- OS INFO -----"
30 echo DISTRIB_ID: ${ID}
31 echo DISTRIB_RELEASE: ${VERSION_ID}
32 echo DISTRIB_CODENAME: ${VERSION_CODENAME}
33 echo DISTRIB_DESCRIPTION: ${PRETTY_NAME}
35 VERSION=`../vpp-version`
36 JVPP_VERSION=`../jvpp-version`
38 if [[ -n "${jvpp_commit_id}" ]]; then
39 # Skipping download of JVPP because it was built from source
40 VPP_DEB_NEW_ARTIFACTS="vpp libvppinfra vpp-plugin-core vpp-plugin-dpdk vpp-dev libvppinfra-dev vpp-api-python"
41 VPP_DEB_ARTIFACTS="vpp vpp-lib vpp-plugins vpp-dev vpp-api-python"
42 VPP_RPM_ARTIFACTS="vpp vpp-lib vpp-plugins vpp-devel vpp-api-python"
44 VPP_DEB_NEW_ARTIFACTS="vpp libvppinfra vpp-plugin-core vpp-plugin-dpdk vpp-api-java vpp-api-python"
45 VPP_DEB_ARTIFACTS="vpp vpp-lib vpp-plugins vpp-api-java vpp-api-python"
46 VPP_RPM_ARTIFACTS="vpp vpp-lib vpp-plugins vpp-api-java vpp-api-python"
50 # Check OS and stream to set correct packages
51 if [[ "$ID" == "centos" ]]; then
52 VPP_ARTIFACTS=${VPP_RPM_ARTIFACTS}
53 elif [[ "$ID" == "ubuntu" ]]; then
54 if [[ "1807 1810 1901" =~ .*$STREAM.* ]]; then
55 VPP_ARTIFACTS=${VPP_DEB_ARTIFACTS}
56 IGNORE_DEPS="vpp,vpp-lib,vpp-plugins"
58 VPP_ARTIFACTS=${VPP_DEB_NEW_ARTIFACTS}
59 IGNORE_DEPS="vpp,libvppinfra,vpp-plugin-core"
64 for ART in ${VPP_ARTIFACTS}; do
65 if [[ "${VERSION}" != 'RELEASE' ]]; then
66 if [[ "$ART" == "vpp-api-java" ]]; then
67 VPP_DEB_PACKAGES="$VPP_DEB_PACKAGES $ART=$JVPP_VERSION"
68 VPP_RPM_PACKAGES="$VPP_RPM_PACKAGES $ART-$JVPP_VERSION"
70 VPP_DEB_PACKAGES="$VPP_DEB_PACKAGES $ART=$VERSION"
71 VPP_RPM_PACKAGES="$VPP_RPM_PACKAGES $ART-$VERSION"
74 VPP_DEB_PACKAGES="$VPP_DEB_PACKAGES $ART"
75 VPP_RPM_PACKAGES="$VPP_RPM_PACKAGES $ART"
79 echo "----- DOWNLOADING PACKAGES -----"
80 REPO_URL="https://packagecloud.io/fdio/${STREAM}"
81 echo "REPO_URL: ${REPO_URL}"
82 if [[ "$ID" == "ubuntu" ]]; then
83 if [[ -f /etc/apt/sources.list.d/99fd.io.list ]];then
84 echo "Deleting: /etc/apt/sources.list.d/99fd.io.list"
85 sudo rm /etc/apt/sources.list.d/99fd.io.list
87 curl -s https://packagecloud.io/install/repositories/fdio/${STREAM}/script.deb.sh | sudo bash
88 apt-get download ${VPP_DEB_PACKAGES} || true
89 elif [[ "$ID" == "centos" ]]; then
90 if [[ -f /etc/yum.repos.d/fdio-master.repo ]]; then
91 echo "Deleting: /etc/yum.repos.d/fdio-master.repo"
92 sudo rm /etc/yum.repos.d/fdio-master.repo
94 curl -s https://packagecloud.io/install/repositories/fdio/${STREAM}/script.rpm.sh | sudo bash
95 sudo yum -y install --downloadonly --downloaddir=./ ${VPP_RPM_PACKAGES} || true
97 # TODO(CSIT-994): reenable NSH
98 # NSH_GROUP="io.fd.nsh_sfc"
99 # NSH_ARTIFACTS="vpp-nsh-plugin"
101 # If JVPP variable is set, clone and build JVPP from the specified commit
102 # Otherwise skip this step, hc2vpp will use JVPP snapshots from Nexus
103 if [[ -n "${jvpp_commit_id}" ]]; then
104 # first we need to install vpp and deps to be able to build jvpp
105 if [[ "$ID" == "centos" ]]; then
106 sudo rpm -i vpp-*.rpm
108 if [[ "$VERSION_CODENAME" == "xenial" ]]; then
109 sudo dpkg --ignore-depends=libmbedcrypto0,libmbedtls10,libmbedx509-0 -i vpp_*.deb vpp-dev_*.deb vpp-plugin-core_*.deb libvppinfra_*.deb libvppinfra-dev_*.deb
110 elif [[ "$VERSION_CODENAME" == "bionic" ]]; then
111 sudo dpkg --ignore-depends=libmbedcrypto1,libmbedtls10,libmbedx509-0 -i vpp_*.deb vpp-dev_*.deb vpp-plugin-core_*.deb libvppinfra_*.deb libvppinfra-dev_*.deb
113 echo "Error: Unsupported UBUNTU version."
117 # create new dir for custom jvpp build (jvpp directory already exists in hc2vpp, therefore using jvpp_src)
120 git clone https://gerrit.fd.io/r/jvpp
122 ref=`git ls-remote -q | grep ${jvpp_commit_id} | awk '{print $2}'`
123 git fetch origin ${ref} && git checkout FETCH_HEAD
125 if [[ "$ID" == "centos" ]]; then
131 if [[ $? != 0 ]]; then
132 echo "JVPP build failed."
135 cp build-root/packages/vpp-api-java* ${WORKSPACE}/csit
137 # Clean up when done.
138 if [[ "$ID" == "centos" ]]; then
139 sudo yum remove "*vpp*"
141 sudo apt -y remove "*vpp*"
146 # install vpp-api-java, this extracts jvpp .jar files into usr/share/java
147 if [[ "${OS}" == "centos7" ]]; then
148 sudo rpm --nodeps --install vpp-api-java*
150 sudo dpkg --ignore-depends=${IGNORE_DEPS} --install vpp-api-java*
153 # install jvpp jars into maven repo, so that maven picks them up when building hc2vpp
154 version=`../jvpp/version`
159 for item in jvpp*.jar; do
160 # Example filename: jvpp-registry-19.04.jar
161 # ArtifactId = jvpp-registry
162 # Version = 19.04 or 19.04-SNAPSHOT
163 basefile=$(basename -s .jar "$item")
164 artifactId=$(echo "$basefile" | cut -d '-' -f 1-2)
165 mvn install:install-file -Dfile=${item} -DgroupId=io.fd.jvpp -DartifactId=${artifactId} -Dversion=${version} -Dpackaging=jar -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r
168 # vpp-api-package is no longer necessary, breaks the installation of other packages that follow in next steps
169 if [[ "${OS}" == "centos7" ]]; then
170 sudo yum remove "*vpp-api-java*"
172 sudo apt -y remove "*vpp-api-java*"