X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=src%2Ffunctions.sh;h=06cbbc2d349b36ad8263f242569d516544b2bde9;hb=16db4b7768ea6594c7e13c4231a1a62a5b627ee1;hp=94db9b049beaeff3640cf5ee3a2c37d11580015f;hpb=1f2da037f06adc5e03b674cc57389d0ee7b30072;p=carnet-upgrade.git diff --git a/src/functions.sh b/src/functions.sh index 94db9b0..06cbbc2 100644 --- a/src/functions.sh +++ b/src/functions.sh @@ -128,11 +128,26 @@ apt_autoremove () { } } +# remove stale package information from available +# warning, in file '/var/lib/dpkg/available' +# near line 58185 package 'vim-cn': missing architecture +cleanup_available () { + log "Cleaning dpkg available file" + + available=$(mktemp /var/lib/carnet-upgrade/available.XXXXXX) + apt-cache dumpavail > $available + + dpkg --clear-avail + dpkg --update-avail $available + + rm -f $available +} + 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 @@ -186,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 @@ -500,7 +516,12 @@ install_new () { create_sources_list () { local sl sl_new sl=/etc/apt/sources.list - sl_new=/usr/share/carnet-upgrade/files/etc/apt/sources.list + sl_new=$( copy_template $sl ) + + # comment aai repository if not in use + if ! pkg srce-keyring; then + sed -i 's/^\(deb.*ftp.srce.hr\)/#\1/' $sl_new + fi # check if already installed if ! cmp $sl $sl_new >/dev/null; then @@ -516,8 +537,9 @@ create_sources_list () { `cat /etc/apt/sources.list`" fi -} + rm $sl_new +} # funkcija koja brise grupu proc remove_group_proc () { @@ -766,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 @@ -782,9 +803,14 @@ apt_listchanges () { # make a silent installation of carnet and srce keyrings install_keyrings () { - pkgadd carnet-keyring srce-keyring debian-archive-keyring + pkgadd carnet-keyring debian-archive-keyring + dpkg-reconfigure carnet-keyring debian-archive-keyring + + if pkg srce-keyring; then + pkgadd srce-keyring + dpkg-reconfigure srce-keyring + fi - dpkg-reconfigure carnet-keyring srce-keyring debian-archive-keyring apt_update } @@ -803,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 @@ -895,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 @@ -902,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 } @@ -952,8 +999,10 @@ upgrade_munin () { local config backup hostname domain # new htmldir location - mkdir -p /var/cache/munin - mv /var/www/munin /var/cache/munin/www + if [ -d /var/www/munin -a ! -e /var/cache/munin/www ]; then + mkdir -p /var/cache/munin + mv /var/www/munin /var/cache/munin/www + fi for pkg_name in munin munin-node; do pkg $pkg_name lt '1.4.5-3' || continue @@ -1014,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 @@ -1052,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}' }