#!/bin/sh # 2010 (c) Etersoft www.etersoft.ru # Author: Vitaly Lipatov <lav@etersoft.ru> # Public domain # load common functions, compatible with local and installed script . `dirname $0`/../share/eterbuild/functions/common load_mod gettext if [ "$1" = "-h" ]; then echog "aptU - update package and all it requires" echo echog "Usage: aptU [-v] [-l] [package(s)]" echo echog "Options:" echog " -v verbose" echog " -l print list of required packages" exit 0 fi if [ "$1" = "-v" ] ; then shift else VERBOSE=">/dev/null" fi if [ "$1" = "-l" ] ; then LISTFLAG=1 shift fi export LC_ALL=C # Translate rpm requires to package names rpmreqs_to_apt() { local REQLIST="$@" local PACKAGES=`$SUDO apt-get install --print-uris $REQLIST | grep "is already the newest version" | cut -f1 -d" " | sort -u` estrlist exclude "$ALREADYHANDLEDAPT" "$PACKAGES" } install_by_requires() { local RLIST="$@" docmd $SUDO apt-get install --no-remove $RLIST local ERROR=$? REQLIST="$RLIST" if [ "$ERROR" != "0" ] ; then local SKIPPACKAGES=`$SUDO apt-get install --print-uris $RLIST 2>&1 | grep "is a virtual package provided by" | cut -f2 -d" " | sort -u` if [ -z "$SKIPPACKAGES" ] ; then echog "Can't autohandle error" return 1 fi echog "Autoskip $SKIPPACKAGES, try again..." RLIST=$(estrlist exclude "$SKIPPACKAGES" "$RLIST") install_by_requires "$RLIST" fi } ALREADYHANDLEDAPT="bash sh apt rpm filesystem alt-gpgkeys glibc-core glibc-locales" ALREADYHANDLEDRPM="rpmlib.* rtld libgcc_s\..* libstdc\+\+.* libc\.so.* ld-linux\.so.* libpthread\.so.* librt\.so.*" install_packages() { local ERROR= local LIST="$@" test -n "$LIST" || { echog "There is no more packages to install" ; return ; } docmd $SUDO apt-get install $LIST ALREADYHANDLEDAPT="$ALREADYHANDLEDAPT $LIST" REQLIST="$($ETERBUILDBIN/rpmreqs $LIST)" REQLIST=$(estrlist reg_exclude "$ALREADYHANDLEDRPM" "$REQLIST") test -n "$REQLIST" || { echog "There is no more req packages to install" ; return ; } install_by_requires $REQLIST ALREADYHANDLEDRPM="$ALREADYHANDLEDRPM $REQLIST" echog "Translate rpm requires to package names..." install_packages $(rpmreqs_to_apt $REQLIST) } install_packages $@ [ -n "$LISTFLAG" ] && echo "Possible requires packages for '$@': $ALREADYHANDLEDAPT"