2015-07-12 22:18:02 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
2016-08-02 19:46:13 +00:00
|
|
|
# Usage:
|
2015-07-17 17:07:00 +00:00
|
|
|
# ./run_dockers.bsh - Run all the docker images
|
2016-06-08 19:03:44 +00:00
|
|
|
# ./run_dockers.bsh centos_6 centos_7 - Run only CentOS 6 & 7 image
|
2016-08-02 19:46:13 +00:00
|
|
|
# ./run_dockers.bsh centos_6 -- bash #Runs bash in the CentOS 6 docker
|
2015-07-19 07:35:13 +00:00
|
|
|
#
|
|
|
|
# Special Environmet Variables
|
|
|
|
# REPO_HOSTNAME - Override the hostname for all the repos generated/tested
|
2016-08-02 19:46:13 +00:00
|
|
|
# DOCKER_AUTOPULL - Default 1. If set to 0, it will not build docker images
|
2015-07-19 22:59:14 +00:00
|
|
|
# before running
|
2015-07-20 05:40:24 +00:00
|
|
|
# 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
|
2016-08-02 19:46:13 +00:00
|
|
|
# analysis. Just make sure you clean up the docker instances
|
2015-07-20 05:40:24 +00:00
|
|
|
# manually
|
2015-07-19 22:59:14 +00:00
|
|
|
|
2015-07-12 22:18:02 +00:00
|
|
|
set -eu
|
|
|
|
|
2015-08-16 15:18:45 +00:00
|
|
|
#Mingw32 auto converts /drive/dir/blah to drive:\dir\blah ... Can't have that.
|
|
|
|
if [[ `uname` == MINGW* ]]; then
|
|
|
|
MINGW_PATCH='/'
|
|
|
|
else
|
|
|
|
MINGW_PATCH=''
|
|
|
|
fi
|
|
|
|
|
2015-07-17 19:55:31 +00:00
|
|
|
CUR_DIR=$(cd $(dirname "${BASH_SOURCE[0]}"); pwd)
|
2015-07-12 22:18:02 +00:00
|
|
|
REPO_DIR=$(cd ${CUR_DIR}/..; pwd)
|
2015-07-23 03:23:16 +00:00
|
|
|
PACKAGE_DIR=${REPO_DIR}/repos
|
2015-07-31 05:47:47 +00:00
|
|
|
mkdir -p ${PACKAGE_DIR}/centos || :
|
|
|
|
mkdir -p ${PACKAGE_DIR}/debian || :
|
2015-07-12 22:18:02 +00:00
|
|
|
|
2015-07-17 17:07:00 +00:00
|
|
|
#If you are not in docker group and you have sudo, default value is sudo
|
2015-07-25 01:54:12 +00:00
|
|
|
: ${SUDO=`if ( [ ! -w /var/run/docker.sock ] && id -nG | grep -qwv docker && [ "${DOCKER_HOST:+dh}" != "dh" ] ) && which sudo > /dev/null 2>&1; then echo sudo; fi`}
|
2015-07-13 03:50:05 +00:00
|
|
|
|
2015-07-17 17:07:00 +00:00
|
|
|
function split_image_name()
|
2015-07-25 02:57:04 +00:00
|
|
|
{ #$1 - image dockerfile
|
2015-07-17 17:07:00 +00:00
|
|
|
#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=_
|
2015-12-06 17:31:59 +00:00
|
|
|
IMAGE_INFO=($1)
|
2015-07-17 17:07:00 +00:00
|
|
|
}
|
2015-07-13 03:50:05 +00:00
|
|
|
|
2015-07-19 07:35:13 +00:00
|
|
|
# Parse Arguments
|
2015-07-18 19:16:54 +00:00
|
|
|
IMAGES=()
|
|
|
|
while [[ $# > 0 ]]; do
|
|
|
|
if [ "$1" == "--" ]; then
|
|
|
|
shift
|
|
|
|
DOCKER_CMD="${@}"
|
|
|
|
break
|
|
|
|
else
|
|
|
|
IMAGES+=("$1")
|
|
|
|
fi
|
|
|
|
shift
|
|
|
|
done
|
|
|
|
|
2015-07-24 00:36:11 +00:00
|
|
|
if [[ ${#IMAGES[@]} == 0 ]]; then
|
2017-05-08 15:55:46 +00:00
|
|
|
IMAGES=(centos_6 centos_7 debian_7 debian_8 debian_9)
|
2015-07-17 17:07:00 +00:00
|
|
|
fi
|
2015-07-13 03:50:05 +00:00
|
|
|
|
2015-07-17 17:07:00 +00:00
|
|
|
mkdir -p "${PACKAGE_DIR}"
|
|
|
|
#Run docker to build pacakges
|
2015-12-06 17:31:59 +00:00
|
|
|
for IMAGE_NAME in "${IMAGES[@]}"; do
|
|
|
|
split_image_name "${IMAGE_NAME}" #set IMAGE_NAME and IMAGE_INFO
|
2015-07-19 07:35:13 +00:00
|
|
|
|
2015-10-30 23:27:12 +00:00
|
|
|
#Auto pull docker unless DOCKER_AUTOPULL=0
|
|
|
|
if [[ ${DOCKER_AUTOPULL-1} != 0 ]]; then
|
2016-08-02 19:46:13 +00:00
|
|
|
$SUDO docker pull gitlfs/build-dockers:${IMAGE_NAME}
|
2015-10-30 23:27:12 +00:00
|
|
|
fi
|
2015-07-19 22:59:14 +00:00
|
|
|
|
2015-07-30 05:02:46 +00:00
|
|
|
#It CAN'T be empty () with set -u... So I put some defaults in here
|
2015-07-31 20:32:40 +00:00
|
|
|
OTHER_OPTIONS=("-it")
|
2016-08-02 19:46:13 +00:00
|
|
|
|
2015-07-20 05:40:24 +00:00
|
|
|
if [ "${AUTO_REMOVE-1}" == "1" ]; then
|
|
|
|
OTHER_OPTIONS+=("--rm")
|
|
|
|
fi
|
2015-12-06 01:52:21 +00:00
|
|
|
|
2015-07-27 23:53:26 +00:00
|
|
|
if [ -s ${CUR_DIR}/${IMAGE_NAME}.key ]; then
|
2015-12-06 01:52:21 +00:00
|
|
|
CONTAINER_NAME=git-lfs-gpg ${CUR_DIR}/gpg-agent_preload.bsh
|
2015-07-27 23:53:26 +00:00
|
|
|
OTHER_OPTIONS+=("--volumes-from" "git-lfs-gpg")
|
2015-12-06 01:52:21 +00:00
|
|
|
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)")
|
2015-07-27 23:53:26 +00:00
|
|
|
#Do I need this? Or can I get away with hardcoding???
|
|
|
|
#GPG_AGENT_INFO=/tmp/gpg-agent/S.gpg-agent:1:1
|
2015-07-19 22:59:14 +00:00
|
|
|
fi
|
2015-12-06 01:52:21 +00:00
|
|
|
|
2015-08-01 00:23:47 +00:00
|
|
|
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
|
2015-07-19 22:59:14 +00:00
|
|
|
|
2015-07-17 17:07:00 +00:00
|
|
|
echo Compiling LFS in docker image ${IMAGE_NAME}
|
2015-12-06 17:31:59 +00:00
|
|
|
IMAGE_REPO_DIR="${PACKAGE_DIR}"/"${IMAGE_INFO[0]}"/"${IMAGE_INFO[1]}"
|
2015-08-16 15:18:45 +00:00
|
|
|
$SUDO docker run "${OTHER_OPTIONS[@]}" ${DOCKER_OTHER_OPTIONS-} \
|
2015-07-19 07:35:13 +00:00
|
|
|
-e REPO_HOSTNAME=${REPO_HOSTNAME:-git-lfs.github.com} \
|
2015-08-01 00:23:47 +00:00
|
|
|
-e FINAL_UID=${FINAL_UID} \
|
|
|
|
-e FINAL_GID=${FINAL_GID} \
|
2015-08-16 15:18:45 +00:00
|
|
|
-v "${MINGW_PATCH}${REPO_DIR}:/src" \
|
|
|
|
-v "${MINGW_PATCH}${IMAGE_REPO_DIR}:/repo" \
|
2016-08-02 19:46:13 +00:00
|
|
|
gitlfs/build-dockers:${IMAGE_NAME} ${DOCKER_CMD-}
|
2015-07-17 19:55:31 +00:00
|
|
|
|
2015-07-24 00:36:11 +00:00
|
|
|
done
|
2015-07-31 05:47:47 +00:00
|
|
|
|
2016-06-08 19:03:44 +00:00
|
|
|
echo "Docker run completed successfully!"
|