122 lines
3.5 KiB
Bash
Executable File
122 lines
3.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Helper for image creation
|
|
#
|
|
PUBDIRJIG=$1
|
|
RSYNC_TARGET=$2
|
|
ARCH=$3
|
|
FIRMWARE=$4
|
|
|
|
LOG=~/build.${CODENAME}/log/$ARCH.iso_run
|
|
HOSTNAME=`hostname -f`
|
|
LOCK=~/iso_run.lock
|
|
START=`date -u +%H:%M:%S`
|
|
. $TOPDIR/common.sh
|
|
|
|
# Check to see if another sync is in progress
|
|
if lockfile -! -l 43200 -r-1 "$LOCK"; then
|
|
echo $HOSTNAME is not doing another iso_run, lock file $LOCK exists
|
|
exit 1
|
|
fi
|
|
trap "rm -f $LOCK > /dev/null 2>&1" exit
|
|
|
|
COPY_START=`date -u +%H:%M:%S`
|
|
|
|
rm -f $LOG
|
|
|
|
# Poor man's rsync, but with some local optimisations
|
|
copy_files() {
|
|
SRC=$1
|
|
TARGET=$2
|
|
ARCHES=$3
|
|
|
|
DISKTYPES="cd dvd bd dlbd"
|
|
DIRTYPES="iso jigdo list"
|
|
|
|
# Only make torrent files and dirs for release builds
|
|
if [ "$RELEASE_BUILD"x != ""x ] ; then
|
|
DIRTYPES="$DIRTYPES bt"
|
|
fi
|
|
|
|
CURRENT=`pwd`
|
|
cd $SRC
|
|
for ARCH in $ARCHES
|
|
do
|
|
for DISKTYPE in $DISKTYPES; do
|
|
for DIRTYPE in $DIRTYPES; do
|
|
if [ -d $ARCH/$DIRTYPE-$DISKTYPE ]; then
|
|
mkdir -p -m775 $TARGET/$ARCH.tmp/$DIRTYPE-$DISKTYPE
|
|
fi
|
|
done
|
|
done
|
|
|
|
# Copy the specific files across that we want in the
|
|
# publishing dir
|
|
cd $ARCH
|
|
find . -name '*.jigdo' -o -name '*.template' \
|
|
-o -name '*.iso' \
|
|
-o -name '*.torrent' \
|
|
-o -name '*.list.gz' -o -name '*SUMS*' | \
|
|
xargs tar cf - | (cd $TARGET/$ARCH.tmp/ && tar xvf -) >> $LOG
|
|
|
|
if [ "$RELEASE_BUILD"x = ""x ] ; then
|
|
# Only populate the HEADER.html file for regular weekly
|
|
# builds; we don't want it for releases
|
|
HUM_DATE=`date -u`
|
|
sed "s/ARCH/$ARCH/g;s/DATE/$HUM_DATE/g" ~/build.${CODENAME}/weekly.html \
|
|
> $TARGET/$ARCH.tmp/HEADER.html
|
|
fi
|
|
|
|
mkdir -p $TARGET/$ARCH.tmp/log/$DATE
|
|
cp *.log $TARGET/$ARCH.tmp/log/$DATE
|
|
ln -sf $DATE $TARGET/$ARCH.tmp/log/success
|
|
|
|
# Now clean up any directories without any real content
|
|
# (i.e. empty dir, or just containing checksum files)
|
|
for dir in $TARGET/$ARCH.tmp/*-* ; do
|
|
num=`ls -l $dir | grep -v -e SUMS -e total | wc -l`
|
|
if [ $num = 0 ] ; then
|
|
rm -rf $dir
|
|
fi
|
|
done
|
|
|
|
cd ..
|
|
|
|
done
|
|
cd $CURRENT
|
|
}
|
|
|
|
copy_files $PUBDIRJIG $RSYNC_TARGET $ARCH
|
|
|
|
echo "$START: Starting $ARCH sync from $PUBDIRJIG to $RSYNC_TARGET" >> $LOG
|
|
if [ -e $RSYNC_TARGET/$ARCH ] ; then
|
|
mv -f $RSYNC_TARGET/$ARCH $RSYNC_TARGET/$ARCH.old
|
|
fi
|
|
mv $RSYNC_TARGET/$ARCH.tmp $RSYNC_TARGET/$ARCH
|
|
rm -rf $RSYNC_TARGET/$ARCH.old &
|
|
|
|
# Update the trace file now to force a sync on free.hands.com after each arch
|
|
mkdir -p $RSYNC_TARGET/trace
|
|
date -u > $RSYNC_TARGET/trace/cdimage.debian.org
|
|
|
|
# Generate the HEADER.html files in the subdirectories
|
|
~/build.${CODENAME}/generate_headers ~/build.${CODENAME}/HEADER.html.in $RSYNC_TARGET/$ARCH $ARCH $FIRMWARE
|
|
|
|
END=`date -u +%H:%M:%S`
|
|
echo "$ARCH synced across to $RSYNC_TARGET; started at $START, copying started at $COPY_START, ended at $END"
|
|
|
|
# If we're on casulana, push things to pettersson here
|
|
if [ $(hostname) = casulana ]; then
|
|
START=`date -u +%H:%M:%S`
|
|
PETOUT=${RSYNC_TARGET##${OUT_BASE}/}
|
|
echo "$START: Starting $ARCH sync from $RSYNC_TARGET/$ARCH to pettersson" >> $LOG
|
|
(cd $RSYNC_TARGET/$ARCH && find . -name '*.iso' > .iso-wanted)
|
|
rsync_to_pettersson $RSYNC_TARGET/$ARCH/ ${PETOUT}/$ARCH/ '--exclude *.iso'
|
|
rsync_to_pettersson $RSYNC_TARGET/trace/ ${PETOUT}/trace/
|
|
publish_on_pettersson ${PETOUT}/$ARCH ${PETOUT}/trace
|
|
END=`date -u +%H:%M:%S`
|
|
echo "$RSYNC_TARGET/$ARCH synced across to pettersson; started at $START, ended at $END"
|
|
fi
|
|
|
|
echo "$END: Finished" >> $LOG
|