diff options
| -rwxr-xr-x | apt-offline | 91 | 
1 files changed, 42 insertions, 49 deletions
diff --git a/apt-offline b/apt-offline index 46e39d7..553b989 100755 --- a/apt-offline +++ b/apt-offline @@ -1,8 +1,8 @@  #! /bin/bash -APT_SOURCES="./sources" -APT_PKGS="./pkgs" +APT_SRCS=./srcs +APT_PKGS=./pkgs -LISTS_DST="/var/lib/apt/lists/" +LISTS_DST=/var/lib/apt/lists/  MORE_PKGS=$@  RED="\033[0;31m" @@ -12,67 +12,60 @@ fail () {      echo -e "\n   ${RED}@2-#*% ==>>  $1${RESET}" && [ ! -z "$2" ] && exit $2  } -clean_empty () { -    for I in `ls`; do -        if [ `stat -c %b $I` -eq 0 ]; then -            echo "  remove empty file $I" && rm $I -            continue -        fi -    done +rm_empty () { +    if [ $(stat -c %b $1) -eq 0 ]; then +        echo "  remove empty file $1" && rm $1 +    fi  }  offline () { -    if [ -z `which apt-get 2>/dev/null` ]; then fail "apt-get missing"; fi -    if [ $UID != 0 ]; then fail "must be root"; fi -    PKGS=`ls ${APT_PKGS}/* 2>/dev/null` -    if [ ! -z "${PKGS}" ]; then -        echo "  *** install pkgs"; -        for I in ${PKGS}; do -            dpkg -i --force-depends $I && rm $I || fail "unable to install $I" -        done -    fi +    if [ -z $(which apt-get 2>/dev/null) ]; then fail "apt-get missing" 1; fi +    if [ $UID != 0 ]; then fail "must be root" 1; fi +    echo "  *** install pkgs"; +    for pkg in $(ls ${APT_PKGS}/* 2>/dev/null); do +        dpkg -i --force-depends $pkg && rm $pkg || fail "unable to install $I" +    done      apt-get clean -    SRC_LIST=`ls ${APT_SOURCES}/* 2>/dev/null` -    if [ ! -z "${SRC_LIST}" ]; then -        echo "  *** install sources lists"; -        for I in ${SRC_LIST}; do -            RET=`file -bi $I | gawk '{ print $1}'` -            if [ "$RET" == "application/x-bzip2;" ]; then -                bunzip2 -q $I && mv $I.out $I -                if [ `stat -c %b $I` -eq 0 ]; then -                    echo "remove empty file $I" && rm $I -                    continue -                fi -            fi -            mv $I $LISTS_DST -        done -    fi +    echo "  *** install sources lists"; +    for list in $(ls ${APT_SRCS}/* 2>/dev/null); do +        RET=$(file -bi $list | gawk '{ print $1}') +        if [ "$RET" == "application/x-bzip2;" ]; then +            bunzip2 -q $list && mv $list.out $list +            rm_empty $list +        fi +        [ -f $list ] && mv $list $LISTS_DST +    done      apt-get check -    echo "  *** build wget lists" -    apt-get -qq --print-uris update | awk '{print "wget --quiet -O " $2 " " $1}' > ./wget-update -    apt-get -qq --print-uris dist-upgrade | awk '{print "wget --quiet -O " $2 " " $1}' > ./wget-upgrade +    echo "  *** build download lists" +    apt-get -qq --print-uris update | awk '{print $2 " " $1}' > ./update-urls +    apt-get -qq --print-uris dist-upgrade | awk '{print $2 " " $1}' > ./upgrade-urls      for name in $MORE_PKGS; do -        apt-get -qq -d --print-uris install $name | awk '{print "wget --quiet -O " $2 " " $1}' > ./wget-upgrade; +        apt-get -qq -d --print-uris install $name | awk '{print $2 " " $1}' > ./upgrade-urls; +    done +} + +download() { +    cat $1 | while read line; do +        out=$(echo $line | cut -d' ' -f1); +        url=$(echo $line | cut -d' ' -f2 | sed "s/'//g"); +        echo " get $url" && curl -s -o$out $url || fail "unable to download $url" +        rm_empty $out      done  }  online() { -    if [ -z `which wget 2>/dev/null` ]; then fail "wget missing"; fi -    rm -fr $APT_SOURCES 2>/dev/null && mkdir $APT_SOURCES && cd $APT_SOURCES && sh -x ../wget-update; clean_empty && cd .. || fail "unable to download sources" -    rm -fr $APT_PKGS 2>/dev/null && mkdir $APT_PKGS && cd $APT_PKGS && sh -x ../wget-upgrade; clean_empty && cd .. || fail "unable to download pkgs" +    if [ -z $(which curl 2>/dev/null) ]; then fail "curl missing" 1; fi +    for dir in $APT_SRCS $APT_PKGS; do +        rm -fr $dir 2>/dev/null && mkdir $dir || fail "unable to create empty dir $dir" 1 +    done +    cd $APT_SRCS && download ../update-urls && cd .. +    cd $APT_PKGS && download ../upgrade-urls && cd ..  } -ping -q -W 1 -c 1 google.com >/dev/null +ping -q -W 1 -c 1 debian.org >/dev/null  if [ $? -eq 0 ]; then      online  else      offline  fi -#OPTIONS="offline online" -#select OPT in $OPTIONS; do -#    if [ "$OPT" = "offline" ]; then offline && break; fi; -#    if [ "$OPT" = "online" ]; then online && break; fi; -#    break; -#done -  | 
