Fixes for ldap -> openldap user switch.
[carnet-upgrade.git] / src / functions.sh
index 2b6d3a0..33ac260 100644 (file)
@@ -1,4 +1,3 @@
-# last update: 2005-07-03
 # Ivan 'ico' Rako <irako@srce.hr>
 # Zoran 'jelly' Dzelajlija <jelly@srce.hr>
 
@@ -271,9 +270,11 @@ Prije prelaska na Debian Etch potrebno je napraviti nadogradnju ovih paketa:
   $upgrade
 
 Pokrenite:
-  'apt-get dist-upgrade'
+  # apt-get update
+  # apt-get dist-upgrade
 ili:
-  'apt-get install${upgrade}'
+  # apt-get update
+  # apt-get install${upgrade}
   
 Nakon toga ponovno pozovite ovu skriptu."
     log "carnet-upgrade aborted, upgrade of$upgrade needed."
@@ -289,7 +290,8 @@ check_apache_version () {
 Prije prelaska na Debian Etch potrebno je napraviti nadogradnju sa Apache 1.3 na Apache 2.0.
 
 Pokrenite:
-  'apt-get install apache2-cn'
+  # apt-get update
+  # apt-get install apache2-cn
   
 Nakon toga ponovno pozovite ovu skriptu."
     log "carnet-upgrade aborted, upgrade to apache2-cn needed."
@@ -310,7 +312,7 @@ upgrade () {
     return 1
   esac
 
-  for i in $packages
+  for i in $(echo $packages)
   do
     pkg $i && to_install="$to_install $i"
   done
@@ -573,7 +575,7 @@ apt_listchanges () {
 # make a silent installation of carnet and srce keyrings
 install_keyrings () {
   pkgadd carnet-keyring srce-keyring
-  pkgadd dpkg apt debconf
+  pkgadd dpkg apt debconf python-apt
 
   dpkg-reconfigure carnet-keyring srce-keyring
   update
@@ -616,7 +618,7 @@ upgrade_apache2 () {
       fi
   done
 
-  for package in $packages; do
+  for package in $(echo $packages); do
       pkgadd $package
   done
 }
@@ -652,24 +654,42 @@ 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
 }
 
 # fix postgresql deinstallation during upgrade
 upgrade_postgresql () {
   if check_services show 2>&1 | grep -qw postgresql; then
-     pkgadd postgresql
+     apt-get install -y postgresql || apt-get -yf install
   fi
 }