Zum Inhalt

Bullseye - Ein Upgrade für den Raspberry Pi und die Nextcloud

Es gibt eine neue Version des Betriebssystems Raspberry Pi OS. Es wurde Anfang November 2021 freigegeben und steht zum Download bereit. Ich habe deshalb mal begonnen meine Pis zu aktualisieren. Auf einem der Einplatinenrechner läuft eine aktuelle Nextcloud. Da Nextcloud 23 die letzte Version sein wird, die PHP7.3 unterstützt, muss über kurz oder lang ein Update eingespielt werden. Aus diesem Grund habe ich auch begonnen die Pis auf den neuesten Stand zu bringen. Raspberry Pi OS Bullseye bringt nämlich PHP7.4 mit.

Das Upgrade verlief bei mir ohne Probleme. Im Anschluss waren ein paar Einstellungen notwendig, damit die Nextcloud wieder funktioniert.

Die Raspberry Pi Foundation hat vor einiger Zeit das Upgrade von "Buster" auf "Bullseye" freigegeben. Hier handelt es sich um kein Update, dass die Betriebssystem-Komponenten und die Softwarepakete aktualisiert, sondern um eine neue Version des Betriebssystem Raspberry Pi OS.

ACHTUNG!!!
In der offiziellen Ankündigung der Raspberry Pi Foundation wird eine komplette Neuinstallation empfohlen. Das Upgrade von Buster auf Bullseye wird nicht offiziell unterstützt. https://www.raspberrypi.com/news/raspberry-pi-os-debian-bullseye/

Deshalb ist genau zu überlegen, wann ein solches Upgrade durchgeführt werden soll. Es sind evtl. noch ein paar Problemchen vorhanden, die noch nicht gelöst wurden. Aus diesem Grund sollte das Upgrade zuerst auf einem unkritischen System versucht werden, bevor es auf einen wichtigen Server aktualisiert wird. In jedem Fall ist ein Backup zu erstellen.

Bei einem Raspberry Pi mit einer normal großen SD-Karte lässt sich sehr schnell ein Backup-Image mit Win32DiskImager auf erstellen, dass im Notfall wieder hergestellt werden kann.

System und Pakete auf den aktuellsten Stand bringen

Bevor es losgeht, ist das System und die Pakete auf den aktuellsten Stand zu bringen.

screen

sudo apt update && sudo apt dist-upgrade

Update der Firmware - Optional

Der Schritt ist OPTIONAL!

Ich habe auf meinen Pis das Firmware-Update nicht durchgeführt.

Es wird nur der Vollständigkeit halber hier aufgeführt.

Das Update der Firmware ist mit Bedacht durchzuführen. Es kann sein, dass das System dadurch beschädigt wird und eine Neuinstallation erforderlich wird.

### Der Schritt ist optional - Start

sudo rpi-update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** We're running for the first time
 *** Backing up files (this will take a few minutes)
 *** Backing up firmware
 *** Backing up modules 5.10.63-v7+
#############################################################
WARNING: This update bumps to rpi-5.10.y linux tree
See: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=288234
'rpi-update' should only be used if there is a specific
reason to do so - for example, a request by a Raspberry Pi
engineer or if you want to help the testing effort
and are comfortable with restoring if there are regressions.

DO NOT use 'rpi-update' as part of a regular update process.

##############################################################
Would you like to proceed? (y/N)

 *** Downloading specific firmware revision (this will take a few minutes)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   173  100   173    0     0   2507      0 --:--:-- --:--:-- --:--:-- 2507
100  121M  100  121M    0     0  3103k      0  0:00:40  0:00:40 --:--:-- 2600k
 *** Updating firmware
 *** Updating kernel modules
 *** depmod 5.10.79-v7l+
 *** depmod 5.10.79-v7+
 *** depmod 5.10.79+
 *** depmod 5.10.79-v8+
 *** Updating VideoCore libraries
 *** Using HardFP libraries
 *** Updating SDK
 *** Running ldconfig
 *** Storing current firmware revision
 *** Deleting downloaded files
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully updated to 5dc3fda106fb65f8b377bb8072453081b455dd5f
 *** A reboot is needed to activate the new firmware

 sudo reboot

### Der Schritt ist optional - Ende

Aktualisierung der Sourcelisten sources.list

In der source.list ist die Version von buster auf bullseye zu ändern. Das kann ganz einfach mit einem Editor gemacht werden.

sudo nano /etc/apt/sources.list

deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

Mit dem Befehl lässt sich buster gegen bullseye tauschen.

sudo sed -i 's/buster/bullseye/g' /etc/apt/sources.list

