mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-15 12:03:31 +01:00
189 lines
2.8 KiB
Bash
189 lines
2.8 KiB
Bash
#!/bin/bash
|
|
|
|
log_dpkg()
|
|
{
|
|
echo dpkg $@
|
|
/usr/bin/dpkg $@
|
|
}
|
|
|
|
run()
|
|
{
|
|
echo $@
|
|
eval $@
|
|
}
|
|
|
|
# to be used on debian prior to jessie
|
|
dpkg_verify()
|
|
{
|
|
local exitcode file pkg hashfile rfile phash hash
|
|
exitcode=0
|
|
for file in $*; do
|
|
pkg=`dpkg -S "$file" | cut -d: -f 1`
|
|
hashfile="/var/lib/dpkg/info/$pkg.md5sums"
|
|
if [ -s "$hashfile" ]; then
|
|
rfile=`echo "$file" | cut -d/ -f 2-`
|
|
phash=`grep -E "$rfile\$" "$hashfile" | cut -d\ -f 1`
|
|
hash=`md5sum "$file" | cut -d\ -f 1`
|
|
if [ "$hash" = "$phash" ]; then
|
|
echo "$file: ok"
|
|
else
|
|
echo "$file: CHANGED"
|
|
exitcode=1
|
|
fi
|
|
else
|
|
echo "$file: UNKNOWN"
|
|
exitcode=1
|
|
fi
|
|
done
|
|
return $exitcode
|
|
}
|
|
|
|
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
|
|
$dpkg --purge $1
|
|
}
|
|
|
|
cmd_query()
|
|
{
|
|
[ "$query_cmds" ] && {
|
|
local cmd installed
|
|
local id=name
|
|
if echo $query_cmds | grep -q p; then
|
|
id=pkg
|
|
query_cmds=`echo $query_cmds | sed 's/p//'`
|
|
elif echo $query_cmds | grep -q f; then
|
|
id=file
|
|
query_cmds=`echo $query_cmds | sed 's/f//'`
|
|
fi
|
|
for cmd in $query_cmds; do
|
|
case $cmd in
|
|
V)
|
|
$dpkg --verify $1
|
|
;;
|
|
i)
|
|
case $id in
|
|
file)
|
|
$dpkg -I $1;;
|
|
name)
|
|
$dpkg -s $1;;
|
|
#run apt-cache show $1;;
|
|
pkg)
|
|
$dpkg -S $1;;
|
|
esac
|
|
;;
|
|
l)
|
|
case $id in
|
|
file)
|
|
echo blah
|
|
#$dpkg -p $1;;
|
|
;;
|
|
name)
|
|
$dpkg -L $1;;
|
|
pkg)
|
|
$dpkg -c $1;;
|
|
esac
|
|
;;
|
|
a)
|
|
$dpkg -l $1
|
|
;;
|
|
esac
|
|
done
|
|
return $?
|
|
}
|
|
|
|
local p=`echo $1 | sed 's/-[0-9.-]\+$//'`
|
|
local v=`echo $1 | sed "s/^$p-*//"`
|
|
local ip=`dpkg-query -W -f '${Package}' $p >/dev/null 2>&1`
|
|
[ $? != 0 -o -z "$ip" ] && exit 1
|
|
local iv=`dpkg-query -W -f '${Version}' $p >/dev/null 2>&1`
|
|
[ "$v" ] && {
|
|
[ "$v" != "$iv" ] && {
|
|
echo "tried $1, installed version is $iv" >&2
|
|
exit 1
|
|
}
|
|
}
|
|
echo $ip-$iv
|
|
return 0
|
|
}
|
|
|
|
usage()
|
|
{
|
|
echo "usage: $myname [-h] [... misc rpm options]"
|
|
[ "$1" ] && exit $1
|
|
|
|
}
|
|
|
|
fatal()
|
|
{
|
|
echo $@ >&2
|
|
exit 1
|
|
}
|
|
|
|
# -- here we go
|
|
myname=`basename $0`
|
|
dpkg=log_dpkg
|
|
cmd=""
|
|
|
|
set -- `getopt hqiUeVfapl "$@"`
|
|
while [ "$1" != -- ]; do
|
|
case $1 in
|
|
-h)
|
|
usage 0
|
|
;;
|
|
-q)
|
|
[ "$cmd" ] && usage 1
|
|
cmd=query
|
|
;;
|
|
-V|-f|-a|-p|-l)
|
|
[ "$cmd" ] && {
|
|
[ "$cmd" = query ] || usage 1
|
|
query_cmds="$query_cmds ${1:1:1}"
|
|
}
|
|
;;
|
|
-i)
|
|
[ "$cmd" ] && {
|
|
[ "$cmd" = query ] || usage 1
|
|
query_cmds="$query_cmds ${1:1:1}"
|
|
shift
|
|
continue
|
|
}
|
|
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
|
|
|