X-Git-Url: http://ftp.carnet.hr/pub/carnet-debian/scm?a=blobdiff_plain;f=src%2Ffunctions.sh;h=6f85840ef4085107bfcc659bac3aa79ec6ea257b;hb=50191049f5c1d7b823bc4a018e989bdd6596d0ed;hp=3830ea5dbf36cd8dade2b4e49a8d61707572303d;hpb=ee97dd6a97fcb7ebf5f48f28fabcd18af9fcc408;p=carnet-upgrade.git diff --git a/src/functions.sh b/src/functions.sh index 3830ea5..6f85840 100644 --- a/src/functions.sh +++ b/src/functions.sh @@ -303,7 +303,7 @@ what_upgrade () { # funkcija za ispis paketa koje treba upgradeati check_upgrade () { local upgrade - upgrade="`what_upgrade`" + upgrade=${1:-"`what_upgrade`"} if [ "$upgrade" ]; then notice " @@ -323,6 +323,29 @@ Nakon toga ponovno pozovite ovu skriptu." fi } +# try to check if we are using the latest version of carnet-upgrade script +check_my_version () { + local packages latest_version + + packages=$(mktemp /var/lib/carnet-upgrade/Packages.XXXXXX) + if wget -q -O$packages $packages_uri; then + latest_version=$(sed -ne \ + '/Package: carnet-upgrade/,/Description:/{ /Version: /s///p }' \ + $packages) + rm -f $packages + + if [ "$latest_version" ]; then + log "Running carnet-upgrade version is $version" + log "Latest carnet-upgrade version is $latest_version" + if dpkg --compare-versions "$version" lt "$latest_version"; then + check_upgrade " carnet-upgrade" + else log "Already using the latest carnet-upgrade version."; fi + else log "Failed to get latest version, skipping check."; fi + else log "Failed to download Packages file, skipping check."; fi + + rm -f $packages +} + # if apache is installed make sure it's version 2 check_apache_version () { @@ -340,6 +363,32 @@ Nakon toga ponovno pozovite ovu skriptu." fi } +# if grsec is installed make sure it is fresh +check_grsec_kernel () { + local ver=`uname -r` + + log "Kernel version: $ver" + if [ "$ver" = "${ver%-grsec}" ]; then + # not grsec variant + return 0 + fi + + if [ "$ver" = "${ver#2.6.2[4-9]}" ]; then + # kernel too old + notice " +Prije prelaska na Debian Etch potrebno je napraviti nadogradnju na najnoviji grsec kernel. + +Pokrenite: + # apt-get update + # apt-get install kernel-2.6-cn + # reboot + +Nakon toga ponovno pozovite ovu skriptu." + log "carnet-upgrade aborted, kernel upgrade needed." + exit 1 + fi +} + upgrade () { local i to_install packages case "$1" in @@ -678,10 +727,12 @@ upgrade_apache2 () { upgrade_amavis () { local conf - # remove init script diversion - if [ -L /etc/init.d/amavis -a -f /etc/init.d/amavis.amavisd-new ]; then - rm -vf /etc/init.d/amavis - dpkg-divert --quiet --remove /etc/init.d/amavis + # remove init script diversion before upgrade + if pkg amavisd-cn lt 3:2.4.2-4; then + if [ -L /etc/init.d/amavis -a -f /etc/init.d/amavis.amavisd-new ]; then + rm -vf /etc/init.d/amavis + dpkg-divert --remove /etc/init.d/amavis + fi fi # move old config aside @@ -699,6 +750,11 @@ upgrade_amavis () { 's/^\(clamd.*\)5.clamav.log$/\14\tsocket/g' \ /etc/init.d/amavisd-cn || true + # check if link got lost + if pkg amavisd-cn && [ ! -L /etc/init.d/amavis ]; then + apt-get install --reinstall --yes amavisd-cn + fi + # start new packages /etc/init.d/amavis restart } @@ -824,6 +880,11 @@ check_archives_space() { available_disk_space=$(free_space /var/cache/apt/archives/) archives_size=$(download_size dist-upgrade) + if [ $? -ne 0 ]; then + log "Failed to get download size, skipping check." + return 0 + fi + log "Archives space: ${available_disk_space}MB" log "Download size: ${archives_size}MB" @@ -839,6 +900,11 @@ check_kernel_space() { available_disk_space=$(free_space /) kernel_size=$(installed_size kernel-2.6-cn) + if [ $? -ne 0 ]; then + log "Failed to get installed size, skipping check." + return 0 + fi + log "Free space in /: ${available_disk_space}MB" log "Kernel size: ${kernel_size}MB" @@ -862,19 +928,32 @@ free_space() { download_size() { local size - size=$(LC_ALL=C apt-get --yes --print-uris "$@" \ - | sed -n '/^Need to get / {s///; s/B\/.*//; p}') + size=$(LC_ALL=C apt-get --yes --print-uris "$@" | grep '^Need to get ') - size_to_mb $size + if [ $? -ne 0 ]; then + log "Failed to get download size for 'apt-get $@'." + return 1 + fi + + size=${size#Need to get } + size=${size%%B*} + + size_to_mb "${size}B" } installed_size() { local package size package=$1 - size=$(apt-cache show $package \ - | awk '$1 == "Installed-Size:" {print $2; exit}') + size=$(apt-cache show $package | grep '^Installed-Size:') + + if [ $? -ne 0 ]; then + log "Failed to get installed size for '$package'." + return 1 + fi + + size=${size#*: } - size_to_mb "${size}k" + size_to_mb "${size}kB" } size_to_mb() { @@ -884,16 +963,16 @@ size_to_mb() { size=0; fi - if [ "${size%k}" != "$size" ]; then - size=$(round ${size%k}) + if [ "${size%kB}" != "$size" ]; then + size=$(round ${size%kB}) size=$(($size/1024+1)) - elif [ "${size%M}" != "$size" ]; then - size=$(round ${size%M}) - elif [ "${size%G}" != "$size" ]; then - size=$(round ${size%G}) + elif [ "${size%MB}" != "$size" ]; then + size=$(round ${size%MB}) + elif [ "${size%GB}" != "$size" ]; then + size=$(round ${size%GB}) size=$(($size*1024)) - elif [ "${size%[0-9]}" != "$size" ]; then - size=$(round $size) + elif [ "${size%[0-9]B}" != "$size" ]; then + size=$(round ${size%B}) size=$(($size/1024/1024+1)) else log "unrecognized size unit: $size"