Updated bloat handling and list.
[carnet-upgrade.git] / src / functions.sh
index 81c2a78..f68c54b 100644 (file)
@@ -129,26 +129,27 @@ dist_upgrade () {
 }
 
 remove_bloat() {
-  local to_remove add_this i j n text to_show cmd tmpfile installed
+  local to_remove add_this i j text to_show cmd tmpfile installed
   local update_selections pkgs_to_deselect oldifs
   text="$msg_remove_bloat"
 
   [ "$DEBUG" ] && set -x
-  n=0
+  pkglist=$(mktemp /var/lib/carnet-upgrade/pkglist.XXXXXX)
+  COLUMNS=200 dpkg -l | awk '$1 ~ /^.i/ { print $2 }' > $pkglist
   for i in $(echo "$bloats" | sed 's/          */      /g'| awk -F'    ' '{print $2}')
   do
-    if pkg $i; then
+    if grep -q "^$i$" $pkglist; then
       installed="$installed $i"
       add_this="$(echo "$bloats" | egrep "     .*\b${i}\b" | sed 's/           */      /g'| awk -F'    ' '{print $1}')"
       if ! echo "$to_show" | grep -q "$add_this"; then
         to_show="$to_show \"$add_this\" \"\" on"
-        n=$(($n+1))
       fi
     fi
   done
+  [ "$DEBUG" ] || rm -f $pkglist
   [ -z "$to_show" ] && return 0
   tmpfile=$(mktemp /var/lib/carnet-upgrade/dialog-tmp.XXXXXX)
-  cmd="dialog --nocancel --backtitle \""$title"\" --checklist \""$text"\" 20 75 $n $to_show"
+  cmd="dialog --nocancel --backtitle \""$title"\" --checklist \""$text"\" 20 75 8 $to_show"
   [ "$DEBUG" ] && set +x
     eval $cmd 2> $tmpfile
   [ "$DEBUG" ] && set -x
@@ -280,10 +281,9 @@ Nakon toga ponovno pozovite ovu skriptu."
 # if apache is installed make sure it's version 2
 check_apache_version () {
 
-  if ! pkg apache2-cn && pkg apache-cn; then
+  if pkg apache-cn && ! pkg apache2-cn; then
     notice "
-Prije prelaska na Debian Etch potrebno je napraviti nadogradnju sa apache 1.3
-na apache 2.0.
+Prije prelaska na Debian Etch potrebno je napraviti nadogradnju sa apache 1.3 na apache 2.0.
 
 Pokrenite:
   'apt-get install apache2-cn'
@@ -330,11 +330,11 @@ create_sources_list () {
 
         # backup old version
         if [ -f $sl -a ! -f $sl.$backup_ext ]; then
-            cp -a $sl $sl.$backup_ext
+            cp -av $sl $sl.$backup_ext
         fi
 
         # install new version
-        cp $sl_new $sl
+        cp -av $sl_new $sl
         notice "Novi sadrzaj datoteke /etc/apt/sources.list:
 
 `cat /etc/apt/sources.list`"
@@ -433,9 +433,9 @@ fix_etc_default_raid2 () {
 
     if ! cmp -s /etc/default/raid2.$backup_ext.$$ /etc/default/raid2; then
       log "Fixed /etc/default/raid2 AUTOSTART option."
-      mv /etc/default/raid2.$backup_ext.$$ /etc/default/raid2
+      mv -v /etc/default/raid2.$backup_ext.$$ /etc/default/raid2
     else
-      rm /etc/default/raid2.$backup_ext.$$
+      rm -v /etc/default/raid2.$backup_ext.$$
     fi
   fi
 }
@@ -444,12 +444,7 @@ fix_etc_default_raid2 () {
 # installed already)
 restore_config () {
   local file file_backup file_orig
-  local pkg=$1 ver=$2
   local old_umask
-  shift 2
-
-  # check package version
-  pkg $pkg lt $ver || return 0
 
   # create new files safely
   old_umask=`umask`
@@ -460,17 +455,25 @@ restore_config () {
     file_orig=/usr/share/carnet-upgrade/files/$file
     file_backup=$file.$backup_ext
 
+    # is config there
+    if [ ! -e $file ]; then
+        continue
+    fi 
+
+    # is restore needed
     if cmp $file_orig $file >/dev/null; then
-        continue # original file is already in place
+        continue
     fi
 
-    if [ -e $file -a ! -e $file_backup ]; then
-      # backup file
-      mv $file $file_backup
+    # backup and restore
+    if [ ! -e $file_backup ]; then
+      log "Restoring config file $file"
 
-      # install original
-      log Restoring config file $file
-      cp $file_orig $file
+      # backup local changes
+      mv -v $file $file_backup
+
+      # restore original
+      cp -av $file_orig $file
       chown --reference $file_backup $file
       chmod --reference $file_backup $file
     fi
@@ -482,33 +485,29 @@ restore_config () {
 # restore modified config to their package defaults
 # so the upgrade doesn't complain so much
 restore_configs () {
-  restore_config base-files 4 /etc/issue /etc/issue.net
-  restore_config bind9 1:9.3.4 /etc/bind/named.conf.options
-  restore_config dovecot-common 1.0 /etc/dovecot/dovecot.conf
-  restore_config libapache-mod-php4 6:4.4.4 /etc/php4/apache/php.ini
-  restore_config libapache2-mod-php4 6:4.4.4 /etc/php4/apache2/php.ini
-  restore_config libpam-modules 0.79 /etc/security/limits.conf
-  restore_config login 1:4.0.18.1 /etc/pam.d/login
-  restore_config mysql-server 5.0.3 /etc/init.d/mysql \
+  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 dovecot-common lt 1.0 && restore_config /etc/dovecot/dovecot.conf
+  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 \
                                     /etc/logrotate.d/mysql-server \
                                     /etc/mysql/my.cnf
-  restore_config ntp 1:4.2.2 /etc/ntp.conf
-  restore_config ntpdate 1:4.2.2 /etc/default/ntpdate
-  restore_config oidentd 2.0.8 /etc/default/oidentd
-  restore_config php4-cgi 6:4.4.4 /etc/php4/cgi/php.ini
-  restore_config php4-cli 6:4.4.4 /etc/php4/cli/php.ini
-  restore_config postgrey 1.27 /etc/default/postgrey \
+  pkg ntp lt 1:4.2.2 && restore_config /etc/ntp.conf
+  pkg ntpdate lt 1:4.2.2 && restore_config /etc/default/ntpdate
+  pkg oidentd lt 2.0.8 && restore_config /etc/default/oidentd
+  pkg postgrey lt 1.27 && restore_config /etc/default/postgrey \
                                /etc/postgrey/whitelist_clients
-  restore_config procps 1:3.2.7 /etc/sysctl.conf
-  restore_config sasl2-bin 2.1.22 /etc/default/saslauthd
-  restore_config slapd 2.3.30 /etc/default/slapd /etc/init.d/slapd
-  restore_config squirrelmail 2:1.4.9a /etc/squirrelmail/apache.conf
-  restore_config vsftpd 2.0.5 /etc/vsftpd.conf
-  restore_config xinetd 1:2.3.14 /etc/xinetd.conf
+  pkg procps lt 1:3.2.7 && restore_config /etc/sysctl.conf
+  pkg sasl2-bin lt 2.1.22 && restore_config /etc/default/saslauthd
+  pkg slapd lt 2.3.30 && restore_config /etc/default/slapd /etc/init.d/slapd
+  pkg squirrelmail lt 2:1.4.9a && restore_config /etc/squirrelmail/apache.conf
+  pkg vsftpd lt 2.0.5 && restore_config /etc/vsftpd.conf
+  pkg xinetd lt 1:2.3.14 && restore_config /etc/xinetd.conf
 
   # orphaned config file - no owner
   if pkg logcheck-database lt 1.2.54; then
-      rm -f /etc/logcheck/ignore.d.server/imap
+      rm -vf /etc/logcheck/ignore.d.server/imap
   fi
 
   # aide switched to ucf, move old configs aside
@@ -518,12 +517,26 @@ restore_configs () {
                   /etc/default/aide;
       do
           if [ ! -e "$file.$backup_ext" ]; then
-              mv "$file" "$file.$backup_ext"
+              mv -v "$file" "$file.$backup_ext"
           fi
 
-          rm -f "$file"
+          rm -vf "$file"
       done
   fi
+
+  # register cn changes in apache files
+  for config in /etc/php4/cgi/php.ini \
+                /etc/php4/cli/php.ini \
+                /etc/php4/apache/php.ini \
+                /etc/php4/apache2/php.ini \
+                /etc/apache/modules.conf
+  do 
+      config_backup=$config.$backup_ext
+      if [ -e $config -a ! -e $config_backup ]; then
+          cp -av $config $config_backup
+          ucf $config_backup $config
+      fi
+  done
 }
 
 # temporary disable listchanges packages to reduce clutter during upgrade
@@ -581,13 +594,6 @@ upgrade_apache () {
   mkdir -p /etc/apache2
   touch /etc/apache2/httpd.conf
 
-  # register cn changes in modules.conf
-  modules_conf=/etc/apache/modules.conf
-  if [ ! -e "$modules_conf.$backup_ext" ]; then
-      cp -a "$modules_conf" "$modules_conf.$backup_ext"
-      ucf $modules_conf $modules_conf
-  fi
-
   # temporary remove packages conflicting with apache2
   delpkg=""
   for p in aosi-aai aosi-www-aai \
@@ -600,7 +606,7 @@ upgrade_apache () {
      fi
   done
 
-  # remove problematic stuff
+  # remove (but not purge) problematic packages
   if [ "$delpkg" ]; then
       eval apt-get --yes remove $delpkg
   fi
@@ -617,14 +623,14 @@ upgrade_apache () {
 upgrade_amavis () {
   # remove init script diversion
   if [ -L /etc/init.d/amavis -a -f /etc/init.d/amavis.amavisd-new ]; then
-    rm -f /etc/init.d/amavis
+    rm -vf /etc/init.d/amavis
     dpkg-divert --quiet --remove /etc/init.d/amavis
   fi
 
   # move old config aside
   local conf=/etc/amavis/amavisd.conf
   if [ -e $conf -a ! -e $conf.$backup_ext ]; then
-    mv $conf $conf.$backup_ext
+    mv -v $conf $conf.$backup_ext
   fi
 
   # install new packages