diff options
Diffstat (limited to 'examples/cron/snapshots.sh')
-rwxr-xr-x | examples/cron/snapshots.sh | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/examples/cron/snapshots.sh b/examples/cron/snapshots.sh new file mode 100755 index 000000000..4c6290fde --- /dev/null +++ b/examples/cron/snapshots.sh @@ -0,0 +1,183 @@ +#!/bin/sh -e + +# Static variables +if [ -n "${1}" ] +then + PACKAGES="${@}" +else + PACKAGES="live-helper live-initramfs live-initscripts live-webhelper live-magic debian-unofficial-archive-keyring" +fi + +DEBEMAIL="debian-live@lists.debian.org" +EMAIL="debian-live@lists.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)" +HOST="$(hostname)" + +# 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 HUP INT QUIT KILL TERM + +# Creating lock file +echo "${DATE_START}" > "${SERVER}"/Archive-Update-in-Progress + +echo "$(date +%b\ %d\ %H:%M:%S) ${HOST} 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}" + + case "${PACKAGE}" in + debian-unofficial-archive-keyring) + git clone git://git.debian.net/git/${PACKAGE}.git + ;; + + live-magic) + git clone git://git.debian.org/git/users/lamby-guest/${PACKAGE}.git + ;; + + *) + git clone git://git.debian.org/git/users/daniel/${PACKAGE}.git + ;; + esac + + # Getting version + cd "${TEMPDIR}"/${PACKAGE} + + for BRANCH in debian + do + if [ -n "$(git branch -r | grep ${BRANCH})" ] + then + git checkout -b ${BRANCH} origin/${BRANCH} || true + fi + done + + 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 }' | awk '{ print $1 ",", $3, $2, $5, $4, $6 }')" + 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}" + +# Fixing permissions +chmod 0644 "${SERVER}"/* +chmod 0766 "${SERVER}"/*.sh + +echo "$(date +%b\ %d\ %H:%M:%S) ${HOST} live-snapshots: end build." >> "${LOGFILE}" |