From 8e5de8219f28259efdc130fbee0ce4e66aa44fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20W=C3=A4ckerlin?= Date: Fri, 22 Apr 2016 08:27:35 +0000 Subject: [PATCH] basic support for centos rpm docker build --- scripts/build-in-docker.sh | 93 ++++++++++++++++++++++++++------------ 1 file changed, 65 insertions(+), 28 deletions(-) diff --git a/scripts/build-in-docker.sh b/scripts/build-in-docker.sh index 6bde9fa..27e9f78 100755 --- a/scripts/build-in-docker.sh +++ b/scripts/build-in-docker.sh @@ -2,6 +2,7 @@ set -o errtrace # build and test everything in a fresh docker installation +mode="apt" img="ubuntu:latest" repos=() keys=() @@ -24,6 +25,7 @@ while test $# -gt 0; do echo "OPTIONS:" echo echo " -h, --help show this help" + echo " -m, --mode mode: apt or yum, default: ${mode}" echo " -i, --image use given docker image instead of ${img}" echo " -t, --targets targets specify build targets, default: ${targets}" echo " -r, --repo add given apt repository" @@ -34,6 +36,8 @@ while test $# -gt 0; do echo " -c, --cmd execute commands as root in docker" echo " -w, --wait on error keep docker container and wait for enter" echo + echo " The option -i must be after -m, because mode sets a new default image" + echo echo " The options -r -k -e -d -p -c can be repeated several times." echo echo " The options -r -p -c allow an if-then-else contruct" @@ -60,6 +64,17 @@ while test $# -gt 0; do echo exit 0 ;; + (-m|--mode) shift; + mode="$1" + case "$mode" in + (apt) img="ubuntu:latest";; + (yum) img="centos:latest";; + (*) + echo "**** ERROR: unknown mode '$1', try --help" 1>&2 + exit 1 + ;; + esac + ;; (-i|--image) shift; img="$1" ;; @@ -167,34 +182,56 @@ function ifthenelse() { set -x -OPTIONS='-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew -y --force-yes --no-install-suggests --no-install-recommends' docker pull $img DOCKER_ID=$(docker run -d ${dirs[@]} ${envs[@]} -w /workdir $img sleep infinity) trap 'traperror '"${DOCKER_ID}"' "$? ${PIPESTATUS[@]}" $LINENO $BASH_LINENO "$BASH_COMMAND" "${FUNCNAME[@]}" "${FUNCTION}"' SIGINT INT TERM EXIT -for f in 'libpam-systemd:amd64' 'policykit*' 'colord'; do - docker exec -it ${DOCKER_ID} bash -c "echo 'Package: $f' >> /etc/apt/preferences" - docker exec -it ${DOCKER_ID} bash -c "echo 'Pin-Priority: -100' >> /etc/apt/preferences" - docker exec -it ${DOCKER_ID} bash -c "echo >> /etc/apt/preferences" -done -docker exec ${DOCKER_ID} apt-get update ${OPTIONS} -docker exec ${DOCKER_ID} apt-get upgrade ${OPTIONS} -docker exec ${DOCKER_ID} apt-get install ${OPTIONS} python-software-properties software-properties-common apt-transport-https dpkg-dev lsb-release || \ - docker exec ${DOCKER_ID} apt-get install ${OPTIONS} software-properties-common apt-transport-https dpkg-dev lsb-release || \ - docker exec ${DOCKER_ID} apt-get install ${OPTIONS} python-software-properties apt-transport-https dpkg-dev lsb-release; -for repo in "${repos[@]}"; do - ifthenelse "${repo}" "apt-add-repository ARG" -done -for key in "${keys[@]}"; do - wget -O- "$key" \ - | docker exec -i ${DOCKER_ID} apt-key add - -done -docker exec ${DOCKER_ID} apt-get update ${OPTIONS} -for package in "${packages[@]}"; do - ifthenelse "${package}" "apt-get install ${OPTIONS} ARG" -done -for command in "${commands[@]}"; do - ifthenelse "${command}" "ARG" -done -docker exec ${DOCKER_ID} ./resolve-debbuilddeps.sh -docker exec -u $(id -u) ${DOCKER_ID} test -d .svn && svn upgrade || true -docker exec -u $(id -u) ${DOCKER_ID} ./bootstrap.sh -t "${targets}" +case $mode in + (apt) + OPTIONS='-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew -y --force-yes --no-install-suggests --no-install-recommends' + for f in 'libpam-systemd:amd64' 'policykit*' 'colord'; do + docker exec -it ${DOCKER_ID} bash -c "echo 'Package: $f' >> /etc/apt/preferences" + docker exec -it ${DOCKER_ID} bash -c "echo 'Pin-Priority: -100' >> /etc/apt/preferences" + docker exec -it ${DOCKER_ID} bash -c "echo >> /etc/apt/preferences" + done + docker exec ${DOCKER_ID} apt-get update ${OPTIONS} + docker exec ${DOCKER_ID} apt-get upgrade ${OPTIONS} + docker exec ${DOCKER_ID} apt-get install ${OPTIONS} python-software-properties software-properties-common apt-transport-https dpkg-dev lsb-release || \ + docker exec ${DOCKER_ID} apt-get install ${OPTIONS} software-properties-common apt-transport-https dpkg-dev lsb-release || \ + docker exec ${DOCKER_ID} apt-get install ${OPTIONS} python-software-properties apt-transport-https dpkg-dev lsb-release; + for repo in "${repos[@]}"; do + ifthenelse "${repo}" "apt-add-repository ARG" + done + for key in "${keys[@]}"; do + wget -O- "$key" \ + | docker exec -i ${DOCKER_ID} apt-key add - + done + docker exec ${DOCKER_ID} apt-get update ${OPTIONS} + for package in "${packages[@]}"; do + ifthenelse "${package}" "apt-get install ${OPTIONS} ARG" + done + for command in "${commands[@]}"; do + ifthenelse "${command}" "ARG" + done + docker exec ${DOCKER_ID} ./resolve-debbuilddeps.sh + ;; + (yum) + ./bootstrap.sh -t dist + if [[ "$img" =~ "centos" ]]; then + docker exec ${DOCKER_ID} yum install -y redhat-lsb + docker exec -i ${DOCKER_ID} bash -c 'cat > /etc/yum.repos.d/wandisco-svn.repo' <> /etc/yum.repos.d/wandisco-svn.repo' + docker exec -i ${DOCKER_ID} bash -c 'cat >> /etc/yum.repos.d/wandisco-svn.repo' <