3ac0ca2492
We never upload Docker images anymore, so it's no longer useful to have DOCKER_AUTOPULL set to true. Let's remove this flag and simply assume the user has built the images.
118 lines
3.6 KiB
Bash
Executable File
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 debian_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!"
|