Upgrade grub-pc with kernel-cn.
[carnet-upgrade.git] / src / functions.sh
index 6f98950..1d94faa 100644 (file)
@@ -480,7 +480,9 @@ reboot_required () {
   running_version=$( uname -v )
   log "Running kernel: $running_release $running_version"
 
-  if grep -q "$running_release .* $running_version" $default_kernel; then
+  if [ "$kernel_package" != "${kernel_package#linux-image-3.2.0-}" ] ||
+     grep -q "$running_release .* $running_version" $default_kernel
+  then
       log "Latest kernel version is running." 
       return 1
   else
@@ -693,78 +695,42 @@ restore_configs () {
   local hostname domain config_new memtotal memlimit
 
   # restore simple configs
-  if pkg ntp-cn && pkg ntp lt 1:4.2.6.p2+dfsg-1+b1; then
+  if pkg ntp-cn && pkg ntp lt 1:4.2.6.p5+dfsg-2; then
      if restore_file /etc/ntp.conf; then
         postupgrade_reconfigure ntp-cn
      fi
   fi
 
-  if pkg kernel-2.6-cn && pkg procps lt 1:3.2.8-9; then
-     if restore_file /etc/sysctl.conf; then
-        postupgrade_reconfigure kernel-2.6-cn
-     fi
-  fi
-
-  if pkg kernel-2.6-cn && pkg libpam-modules lt 1.1.1-6.1; then
-     if restore_file /etc/security/limits.conf; then
-        postupgrade_reconfigure kernel-2.6-cn
-     fi
-  fi
-
-  if pkg vsftpd-cn && pkg vsftpd lt 2.3.2-3+squeeze2; then
+  if pkg vsftpd-cn && pkg vsftpd lt 2.3.5-3; then
      if restore_file /etc/vsftpd.conf; then
         postupgrade_reconfigure vsftpd-cn
      fi
   fi
 
-  if pkg squirrelmail-cn && pkg squirrelmail lt 2:1.4.21-2; then
-     if restore_file /etc/squirrelmail/apache.conf; then
-        postupgrade_reconfigure squirrelmail-cn
+  if pkg amavisd-cn && pkg amavisd-new lt 1:2.7.1-2; then
+     if restore_file /etc/cron.d/amavisd-new; then
+        rm -f /etc/cron.d/amavisd-new.$backup_ext
+        postupgrade_reconfigure amavisd-cn
      fi
   fi
 
-  if pkg spamassassin-cn && pkg spamassassin lt 3.3.1-1; then
-     if restore_file /etc/spamassassin/v310.pre; then
-        postupgrade_reconfigure spamassassin-cn
+  if pkg ossec-hids lt 2.7-1; then
+     if restore_file /var/ossec/rules/local_rules.xml; then
+        postupgrade_reconfigure ossec-hids-cn
      fi
   fi
 
-  if pkg amavisd-cn && pkg amavisd-new lt 1:2.6.4-3; then
-     if restore_file /etc/cron.daily/amavisd-new; then
-        rm -f /etc/cron.daily/amavisd-new.$backup_ext
-        postupgrade_reconfigure amavisd-cn
+  if pkg sasl2-bin lt 2.1.25.dfsg1-6+deb7u1; then
+     if restore_file /etc/default/saslauthd; then
+        postupgrade_reconfigure postfix-cn
      fi
-
-     if restore_file /etc/amavis/conf.d/15-av_scanners; then
-        rm -f /etc/amavis/conf.d/15-av_scanners.$backup_ext
-        postupgrade_reconfigure amavisd-cn
-     fi
-  fi
-
-  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
-     restore_file /etc/console-tools/config
-  fi
-
-  if pkg base-files lt 6.0squeeze2; then
+  if pkg base-files lt 7.1wheezy2; then
      restore_file /etc/issue
      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/' \
-         /etc/dovecot/dovecot.conf
-  fi
-
   # check if monitrc is template based
   if [ -e /etc/monit/monitrc ]; then # monit is removed at this point
      # regenerate config from template
@@ -903,8 +869,9 @@ upgrade_libc () {
 # upgrade apache2/php5
 upgrade_apache2 () {
   pkgrm apache-common # prevents installation of apache2-suexec
+  pkgrm php5-suhosin # not available for wheezy
   pkgupgrade libapache2-mod-php5 php5-cli php5-cn apache2-cn \
-    php5-odbc php5-suhosin php-suhosin-cn
+    php5-odbc
 }
 
 upgrade_amavis () {
@@ -924,38 +891,11 @@ upgrade_amavis () {
   /etc/init.d/amavisd-cn restart
 }
 
-# handle freerdius upgrade
-upgrade_freeradius () {
-  local password
-
-  pkg freeradius-aai lt 2.1.10-1 || return 0
-
-  # 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
-
-  # 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
 }
@@ -976,6 +916,44 @@ upgrade_postfix () {
   fi
 }
 
+# upgrade the IMAP server
+upgrade_dovecot() {
+  if [ ! -f /etc/dovecot/conf.d/95-local ]; then
+     pkgrm dovecot-cn
+
+     # restore config
+     if [ ! -f /etc/dovecot/dovecot.conf.$backup_ext ]; then
+        mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.$backup_ext
+        cp /usr/share/dovecot/dovecot.conf /etc/dovecot/dovecot.conf
+     fi
+
+     # copy SSL certificates
+     OLD_SSL_CERT="/etc/ssl/certs/dovecot.pem"
+     OLD_SSL_KEY="/etc/ssl/private/dovecot.pem"
+     SSL_CERT="/etc/dovecot/dovecot.pem"
+     SSL_KEY="/etc/dovecot/private/dovecot.pem"
+     if [ -f $OLD_SSL_CERT -a -f $OLD_SSL_KEY -a ! -f $SSL_CERT -a ! -f $SSL_KEY ]; then
+        if [ ! -e /etc/dovecot/private ]; then
+           install -d -o root -g root -m0700 /etc/dovecot/private
+        fi
+
+        cp -av $OLD_SSL_CERT $SSL_CERT
+        cp -av $OLD_SSL_KEY $SSL_KEY
+
+        chown root:dovecot $SSL_CERT
+        chmod 0644 $SSL_CERT
+        chown root:dovecot $SSL_KEY
+        chmod 0600 $SSL_KEY
+     fi
+
+     # install new version and restore local changes
+     pkgadd dovecot-core
+     doveconf -n -c /etc/dovecot/dovecot.conf.$backup_ext > /etc/dovecot/conf.d/95-local
+
+     pkgadd dovecot-cn
+  fi
+}
+
 # upgrade bind separately so DNS is not down for too long
 # or breaks postinst scripts of other cn packages that depend on
 # working resolver
@@ -983,6 +961,39 @@ upgrade_bind() {
   pkgadd bind9-cn
 }
 
+# handle fail2ban upgrade due to error:
+# trying to overwrite '/etc/fail2ban/filter.d/dovecot.conf', which is also in package fail2ban-cn
+upgrade_fail2ban() {
+  if pkg fail2ban-cn && dpkg -L fail2ban-cn | grep -qF dovecot.conf; then
+    pkgrm fail2ban-cn
+    pkgadd fail2ban
+    pkgadd fail2ban-cn
+  fi
+}
+
+# manual upgrade of mailman to avoid two copies of mailman running
+# first started by python upgrade and second started by mailman itself
+upgrade_mailman() {
+  if pkg mailman-cn lt 2:2.1.15~cn0; then
+    /etc/init.d/mailman stop || true
+    pkgadd python
+    pkgadd mailman mailman-cn
+  fi
+}
+
+# manual upgrade of kernel due to new packet name
+upgrade_kernel() {
+  if pkg kernel-2.6-cn; then
+    pkgrm kernel-2.6-cn
+
+    if pkg grub-pc; then
+      pkgadd kernel-cn grub-pc
+    else
+      pkgadd kernel-cn
+    fi
+  fi
+}
+
 get_variable () {
   local name=$1 file=$2 val
 
@@ -1025,24 +1036,6 @@ upgrade_munin () {
   dpkg-reconfigure munin-cn
 }
 
-# try not to overwrite user modified issue files
-fix_issue () {
-  if cmp /etc/issue $cnup/files/etc/issue.expect.new >/dev/null; then
-    cp -av /etc/issue /etc/issue.$backup_ext
-    cat > /etc/issue <<EOF
-Debian GNU/Linux 6.0 (CARNet Debian 6.0) \\n \\l
-
-EOF
-  fi
-
-  if cmp /etc/issue.net $cnup/files/etc/issue.net.expect.new >/dev/null; then
-    cp -av /etc/issue.net /etc/issue.net.$backup_ext
-    cat > /etc/issue.net <<EOF
-Debian GNU/Linux 6.0 (CARNet Debian 6.0) %h
-EOF
-  fi
-}
-
 check_archives_space() {
   local available_disk_space archives_size
   available_disk_space=$(free_space /var/cache/apt/archives/)
@@ -1063,12 +1056,12 @@ check_archives_space() {
   fi
 }
 
-# calculate the list of linux-image packages from kernel-2.6-cn dependencies
+# calculate the list of linux-image packages from kernel-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: \
+  linux_images=$(apt-cache show kernel-cn | grep ^Depends: \
     | grep -o 'linux-image[^, ]*')
   for metapkg in $linux_images; do
     pkg=$(apt-cache show $metapkg | grep ^Depends: \
@@ -1100,10 +1093,10 @@ 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 2>/dev/null \
-     | grep -q '^kernel-2.6-cn is already the newest version.$'
+  if LC_ALL=C apt-get -s install kernel-cn 2>/dev/null \
+     | grep -q '^kernel-cn is already the newest version.$'
   then
-     log "Not checking free space in /: kernel-2.6-cn already installed"
+     log "Not checking free space in /: kernel-cn already installed"
      return
   fi