diff options
Diffstat (limited to 'docker/scripts/lib_dnf.sh')
-rw-r--r-- | docker/scripts/lib_dnf.sh | 198 |
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" } |