summaryrefslogtreecommitdiffstats
path: root/docker/scripts/lib_common.sh
diff options
context:
space:
mode:
Diffstat (limited to 'docker/scripts/lib_common.sh')
-rw-r--r--docker/scripts/lib_common.sh103
1 files changed, 49 insertions, 54 deletions
diff --git a/docker/scripts/lib_common.sh b/docker/scripts/lib_common.sh
index 39f439f63..314668443 100644
--- a/docker/scripts/lib_common.sh
+++ b/docker/scripts/lib_common.sh
@@ -1,7 +1,7 @@
# lib_common.sh - Docker build script common 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,25 +18,25 @@
if [ -n "$(alias lib_common_imported 2> /dev/null)" ] ; then
return 0
fi
-alias lib_common_imported=true
+alias lib_common_imported="true"
export CIMAN_DOCKER_SCRIPTS=${CIMAN_DOCKER_SCRIPTS:-"$(dirname $BASH_SOURCE)"}
export CIMAN_ROOT="$(dirname $(dirname $CIMAN_DOCKER_SCRIPTS))"
-must_be_run_as_root() {
- set_opts=$-
- grep -q e <<< $set_opts && set +e # disable exit on errors
+must_be_run_as_root_or_docker_group() {
+ set_opts="$-"
+ set +e # disable exit on errors
- # test if the user is root
- if [ "${EUID:-$(id -u)}" -eq "0" ] ; then
- grep -q e <<< $set_opts && set -e # re-enable exit on errors
+ # test if the user is root or id is in the 'docker' group
+ if [ "${EUID:-$(id -u)}" -eq "0" ] || grep -q "docker" <<< "$(id)" ; then
+ grep -q e <<< "$set_opts" && set -e # re-enable exit on errors
else
set +x
- echo -e "\nERROR: Must be run as root!"
+ echo -e "\nERROR: Must be run as root or '$USER' must be in the group 'docker'!"
if [ -n "$(declare -f usage)" ] ; then
usage
fi
- grep -q e <<< $set_opts && set -e # re-enable exit on errors
+ grep -q e <<< "$set_opts" && set -e # re-enable exit on errors
exit 1
fi
}
@@ -54,7 +54,7 @@ echo_log() {
if [ -z "$(alias running_in_docker_build 2> /dev/null)" ] ; then
echo
else
- echo | tee -a $FDIOTOOLS_IMAGE_BUILD_LOG 1>&2
+ echo | tee -a "$FDIOTOOLS_IMAGE_BUILD_LOG" 1>&2
fi
return 0
fi
@@ -69,14 +69,14 @@ echo_log() {
if [ -z "$(alias running_in_docker_build 2> /dev/null)" ] ; then
echo ${echo_opts}"####> $@"
else
- echo ${echo_opts}"####> $(date): $@" | tee -a $FDIOTOOLS_IMAGE_BUILD_LOG 1>&2
+ echo ${echo_opts}"####> $(date -u): $@" | tee -a $FDIOTOOLS_IMAGE_BUILD_LOG 1>&2
fi
}
dump_echo_log() {
[ -z "$(alias running_in_docker_build 2> /dev/null)" ] && return 0
- echo -e "\n\n####> $(date) Build log ($FDIOTOOLS_IMAGE_BUILD_LOG):"
- cat $FDIOTOOLS_IMAGE_BUILD_LOG
+ echo -e "\n\n####> $(date -u) Build log ($FDIOTOOLS_IMAGE_BUILD_LOG):"
+ cat "$FDIOTOOLS_IMAGE_BUILD_LOG"
}
do_git_config() {
@@ -84,7 +84,7 @@ do_git_config() {
echo_log "ERROR: do_git_config(): Invalid number of arguments ($#)!"
return 1
fi
- cd $DOCKER_BUILD_DIR/$1
+ cd "$DOCKER_BUILD_DIR/$1"
# Add user to git config so git commands don't fail
local git_config_list="$(git config -l)"
@@ -101,21 +101,20 @@ do_git_branch() {
echo_log " Checking out '$branch' in $(pwd)"
if [ -n "$(git branch | grep $branch)" ] ; then
- git checkout $branch
+ git checkout "$branch"
else
- git checkout -b $branch --track origin/$branch
+ git checkout -b "$branch" --track "origin/$branch"
fi
git pull -q
echo_log -e " 'git log --oneline | head':\n----- %< -----\n$(git log --oneline | head)\n----- %< -----"
}
clean_git_repo() {
- local curr_dir=$(pwd)
- cd $1
+ pushd "$1" >& /dev/null
git clean -qfdx
git checkout -q master
git pull -q
- cd $curr_dir
+ popd >& /dev/null
}
remove_pyc_files_and_pycache_dirs() {
@@ -124,11 +123,6 @@ remove_pyc_files_and_pycache_dirs() {
-print -exec rm -rf {} \; 2>/dev/null || true
}
-# Well-known filename variables
-export APT_DEBIAN_DOCKER_GPGFILE="docker.linux.debian.gpg"
-export APT_UBUNTU_DOCKER_GPGFILE="docker.linux.ubuntu.gpg"
-export YUM_CENTOS_DOCKER_GPGFILE="docker.linux.centos.gpg"
-
# OS type variables
# TODO: Investigate if sourcing /etc/os-release and using env vars from it
# works across all OS variants. If so, clean up copy-pasta...
@@ -157,26 +151,24 @@ esac
# an untested docker image into production.
export EXECUTOR_ROLES="sandbox test"
export EXECUTOR_DEFAULT_CLASS="builder"
-export EXECUTOR_CLASS="$EXECUTOR_DEFAULT_CLASS"
+export EXECUTOR_CLASS=${EXECUTOR_CLASS:-"$EXECUTOR_DEFAULT_CLASS"}
export EXECUTOR_CLASS_ARCH="$EXECUTOR_DEFAULT_CLASS-$OS_ARCH"
-export EXECUTOR_CLASSES="$EXECUTOR_DEFAULT_CLASS csit csit_dut csit_shim"
+export EXECUTOR_CLASSES="$EXECUTOR_DEFAULT_CLASS csit_dut csit_shim"
export EXECUTOR_ARCHS="aarch64 x86_64"
declare -A EXECUTOR_CLASS_ARCH_OS_NAMES
EXECUTOR_CLASS_ARCH_OS_NAMES["builder-aarch64"]="centos-8 ubuntu-18.04 ubuntu-20.04"
EXECUTOR_CLASS_ARCH_OS_NAMES["builder-x86_64"]="centos-7 centos-8 debian-9 debian-10 ubuntu-18.04 ubuntu-20.04"
-EXECUTOR_CLASS_ARCH_OS_NAMES["csit-aarch64"]="ubuntu-18.04"
-EXECUTOR_CLASS_ARCH_OS_NAMES["csit-x86_64"]="ubuntu-18.04"
-EXECUTOR_CLASS_ARCH_OS_NAMES["csit_dut-aarch64"]="ubuntu-18.04"
-EXECUTOR_CLASS_ARCH_OS_NAMES["csit_dut-x86_64"]="ubuntu-18.04"
-EXECUTOR_CLASS_ARCH_OS_NAMES["csit_shim-aarch64"]="ubuntu-18.04"
-EXECUTOR_CLASS_ARCH_OS_NAMES["csit_shim-x86_64"]="ubuntu-18.04"
+EXECUTOR_CLASS_ARCH_OS_NAMES["csit_dut-aarch64"]="ubuntu-18.04 ubuntu-20.04"
+EXECUTOR_CLASS_ARCH_OS_NAMES["csit_dut-x86_64"]="ubuntu-18.04 ubuntu-20.04"
+EXECUTOR_CLASS_ARCH_OS_NAMES["csit_shim-aarch64"]="ubuntu-18.04 ubuntu-20.04"
+EXECUTOR_CLASS_ARCH_OS_NAMES["csit_shim-x86_64"]="ubuntu-18.04 ubuntu-20.04"
export EXECUTOR_CLASS_ARCH_OS_NAMES
executor_list_roles() {
- local set_opts=$-
- grep -q u <<< $set_opts && set +u # disable undefined variable check
+ local set_opts="$-"
+ set +u # disable undefined variable check
local indent=${1:-" "}
- grep -q u <<< $set_opts && set -u # re-enable undefined variable check
+ grep -q u <<< "$set_opts" && set -u # re-enable undefined variable check
for role in $EXECUTOR_ROLES ; do
echo -e "${indent}$role"
@@ -193,10 +185,10 @@ executor_verify_role() {
}
executor_list_classes() {
- local set_opts=$-
- grep -q u <<< $set_opts && set +u # disable undefined variable check
+ local set_opts="$-"
+ set +u # disable undefined variable check
local indent=${1:-" "}
- grep -q u <<< $set_opts && set -u # re-enable undefined variable check
+ grep -q u <<< "$set_opts" && set -u # re-enable undefined variable check
for class in $EXECUTOR_CLASSES ; do
echo -e "${indent}$class"
@@ -213,10 +205,10 @@ executor_verify_class() {
}
executor_list_os_names() {
- local set_opts=$-
- grep -q u <<< $set_opts && set +u # disable undefined variable check
+ local set_opts="$-"
+ set +u # disable undefined variable check
local indent=${1:-" "}
- grep -q u <<< $set_opts && set -u # re-enable undefined variable check
+ grep -q u <<< "$set_opts" && set -u # re-enable undefined variable check
echo
echo "Valid executor OS names for class '$EXECUTOR_CLASS':"
@@ -235,40 +227,43 @@ executor_verify_os_name() {
}
# Docker variables
+export DOCKER_DATE=${DOCKER_DATE:-"$(date -u +%Y_%m_%d_%H%M%S_UTC)"}
export DOCKER_BUILD_DIR="/scratch/docker-build"
export DOCKER_CIMAN_ROOT="$DOCKER_BUILD_DIR/ci-management"
export DOCKERFILE="$DOCKER_BUILD_DIR/Dockerfile"
export DOCKERIGNOREFILE="$DOCKER_BUILD_DIR/.dockerignore"
export DOCKERFILE_FROM=${DOCKERFILE_FROM:="${OS_ID}:${OS_VERSION_ID}"}
-export DOCKER_TAG="$(date +%Y_%m_%d_%H%M%S)-$OS_ARCH"
+export DOCKER_TAG="$DOCKER_DATE-$OS_ARCH"
export DOCKER_VPP_DIR="$DOCKER_BUILD_DIR/vpp"
export DOCKER_CSIT_DIR="$DOCKER_BUILD_DIR/csit"
-export DOCKER_GPG_KEY_DIR="$DOCKER_BUILD_DIR/gpg-key"
-export DOCKER_APT_UBUNTU_DOCKER_GPGFILE="$DOCKER_GPG_KEY_DIR/$APT_UBUNTU_DOCKER_GPGFILE"
-export DOCKER_APT_DEBIAN_DOCKER_GPGFILE="$DOCKER_GPG_KEY_DIR/$APT_DEBIAN_DOCKER_GPGFILE"
export DOCKER_DOWNLOADS_DIR="/root/Downloads"
+export DOCKER_BUILD_FILES_DIR="$DOCKER_BUILD_DIR/files"
docker_build_setup_ciman() {
if [ "$(dirname $CIMAN_ROOT)" != "$DOCKER_BUILD_DIR" ] ; then
echo_log "Updating $CIMAN_ROOT git submodules..."
- pushd $CIMAN_ROOT
+ pushd "$CIMAN_ROOT"
git submodule update --init --recursive
popd
if [ -d "$DOCKER_BUILD_DIR" ] ; then
echo_log "Removing existing DOCKER_BUILD_DIR: $DOCKER_BUILD_DIR..."
- rm -rf $DOCKER_BUILD_DIR
+ local sudo_cmd=""
+ if [ "$(whoami)" != "$(stat -c %U $DOCKER_BUILD_DIR)" ] ; then
+ sudo_cmd="sudo"
+ fi
+ ${sudo_cmd} rm -rf "$DOCKER_BUILD_DIR"
fi
echo_log "Syncing $CIMAN_ROOT into $DOCKER_CIMAN_ROOT..."
- mkdir -p $DOCKER_BUILD_DIR $DOCKER_GPG_KEY_DIR
- rsync -a $CIMAN_ROOT/. $DOCKER_CIMAN_ROOT
+ mkdir -p "$DOCKER_BUILD_DIR"
+ rsync -a "$CIMAN_ROOT/." "$DOCKER_CIMAN_ROOT"
else
- mkdir -p $DOCKER_BUILD_DIR $DOCKER_GPG_KEY_DIR
+ mkdir -p "$DOCKER_BUILD_DIR"
fi
}
# Variables used in docker build environment
-set_opts=$-
-grep -q u <<< $set_opts && set +u # disable undefined variable check
+set_opts="$-"
+set +u # disable undefined variable check
if [ -n "$FDIOTOOLS_IMAGE" ] ; then
alias running_in_docker_build=true
export DOCKER_BUILD_LOG_DIR="$DOCKER_BUILD_DIR/logs"
@@ -276,4 +271,4 @@ if [ -n "$FDIOTOOLS_IMAGE" ] ; then
export FDIOTOOLS_IMAGE_BUILD_LOG="$DOCKER_BUILD_LOG_DIR/$FDIOTOOLS_IMAGENAME.log"
mkdir -p $DOCKER_BUILD_LOG_DIR
fi
-grep -q u <<< $set_opts && set -u # re-enable undefined variable check
+grep -q u <<< "$set_opts" && set -u # re-enable undefined variable check