#!/bin/sh # script by Michael Shigorin for snapshotting # ALT Linux Sisyphus locally; feel free to use and modify, would # be glad to hear back about changes # mirror/site-specific SRC="ftp.altlinux.org.ua::ALTLinux/Sisyphus/" BASEDIR="/var/ftp/pub/EMT/Sisyphus/" # retry params MAXCOUNT=5 TIMEOUT=60 # shouldn't need to be changed DATE=`date +%Y%m%d` LOGDIR="$BASEDIR/log/" LOGFILE="$LOGDIR/$DATE.log" DEST="$BASEDIR/.syncing/" RSYNCARGS="-av --partial --delete" RPMARGS="-qp --queryformat %{RELEASE}\n" TAGFILE="$DEST/files/i586/RPMS/altlinux-release-Sisyphus-alt*.noarch.rpm" unset OK # init env mkdir -p "$BASEDIR" "$LOGDIR" cd "$BASEDIR" # create hardlinked copy or init dir; order critical LAST=`ls -d1 20?????? 2>/dev/null | tail -1` rm -rf "$DEST" [ -n "$LAST" ] && cp -al "$LAST" "$DEST" || mkdir -p "$DEST" # try to sync up for attempt in `seq 1 $MAXCOUNT`; do rsync $RSYNCARGS "$SRC" "$DEST" 2>&1 >> "$LOGFILE" && { OK="yes" break } sleep "$TIMEOUT" done [ -z "$OK" ] && exit 1 # get timestamp from specific package and move to it TIMESTAMP=`rpm $RPMARGS $TAGFILE | tail -1 | sed 's/alt//'` [ ! -d "$TIMESTAMP" ] && { mv "$DEST" "$TIMESTAMP" touch -d "$DATE" "$TIMESTAMP" # fix symlink rm -f current ln -s "$TIMESTAMP" current } || rm -rf "$DEST" # that's all :) echo "** $TIMESTAMP sync OK" >> "$LOGFILE"