desktop-base-openmamba/openmamba-update/openmamba-update

148 lines
3.7 KiB
Plaintext
Executable File

# openmamba update script
# Copyright (c) 2011 by Silvan Calarco <silvan.calarco@mambasoft.it>
#
# Released under the terms of the GNU GPLv3 License
VERSION=0.2
TEXTDOMAIN=openmamba-update
TEXTDOMAINDIR=/usr/share/locale/
INSTALL_DATE=`date +%Y%m%d-%H%M`
LOG_FILE=/var/log/openmamba-update-$INSTALL_DATE.log
KERNEL_RELEASE=`uname -r`
PROGRESS_POS=0
PKGGROUPS_DB=/usr/share/openmamba/pkggroups.db
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/mamba-tempfile
. $PKGGROUPS_DB
function pkg_parser() {
while read line; do
echo $line
done
}
function pkg_tool() {
sudo smart $@ | pkg_parser
}
echo $"\
openmamba update script - version $VERSION
Copyright (c) 2011 by Silvan Calarco <silvan.calarco@mambasoft.it>
"
script_ver=1.0
script_name="$(basename $0 2>/dev/null)"
function usage() {
echo $"Usage: $script_name [OPTION][groupname ..]
Options:
-f, --full
Perform a full update
-h, --help
Display this message.
-l, --list
List available groups and exit
-v, --verbose
Produce mode verbose output
-y, --assume-yes
Assume yes to all answers"
}
OPTS=`LANG=C getopt -o hlvyf \
--long help,list,verbose,assume-yes,full \
-n "$script_name" -- "$@"`
[ $? = 0 ] || exit 1
eval set -- "$OPTS"
while :; do
case "$1" in
-f|--full) full_update_mode=1 ;;
-h|--help)
usage; exit 0 ;;
-l) list_mode=1 ;;
-v) verbose_mode=1 ;;
-y) assume_yes=1 ;;
--) shift; break ;;
*) echo "\
(bug) -- $script_name: \`getopt' error: bad command \`$1'" ;;
esac
shift
done
while [ "$1" ]; do
installnames="$installnames $1"
shift
done
[ "$list_mode" ] && echo $"Available installation groups (*=installed,+=needs update):"
for i in `seq 1 ${#PKG_GROUPS[*]}`; do
eval instpkgs=(\$`echo ${PKG_GROUPS[$i-1]}`)
totpkgs=`expr $totpkgs + ${#instpkgs[*]}`
checkinstalled=(`rpm -q --whatprovides ${instpkgs[*]} | grep -v 'no package provides'`)
if [ ${#checkinstalled[*]} -eq 0 ]; then
[ "$list_mode" ] && echo -n " "
elif [ ${#checkinstalled[*]} -lt ${#instpkgs[*]} ]; then
[ "$list_mode" ] && echo -n "+ "
needupdategroups="${needupdategroups} `expr $i-1`"
else
[ "$list_mode" ] && echo -n "* "
fi
if [ "$list_mode" ]; then
echo -n -e "${PKG_NAMES[$i-1]}"
for j in `seq 30 -1 ${#PKG_NAMES[$i-1]}`; do
echo -n " "
done
echo -e "${PKG_DESC[$i-1]} (${#checkinstalled[*]}/${#instpkgs[*]})"
if [ "$verbose_mode" ]; then
for j in `seq 0 ${#instpkgs[*]}`; do
[ `expr $j % 5` -eq 0 ] && echo -n " "
echo -n "${instpkgs[$j]} "
[ `expr $j % 5` -eq 4 ] && echo
done
echo; echo
fi
fi
done
[ "$list_mode" ] && exit 0
#[ ! "$full_update_mode" -a ! "$installnames" ] && installnames="base"
if [ "$installnames" ]; then
for i in `seq 0 ${#PKG_GROUPS[*]}`; do
for n in $installnames; do
[ "${PKG_NAMES[$i]}" = "$n" ] && installgroups="$installgroups $i"
done
done
elif [ "$needupdategroups" ]; then
echo -n $"The following groups need to be updated: "
for n in $needupdategroups; do
echo -n "${PKG_NAMES[$n]} "
installgroups="$installgroups $n"
done
echo
[ "$assume_yes" ] || {
echo -n $"Proceed with update [Y/n]?"
read ans
[ "$ans" = "n" -o "$ans" = "N" ] && exit 0
}
fi
for i in $installgroups; do
eval instpkgs=\$`echo ${PKG_GROUPS[$i]}`
for i in $instpkgs; do
rpm -q --whatprovides $i >/dev/null || {
finalinstalllist=(${finalinstalllist[*]} $i)
}
done
done
if [ "${finalinstalllist[*]}" ]; then
[ "$verbose_mode" ] && echo $"Installing: ${finalinstalllist[*]}"
pkg_tool install -y ${finalinstalllist[*]}
exit $?
fi
exit 0