Aktualisierung auf Stretch (9.0)

In den letzten Tagen ist die neue Debian Version Stretch freigegeben worden. Der neue Kernel 4.9 unterstützt neue Hardware besser. Natürlich haben sich auch bei den Softwarepaketen einige Änderungen ergeben. Meine Erfahrungen und Lösungsvorschläge möchte ich hier anführen.

Ein wichtiger Hinweis zuerst: Die Aktualisierung funktioniert nur, wenn das System auf Version 8.8 ist. Neue Funktionen im Kernel sind Voraussetzung für den Erfolg. Daher sollte man das System zuerst mit

apt-get update
apt-get -q upgrade

auf den neuesten Stand bringen. Ein Neustart danach ist unumgänglich, damit die neuen Kernelfunktionen aktiviert werden. Jetzt ersetzt man in der Datei /etc/apt/sources.list alle Vorkommen von jessie auf stretch. Die folgenden Befehle erneuern die Paketquellen und aktualisieren das System minimal.

aptitude update
aptitude upgrade

Je nach Netzanbindung und der installierten Software müssen 400-1.100 MByte geladen werden. Die meisten Pakete werden automatisch installiert, bei einigen ist Nacharbeit nötig. Im nächsten Schritt erfolgt die Aktualisierung der restlichen Komponenten.

apt-get dist-upgrade

MariaDB

Der Datenbankserver mysql wird durch mariadb ersetzt. Bei mir lief die Migration bis auf phpmyadmin durch. Dessen Tabellen musste ich händisch einpflegen, was einfach über die Weboberfläche durchzuführen ist.

PHP 7

PHP 7.0 wird zwar installiert, aber weiterhin wird PHP 5.6 verwendet. Ich empfehle, die Module php5-* zu entfernen und durch php-* zu ersetzen. Durch die Metapakete werden automatisch die Module der 7.0-er Version installiert. Bei späteren Aktualisierungen sollte dies dann keine Probleme mehr bereiten.

In PHP 7.0 gibt es den mysql-Treiber nicht mehr, dieser wird durch mysqli ersetzt. In PHP-Anwendungen muss daher der Quelltext an den entsprechenden Stellen korrigiert werden. Weiterhin gibt es jetzt eine Warnung, wenn der Konstruktor einer Klasse gleich der Klasse heißt. Hier musste ich an mehreren Dateien Änderungen vornehmen. Bisher war Folgendes möglich:

<?php
class Foo
{
    function Foo()
    {
        //some initialization code
    }
}
?>

Dies wird ersetzt durch (im Beispiel mit Parameter):

class OldClass
{
    public function __construct($foo)
    {
        echo "OldClass constructor\n";
    }
 
    public function OldClass($foo,)
    {
        self::__construct($foo);
    }
}
?>

Shorewall

Die Firewall wird nach einem Neustart nicht automatisch aktiviert. Hier ist der Wert startup von 0 auf 1 in der Datei /etc/default/shorewall zu ändern.

Aufräumarbeiten

Nach einem Neustart des Systems ist es zu empfehlen, obsolete Pakete zu entfernen. Ich habe die PHP5, Python2.6, den alten Kernel 3.16 sowie nicht mehr benutzte Bibliotheken entfernt.

apt-get purge linux-image-3.16.0-4-amd64 linux-headers-3.16.0-4-amd64 cpp-4.8 cpp-4.9 linux-headers-3.16.0-4-common linux-kbuild-3.16 php5-sqlite php5-curl php5-readline php5-json php5-common php5-cli python2.6 python2.6-minimal
apt-get --purge autoremove