34bc40c7fbd0dd18294d86edc0af551690f958bf
[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) 2021 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 generate_dnf_dockerfile_clean() {
37     cat <<EOF >>"$DOCKERFILE"
38
39 # Clean up
40 RUN dbld_dump_build_logs.sh \\
41   && rm -rf "/tmp/*"
42 EOF
43 }
44
45 generate_dnf_dockerfile_common() {
46     cat <<EOF >>"$DOCKERFILE"
47
48 # Build Environment Variables
49 ENV FDIOTOOLS_IMAGE="$executor_image"
50 ENV FDIOTOOLS_EXECUTOR_CLASS="$executor_class"
51 ENV CIMAN_ROOT="$DOCKER_CIMAN_ROOT"
52 ENV PATH="\$PATH:$DOCKER_CIMAN_ROOT/docker/scripts"
53
54 # Copy-in build tree containing
55 # ci-management, vpp, & csit git repos
56 WORKDIR $DOCKER_BUILD_DIR
57 COPY . .
58
59 # Configure locales
60 RUN LC_ALL=C.UTF-8 dnf install -y glibc-langpack-en
61 ENV LANG="en_US.UTF-8" LANGUAGE="en_US" LC_ALL="en_US.UTF-8"
62
63 # Install baseline packages (minimum build & utils).
64 #
65 # ci-management global-jjb requirements:
66 #    for lftools:
67 #        libxml2-devel
68 #        libxslt-devel
69 #        xmlstarlet
70 #    for lf-env.sh:
71 #        facter
72 #   from packer/provision/baseline.sh:
73 #        deltarpm
74 #        unzip
75 #        xz
76 #        python3-pip
77 #        git
78 #        git-review
79 #        perl-XML-XPath
80 #        make
81 #        wget
82 #
83 # TODO:  Fix broken project requirement install targets
84 #        graphviz           for 'make bootstrap-doxygen' (VPP)
85 #        doxygen            for 'make doxygen' (VPP)
86 #        enchant            for 'make docs' (VPP)
87 #        libffi-devel       for python cffi install (Ubuntu20.04/VPP/aarch64)
88 #        libpcap-devel      for python pypcap install (CSIT)
89 #        lapack-devel       for python numpy/scipy (CSIT/aarch64)
90 #        openblas-devel     for python numpy/scipy (CSIT/aarch64)
91 #        sshpass            for CSIT
92 #
93 RUN dnf update -y \\
94   && dnf install -y \\
95          dnf-plugins-core \\
96          epel-release \\
97   && dnf config-manager --set-enabled \$(dnf repolist all 2> /dev/null | grep -i powertools | cut -d' ' -f1) --set-enabled epel \\
98   && dnf repolist all \\
99   && dnf clean all
100 RUN dnf install -y \\
101         dnf-utils \\
102         bind-utils \\
103         doxygen \\
104         enchant \\
105         emacs \\
106         facter \\
107         gdb \\
108         git \\
109         git-review \\
110         graphviz \\
111         iproute \\
112         java-1.8.0-openjdk \\
113         java-1.8.0-openjdk-devel \\
114         jq \\
115         lapack-devel \\
116         libffi-devel \\
117         libpcap-devel \\
118         libxml2-devel \\
119         libxslt-devel \\
120         make \\
121         mawk \\
122         openblas-devel \\
123         perl \\
124         perl-XML-XPath \\
125         python3-pip \\
126         rsync \\
127         ruby-devel \\
128         sshpass \\
129         sudo \\
130         tree \\
131         unzip \\
132         vim \\
133         wget \\
134         xmlstarlet \\
135         xz \\
136    && curl -s https://packagecloud.io/install/repositories/fdio/master/script.rpm.sh | bash \\
137    && curl -fsSL https://get.docker.com | sh \\
138    && dnf clean all
139
140 # Install OS packages for project branches
141 #
142 RUN dbld_vpp_install_packages.sh \\
143   && dbld_csit_install_packages.sh \\
144   && dnf clean all
145 EOF
146 }
147
148 builder_generate_dnf_dockerfile() {
149     local executor_class="$1"
150     local executor_os_name="$2"
151     local from_image="$3"
152     local executor_image="$4"
153
154     generate_dnf_dockerfile_common "$executor_class" "$executor_image"
155     cat <<EOF >>"$DOCKERFILE"
156
157 # Install LF-IT requirements
158 ENV LF_VENV="/root/lf-venv"
159 RUN dbld_lfit_requirements.sh \\
160   && dnf clean all
161
162 # Install packagecloud requirements
163 RUN gem install package_cloud \\
164   && curl -s https://packagecloud.io/install/repositories/fdio/master/script.rpm.sh | bash
165
166 # CI Runtime Environment
167 WORKDIR /
168 ENV VPP_ZOMBIE_NOCHECK="1"
169 ENV CCACHE_DIR="/scratch/ccache"
170 EOF
171     generate_dnf_dockerfile_clean
172 }
173
174 csit_generate_dnf_dockerfile() {
175     echo_log "ERROR: ${FUNCNAME[0]} TBD!"
176     exit 1
177 }
178
179 csit_dut_generate_dnf_dockerfile() {
180     echo_log "ERROR: ${FUNCNAME[0]} TBD!"
181     exit 1
182 }
183
184 csit_shim_generate_dnf_dockerfile() {
185     echo_log "ERROR: ${FUNCNAME[0]} TBD!"
186     exit 1
187 }
188
189 generate_dnf_dockerfile() {
190     local executor_class="$1"
191     local executor_os_name="$2"
192     local from_image="$3"
193     local executor_image="$4"
194
195     cat <<EOF  >"$DOCKERIGNOREFILE"
196 **/__pycache__
197 *.pyc
198 EOF
199     cat <<EOF  >"$DOCKERFILE"
200 FROM $from_image AS ${executor_class}-executor-image
201 LABEL Description="FD.io CI '$executor_class' executor docker image for $executor_os_name/$OS_ARCH"
202 LABEL Vendor="fd.io"
203 LABEL Version="$DOCKER_TAG"
204 EOF
205     ${executor_class}_generate_dnf_dockerfile "$executor_class" \
206        "$executor_os_name" "$from_image" "$executor_image"
207 }