Skip to content

Instantly share code, notes, and snippets.

@dmacvicar
Created August 28, 2009 15:01
Show Gist options
  • Save dmacvicar/177019 to your computer and use it in GitHub Desktop.
Save dmacvicar/177019 to your computer and use it in GitHub Desktop.
#! /bin/sh
# by http://en.opensuse.org/User:Mvidner
# https://bugzilla.novell.com/show_bug.cgi?id=222757
usage() {
cat >&2 <<EOF
$0 version 0.2
Usage:
$0 --update ONE_NAME
$0 --remove ONE_NAME
$0 [--install [ONE_FILE]]
EOF
exit $1
}
# quoted concatenation of arguments
function mkCmd() {
printf "%q" "$1"
shift
for ARG in "$@"; do
printf " %q" "$ARG"
done
}
function check_installed()
{
rpm -q "$1" >/dev/null
return $?
}
function what_do_we_have()
{
echo "Zlm: ${HAVE_ZLM}"
echo "openSUSE: ${HAVE_OPENSUSE}"
echo "KPackagekit: ${HAVE_KPACKAGEKIT}"
echo "GPackagekit: ${HAVE_GPACKAGEKIT}"
echo "KDE running: ${KDE_FULL_SESSION}"
}
# check what we have
HAVE_ZLM=false
check_installed "zen-updater"
if [ "$?" == "0" ]
then
HAVE_ZLM=true
fi
HAVE_OPENSUSE=false
check_installed "yast2-packager"
if [ $? == 0 ]
then
HAVE_OPENSUSE=true
fi
HAVE_KPACKAGEKIT=false
check_installed "kpackagekit"
if [ "$?" == "0" ]
then
HAVE_KPACKAGEKIT=true
fi
HAVE_GPACKAGEKIT=false
check_installed "gnome-packagekit"
if [ $? == 0 ]
then
HAVE_GPACKAGEKIT=true
fi
if $HAVE_ZLM; then
if $HAVE_OPENSUSE; then
if [ -f /etc/sysconfig/sw_management ]; then
. /etc/sysconfig/sw_management
PSMS="$PREFERRED_SW_MANAGER_STACK"
fi
if [ "x$PSMS" = "xzlm" ]; then
STACK=zlm
elif [ "x$PSMS" = "xopensuse" ]; then
STACK=opensuse
else
echo >&2 "/etc/sysconfig/sw_management:PREFERRED_SW_MANAGER_STACK should contain"
echo >&2 "'zlm' or 'opensuse'"
STACK=ugh
fi
else
STACK=zlm
fi
else
if $HAVE_OPENSUSE; then
STACK=opensuse
else
echo >&2 "No package manager installed?"
STACK=ugh
fi
fi
METHOD=yast
# determine what we can use
if $HAVE_KPACKAGEKIT && [ "$KDE_FULL_SESSION" ]; then
METHOD=kpackagekit
elif $HAVE_GPACKAGEKIT && [ "$WINDOWMANAGER" == "/usr/bin/gnome" ]; then
METHOD=gnome-packagekit
else
if [ "$STACK" == "zlm" ]; then
METHOD="zlm"
else
METHOD="yast"
fi
fi
echo $METHOD
xsu() {
# a copy of xdg-su.
package-manager-su -c "$(mkCmd "$@")"
}
# do_* fall back to yast for STACK=ugh
do_update() {
case "${METHOD}" in
yast)
xsu /sbin/yast2 --update "$@"
;;
zlm)
zen-updater --no-tray "$@"
;;
kpackagekit)
kpackagekit --updates "$@"
;;
gnome-packagekit)
/usr/bin/gpk-update-viewer2 "$@"
;;
esac
}
do_remove() {
# not all support remove
case "${METHOD}" in
yast|kpackagekit|gnome-packagekit)
xsu /sbin/yast2 --remove "$@"
;;
zlm)
zen-remover "$@"
;;
esac
}
do_install() {
case "${METHOD}" in
yast)
xsu /sbin/yast2 --install "$@"
;;
zlm)
zen-installer "$@"
;;
kpackagekit)
kpackagekit "$@"
;;
gnome-packagekit)
/usr/bin/gpk-install-local-file "$@"
;;
esac
}
if [ "x$1" = "x--update" -a $# = 2 ]; then
shift
do_update "$@"
elif [ "x$1" = "x--remove" -a $# = 2 ]; then
shift
do_remove "$@"
elif [ "x$1" = "x--install" ]; then
shift
do_install "$@"
elif [ $# = 0 ]; then
do_install
else
usage 1
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment