X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=src%2Ffunctions.sh;h=06cbbc2d349b36ad8263f242569d516544b2bde9;hb=16db4b7768ea6594c7e13c4231a1a62a5b627ee1;hp=209d79aba5b861a58a3642c02f849545da7197d1;hpb=225e91339e9f16cf7e96c3be59d41c3d2927d2f1;p=carnet-upgrade.git diff --git a/src/functions.sh b/src/functions.sh index 209d79a..06cbbc2 100644 --- a/src/functions.sh +++ b/src/functions.sh @@ -201,6 +201,7 @@ remove_bloat() { fi done done + IFS="$oldifs" [ "$DEBUG" ] && echo "DEBUG: pkgs_to_remove=$pkgs_to_remove" 1>&2 # Finally, remove those if [ -n "$update_selections" ]; then @@ -925,6 +926,8 @@ upgrade_amavis () { # handle freerdius upgrade upgrade_freeradius () { + local password + pkg freeradius-aai lt 2.1.10-1 || return 0 # aai team prevents a normal upgrade @@ -932,13 +935,27 @@ upgrade_freeradius () { pkgrm freeradius-aai freeradius-ldap freeradius rm -rf /etc/freeradius/certs pkgadd freeradius-aai + + # sync localhost passwords + if pkg libpam-radius-auth && [ -f "/etc/pam_radius_auth.conf" ]; then + pkgadd libpam-radius-auth + password=$( + sed -n '/^[[:space:]]*client[[:space:]]\+localhost/,/^[[:space:]]*}/ { /^[[:space:]]*secret[[:space:]]*=[[:space:]]*\([^[:space:]]*\)/s//\1/p }' /etc/freeradius/clients.conf + ) + if [ "$password" ] \ + && ! grep -q "^127.0.0.1\(:[[:digit:]]\+\)\?[[:space:]]\+$password[[:space:]]\+" \ + /etc/pam_radius_auth.conf + then + sed -i.$backup_ext "s/^\(127.0.0.1\(:[[:digit:]]\+\)\?[[:space:]]\+\)[^[:space:]]\+\(.*\)/\1$password\3/" /etc/pam_radius_auth.conf + fi + fi } # handle mysql 5.0 to 5.1 upgrade upgrade_mysql () { - if pkg mysql-server || pkg mysql-server-5.0; then + if pkg mysql-server || pkg mysql-server-5.1; then pkgadd mysql-server - dpkg -P mysql-server-5.0 + dpkg -P mysql-server-5.1 /etc/init.d/mysql restart fi } @@ -1046,16 +1063,29 @@ check_archives_space() { fi } -check_kernel_space() { - local available_disk_space kernel_size linux_images metapkg pkg ret - available_disk_space=$(free_space /) +# calculate the list of linux-image packages from kernel-2.6-cn dependencies +get_cn_kernels() { + local cn_kernels linux_images metapkg pkg + + cn_kernels= linux_images=$(apt-cache show kernel-2.6-cn | grep ^Depends: \ | grep -o 'linux-image[^, ]*') for metapkg in $linux_images; do pkg=$(apt-cache show $metapkg | grep ^Depends: \ | grep -o 'linux-image[^, ]*' | head -1) - [ "$pkg" ] || continue + [ "$pkg" ] && cn_kernels="$cn_kernels $pkg" + done + echo $cn_kernels +} + +# check if there is enough space on / for the new kernel package +check_kernel_space() { + local available_disk_space kernel_size linux_images pkg ret + available_disk_space=$(free_space /) + + linux_images=$( get_cn_kernels ) + for pkg in $linux_images; do kernel_size=$(installed_size $pkg) ret=$? [ $ret -eq 0 ] && break @@ -1084,6 +1114,82 @@ check_kernel_space() { fi } +# free some space on / partition by cleaning old unused kernels +clean_old_kernels() { + local installed keep pkg keep remove delete name dialog_list selection + + # find all installed kernels + installed=$( + dpkg -l | egrep '^ii linux-image-[0-9]+[.][0-9]+[.][0-9]+-' \ + | awk '{print $2}' + ) + log "Found kernel packages: $installed" + + # leave current and new kernels + keep="linux-image-$(uname -r) $(get_cn_kernels)" + log "Keep kernel packages: $keep" + + # check what to remove + remove= + for pkg in $installed; do + delete=yes + for name in $keep; do + [ "$pkg" = "$name" ] && delete= + done + if [ "$delete" = yes ]; then + remove="$remove $pkg" + fi + done + log "Obsolete kernel packages: $remove" + + if [ "$remove" ]; then + for pkg in $remove; do + dialog_list="$dialog_list $pkg '' off" + done + + # user selects the packages to delete + selection=$( mktemp /var/lib/carnet-upgrade/selection.XXXXXX ) + eval LC_MESSAGES=hr_HR dialog --nocancel --backtitle \""$title"\" \ + --checklist \""$msg_remove_kernels"\" 20 75 6 $dialog_list 2>$selection + + selected=$( tr -d \" < $selection ) + rm -f $selection + + if [ "$selected" ]; then + log "Removing kernel packages: $selected" + pkgrm $selected + fi + fi +} + +# prevent sysv-rc migration problems +clean_initd_packages() { + local list removed pkg dialog_list selection selected + + list=$( dpkg -S /etc/init.d/\* | grep -v ^diversion | cut -d: -f1 | sort -u ) + removed=$( dpkg -l $list | sed -n 's/^r.[[:space:]]\+\([^[:space:]]\+\).*/\1/p' ) + log "Found removed packages: $removed" + + if [ "$removed" ]; then + for pkg in $removed; do + dialog_list="$dialog_list $pkg '' off" + done + + # user selects the packages to delete + selection=$( mktemp /var/lib/carnet-upgrade/selection.XXXXXX ) + eval LC_MESSAGES=hr_HR dialog --nocancel --backtitle \""$title"\" \ + --checklist \""$msg_remove_initd"\" 20 75 6 $dialog_list 2>$selection + + selected=$( tr -d \" < $selection ) + rm -f $selection + + if [ "$selected" ]; then + log "Purging packages: $selected" + dpkg -P $selected + fi + fi +} + free_space() { df --portability --block-size=1M "$1" | tail -1 | awk '{print $4}' }