Der Inhalt der Datei sources.list sieht dann wie folgt aus:

deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi

Upgrade Prozess starten

Das Upgrade lässt sich mit dem Befehl starten.

sudo apt full-upgrade 

Du wirst am Anfang des Updateprozesses gefragt, ob Dienste automatisch neu gestartet werden dürfen. Ich habe das mit "Ja" bestätigt. Zudem wirst du während des Vorgangs immer mal wieder gefragt, ob bei bestimmten Diensten Skripte mit neuen Versionen ersetzt werden sollen. Der Standard ist immer "Nein". Du musst aber entscheiden, was das System jeweils machen. Das hängt von deiner Konfiguration ab.

Pakete aktualisieren

Nachdem das Upgrade erfolgreich durchgelaufen ist, sollten die Pakete auf den aktuellsten Stand gebracht werden.

sudo apt update && sudo apt dist-upgrade

Aufräumen

Alle nicht benötigten Dateien und Pakete können nun entfernt werden.

sudo apt autoremove
sudo apt-get clean

Den Pi noch neu starten und fertig!

sudo reboot

Nun sollte die aktuellste Version auf eurem Raspberry Pi installiert sein.

cat /etc/os-release 

PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

Bullseye für Nextcloud anpassen

Der Aufruf der Nextcloud hat bei mir nach dem Update nicht funktioniert. Es tauchten viele Fehlermeldungen beim Aufruf im Webbrowser auf.

