Disable old amavis config during upgrade.
[carnet-upgrade.git] / src / functions.sh
index 9c81fc8..b0ebdb3 100644 (file)
@@ -1,4 +1,3 @@
-# last update: 2005-07-03
 # Ivan 'ico' Rako <irako@srce.hr>
 # Zoran 'jelly' Dzelajlija <jelly@srce.hr>
 
@@ -232,8 +231,13 @@ run_actions() {
     [ "$check" != "true" ] && checkmsg="if '$check'"
     if eval $check; then
       log "$(printf 'action %02d' $lineno) starting: '${action}' $checkmsg "
-      eval $action
-      log "$(printf 'action %02d' $lineno) finished: '${action}' $checkmsg"
+      if ! eval $action; then
+        log "$(printf 'action %02d' $lineno) failed: '${action}' $checkmsg "
+        display_action_failure "$action"
+        exit 1
+      else  
+        log "$(printf 'action %02d' $lineno) finished: '${action}' $checkmsg"
+      fi
     else
       log "$(printf 'action %02d' $lineno) skipping: '${action}' $checkmsg"
     fi
@@ -243,6 +247,24 @@ run_actions() {
   log "-----"
 }
 
+# report action failure
+display_action_failure () {
+  local action=$1
+
+  notice "
+Doslo je do greske prilikom izvrsavanja akcije '$action'. Detalje problema moguce je vidjeti u log datotekama:
+
+  /var/log/carnet-upgrade.log
+  /var/log/carnet-upgrade.typescript
+
+Da bi dovrsili zapocete operacije nad paketima pokrenite:
+
+  # dpkg --configure -a
+  # apt-get -f install
+
+Nakon toga ponovno pozovite carnet-upgrade skriptu."
+}
+
 # funkcija vraca popis paketa koje treba upgradeati
 what_upgrade () {
   local IFSOLD name version package
@@ -374,7 +396,7 @@ add_group_proc () {
 
 # backup ldap database
 backup_slapd_db () {
-  local ldap_backup=/var/backups/slapcat.$backup_ext
+  local ldap_backup=/var/backups/slapcat.$backup_ext.gz
   local old_umask result
 
   if [ ! -f $ldap_backup ]; then
@@ -384,7 +406,7 @@ backup_slapd_db () {
       /etc/init.d/slapd stop || true
       old_umask=`umask`
       umask 0077 # protect the backup file
-      slapcat -l $ldap_backup
+      slapcat | gzip --best > $ldap_backup
       result=$?
       umask $old_umask
       /etc/init.d/slapd start || true
@@ -494,7 +516,6 @@ restore_configs () {
   local config_backup
 
   pkg base-files lt 4 && restore_config /etc/issue /etc/issue.net
-  pkg bind9 lt 1:9.3.4 && restore_config /etc/bind/named.conf.options
   pkg libpam-modules lt 0.79 && restore_config /etc/security/limits.conf
   pkg login lt 1:4.0.18.1 && restore_config /etc/pam.d/login
   pkg mysql-server lt 5.0.3 && restore_config /etc/init.d/mysql \
@@ -534,11 +555,7 @@ restore_configs () {
   # register cn changes in ucf managed files
   for config in /etc/apache/modules.conf \
                 /etc/clamav/clamd.conf \
-                /etc/clamav/freshclam.conf \
-                /etc/php4/apache2/php.ini \
-                /etc/php4/apache/php.ini \
-                /etc/php4/cgi/php.ini \
-                /etc/php4/cli/php.ini
+                /etc/clamav/freshclam.conf
   do 
       config_backup=$config.$backup_ext
       if [ -e $config -a ! -e $config_backup ]; then
@@ -592,6 +609,22 @@ remove_skey () {
   fi
 }
 
+# monit it causing problems for postinst scripts
+# restarting daemons so try to disable it
+disable_monit () {
+  if pkg monit-cn; then
+    pkgrm monit-cn # disables monit in prerm
+  fi
+
+  # if configured manually
+  if pkg monit; then
+    # remove the binary but leave the config
+    apt-get remove --yes monit
+    # stop the binary
+    pkill -9 monit || true
+  fi
+}
+
 # make a silent upgrade to new libc6
 upgrade_libc () {
   DEBIAN_FRONTEND=noninteractive pkgadd libc6
@@ -634,10 +667,11 @@ upgrade_amavis () {
   fi
 
   # move old config aside
-  conf=/etc/amavis/amavisd.conf
-  if [ -e $conf -a ! -e $conf.$backup_ext ]; then
-    mv -v $conf $conf.$backup_ext
-  fi
+  for conf in /etc/amavisd.conf /etc/amavis/amavisd.conf; do
+    if [ -e $conf -a ! -e $conf.$backup_ext ]; then
+      mv -v $conf $conf.$backup_ext
+    fi
+  done
 
   # install new packages
   pkgadd amavisd-cn amavisd-new
@@ -655,17 +689,35 @@ upgrade_amavis () {
 upgrade_openldap () {
   pkg openldap-aai lt 2.3 || 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
+  fi
+
   # slapd postinst fails if move_old_database is false
   echo 'slapd slapd/move_old_database boolean true' | debconf-set-selections 
   pkgadd slapd
 
-  # openldap-aai postinst fails here because of database permissions
-  if ! apt-get -y install openldap-aai; then
-    chown -R openldap:openldap /var/lib/ldap  # fix slapd
-    /etc/init.d/slapd restart
+  # slapd removes org.ldif during switch from ldap -> openldap user
+  if [ -f $ldif_backup -a ! -f $ldif ]; then
+    cp -v $ldif_backup $ldif
+  fi
 
-    # try openldap-aai postinst again (also re-enables slurpd)
-    dpkg --configure -a
+  # 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
   fi
 }