Merge "Delete remains of DMM jobs"
[ci-management.git] / docker / scripts / lib_dnf.sh
1 # lib_dnf.sh - Docker build script dnf library.
2 #              For import only.
3
4 # Copyright (c) 2020 Cisco and/or its affiliates.
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at:
8 #
9 #     http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 # Don't import more than once.
18 if [ -n "$(alias lib_dnf_imported 2> /dev/null)" ] ; then
19     return 0
20 fi
21 alias lib_dnf_imported=true
22
23 export CIMAN_DOCKER_SCRIPTS=${CIMAN_DOCKER_SCRIPTS:-"$(dirname $BASH_SOURCE)"}
24 . $CIMAN_DOCKER_SCRIPTS/lib_common.sh
25
26 dump_dnf_package_list() {
27     branchname="$(echo $branch | sed -e 's,/,_,')"
28     dnf list installed > \
29         "$DOCKER_BUILD_LOG_DIR/$FDIOTOOLS_IMAGENAME-$branchname-dnf-packages.log"
30 }
31
32 dnf_install_packages() {
33     dnf install -y $@
34 }
35
36 dnf_install_docker_os_package_dependancies() {
37     dnf_install_packages dnf-utils
38 }
39
40 dnf_install_docker() {
41     # Note: Support for docker has been removed starting with centos-8, so the
42     #       only recourse is to pin the latest version by what's in the download dir.
43     # Browse the base URL to see what is available & update accordingly.
44
45     if [ "$OS_NAME" = "centos-8" ] ; then
46         dnf install -y https://download.docker.com/linux/$OS_ID/$OS_VERSION_ID/$OS_ARCH/stable/Packages/containerd.io-1.3.7-3.1.el8.$OS_ARCH.rpm
47         dnf install -y https://download.docker.com/linux/$OS_ID/$OS_VERSION_ID/$OS_ARCH/stable/Packages/docker-ce-cli-19.03.13-3.el8.$OS_ARCH.rpm
48         dnf install -y https://download.docker.com/linux/$OS_ID/$OS_VERSION_ID/$OS_ARCH/stable/Packages/docker-ce-19.03.13-3.el8.$OS_ARCH.rpm
49     else
50         echo_log "WARNING: Docker Image unknown for $OS_NAME!"
51     fi
52 }
53
54 generate_dnf_dockerfile() {
55     local executor_os_name=$1
56     local from_image=$2
57     local executor_image=$3
58     local from_image_os_id="$(echo $from_image | cut -d: -f2)"
59
60     cat <<EOF >$DOCKERFILE
61 FROM $from_image AS executor-image
62 LABEL Description="FD.io CI executor docker image for $executor_os_name/$OS_ARCH"
63 LABEL Vendor="fd.io"
64 LABEL Version="$DOCKER_TAG"
65
66 # Build Environment Variables
67 ENV FDIOTOOLS_IMAGE=$executor_image
68 ENV LC_ALL=C.UTF-8
69 ENV CIMAN_ROOT="$DOCKER_CIMAN_ROOT"
70 ENV PATH=$PATH:$DOCKER_CIMAN_ROOT/docker/scripts
71
72 # Copy-in build tree containing
73 # ci-management, vpp, & csit git repos
74 WORKDIR $DOCKER_BUILD_DIR
75 COPY . .
76
77 # Install baseline packages (minimum build & utils).
78 #
79 # ci-management global-jjb requirements:
80 #   for lftools:
81 #       libxml2-devel
82 #       libxslt-devel
83 #       xmlstarlet
84 #   for lf-env.sh:
85 #       facter
86 #   from packer/provision/baseline.sh:
87 #       deltarpm
88 #       unzip
89 #       xz
90 #       python3-pip
91 #       git
92 #       git-review
93 #       perl-XML-XPath
94 #       make
95 #       wget
96 #
97 # TODO: Fix broken project requirement install targets
98 #
99 #   graphviz           for 'make bootstrap-doxygen' (VPP)
100 #   doxygen            for 'make doxygen' (VPP)
101 #   enchant            for 'make docs' (VPP)
102 #   libffi-devel       for python cffi install (Ubuntu20.04/VPP/aarch64)
103 #   libpcap-devel      for python pypcap install (CSIT)
104 #   lapack-devel       for python numpy/scipy (CSIT/aarch64)
105 #   openblas-devel     for python numpy/scipy (CSIT/aarch64)
106 #   sshpass            for CSIT
107 #
108 RUN export LC_ALL=C.UTF8 \\
109     && dnf update -y \\
110     && dnf install -y \\
111         dnf-plugins-core \\
112         epel-release \\
113     && dnf config-manager --set-enabled \$(dnf repolist all 2> /dev/null | grep -i powertools | cut -d' ' -f1) --set-enabled epel \\
114     && dnf repolist all \\
115     && dnf clean all
116 RUN export LC_ALL=C.UTF8 \\
117     && dnf update -y \\
118     && dnf install -y \\
119         dnf-utils \\
120         doxygen \\
121         enchant \\
122         emacs \\
123         facter \\
124         gdb \\
125         git \\
126         git-review \\
127         graphviz \\
128         iproute \\
129         java-1.8.0-openjdk \\
130         java-1.8.0-openjdk-devel \\
131         jq \\
132         lapack-devel \\
133         libffi-devel \\
134         libpcap-devel \\
135         libxml2-devel \\
136         libxslt-devel \\
137         make \\
138         mawk \\
139         mock \\
140         openblas-devel \\
141         perl \\
142         perl-XML-XPath \\
143         python3-pip \\
144         rake \\
145         rsync \\
146         ruby-devel \\
147         sshpass \\
148         sudo \\
149         tree \\
150         unzip \\
151         vim \\
152         wget \\
153         xmlstarlet \\
154         xz \\
155     && dnf clean all
156
157 # Install OS packages for project branches
158 #
159 RUN dbld_vpp_install_packages.sh \\
160     && dbld_install_docker.sh \\
161     && dbld_csit_install_packages.sh \\
162     && dbld_lfit_requirements.sh \\
163     && dnf clean all
164
165 # CI Runtime Environment
166 WORKDIR /
167 ENV VPP_ZOMBIE_NOCHECK=1
168 RUN gem install package_cloud \\
169     && curl -s https://packagecloud.io/install/repositories/fdio/master/script.rpm.sh | sudo bash
170
171 # Clean up
172 RUN dbld_dump_build_logs.sh \\
173     && rm -rf /tmp/*
174 EOF
175 }