* @author Joas Schilling * @author Jörn Friedrich Dreyer * @author Lukas Reschke * @author Morris Jobke * @author Robin Appelman * @author Roeland Jago Douma * @author Sergio Bertolín * @author Thomas Müller * @author Vincent Petry * * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see * */ require_once __DIR__ . '/lib/versioncheck.php'; try { require_once __DIR__ . '/lib/base.php'; OC::handleRequest(); } catch (\OC\ServiceUnavailableException $ex) { \OC::$server->getLogger()->logException($ex, ['app' => 'index']); //show the user a detailed error page OC_Template::printExceptionErrorPage($ex, 503); } catch (\OCP\HintException $ex) { try { OC_Template::printErrorPage($ex->getMessage(), $ex->getHint(), 503); } catch (Exception $ex2) { try { \OC::$server->getLogger()->logException($ex, ['app' => 'index']); \OC::$server->getLogger()->logException($ex2, ['app' => 'index']); } catch (Throwable $e) { // no way to log it properly - but to avoid a white page of death we try harder and ignore this one here } //show the user a detailed error page OC_Template::printExceptionErrorPage($ex, 500); } } catch (\OC\User\LoginException $ex) { $request = \OC::$server->getRequest(); /** * Routes with the @CORS annotation and other API endpoints should * not return a webpage, so we only print the error page when html is accepted, * otherwise we reply with a JSON array like the SecurityMiddleware would do. */ if (stripos($request->getHeader('Accept'),'html') === false) { http_response_code(401); header('Content-Type: application/json; charset=utf-8'); echo json_encode(['message' => $ex->getMessage()]); exit(); } OC_Template::printErrorPage($ex->getMessage(), $ex->getMessage(), 401); } catch (Exception $ex) { \OC::$server->getLogger()->logException($ex, ['app' => 'index']); //show the user a detailed error page OC_Template::printExceptionErrorPage($ex, 500); } catch (Error $ex) { try { \OC::$server->getLogger()->logException($ex, ['app' => 'index']); } catch (Error $e) { http_response_code(500); header('Content-Type: text/plain; charset=utf-8'); print("Internal Server Error\n\n"); print("The server encountered an internal error and was unable to complete your request.\n"); print("Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.\n"); print("More details can be found in the webserver log.\n"); throw $ex; } OC_Template::printExceptionErrorPage($ex, 500); } 

Fehlende PHP-Pakete nachinstallieren

Damit die Nextcloud-Installation wieder wie gewohnt funktioniert werden noch einige Pakete installiert. Es fehlen auf dem System noch etliche PHP7.4-Pakete.

sudo apt install php7.4 php7.4-gd php7.4-curl php7.4-common php7.4-intl php-pear php-apcu php7.4-xml libapache2-mod-php7.4 php7.4-mbstring php7.4-zip php7.4-mysql php7.4-bcmath php7.4-gmp

Nach der Installation der PHP-Pakete sah die Meldung im Webbrowser schon etwas übersichtlicher aus, aber die Nextcloud war immer noch nicht erreichbar.

Internal Server Error

The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

Deshalb einfach mal den Webserver neu starten und die Nextcloud läuft wieder.

sudo systemctl restart apache2

Sicherheits- & Einrichtungswarnungen abarbeiten

Nach dem Neustart des Webserver ist eine Anmeldung wieder wie gewohnt möglich. Jedoch gibt es ein paar Sicherheits- & Einrichtungswarnungen, da der Webserver noch nicht auf PHP-Version 7.4 umgestellt ist.

Es gibt einige Fehler bei Deiner Systemkonfiguration.

    Letzte Cron-Job-Ausführung: Vor 3 Stunden. Check the background job settings ?.
    Die PHP-Speichergrenze liegt unterhalb des empfohlenen Wertes von 512MB.
    PHP configuration option output_buffering must be disabled

    In der Datenbank fehlen einige Indizes. Auf Grund der Tatsache, dass das Hinzufügen von Indizes in großen Tabellen einige Zeit in Anspruch nehmen kann, wurden diese nicht automatisch erzeugt. Durch das Ausführen von "occ db:add-missing-indices" können die fehlenden Indizes manuell hinzugefügt werden, während die Instanz weiter läuft. Nachdem die Indizes hinzugefügt wurden, sind Anfragen auf die Tabellen normalerweise schneller.
        Fehlender Index "fs_id_storage_size" in der Tabelle "oc_filecache".
        Fehlender Index "fs_storage_path_prefix" in der Tabelle "oc_filecache".

Die Meldung mit der Datenbank lässt ist nichts Ungewöhnliches und taucht eigentlich nach jedem Update von Nextcloud auf. Es taucht jedoch dabei ein Fehler mit `APCu´ auf.

sudo -u www-data php /var/www/html/nextcloud/occ db:add-missing-indices
An unhandled exception has been thrown:
OCP\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

Die Lösung habe ich hier beschrieben.

Codeberg

Dein Weg zur eigenen Nextcloud

sudo nano /etc/php/7.4/mods-available/apcu.ini

# Am Ende der Datei eintragen
apc.enable_cli=1

# Webserver neustarten
sudo systemctl restart apache2

Anschließend kann der Befehl zur Datenbankaktualisierung gestartet werden.

sudo -u www-data php /var/www/html/nextcloud/occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Adding additional size index to the filecache table, this can take some time...
Filecache table updated successfully.
Adding additional path index to the filecache table, this can take some time...
Filecache table updated successfully.

...

Das Gleiche gilt für die Fehler Die PHP-Speichergrenze liegt unterhalb des empfohlenen Wertes von 512MB. und output_buffering-Fehler.

Codeberg

Dein Weg zur eigenen Nextcloud

Ergänzung

Bei der Aktualisierung eines anderen Pis mit einer laufenden Nextcloud-Installation gab es einen Fehler mit a2enconf javascript-common.

Durch das Problem funktionierte der Webserver Apache2 nicht mehr und die Nextcloud ebenfalls.

Abhilfe schafft das Deinstallieren von javascript-common.

Der Fehler

 sudo apt dist-upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Setting up apache2 (2.4.51-1~deb11u1) ...
info: Executing deferred 'a2enconf javascript-common' for package javascript-common
ERROR: Conf javascript-common does not exist!
dpkg: error processing package apache2 (--configure):
 installed apache2 package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 apache2
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ein kurzer Blick auf die Releaseinfos zeigt, dass Bullseye schon installiert ist

cat /etc/os-release 

PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

Deinstallation von javascript-common.

 sudo apt-get purge javascript-common
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages will be REMOVED:
  javascript-common*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 33.8 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 54122 files and directories currently installed.)
Removing javascript-common (11+nmu1) ...
Package apache2 is not configured yet. Will defer actions by package javascript-common.
Setting up apache2 (2.4.51-1~deb11u1) ...
info: Executing deferred 'a2enmod php7.4' for package libapache2-mod-php7.4
Enabling module php7.4.
apache-htcacheclean.service is a disabled or a static unit not running, not starting it.
(Reading database ... 54117 files and directories currently installed.)
Purging configuration files for javascript-common (11+nmu1) ...
apache2_invoke javascript-common postrm: No action required

Nach dem Deinstallieren wird ein Update angestoßen und die PHP-Pakete für die Version 7.4 noch einmal installiert.

sudo apt update && sudo apt dist-upgrade

sudo apt install php7.4 php7.4-gd php7.4-curl php7.4-common php7.4-intl php-pear php-apcu php7.4-xml libapache2-mod-php7.4 php7.4-mbstring php7.4-zip php7.4-mysql php7.4-bcmath php7.4-gmp

Anschließend läuft der Webserver und die Nextcloud wieder.

Die Anpassungen für die neue PHP-Version, wie oben beschrieben, sind noch vorzunehmen.

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj