From 0589234782dcbc4f1f0bb10619512fc0dea1295e Mon Sep 17 00:00:00 2001 From: Bryan Hong Date: Sat, 6 Feb 2016 21:51:22 -0800 Subject: [PATCH 1/2] enable bash completions added a few packages and enabled bash completions within the container for aptly, makes getting started with aptly easier --- Dockerfile | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6b0a006..40bc53b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,32 +28,39 @@ RUN echo "deb-src http://nginx.org/packages/ubuntu/ trusty nginx" >> /etc/apt/so RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 # Update APT repository and install packages -RUN apt-get -q update \ - && apt-get -y install aptly \ - bzip2 \ - xz-utils \ - graphviz \ - gnupg \ - gpgv \ - supervisor \ - nginx - -# Install GPG Generator -COPY assets/gpg_batch.sh /opt/gpg_batch.sh +RUN apt-get -q update \ + && apt-get -y install aptly \ + bash-completion \ + bzip2 \ + gnupg \ + gpgv \ + graphviz \ + supervisor \ + nginx \ + wget \ + xz-utils # Install Aptly Configuration COPY assets/aptly.conf /etc/aptly.conf -# Install Mirror Update Script -COPY assets/update_mirror.sh /opt/update_mirror.sh +# Enable Aptly Bash completions +RUN wget https://github.com/aptly-dev/aptly-bash-completion/raw/master/aptly \ + -O /etc/bash_completion.d/aptly \ + && echo "if ! shopt -oq posix; then\n\ + if [ -f /usr/share/bash-completion/bash_completion ]; then\n\ + . /usr/share/bash-completion/bash_completion\n\ + elif [ -f /etc/bash_completion ]; then\n\ + . /etc/bash_completion\n\ + fi\n\ +fi" >> /etc/bash.bashrc # Install Nginx Config COPY assets/nginx.conf.sh /opt/nginx.conf.sh COPY assets/supervisord.nginx.conf /etc/supervisor/conf.d/nginx.conf RUN echo "daemon off;" >> /etc/nginx/nginx.conf -# Install Startup script -COPY assets/startup.sh /opt/startup.sh +# Install scripts +COPY assets/*.sh /opt/ # Bind mount location VOLUME [ "/opt/aptly" ] From 83c550f8e15bf26c8c20c69b30077d4ffcefd11e Mon Sep 17 00:00:00 2001 From: Bryan Hong Date: Sat, 6 Feb 2016 21:53:00 -0800 Subject: [PATCH 2/2] add ability to add more ubuntu mirror components the original update_mirror.sh only allowed for mirroring the main repository. left out restricted, multiverse, etc. the component is now an array so it is easy to add additional components if you want to mirror more than just main --- assets/update_mirror.sh | 49 +++++++++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/assets/update_mirror.sh b/assets/update_mirror.sh index a35e738..b7b53df 100755 --- a/assets/update_mirror.sh +++ b/assets/update_mirror.sh @@ -3,8 +3,16 @@ set -e # Automate the initial creation and update of an Ubuntu package mirror in aptly +# The variables (as set below) will create a mirror of the Ubuntu Trusty repo +# with just the main component, you can add other components like restricted +# universe etc by adding to the array (separated by spaces). + +# For more detail about each of the variables below refer to: +# https://help.ubuntu.com/community/Repositories/CommandLine + UBUNTU_RELEASE=trusty UPSTREAM_URL="http://archive.ubuntu.com/ubuntu/" +COMPONENTS=( main ) REPOS=( ${UBUNTU_RELEASE} ${UBUNTU_RELEASE}-updates ${UBUNTU_RELEASE}-security ) # Export the GPG Public key @@ -14,35 +22,44 @@ fi # Create repository mirrors if they don't exist set +e -for repo in ${REPOS[@]}; do - aptly mirror list -raw | grep "^${repo}$" - if [[ $? -ne 0 ]]; then - echo "Creating mirror of ${repo} repository." - aptly mirror create \ - -architectures=amd64 ${repo} ${UPSTREAM_URL} ${repo} main - fi +for component in ${COMPONENTS[@]}; do + for repo in ${REPOS[@]}; do + aptly mirror list -raw | grep "^${repo}-${component}$" + if [[ $? -ne 0 ]]; then + echo "Creating mirror of ${repo}-${component} repository." + aptly mirror create \ + -architectures=amd64 ${repo}-${component} ${UPSTREAM_URL} ${repo} ${component} + fi + done done set -e # Update all repository mirrors -for repo in ${REPOS[@]}; do - echo "Updating ${repo} repository mirror.." - aptly mirror update ${repo} +for component in ${COMPONENTS[@]}; do + for repo in ${REPOS[@]}; do + echo "Updating ${repo}-${component} repository mirror.." + aptly mirror update ${repo}-${component} + done done # Create snapshots of updated repositories -for repo in ${REPOS[@]}; do - echo "Creating snapshot of ${repo} repository mirror.." - aptly snapshot create ${repo}-`date +%Y%m%d%H` from mirror ${repo} +for component in ${COMPONENTS[@]}; do + for repo in ${REPOS[@]}; do + echo "Creating snapshot of ${repo}-${component} repository mirror.." + SNAPSHOTARRAY+="${repo}-${component}-`date +%Y%m%d%H` " + aptly snapshot create ${repo}-${component}-`date +%Y%m%d%H` from mirror ${repo}-${component} + done done +echo ${SNAPSHOTARRAY[@]} + +#### I STOPPED HERE + # Merge snapshots into a single snapshot with updates applied echo "Merging snapshots into one.." aptly snapshot merge -latest \ ${UBUNTU_RELEASE}-merged-`date +%Y%m%d%H` \ - ${UBUNTU_RELEASE}-`date +%Y%m%d%H` \ - ${UBUNTU_RELEASE}-updates-`date +%Y%m%d%H` \ - ${UBUNTU_RELEASE}-security-`date +%Y%m%d%H` + ${SNAPSHOTARRAY[@]} # Publish the latest merged snapshot set +e