X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=src%2Ffunctions.sh;h=06cbbc2d349b36ad8263f242569d516544b2bde9;hb=16db4b7768ea6594c7e13c4231a1a62a5b627ee1;hp=83fc87d6a0c3a456c8dd0d673bf7361a3cf24af0;hpb=1e7fccdeae88ff8dd143dd1c38083f8c5fcce67b;p=carnet-upgrade.git diff --git a/src/functions.sh b/src/functions.sh index 83fc87d..06cbbc2 100644 --- a/src/functions.sh +++ b/src/functions.sh @@ -147,7 +147,7 @@ remove_x() { LC_MESSAGES=hr_HR dialog --backtitle "$title" --yesno "$msg_remove_x" 18 75 if [ $? -eq 0 ]; then log "Removing X Window System" - pkgrm x11-common + pkgrm xserver-xorg else log "Skipping X Window System removal" fi @@ -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 @@ -787,15 +788,14 @@ apt_listchanges () { case $command in disable) if [ -f $file ]; then - dpkg-divert --local --rename --divert $file.$backup_ext \ + dpkg-divert --local --rename --divert $file.disabled \ --add $file || true fi ;; enable) - if [ -f $file.$backup_ext ]; then - dpkg-divert --remove $file || true - fi + # cleanup the diversion even if the file is already removed + dpkg-divert --rename --remove $file || true ;; esac done @@ -829,15 +829,20 @@ is_orphaned () { # remove old and unused libraries remove_orphaned () { - local package + local package remove apt_autoremove + remove= for package in $orphaned_packages; do if is_orphaned $package; then - pkgrm $package + remove="$remove $package" fi done + + if [ "$remove" ]; then + pkgrm $remove + fi } # monit it causing problems for postinst scripts @@ -921,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 @@ -928,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 } @@ -1042,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 @@ -1080,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}' }