Handle upgrade for libpam-radius-auth.
[carnet-upgrade.git] / src / functions.sh
index 90eed9d..6beb99b 100644 (file)
@@ -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
@@ -500,7 +515,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 +536,9 @@ create_sources_list () {
 
 `cat /etc/apt/sources.list`"
     fi
-}
 
+    rm $sl_new
+}
 
 # funkcija koja brise grupu proc
 remove_group_proc () {
@@ -721,6 +742,7 @@ restore_configs () {
 
   if pkg amavisd-cn lt 3:2.6.5; then
      restore_file /etc/init.d/amavisd-cn
+     rm -f /etc/init.d/amavisd-cn.$backup_ext
   fi
 
   if pkg console-tools lt 1:0.2.3dbs-69.1; then
@@ -732,6 +754,10 @@ restore_configs () {
      restore_file /etc/issue.net
   fi
 
+  if pkg slapd lt 2.4.23-7.2; then
+     restore_file /etc/default/slapd
+  fi
+
   # dovecot won't start with these options
   if pkg dovecot-cn && pkg dovecot-common lt 1:1.2.15-7; then
      sed -i 's/^\( *\)\(sieve\(_storage\)\?=.*\)/\1#\2/' \
@@ -761,15 +787,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
@@ -777,10 +802,14 @@ apt_listchanges () {
 
 # make a silent installation of carnet and srce keyrings
 install_keyrings () {
-  pkgadd carnet-keyring srce-keyring debian-archive-keyring
-  pkgupgrade dpkg apt debconf python-apt dpkg-dev
+  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
 }
 
@@ -799,15 +828,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
@@ -823,9 +857,19 @@ disable_monit () {
     apt-get remove --yes monit
     # stop the binary
     pkill -9 monit || true
+    # move away init for insserv to work
+    mv /etc/init.d/monit /var/lib/carnet-upgrade/
   fi
 }
 
+# allow monit to run again
+enable_monit () {
+  if [ -f /var/lib/carnet-upgrade/monit ]; then
+    mv /var/lib/carnet-upgrade/monit /etc/init.d/monit
+    pkgadd monit-cn
+  fi 
+}
+
 # check which of the given packages are installed
 grep_installed () {
   local package installed
@@ -852,7 +896,7 @@ pkgupgrade () {
 
 # make a silent upgrade to new libc6
 upgrade_libc () {
-  DEBIAN_FRONTEND=noninteractive pkgupgrade libc6 libc6-dev tzdata udev
+  DEBIAN_FRONTEND=noninteractive pkgupgrade libc6 libc6-dev tzdata
 }
 
 # upgrade apache2/php5
@@ -881,56 +925,37 @@ upgrade_amavis () {
 
 # handle freerdius upgrade
 upgrade_freeradius () {
-  local template config_new password realm hostname basedn
+  local password
 
-  pkg freeradius-aai lt 2.1.3-0lenny0 || return 0
+  pkg freeradius-aai lt 2.1.10-1 || return 0
 
-  # aai team prevents a clean upgrade
+  # aai team prevents a normal upgrade
   cp -av /etc/freeradius /etc/freeradius.$backup_ext
   pkgrm freeradius-aai freeradius-ldap freeradius
+  rm -rf /etc/freeradius/certs
   pkgadd freeradius-aai
-}
-
-# prepare for slapd upgrade (caused by freeradius installation)
-prepare_openldap () {
-  pkg openldap-aai lt 2.4 || return 0
 
-  # openldap-aai expects org.ldif to exists
-  local ldif=/var/lib/ldap/org.ldif
-  local ldif_backup=/var/lib/carnet-upgrade/org.ldif
-  if [ -f $ldif ]; then
-    cp -v $ldif $ldif_backup
+  # 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[[:space:]]\+$password[[:space:]]\+" \
+         /etc/pam_radius_auth.conf
+    then
+      sed -i.$backup_ext "s/^\(127.0.0.1[[:space:]]*\)[^[:space:]]*\(.*\)/\1$password\2/" /etc/pam_radius_auth.conf
+    fi
   fi
 }
 
-# fix openldap-aai postinst user handling
-upgrade_openldap () {
-  pkg openldap-aai lt 2.4 || return 0
-
-  # slapd postinst fails if move_old_database is false
-  echo 'slapd slapd/move_old_database boolean true' | debconf-set-selections 
-  pkgadd slapd
-
-  # slapd removes org.ldif during switch from ldap -> openldap user
-  local ldif=/var/lib/ldap/org.ldif
-  local ldif_backup=/var/lib/carnet-upgrade/org.ldif
-  if [ -f $ldif_backup -a ! -f $ldif ]; then
-    cp -v $ldif_backup $ldif
-  fi
-
-  # openldap-aai postinst fails here because of database permissions
-  apt-get -y install openldap-aai || true
-  chown -R openldap:openldap /var/lib/ldap
-  /etc/init.d/slapd restart
-  dpkg --configure -a
-
-  # remove ldap user if openldap works
-  if getent passwd ldap      > /dev/null && \
-     getent passwd openldap  > /dev/null && \
-     pgrep -U openldap slapd > /dev/null
-  then
-     log "userdel ldap (replaced by openldap)"
-     userdel ldap || true
+# handle mysql 5.0 to 5.1 upgrade
+upgrade_mysql () {
+  if pkg mysql-server || pkg mysql-server-5.0; then
+     pkgadd mysql-server
+     dpkg -P mysql-server-5.0
+     /etc/init.d/mysql restart
   fi
 }
 
@@ -972,6 +997,12 @@ get_variable () {
 upgrade_munin () {
   local config backup hostname domain
 
+  # new htmldir location
+  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
 
@@ -1055,7 +1086,7 @@ check_kernel_space() {
   log "Kernel package: $pkg"
   log "Kernel size: ${kernel_size}MB"
 
-  if LC_ALL=C apt-get -s install kernel-2.6-cn \
+  if LC_ALL=C apt-get -s install kernel-2.6-cn 2>/dev/null \
      | grep -q '^kernel-2.6-cn is already the newest version.$'
   then
      log "Not checking free space in /: kernel-2.6-cn already installed"