live-build/examples/cron/snapshots.sh

157 lines
3.9 KiB
Bash
Executable File

#!/bin/sh
# Static variables
if [ -n "${1}" ]
then
PACKAGES="${@}"
else
PACKAGES="live-helper live-initramfs live-initscripts live-webhelper"
fi
DEBEMAIL="debian-live-devel@lists.alioth.debian.org"
EMAIL="debian-live-devel@lists.alioth.debian.org"
DEBFULLNAME="Debian Live Autobuilder"
NAME="Debian Live Autobuilder"
KEY="FDB8D39A"
export DEBEMAIL EMAIL DEBFULLNAME NAME KEY
TEMPDIR="$(mktemp -d -t debian-live.XXXXXXXX)"
SERVER="/mnt/daniel1/srv/debian-unofficial/live/debian"
LOGFILE="${SERVER}/build.log"
DATE_START="$(date -R)"
# Checking lock file
if [ -f "${SERVER}"/Archive-Update-in-Progress ]
then
echo "E: locked."
exit 1
fi
# Creating server directory
if [ ! -d "${SERVER}" ]
then
mkdir -p "${SERVER}"
fi
# Creating lock trap
trap "test -f ${SERVER}/Archive-Update-in-Progress && rm -f ${SERVER}/Archive-Update-in-Progress; exit 0" 0 1 2 3 9 15
# Creating lock file
echo "${DATE_START}" > "${SERVER}"/Archive-Update-in-Progress
echo "$(date +%b\ %d\ %H:%M:%S) ${HOSTNAME} live-snapshots: begin build." >> "${LOGFILE}"
# Processing packages
for PACKAGE in ${PACKAGES}
do
# Cleaning build directory
if [ -d "${TEMPDIR}" ]
then
rm -rf "${TEMPDIR}"
fi
# Creating build directory
mkdir -p "${TEMPDIR}"
# Getting sources
cd "${TEMPDIR}"
git clone git://git.debian.org/git/users/daniel/${PACKAGE}.git
# Getting version
cd "${TEMPDIR}"/${PACKAGE}
VERSION="$(dpkg-parsechangelog | awk '/Version:/ { print $2 }' | awk -F- '{ print $1 }')"
# Getting revision
cd "${TEMPDIR}"/${PACKAGE}
REVISION="$(git log | grep -m1 Date | awk -FDate: '{ print $2 }' | sed -e 's/+.*$//')"
REVISION="$(date -d "${REVISION}" +%Y%m%d.%H%M%S)"
# Check for existing package
if [ ! -f "${SERVER}"/${PACKAGE}_${VERSION}+${REVISION}.dsc ] || [ "${1}" = "--force" ]
then
UPDATE_INDICES="true"
# Renaming directory
mv "${TEMPDIR}"/${PACKAGE} "${TEMPDIR}"/${PACKAGE}-${VERSION}+${REVISION}
# Building package
cd "${TEMPDIR}"/${PACKAGE}-${VERSION}+${REVISION}
rm -rf .git
dch --force-bad-version --newversion ${VERSION}+${REVISION} --distribution UNRELEASED Autobuild snapshot of git ${REVISION}.
dpkg-buildpackage -rfakeroot -k${KEY} -sa
# Removing sources
rm -rf "${TEMPDIR}"/${PACKAGE}-${VERSION}+${REVISION}
# Creating directory
mkdir -p "${SERVER}"
# Removing old packages
if [ -f "${SERVER}"/"${PACKAGE}"*.changes ]
then
for FILE in $(awk {'print $5'} "${SERVER}"/"${PACKAGE}"*.changes | grep -e ".*\.deb$" -e ".*\.diff.gz$" -e ".*\.dsc$" -e ".*\.tar.gz$" -e ".*\.udeb$")
do
rm -f "${SERVER}"/"${FILE}"
done
fi
rm -f "${SERVER}"/"${PACKAGE}"*.changes
# Installing new packages
for FILE in $(awk {'print $5'} "${TEMPDIR}"/"${PACKAGE}"*.changes | grep -e ".*\.deb$" -e ".*\.diff.gz$" -e ".*\.dsc$" -e ".*\.tar.gz$" -e ".*\.udeb$")
do
mv "${TEMPDIR}"/"${FILE}" "${SERVER}"
done
mv "${TEMPDIR}"/"${PACKAGE}"*.changes "${SERVER}"
else
# Remove sources
rm -rf "${TEMPDIR}"/${PACKAGE}
fi
done
if [ "${UPDATE_INDICES}" = "true" ]
then
LAST_UPDATE="$(date -R)"
cd "${SERVER}"
apt-ftparchive packages . /dev/null > Packages
gzip -9 -c Packages > Packages.gz
bzip2 -9 -c Packages > Packages.bz2
apt-ftparchive sources . /dev/null > Sources
gzip -9 -c Sources > Sources.gz
bzip2 -9 -c Sources > Sources.bz2
if [ -f release.conf ]
then
apt-ftparchive -c release.conf -o APT::FTPArchive::Release::Description="Last updated: `date -R`" release ./ >> Release.tmp
mv Release.tmp Release
rm -f Release.gpg
gpg --default-key ${KEY} --quiet --output Release.gpg -ba Release
fi
fi
# Reading timestamp
if [ -z "${LAST_UPDATE}" ]
then
LAST_UPDATE="$(awk -F: '/Last update:/ { print $2":"$3":"$4 }' ${SERVER}/LAST_BUILD | sed -e 's/ //')"
fi
# Writing timestamp
cat > "${SERVER}"/LAST_BUILD << EOF
Last run begin: ${DATE_START}
Last run end: $(date -R)
Last update: ${LAST_UPDATE}
EOF
# Removing build directory
rm -rf "${TEMPDIR}"
echo "$(date +%b\ %d\ %H:%M:%S) ${HOSTNAME} live-snapshots: end build." >> "${LOGFILE}"