From d153a41d3f59cf78e10178f08d7607fa0ba0d109 Mon Sep 17 00:00:00 2001 From: Joerg Jaspert Date: Sun, 13 Nov 2011 21:19:09 +0100 Subject: [PATCH] morgue <-> snapshot love add short shell script to link files in morgue into the snapshot farm to save on disk space Signed-off-by: Joerg Jaspert --- tools/link_morgue_with_snapshot_farm.sh | 81 +++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 tools/link_morgue_with_snapshot_farm.sh diff --git a/tools/link_morgue_with_snapshot_farm.sh b/tools/link_morgue_with_snapshot_farm.sh new file mode 100755 index 00000000..ed53aaf8 --- /dev/null +++ b/tools/link_morgue_with_snapshot_farm.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# No way I try to deal with a crippled sh just for POSIX foo. + +# Copyright (C) 2011 Joerg Jaspert +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; version 2. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# Homer: Are you saying you're never going to eat any animal again? What +# about bacon? +# Lisa: No. +# Homer: Ham? +# Lisa: No. +# Homer: Pork chops? +# Lisa: Dad, those all come from the same animal. +# Homer: Heh heh heh. Ooh, yeah, right, Lisa. A wonderful, magical animal. + +# Let files inside morgue be symlinks to the snapshot farm + +# exit on errors +set -e +# make sure to only use defined variables +set -u +# ERR traps should be inherited from functions too. (And command +# substitutions and subshells and whatnot, but for us the functions is +# the important part here) +set -E + +# Make sure we start out with a sane umask setting +umask 022 + +# And use one locale, no matter what the caller has set +export LANG=C +export LC_ALL=C + +# log something (basically echo it together with a timestamp) +# Set $PROGRAM to a string to have it added to the output. +function log () { + local prefix=${PROGRAM:-$0} + echo "$(date +"%b %d %H:%M:%S") $(hostname -s) ${prefix}[$$]: $@" +} + +PROCESSDIR="/srv/morgue.debian.org" +FARMBASE="/srv/snapshot.debian.org/farm" + +cd "${PROCESSDIR}" +log "Processing ${PROCESSDIR}" +find ${PROCESSDIR} -type f | +while read mfile; do + # Get the files sha1sum + mshasum=$(sha1sum ${mfile}) + mshasum=${mshasum%% *} + # And now get the "levels" of the farm + if [[ ${mshasum} =~ ([0-9a-z][0-9a-z])([0-9a-z][0-9a-z]).* ]]; then + LVL1=${BASH_REMATCH[1]} + LVL2=${BASH_REMATCH[2]} + else + log "Ups, unknown error in regex for ${mfile} (${mshasum})" + continue + fi + + # See if we have a target + if [ -f "${FARMBASE}/${LVL1}/${LVL2}/${mshasum}" ]; then + # Yes, lets symlink it + log "Symlinking ${mfile} to ${FARMBASE}/${LVL1}/${LVL2}/${mshasum}" + ln -sf "${FARMBASE}/${LVL1}/${LVL2}/${mshasum}" "${mfile}" + else + # No, just tell + log "No symlink target for ${mfile}" + fi +done # mfile read mfile -- 2.39.2