#!/bin/bash #!- . /etc/shlib #!- DOCKER_UPDATE_PATH=${DOCKER_UPDATE_PATH:-/srv/docker-builder} KEEP_ONLY_PO="fr en de" include common include pretty ansi_color no usage="$exname COMPONENT MASTER_IMAGE_NAME BRANCH UPDATED_IMAGE_NAME" COMPONENT_NAME="$1" MASTER_IMAGE_NAME="$2" BRANCH="$3" UPDATED_IMAGE_NAME="$4" ## Note: we will need in the DOCKER_UPDATE_HOST: ## - git-sub ## should we check for aufs ? mkdir -p "$DOCKER_UPDATE_PATH" cd "$DOCKER_UPDATE_PATH" if ! [ -d "$COMPONENT_NAME" ]; then echo "ERROR: repository $DOCKER_UPDATE_PATH/$COMPONENT_NAME is not existent." echo "You should build it on this host prior to run this hook." echo "As a remainder: this host is supposed to keep the reference git that" echo "was used to built the master image." exit 1 fi lock=$DOCKER_UPDATE_PATH/$COMPONENT_NAME.lock if [ -e "$lock" ]; then echo "Master is being updated." echo "Or '$lock' file was left dangling over." exit 1 fi touch "$lock" ## This path is on the docker HOST ! AUFS_APPLY_PATH=${AUFS_APPLY_PATH:-/opt/apps/aufs_apply/bin/aufs_apply} md5() { find "$@" -type f -exec md5sum {} \; 2>/dev/null | md5sum | cut -f 1 -d " " } clean_all() { cd / mountpoint "$tmpdir_root" 2>/dev/null && umount "$tmpdir_root" [ -d "$tmpdir_root" ] && rmdir "$tmpdir_root" [ -d "$tmpdir_changes" ] && rm -rf "$tmpdir_changes" rm "$lock" } tmpdir="$DOCKER_UPDATE_PATH"/tmp mkdir -p "$tmpdir" tmpdir_changes=$(mktemp -d $tmpdir/$COMPONENT_NAME.changes.XXXXXX) tmpdir_root=$(mktemp -d $tmpdir/$COMPONENT_NAME.root.XXXXXX) trap "clean_all" EXIT mount -t aufs -o br=$tmpdir_changes:$DOCKER_UPDATE_PATH/$COMPONENT_NAME -o udba=none none "$tmpdir_root" cd "$tmpdir_root" ## XXXvlab: We probably would need to: ## - fetch only the module concerned ## - fetch only the ref concerned Wrap -d "Update source code" <