1 # lib_dnf.sh - Docker build script dnf library.
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:
9 # http://www.apache.org/licenses/LICENSE-2.0
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.
17 # Don't import more than once.
18 if [ -n "$(alias lib_dnf_imported 2> /dev/null)" ] ; then
21 alias lib_dnf_imported="true"
23 export CIMAN_DOCKER_SCRIPTS=${CIMAN_DOCKER_SCRIPTS:-"$(dirname $BASH_SOURCE)"}
24 . "$CIMAN_DOCKER_SCRIPTS/lib_common.sh"
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"
32 dnf_install_packages() {
36 generate_dnf_dockerfile_clean() {
37 cat <<EOF >>"$DOCKERFILE"
40 RUN dbld_dump_build_logs.sh \\
45 generate_dnf_dockerfile_common() {
46 cat <<EOF >>"$DOCKERFILE"
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"
54 # Copy-in build tree containing
55 # ci-management, vpp, & csit git repos
56 WORKDIR $DOCKER_BUILD_DIR
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"
63 # Install baseline packages (minimum build & utils).
65 # ci-management global-jjb requirements:
72 # from packer/provision/baseline.sh:
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)
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 \\
100 RUN dnf install -y \\
112 java-1.8.0-openjdk \\
113 java-1.8.0-openjdk-devel \\
136 && curl -s https://packagecloud.io/install/repositories/fdio/master/script.rpm.sh | bash \\
137 && curl -fsSL https://get.docker.com | sh \\
140 # Install OS packages for project branches
142 RUN dbld_vpp_install_packages.sh \\
143 && dbld_csit_install_packages.sh \\
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"
154 generate_dnf_dockerfile_common "$executor_class" "$executor_image"
155 cat <<EOF >>"$DOCKERFILE"
157 # Install LF-IT requirements
158 ENV LF_VENV="/root/lf-venv"
159 RUN dbld_lfit_requirements.sh \\
162 # Install packagecloud requirements
163 RUN gem install package_cloud \\
164 && curl -s https://packagecloud.io/install/repositories/fdio/master/script.rpm.sh | bash
166 # CI Runtime Environment
168 ENV VPP_ZOMBIE_NOCHECK="1"
169 ENV CCACHE_DIR="/scratch/ccache"
171 generate_dnf_dockerfile_clean
174 csit_generate_dnf_dockerfile() {
175 echo_log "ERROR: ${FUNCNAME[0]} TBD!"
179 csit_dut_generate_dnf_dockerfile() {
180 echo_log "ERROR: ${FUNCNAME[0]} TBD!"
184 csit_shim_generate_dnf_dockerfile() {
185 echo_log "ERROR: ${FUNCNAME[0]} TBD!"
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"
195 cat <<EOF >"$DOCKERIGNOREFILE"
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"
203 LABEL Version="$DOCKER_TAG"
205 ${executor_class}_generate_dnf_dockerfile "$executor_class" \
206 "$executor_os_name" "$from_image" "$executor_image"