From a359dc3af65876dbefc6c156701b98de45167235 Mon Sep 17 00:00:00 2001 From: Andy Neff Date: Fri, 17 Jul 2015 13:07:00 -0400 Subject: [PATCH] First working draft of docker repository scripts working --- .gitignore | 2 + docker/build_dockers.bsh | 25 ++++++-- docker/centos_script.bsh | 12 ++++ docker/debian_script.bsh | 13 ++++ docker/git-lfs-full-build_centos_7/Dockerfile | 13 ++++ .../Dockerfile | 24 +++---- .../Dockerfile | 24 +++---- .../Dockerfile | 26 ++++---- .../Dockerfile | 9 +-- .../Dockerfile | 9 +-- docker/run_dockers.bsh | 64 ++++++++++--------- 11 files changed, 142 insertions(+), 79 deletions(-) create mode 100755 docker/centos_script.bsh create mode 100755 docker/debian_script.bsh create mode 100644 docker/git-lfs-full-build_centos_7/Dockerfile rename docker/{lfs_centos_5 => git-lfs_centos_5}/Dockerfile (52%) rename docker/{lfs_centos_6 => git-lfs_centos_6}/Dockerfile (51%) rename docker/{lfs_centos_7 => git-lfs_centos_7}/Dockerfile (50%) rename docker/{lfs_debian_7 => git-lfs_debian_7}/Dockerfile (69%) rename docker/{lfs_debian_8 => git-lfs_debian_8}/Dockerfile (60%) diff --git a/.gitignore b/.gitignore index b32d4315..79c874ed 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,6 @@ rpm/*RPMS rpm/*.log rpm/SOURCES +docker/packages + src diff --git a/docker/build_dockers.bsh b/docker/build_dockers.bsh index 8df918fb..b15700b8 100755 --- a/docker/build_dockers.bsh +++ b/docker/build_dockers.bsh @@ -1,15 +1,28 @@ #!/usr/bin/env bash +# Usage: +# ./build_dockers.bsh - Build all the docker images +# ./build_dockers.bsh lfs_centos_5 lfs_centos_7 - Build only CentOS 5 & 7 image + set -eu CUR_DIR=$(dirname "${BASH_SOURCE[0]}") -#This will take a long time the first time -for IMAGE_DIR in $(ls -d ${CUR_DIR}/*/); do - if [ "$(basename ${IMAGE_DIR})" == "packages" ]; then - continue - fi +#If you are not in docker group and you have sudo, default value is sudo +: ${SUDO=`if id -nG | grep -qwv docker && which sudo > /dev/null 2>&1; then echo sudo; fi`} +if [[ $# == 0 ]]; then + IMAGE_DIRS=($(ls -d ${CUR_DIR}/git-lfs_*/Dockerfile)) + for i in "${!IMAGE_DIRS[@]}"; do + IMAGE_DIRS[$i]=$(dirname ${IMAGE_DIRS[$i]}) + done + unset i +else + IMAGE_DIRS=("${@}") +fi + +#This will take a long time the first time +for IMAGE_DIR in "${IMAGE_DIRS[@]}"; do echo Docker building ${IMAGE_DIR} - docker build -t $(basename ${IMAGE_DIR}) ${IMAGE_DIR} + $SUDO docker build -t $(basename ${IMAGE_DIR}) -f ${IMAGE_DIR}/Dockerfile ${CUR_DIR} done diff --git a/docker/centos_script.bsh b/docker/centos_script.bsh new file mode 100755 index 00000000..becd36e2 --- /dev/null +++ b/docker/centos_script.bsh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +mkdir -p /tmp/docker_run +cp -r /src /tmp/docker_run/git-lfs + +cd /tmp/docker_run/git-lfs +git clean -xdf . +/tmp/docker_run/git-lfs/rpm/build_rpms.bsh + +mkdir -p /tmp/docker_run/repo +mv /tmp/docker_run/git-lfs/rpm/{SRPMS,RPMS} /tmp/docker_run/repo/ +createrepo /tmp/docker_run/repo \ No newline at end of file diff --git a/docker/debian_script.bsh b/docker/debian_script.bsh new file mode 100755 index 00000000..1af894a5 --- /dev/null +++ b/docker/debian_script.bsh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +mkdir -p /tmp/docker_run +cp -r /src /tmp/docker_run/git-lfs + +cd /tmp/docker_run/git-lfs +git clean -xdf . +dpkg-buildpackage -us -uc + +cd /tmp/docker_run +mkdir -p /tmp/docker_run/repo +mv git-lfs*.* /tmp/docker_run/repo/ +#create repo? \ No newline at end of file diff --git a/docker/git-lfs-full-build_centos_7/Dockerfile b/docker/git-lfs-full-build_centos_7/Dockerfile new file mode 100644 index 00000000..e54056a4 --- /dev/null +++ b/docker/git-lfs-full-build_centos_7/Dockerfile @@ -0,0 +1,13 @@ +FROM centos:7 +MAINTAINER Andy Neff + +#Docker RUN example, pass in the git-lfs checkout copy you are working with +LABEL RUN="docker run -v git-lfs-repo-dir:/src" +LABEL POST="docker cp containerid:/tmp/docker_run/rpms/RPMS/*" + +RUN yum install -y createrepo + +#Add the simple build repo script +ADD centos_script.bsh /tmp/docker_run + +CMD /tmp/docker_run/centos_script \ No newline at end of file diff --git a/docker/lfs_centos_5/Dockerfile b/docker/git-lfs_centos_5/Dockerfile similarity index 52% rename from docker/lfs_centos_5/Dockerfile rename to docker/git-lfs_centos_5/Dockerfile index 9244c3f5..ce65a332 100644 --- a/docker/lfs_centos_5/Dockerfile +++ b/docker/git-lfs_centos_5/Dockerfile @@ -2,7 +2,8 @@ FROM centos:5 MAINTAINER Andy Neff #Docker RUN example, pass in the git-lfs checkout copy you are working with -LABEL RUN="docker run -v git-lfs-repo-dir:/tmp/git-lfs" +LABEL RUN="docker run -v git-lfs-repo-dir:/src" +LABEL POST="docker cp containerid:/tmp/docker_run/repo*" RUN yum install -y epel-release RUN yum install -y createrepo rsync git @@ -15,15 +16,16 @@ ENV DOCKER_LFS_BUILD_VERSION=master #ENV DOCKER_LFS_BUILD_VERSION=v0.5.3 #Set to master if you want the lastest, but IF there is a failure, #the docker will not build, so I decided to make a stable version the default - -#ADD https://github.com/github/git-lfs/archive/${DOCKER_LFS_BUILD_VERSION}.tar.gz /tmp/docker_setup/ -#TODO: Change these two lines back after next merge -ENV DOCKER_LFS_BUILD_VERSION=git_for_centos -ADD https://github.com/andyneff/git-lfs/archive/${DOCKER_LFS_BUILD_VERSION}.tar.gz /tmp/docker_setup/ -WORKDIR /tmp/docker_setup/ -RUN tar zxf ${DOCKER_LFS_BUILD_VERSION}.tar.gz -RUN cd /tmp/docker_setup/git-lfs-*/rpm; touch build.log; tail -f build.log & ./build_rpms.bsh; pkill tail -WORKDIR /tmp/git-lfs/rpm +ADD https://github.com/github/git-lfs/archive/${DOCKER_LFS_BUILD_VERSION}.tar.gz /tmp/docker_setup/ +RUN cd /tmp/docker_setup/; \ + tar zxf ${DOCKER_LFS_BUILD_VERSION}.tar.gz +RUN cd /tmp/docker_setup/git-lfs-*/rpm; \ + touch build.log; \ + tail -f build.log & ./build_rpms.bsh; \ + pkill tail RUN rm -rf /tmp/docker_setup -CMD /tmp/git-lfs/rpm/build_rpms.bsh \ No newline at end of file +#Add the simple build repo script +ADD centos_script.bsh /tmp/docker_run/ + +CMD /tmp/docker_run/centos_script.bsh \ No newline at end of file diff --git a/docker/lfs_centos_6/Dockerfile b/docker/git-lfs_centos_6/Dockerfile similarity index 51% rename from docker/lfs_centos_6/Dockerfile rename to docker/git-lfs_centos_6/Dockerfile index 7a90dc4a..7d428cc0 100644 --- a/docker/lfs_centos_6/Dockerfile +++ b/docker/git-lfs_centos_6/Dockerfile @@ -2,7 +2,8 @@ FROM centos:6 MAINTAINER Andy Neff #Docker RUN example, pass in the git-lfs checkout copy you are working with -#LABEL RUN="docker run -v git-lfs-repo-dir:/tmp/git-lfs" +LABEL RUN="docker run -v git-lfs-repo-dir:/src" +LABEL POST="docker cp containerid:/tmp/docker_run/repo*" RUN yum install -y epel-release RUN yum install -y createrepo rsync golang tar @@ -15,15 +16,16 @@ ENV DOCKER_LFS_BUILD_VERSION=master #ENV DOCKER_LFS_BUILD_VERSION=v0.5.3 #Set to master if you want the lastest, but IF there is a failure, #the docker will not build, so I decided to make a stable version the default - -#ADD https://github.com/github/git-lfs/archive/${DOCKER_LFS_BUILD_VERSION}.tar.gz /tmp/docker_setup/ -#TODO: Change these two lines back after next merge -ENV DOCKER_LFS_BUILD_VERSION=git_for_centos -ADD https://github.com/andyneff/git-lfs/archive/${DOCKER_LFS_BUILD_VERSION}.tar.gz /tmp/docker_setup/ -WORKDIR /tmp/docker_setup/ -RUN tar zxf ${DOCKER_LFS_BUILD_VERSION}.tar.gz -RUN cd /tmp/docker_setup/git-lfs-*/rpm; touch build.log; tail -f build.log & ./build_rpms.bsh; pkill tail -WORKDIR /tmp/git-lfs/rpm +ADD https://github.com/github/git-lfs/archive/${DOCKER_LFS_BUILD_VERSION}.tar.gz /tmp/docker_setup/ +RUN cd /tmp/docker_setup/; \ + tar zxf ${DOCKER_LFS_BUILD_VERSION}.tar.gz +RUN cd /tmp/docker_setup/git-lfs-*/rpm; \ + touch build.log; \ + tail -f build.log & ./build_rpms.bsh; \ + pkill tail RUN rm -rf /tmp/docker_setup -CMD touch build.log; tail -f build.log & ./build_rpms.bsh \ No newline at end of file +#Add the simple build repo script +ADD centos_script.bsh /tmp/docker_run/ + +CMD /tmp/docker_run/centos_script.bsh \ No newline at end of file diff --git a/docker/lfs_centos_7/Dockerfile b/docker/git-lfs_centos_7/Dockerfile similarity index 50% rename from docker/lfs_centos_7/Dockerfile rename to docker/git-lfs_centos_7/Dockerfile index 158953fe..956b18b1 100644 --- a/docker/lfs_centos_7/Dockerfile +++ b/docker/git-lfs_centos_7/Dockerfile @@ -2,27 +2,29 @@ FROM centos:7 MAINTAINER Andy Neff #Docker RUN example, pass in the git-lfs checkout copy you are working with -LABEL RUN="docker run -v git-lfs-repo-dir:/tmp/git-lfs" +LABEL RUN="docker run -v git-lfs-repo-dir:/src" +LABEL POST="docker cp containerid:/tmp/docker_run/repo*" RUN yum install -y createrepo rsync git ruby ruby-devel golang #The purpose of this is to build and install everything needed to build git-lfs #Next time. So that the LONG build/installed in centos are only done once, and -#Store in the image +#stored in the image. ENV DOCKER_LFS_BUILD_VERSION=master #ENV DOCKER_LFS_BUILD_VERSION=v0.5.3 #Set to master if you want the lastest, but IF there is a failure, #the docker will not build, so I decided to make a stable version the default - -#ADD https://github.com/github/git-lfs/archive/${DOCKER_LFS_BUILD_VERSION}.tar.gz /tmp/docker_setup/ -#TODO: Change these two lines back after next merge -ENV DOCKER_LFS_BUILD_VERSION=git_for_centos -ADD https://github.com/andyneff/git-lfs/archive/${DOCKER_LFS_BUILD_VERSION}.tar.gz /tmp/docker_setup/ -WORKDIR /tmp/docker_setup/ -RUN tar zxf ${DOCKER_LFS_BUILD_VERSION}.tar.gz -RUN cd /tmp/docker_setup/git-lfs-*/rpm; touch build.log; tail -f build.log & ./build_rpms.bsh; pkill tail +ADD https://github.com/github/git-lfs/archive/${DOCKER_LFS_BUILD_VERSION}.tar.gz /tmp/docker_setup/ +RUN cd /tmp/docker_setup/; \ + tar zxf ${DOCKER_LFS_BUILD_VERSION}.tar.gz +RUN cd /tmp/docker_setup/git-lfs-*/rpm; \ + touch build.log; \ + tail -f build.log & ./build_rpms.bsh; \ + pkill tail RUN rm -rf /tmp/docker_setup -WORKDIR /tmp -CMD /tmp/git-lfs/rpm/build_rpms.bsh \ No newline at end of file +#Add the simple build repo script +ADD centos_script.bsh /tmp/docker_run/ + +CMD /tmp/docker_run/centos_script.bsh \ No newline at end of file diff --git a/docker/lfs_debian_7/Dockerfile b/docker/git-lfs_debian_7/Dockerfile similarity index 69% rename from docker/lfs_debian_7/Dockerfile rename to docker/git-lfs_debian_7/Dockerfile index 62731f10..9421b08a 100644 --- a/docker/lfs_debian_7/Dockerfile +++ b/docker/git-lfs_debian_7/Dockerfile @@ -1,14 +1,15 @@ FROM debian:wheezy - MAINTAINER Andy Neff #Docker RUN example, pass in the git-lfs checkout copy you are working with -LABEL RUN="docker run -v git-lfs-repo-dir:/tmp/git-lfs" +LABEL RUN="docker run -v git-lfs-repo-dir:/tmp/src" +LABEL POST="docker cp containerid:/tmp/docker_run/repo*" RUN echo 'deb http://http.debian.net/debian wheezy-backports main' > /etc/apt/sources.list.d/wheezy-backports-main.list RUN DEBIAN_FRONTEND=noninteractive apt-get -y update && \ apt-get install -y -t wheezy-backports golang git dpkg-dev dh-golang ruby-ronn -WORKDIR /tmp/git-lfs/ -CMD ["dpkg-buildpackage", "-us", "-uc"] +ADD debian_script.bsh /tmp/docker_run/ + +CMD /tmp/docker_run/debian_script.bsh \ No newline at end of file diff --git a/docker/lfs_debian_8/Dockerfile b/docker/git-lfs_debian_8/Dockerfile similarity index 60% rename from docker/lfs_debian_8/Dockerfile rename to docker/git-lfs_debian_8/Dockerfile index 2d0e4f87..0805e20d 100644 --- a/docker/lfs_debian_8/Dockerfile +++ b/docker/git-lfs_debian_8/Dockerfile @@ -1,12 +1,13 @@ FROM debian:jessie - MAINTAINER Andy Neff #Docker RUN example, pass in the git-lfs checkout copy you are working with -LABEL RUN="docker run -v git-lfs-repo-dir:/tmp/git-lfs" +LABEL RUN="docker run -v git-lfs-repo-dir:/src +LABEL POST="docker cp containerid:/tmp/docker_run/repo*" RUN DEBIAN_FRONTEND=noninteractive apt-get -y update && \ apt-get install -y golang git dpkg-dev dh-golang ruby-ronn -WORKDIR /tmp/git-lfs/ -CMD ["dpkg-buildpackage", "-us", "-uc"] \ No newline at end of file +ADD debian_script.bsh /tmp/docker_run/ + +CMD /tmp/docker_run/debian_script.bsh \ No newline at end of file diff --git a/docker/run_dockers.bsh b/docker/run_dockers.bsh index d60da4d7..f613e9b5 100755 --- a/docker/run_dockers.bsh +++ b/docker/run_dockers.bsh @@ -1,49 +1,51 @@ #!/usr/bin/env bash +# Usage: +# ./run_dockers.bsh - Run all the docker images +# ./run_dockers.bsh lfs_centos_5 lfs_centos_7 - Run only CentOS 5 & 7 image + set -eu CUR_DIR=$(dirname "${BASH_SOURCE[0]}") REPO_DIR=$(cd ${CUR_DIR}/..; pwd) -DOCKER_UID=${DOCKER_UID=`id -u`} #Not REALLY used yet -DOCKER_GID=${DOCKER_GID=`id -u`} #Not REALLY used yet PACKAGE_DIR=${CUR_DIR}/packages BUILD_LOCAL=1 -SUDO=${SUDO=`if which sudo > /dev/null 2>&1; then echo sudo; fi`} +#If you are not in docker group and you have sudo, default value is sudo +: ${SUDO=`if id -nG | grep -qwv docker && which sudo > /dev/null 2>&1; then echo sudo; fi`} + +function split_image_name() +{ #$1 - image directory name or 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 + IMAGE_NAME=$(basename $1) + if [ "${IMAGE_NAME,,}" == "dockerfile" ]; then + IMAGE_NAME=$(basename $(dirname $1)) + fi + + local IFS=_ + IMAGE_INFO=(${IMAGE_NAME}) +} + +if [[ $# == 0 ]]; then + IMAGES=($(ls -d ${CUR_DIR}/git-lfs_*/Dockerfile)) +else + IMAGES=("${@}") +fi mkdir -p "${PACKAGE_DIR}" -#Run docker to build rpm/deb -for IMAGE_DIR in $(ls -d ${CUR_DIR}/*/); do - IMAGE_NAME=$(basename ${IMAGE_DIR}) - - OLD_IFS=${IFS} - IFS=_ - IMAGE_INFO=(${IMAGE_NAME}) - IFS=${OLD_IFS} - - if [ "${IMAGE_NAME}" == "packages" ]; then - continue - elif [[ ${IMAGE_NAME} == *"centos"* ]]; then - ${REPO_DIR}/rpm/clean.bsh - fi - - echo Compiling in docker image ${IMAGE_NAME} - $SUDO docker run -e BUILD_LOCAL=${BUILD_LOCAL} -v ${REPO_DIR}:/tmp/git-lfs --name git-lfs_build_container ${IMAGE_NAME} +#Run docker to build pacakges +for DOCKER_FILE in "${IMAGES[@]}"; do + split_image_name "${DOCKER_FILE}" #set IMAGE_NAME and IMAGE_INFO + + echo Compiling LFS in docker image ${IMAGE_NAME} + $SUDO docker run -e BUILD_LOCAL=${BUILD_LOCAL} -v ${REPO_DIR}:/src --name git-lfs_build_container ${IMAGE_NAME} IMAGE_REPO_DIR="${PACKAGE_DIR}"/"${IMAGE_INFO[1]}"/"${IMAGE_INFO[2]}" mkdir -p "${IMAGE_REPO_DIR}" - #Quick hack until I make the docker do this for real - $SUDO chown -R ${DOCKER_UID}:${DOCKER_GID} ${REPO_DIR} - - if [[ ${IMAGE_NAME} == *"centos"* ]]; then - cp -rv ${REPO_DIR}/rpm/{RPMS,SRPMS} ${IMAGE_REPO_DIR} - elif [[ ${IMAGE_NAME} == *"debian"* ]]; then - $SUDO docker cp git-lfs_build_container:tmp ${IMAGE_REPO_DIR} - $SUDO mv ${IMAGE_REPO_DIR}/tmp/git-lfs_* ${IMAGE_REPO_DIR} - $SUDO rm -rf ${IMAGE_REPO_DIR}/tmp - fi - + $SUDO docker cp git-lfs_build_container:/tmp/docker_run/repo/ ${IMAGE_REPO_DIR} + $SUDO docker kill git-lfs_build_container $SUDO docker rm git-lfs_build_container done \ No newline at end of file