diff --git a/scripts/dpm.sh b/scripts/dpm.sh new file mode 100644 index 00000000..1ae96ddf --- /dev/null +++ b/scripts/dpm.sh @@ -0,0 +1,99 @@ +#!/bin/sh + +myname=`basename $0` +dpkg=/usr/bin/dpkg + +usage() +{ + echo "usage: $myname [-h] [... misc rpm options]" + [ "$1" ] && exit $1 + +} + +fatal() +{ + echo $@ >&2 + exit 1 +} + +cmd_install() +{ + local n=`basename $1` + n=`echo $n | sed "s/_[0-9.-]\+_amd64.deb//"` + /bin/bash $0 -q $n >/dev/null 2>&1 && { + fatal "$n is already installed (`/bin/bash $0 -q $n`)" + } + cmd_update $1 +} + +cmd_update() +{ + $dpkg --dry-run -i $1 || fatal "Test-installation failed." + $dpkg -i $1 || fatal "Installation failed." +} + +cmd_erase() +{ + $dpkg -r $1 +} + +cmd_query() +{ + [ "$query_cmd" ] && { + eval cmd_query_\$query_cmd $1 + return $? + } + + local p=`echo $1 | sed 's/-[0-9.-]\+$//'` + local v=`echo $1 | sed "s/$p-*//"` + local ip=`dpkg-query -W -f '${Package}' $p` + [ $? != 0 ] && exit 1 + local iv=`dpkg-query -W -f '${Version}' $p` + [ "$v" ] && { + [ "$v" != "$iv" ] && { + echo "tried $1, installed version is $iv" >&2 + exit 1 + } + } + echo $ip-$iv + return 0 +} + +set -- `getopt hqiUe "$@"` + +cmd="" + +while [ "$1" != -- ]; do +case $1 in + -h) + usage 0 + ;; + -q) + [ "$cmd" ] && usage 1 + cmd=query + ;; + -i) + [ "$cmd" ] && usage 1 + cmd=install + ;; + -U) + [ "$cmd" ] && usage 1 + cmd=update + ;; + -e) + [ "$cmd" ] && usage 1 + cmd=erase + ;; + *) + usage 1 + ;; +esac +shift +done +shift + +[ $# != 1 ] && usage 1 +[ "$cmd" ] || usage 1 + +eval cmd_\$cmd $1 +