summaryrefslogtreecommitdiffstats
path: root/docker/scripts/lib_dnf.sh
diff options
context:
space:
mode:
Diffstat (limited to 'docker/scripts/lib_dnf.sh')
-rw-r--r--docker/scripts/lib_dnf.sh198
1 files changed, 115 insertions, 83 deletions
diff --git a/docker/scripts/lib_dnf.sh b/docker/scripts/lib_dnf.sh
index 48821807d..c5bb5c4a2 100644
--- a/docker/scripts/lib_dnf.sh
+++ b/docker/scripts/lib_dnf.sh
@@ -1,7 +1,7 @@
# lib_dnf.sh - Docker build script dnf library.
# For import only.
-# Copyright (c) 2020 Cisco and/or its affiliates.
+# Copyright (c) 2021 Cisco and/or its affiliates.
# 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:
@@ -18,10 +18,10 @@
if [ -n "$(alias lib_dnf_imported 2> /dev/null)" ] ; then
return 0
fi
-alias lib_dnf_imported=true
+alias lib_dnf_imported="true"
export CIMAN_DOCKER_SCRIPTS=${CIMAN_DOCKER_SCRIPTS:-"$(dirname $BASH_SOURCE)"}
-. $CIMAN_DOCKER_SCRIPTS/lib_common.sh
+. "$CIMAN_DOCKER_SCRIPTS/lib_common.sh"
dump_dnf_package_list() {
branchname="$(echo $branch | sed -e 's,/,_,')"
@@ -30,94 +30,76 @@ dump_dnf_package_list() {
}
dnf_install_packages() {
- dnf install -y $@
+ dnf install -y "$@"
}
-dnf_install_docker_os_package_dependancies() {
- dnf_install_packages dnf-utils
-}
+generate_dnf_dockerfile_clean() {
+ cat <<EOF >>"$DOCKERFILE"
-dnf_install_docker() {
- # Note: Support for docker has been removed starting with centos-8, so the
- # only recourse is to pin the latest version by what's in the download dir.
- # Browse the base URL to see what is available & update accordingly.
-
- if [ "$OS_NAME" = "centos-8" ] ; then
- 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
- 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
- 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
- else
- echo_log "WARNING: Docker Image unknown for $OS_NAME!"
- fi
+# Clean up
+RUN dbld_dump_build_logs.sh \\
+ && rm -rf "/tmp/*"
+EOF
}
-generate_dnf_dockerfile() {
- local executor_os_name=$1
- local from_image=$2
- local executor_image=$3
- local from_image_os_id="$(echo $from_image | cut -d: -f2)"
-
- cat <<EOF >$DOCKERFILE
-FROM $from_image AS executor-image
-LABEL Description="FD.io CI executor docker image for $executor_os_name/$OS_ARCH"
-LABEL Vendor="fd.io"
-LABEL Version="$DOCKER_TAG"
+generate_dnf_dockerfile_common() {
+ cat <<EOF >>"$DOCKERFILE"
# Build Environment Variables
-ENV FDIOTOOLS_IMAGE=$executor_image
-ENV LC_ALL=C.UTF-8
+ENV FDIOTOOLS_IMAGE="$executor_image"
+ENV FDIOTOOLS_EXECUTOR_CLASS="$executor_class"
ENV CIMAN_ROOT="$DOCKER_CIMAN_ROOT"
-ENV PATH=$PATH:$DOCKER_CIMAN_ROOT/docker/scripts
-ENV LF_VENV="/root/lf-venv"
+ENV PATH="\$PATH:$DOCKER_CIMAN_ROOT/docker/scripts"
# Copy-in build tree containing
# ci-management, vpp, & csit git repos
WORKDIR $DOCKER_BUILD_DIR
COPY . .
+# Configure locales
+RUN LC_ALL=C.UTF-8 dnf install -y glibc-langpack-en
+ENV LANG="en_US.UTF-8" LANGUAGE="en_US" LC_ALL="en_US.UTF-8"
+
# Install baseline packages (minimum build & utils).
#
# ci-management global-jjb requirements:
-# for lftools:
-# libxml2-devel
-# libxslt-devel
-# xmlstarlet
-# for lf-env.sh:
-# facter
+# for lftools:
+# libxml2-devel
+# libxslt-devel
+# xmlstarlet
+# for lf-env.sh:
+# facter
# from packer/provision/baseline.sh:
-# deltarpm
-# unzip
-# xz
-# python3-pip
-# git
-# git-review
-# perl-XML-XPath
-# make
-# wget
+# deltarpm
+# unzip
+# xz
+# python3-pip
+# git
+# git-review
+# perl-XML-XPath
+# make
+# wget
#
-# TODO: Fix broken project requirement install targets
+# TODO: Fix broken project requirement install targets
+# graphviz for 'make bootstrap-doxygen' (VPP)
+# doxygen for 'make doxygen' (VPP)
+# enchant for 'make docs' (VPP)
+# libffi-devel for python cffi install (Ubuntu20.04/VPP/aarch64)
+# libpcap-devel for python pypcap install (CSIT)
+# lapack-devel for python numpy/scipy (CSIT/aarch64)
+# openblas-devel for python numpy/scipy (CSIT/aarch64)
+# sshpass for CSIT
#
-# graphviz for 'make bootstrap-doxygen' (VPP)
-# doxygen for 'make doxygen' (VPP)
-# enchant for 'make docs' (VPP)
-# libffi-devel for python cffi install (Ubuntu20.04/VPP/aarch64)
-# libpcap-devel for python pypcap install (CSIT)
-# lapack-devel for python numpy/scipy (CSIT/aarch64)
-# openblas-devel for python numpy/scipy (CSIT/aarch64)
-# sshpass for CSIT
-#
-RUN export LC_ALL=C.UTF8 \\
- && dnf update -y \\
- && dnf install -y \\
- dnf-plugins-core \\
- epel-release \\
- && dnf config-manager --set-enabled \$(dnf repolist all 2> /dev/null | grep -i powertools | cut -d' ' -f1) --set-enabled epel \\
- && dnf repolist all \\
- && dnf clean all
-RUN export LC_ALL=C.UTF8 \\
- && dnf update -y \\
- && dnf install -y \\
+RUN dnf update -y \\
+ && dnf install -y \\
+ dnf-plugins-core \\
+ epel-release \\
+ && dnf config-manager --set-enabled \$(dnf repolist all 2> /dev/null | grep -i powertools | cut -d' ' -f1) --set-enabled epel \\
+ && dnf repolist all \\
+ && dnf clean all
+RUN dnf install -y \\
dnf-utils \\
+ bind-utils \\
doxygen \\
enchant \\
emacs \\
@@ -137,12 +119,10 @@ RUN export LC_ALL=C.UTF8 \\
libxslt-devel \\
make \\
mawk \\
- mock \\
openblas-devel \\
perl \\
perl-XML-XPath \\
python3-pip \\
- rake \\
rsync \\
ruby-devel \\
sshpass \\
@@ -153,24 +133,76 @@ RUN export LC_ALL=C.UTF8 \\
wget \\
xmlstarlet \\
xz \\
- && dnf clean all
+ && curl -s https://packagecloud.io/install/repositories/fdio/master/script.rpm.sh | bash \\
+ && curl -fsSL https://get.docker.com | sh \\
+ && dnf clean all
# Install OS packages for project branches
#
RUN dbld_vpp_install_packages.sh \\
- && dbld_install_docker.sh \\
- && dbld_csit_install_packages.sh \\
- && dbld_lfit_requirements.sh \\
- && dnf clean all
+ && dbld_csit_install_packages.sh \\
+ && dnf clean all
+EOF
+}
+
+builder_generate_dnf_dockerfile() {
+ local executor_class="$1"
+ local executor_os_name="$2"
+ local from_image="$3"
+ local executor_image="$4"
+
+ generate_dnf_dockerfile_common "$executor_class" "$executor_image"
+ cat <<EOF >>"$DOCKERFILE"
+
+# Install LF-IT requirements
+ENV LF_VENV="/root/lf-venv"
+RUN dbld_lfit_requirements.sh \\
+ && dnf clean all
+
+# Install packagecloud requirements
+RUN gem install package_cloud \\
+ && curl -s https://packagecloud.io/install/repositories/fdio/master/script.rpm.sh | bash
# CI Runtime Environment
WORKDIR /
-ENV VPP_ZOMBIE_NOCHECK=1
-RUN gem install package_cloud \\
- && curl -s https://packagecloud.io/install/repositories/fdio/master/script.rpm.sh | sudo bash
+ENV VPP_ZOMBIE_NOCHECK="1"
+# TODO: Mount ccache volume into docker container, then remove this.
+ENV CCACHE_DISABLE="1"
+EOF
+ generate_dnf_dockerfile_clean
+}
-# Clean up
-RUN dbld_dump_build_logs.sh \\
- && rm -rf /tmp/*
+csit_generate_dnf_dockerfile() {
+ echo_log "ERROR: ${FUNCNAME[0]} TBD!"
+ exit 1
+}
+
+csit_dut_generate_dnf_dockerfile() {
+ echo_log "ERROR: ${FUNCNAME[0]} TBD!"
+ exit 1
+}
+
+csit_shim_generate_dnf_dockerfile() {
+ echo_log "ERROR: ${FUNCNAME[0]} TBD!"
+ exit 1
+}
+
+generate_dnf_dockerfile() {
+ local executor_class="$1"
+ local executor_os_name="$2"
+ local from_image="$3"
+ local executor_image="$4"
+
+ cat <<EOF >"$DOCKERIGNOREFILE"
+**/__pycache__
+*.pyc
+EOF
+ cat <<EOF >"$DOCKERFILE"
+FROM $from_image AS ${executor_class}-executor-image
+LABEL Description="FD.io CI '$executor_class' executor docker image for $executor_os_name/$OS_ARCH"
+LABEL Vendor="fd.io"
+LABEL Version="$DOCKER_TAG"
EOF
+ ${executor_class}_generate_dnf_dockerfile "$executor_class" \
+ "$executor_os_name" "$from_image" "$executor_image"
}