Upgrade Debian 8 ("Jessie") auf Debian 9 ("Stretch")

Kategorie: Debian
Erstellt: 22.06.2017
Aktualisiert: 02.07.2020

Ab Debian 8 funktioniert die Aktualisierung einer Debian-Installation auf die nächste größere Versionsummer ziemlich reibungslos. Je nach Geschindigkeit des Servers und Dauer des Reboots ist ein Upgrade meistens in unter 15 Minuten erledigt.

Mit folgenden Schritten führen Sie das Upgrade durch:

  1. aktualisieren Sie /etc/apt/sources.list (jessie durch stretch ersetzen)
  2. aktualisieren Sie ggf. für das PHP-Repository von LiveConfig analog die Datei /etc/apt/sources.list.d/liveconfig.list
  3. führen Sie apt update aus
  4. führen Sie apt install apt dpkg aus
  5. führen Sie apt upgrade aus
  6. führen Sie apt full-upgrade aus. Zwischendurch werden Sie gefragt, ob einige vorhandene Konfigurationsdateien ersetzt werden sollen - in den meisten Fällen besser nicht (mit nein antworten).
  7. führen Sie apt-get autoremove aus, um alle nicht mehr benötigten Pakete zu löschen
  8. starten Sie den Server neu (das ist wichtig, um den Kernel und alle Kernel-Module neu zu laden)
  9. führen Sie noch mal apt upgrade aus, um ggf. die MariaDB-Umstellung abzuschließen (siehe Abschnitt Mögliche Probleme)
  10. melden Sie sich anschließend als admin in LiveConfig an und gehen Sie auf den Punkt SerververwaltungE-Mail. Speichern Sie dort die Konfiguration für Postfix und für Dovecot neu ab (damit werden die Konfigurationsdateien aktualisiert und für Debian Stretch angepasst).

PHP 7

Während eines Upgrades wird PHP nicht automatisch auf Version 7 aktualisiert. Wenn Sie das wünschen, gehen Sie wie folgt vor:

  1. deinstallieren Sie das “alte” PHP 5: apt remove php5-cli php5-cgi php5-common
  2. installieren Sie die Pakete php-cli und php-cgi: apt install php-cli php-cgi
  3. starten Sie LiveConfig neu, um die neue PHP-Version zu erkennen: service liveconfig restart
  4. melden Sie sich als admin in LiveConfig an und gehen auf SerververwaltungWeb. Speichern Sie dort alle verwendeten IP-Gruppen erneut ab (also zum Bearbeiten öffnen und dann auf den Speichern-Button klicken). Damit werden alle vHost-Konfigurationen aktualisiert und die PHP-Instanzen neu gestartet.

