#!/bin/sh set -e # Defaults CLASS= INSTANCE= REALM= RECIPIENTS= SIG="$(hostname -f)" OPCODE=auto ZAUTH= # Read configuration . /etc/apt-zephyr.conf send_zephyr () { zwrite \ ${CLASS:+-c "$CLASS"} \ ${INSTANCE:+-i "$INSTANCE"} \ ${REALM:+-r "$REALM"} \ ${SIG:+-s "$SIG"} \ ${OPCODE:+-O "$OPCODE"} \ ${ZAUTH:--d} \ ${RECIPIENTS:+$RECIPIENTS} } 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 } parse_v1 () { oldpkgs=$(mktemp -t "apt-zephyr-old.XXXXXX") || exit $? newpkgs=$(mktemp -t "apt-zephyr-new.XXXXXX") || exit $? 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" } parse_v2 () { 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 } pre_install_pkgs () { read -r line case "$line" in 'VERSION 2') parse_v2 | send_zephyr ;; 'VERSION *') echo "$0: unrecognized version: $line" | send_zephyr ;; '') ;; *) (echo "$line"; cat) | parse_v1 | send_zephyr ;; esac } post_invoke () { echo 'Done.' | send_zephyr } if [ "$1" = "--pre-install-pkgs" ]; then pre_install_pkgs elif [ "$1" = "--post-invoke" ]; then post_invoke else echo "usage: $0 {--pre-install-pkgs | --post-invoke}" >&2 echo "(Hint: you probably need to update /etc/apt/apt.conf.d/90zephyr.)" >&2 fi exit 0