--- /dev/null
+#!/bin/sh
+set -e
+
+# Defaults
+CLASS=
+INSTANCE=
+REALM=
+RECIPIENTS=
+SIG="$(hostname -f)"
+OPCODE=auto
+ZAUTH=
+
+# Read configuration
+. /etc/apt-zephyr.conf
+
+package ()
+{
+ package=$1
+ oldver=$2
+ cmp=$3
+ newver=$4
+
+ if [ "$newver" = '-' ] && [ "$oldver" = '-' ]; then
+ echo "Purging $package"
+ elif [ "$newver" = '-' ]; then
+ echo "Removing $package $oldver"
+ elif [ "$oldver" = '-' ]; then
+ echo "Installing $package $newver"
+ elif [ "$cmp" = '<' ]; then
+ echo "Upgrading $package $oldver to $newver"
+ elif [ "$cmp" = '=' ]; then
+ echo "Reinstalling $package $newver"
+ elif [ "$cmp" = '>' ]; then
+ echo "Downgrading $package $oldver to $newver"
+ else
+ echo "I'm confused: $*"
+ fi
+}
+
+read -r line
+case "$line" in
+ 'VERSION 2')
+ while read -r line && [ -n "$line" ]; do :; done
+ while read -r package oldver cmp newver action; do
+ case "$action" in
+ '**CONFIGURE**' | '**REMOVE**')
+ package "$package" "$oldver" "$cmp" "$newver"
+ ;;
+ '**ERROR**')
+ echo "ERROR on $package $newver"
+ ;;
+ esac
+ done
+ ;;
+ 'VERSION *')
+ echo "$0: unrecognized version: $line"
+ ;;
+ '')
+ ;;
+ *)
+ oldpkgs=$(mktemp -t "apt-zephyr-old.XXXXXX") || exit $?
+ newpkgs=$(mktemp -t "apt-zephyr-new.XXXXXX") || exit $?
+ (echo "$line"; cat) | xargs -r -d '\n' dpkg-deb -W | sort -o "$newpkgs"
+ cut -f 1 "$newpkgs" | xargs -r -d '\n' dpkg-query -W | \
+ sort -o "$oldpkgs"
+ join -t ' ' -j 1 -e '-' "$oldpkgs" "$newpkgs" | \
+ while IFS=' ' read -r package oldver newver; do
+ if dpkg --compare-versions "$oldver" lt "$newver"; then
+ package "$package" "$oldver" '<' "$newver"
+ elif dpkg --compare-versions "$oldver" eq "$newver"; then
+ package "$package" "$oldver" '=' "$newver"
+ else
+ package "$package" "$oldver" '>' "$newver"
+ fi
+ done
+ rm -f "$oldpkgs" "$newpkgs"
+ ;;
+esac | \
+ zwrite ${CLASS:+-c "$CLASS"} ${INSTANCE:+-i "$INSTANCE"} ${REALM:+-r "$REALM"} ${SIG:+-s "$SIG"} ${OPCODE:+-O "$OPCODE"} ${ZAUTH:--d} ${RECIPIENTS:+$RECIPIENTS}