Mögliche Probleme

  • ProFTPD: auf virtualisierten Servern haben wir vereinzelt festgestellt, dass apt während des Upgrades des ProFTPD-Paketes hängen bleibt. Das lässt sich leider auch nicht mit strg + c abbrechen. In diesem Fall per SSH eine zweite Verbindung zum Server aufmachen, den Prozess mittels ps aux | grep frontend heraussuchen und mit einem INT-Signal unterbrechen:

    # ps aux | grep frontend
    root     30473  0.0  0.8  64756 18304 pts/2    S+   13:24   0:00 /usr/bin/perl -w /usr/share/debconf/frontend /var/lib/dpkg/info/proftpd-basic.postinst configure 1.3.5-1.1+deb8u1
    # kill -INT 30473
    
  • NGINX: wenn NGINX durch LiveConfig verwaltet wird, kann es während des Upgrades zu einer Fehlermeldung kommen:

    Setting up nginx-full (1.10.3-1) ...
    [FAIL] Upgrading binary: nginx failed!
    invoke-rc.d: initscript nginx, action "upgrade" failed.
    [FAIL] Restarting nginx: nginx failed!
    invoke-rc.d: initscript nginx, action "restart" failed.
    dpkg: error processing package nginx-full (--configure):
     subprocess installed post-installation script returned error exit status 1
    

    Prüfen Sie, ob die Datei /etc/nginx/nginx.conf eine Zeile mit der Anweisung ssl_prefer_server_ciphers on; enthält. Falls ja, kommentieren Sie diese aus und starten NGINX anschließend neu.
    Sollte es noch immer zu Fehlern kommen, prüfen Sie die Datei /var/log/nginx/error.log.

  • OpenDKIM: falls die Datei /etc/default/opendkim während des Upgrades überschrieben wird, dann enthält diese die Anweisung RUNDIR=/var/run/opendkim. Das ist falsch und muss auf RUNDIR=/var/spool/postfix/opendkim geändert werden. Anschließend müssen Sie das Script /lib/opendkim/opendkim.service.generate ausführen, damit die Änderung in die systemd-Konfiguration übernommen wird.

  • Dovecot: es kann sein, dass Dovecot nicht startet weil in der Datei /etc/dovecot/dovecot.conf die Anweisung ssl_protocols = !SSLv2 !SSLv3 enthalten ist. Speichern Sie (wie oben beschrieben) über LiveConfig die Dovecot-Konfiguration neu ab, anschließend können Sie Dovecot wieder starten.

  • MariaDB: beim Upgrade auf Debian 9 wird MySQL durch MariaDB ersetzt. Dabei kann es während des Upgradevorgangs zu folgender Fehlermeldung kommen:

    Setting up mariadb-server-10.1 (10.1.23-9+deb9u1) ...
    Job for mariadb.service failed because the control process exited with error code.
    See "systemctl status mariadb.service" and "journalctl -xe" for details.
    invoke-rc.d: initscript mysql, action "start" failed.
    * mariadb.service - MariaDB database server
       Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
      Drop-In: /etc/systemd/system/mariadb.service.d
           `-whatever.conf
       Active: failed (Result: exit-code) since Thu 2017-06-22 10:03:37 CEST; 14ms ago
      Process: 13896 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=227/NO_NEW_PRIVILEGES)
      Process: 13804 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
      Process: 13801 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
      Process: 13798 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
     Main PID: 13896 (code=exited, status=227/NO_NEW_PRIVILEGES)
    
    Jun 22 10:03:37 preview systemd[1]: Starting MariaDB database server...
    Jun 22 10:03:37 preview systemd[13896]: mariadb.service: Failed at step NO_NEW_PRIVILEGES spawningâ¦gument
    Jun 22 10:03:37 preview systemd[1]: mariadb.service: Main process exited, code=exited, status=227/â¦ILEGES
    Jun 22 10:03:37 preview systemd[1]: Failed to start MariaDB database server.
    Jun 22 10:03:37 preview systemd[1]: mariadb.service: Unit entered failed state.
    Jun 22 10:03:37 preview systemd[1]: mariadb.service: Failed with result 'exit-code'.
    Hint: Some lines were ellipsized, use -l to show in full.
    dpkg: error processing package mariadb-server-10.1 (--configure):
     subprocess installed post-installation script returned error exit status 1
    dpkg: dependency problems prevent configuration of default-mysql-server:
     default-mysql-server depends on mariadb-server-10.1; however:
      Package mariadb-server-10.1 is not configured yet.
    
    dpkg: error processing package default-mysql-server (--configure):
     dependency problems - leaving unconfigured
    dpkg: dependency problems prevent configuration of mysql-server:
     mysql-server depends on default-mysql-server; however:
      Package default-mysql-server is not configured yet.
    
    dpkg: error processing package mysql-server (--configure):
     dependency problems - leaving unconfigured
    Errors were encountered while processing:
     mariadb-server-10.1
     default-mysql-server
     mysql-server
    E: Sub-process /usr/bin/dpkg returned an error code (1)
    

Der Grund hierfür liegt häufig darin, dass der Server noch mit einer zu alten Kernel-Version läuft - Abhilfe ist also erst den Server neu zu starten (läuft dann mit Kernel 4.9.x aus Debian Stretch) und anschließend noch mal mittels apt install mariadb-server-10.1 die MariaDB-Installation anzustoßen. Nicht wundern, das kann einige Minuten dauern!