git-lfs/docker/run_dockers.bsh
brian m. carlson e642e535f3
Remove support for Debian 9
Debian 9 (stretch) is now beyond LTS support and on to ELTS support,
which means that the typical Debian infrastructure is no longer involved
and updates are no longer available from Debian.  As a result, it's not
really appropriate for us to continue to build packages on stretch since
we can't be certain our dependencies or build environment are secure.

It is the case that some of the OSes that use Debian 9 packages, such as
some versions of Ubuntu, do still receive security updates, but since we
don't build specifically for those OSes, we'll need to drop support for
them as well.  Of the OSes receiving mainline (non-extended) security
support, only Ubuntu bionic is affected.
2022-11-03 14:16:18 +00:00

118 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Usage:
# ./run_dockers.bsh - Run all the docker images
# ./run_dockers.bsh centos_6 centos_7 - Run only CentOS 6 & 7 image
# ./run_dockers.bsh centos_6 -- bash #Runs bash in the CentOS 6 docker
#
# Special Environments Variables
# REPO_HOSTNAME - Override the hostname for all the repos generated/tested
# AUTO_REMOVE - Default 1. If set to 0, it will not automatically delete the
# docker instance when done. This can be useful for a post mortem
# analysis. Just make sure you clean up the docker instances
# manually
set -eu
#Mingw32 auto converts /drive/dir/blah to drive:\dir\blah ... Can't have that.
if [[ `uname` == MINGW* ]]; then
MINGW_PATCH='/'
else
MINGW_PATCH=''
fi
CUR_DIR=$(cd $(dirname "${BASH_SOURCE[0]}"); pwd)
REPO_DIR=$(cd ${CUR_DIR}/..; pwd)
PACKAGE_DIR=${REPO_DIR}/repos
mkdir -p ${PACKAGE_DIR}/centos || :
mkdir -p ${PACKAGE_DIR}/debian || :
#If you are not in docker group and you have sudo, default value is sudo
: ${SUDO=`if ( [ ! -w /var/run/docker.sock ] && id -nG | grep -qwv docker && [ "${DOCKER_HOST:+dh}" != "dh" ] ) && command -v sudo > /dev/null 2>&1; then echo sudo; fi`}
function split_image_name()
{ #$1 - image dockerfile
#sets IMAGE_NAME to the basename of the dir containing the docker file
#sets IMAGE_INFO to be the array name following my pattern
local IFS=_
IMAGE_INFO=($1)
}
# Parse Arguments
IMAGES=()
PRUNE=
ARCH=amd64
while [[ $# -gt 0 ]]; do
if [ "$1" = "--prune" ]; then
PRUNE=t
elif [[ "$1" == --arch=* ]]; then
ARCH="${1#--arch=}"
elif [ "$1" == "--" ]; then
shift
DOCKER_CMD="${@}"
break
else
IMAGES+=("$1")
fi
shift
done
if [[ ${#IMAGES[@]} == 0 ]]; then
# If you change this list, change script/upload as well.
IMAGES=(centos_7 centos_8 rocky_9 debian_10 debian_11)
fi
mkdir -p "${PACKAGE_DIR}"
#Run docker to build packages
for IMAGE_NAME in "${IMAGES[@]}"; do
split_image_name "${IMAGE_NAME}" #set IMAGE_NAME and IMAGE_INFO
#It CAN'T be empty () with set -u... So I put some defaults in here
OTHER_OPTIONS=("-t")
if tty >/dev/null; then
OTHER_OPTIONS+=("-i")
fi
if [ "${AUTO_REMOVE-1}" == "1" ]; then
OTHER_OPTIONS+=("--rm")
fi
if [ -s ${CUR_DIR}/${IMAGE_NAME}.key ]; then
CONTAINER_NAME=git-lfs-gpg ${CUR_DIR}/gpg-agent_preload.bsh
OTHER_OPTIONS+=("--volumes-from" "git-lfs-gpg")
OTHER_OPTIONS+=("-v" "${CUR_DIR}/${IMAGE_NAME}.key:${MINGW_PATCH}/tmp/${IMAGE_NAME}.key")
OTHER_OPTIONS+=("-e" "$(docker exec git-lfs-gpg cat ${MINGW_PATCH}/tmp/gpg-agent/gpg_agent_info)")
#Do I need this? Or can I get away with hardcoding???
#GPG_AGENT_INFO=/tmp/gpg-agent/S.gpg-agent:1:1
fi
FINAL_UID=$(id -u)
FINAL_GID=$(id -g)
if [[ $FINAL_UID == 0 ]]; then
FINAL_UID=${SUDO_UID-}
fi
if [[ $FINAL_GID == 0 ]]; then
FINAL_GID=${SUDO_GID-}
fi
echo Compiling LFS in docker image ${IMAGE_NAME}
IMAGE_REPO_DIR="${PACKAGE_DIR}"/"${IMAGE_INFO[0]}"/"${IMAGE_INFO[1]}"
$SUDO docker run "${OTHER_OPTIONS[@]}" ${DOCKER_OTHER_OPTIONS-} \
-e USER=root \
-e REPO_HOSTNAME=${REPO_HOSTNAME:-git-lfs.github.com} \
-e FINAL_UID=${FINAL_UID} \
-e FINAL_GID=${FINAL_GID} \
-v "${MINGW_PATCH}${REPO_DIR}:/src" \
-v "${MINGW_PATCH}${IMAGE_REPO_DIR}:/repo" \
--platform "$ARCH" \
gitlfs/build-dockers:${IMAGE_NAME} ${DOCKER_CMD-}
if [ -n "$PRUNE" ]
then
$SUDO docker rmi -f "gitlfs/build-dockers:${IMAGE_NAME}"
fi
done
echo "Docker run completed successfully!"