Website-Suche

Flatpak-Update schlägt fehl, nachdem Curl in Debian 12 auf 8.10 aktualisiert wurde | Wie man es behebt


Heute habe ich eine wertvolle Lektion über die potenziellen Folgen des Installierens von Kernsystembibliotheken aus Backports-Repositories in Debian Linux gelernt. Während Backports nützlich sein können, um die neuesten Funktionen und Updates zu erhalten, können sie auch unerwartete Probleme verursachen, insbesondere bei Kernsystembibliotheken. Das Flatpak-Update schlug fehl, nachdem ich Curl auf 8.10 aus den Backports auf meinem Debian-12-System aktualisiert hatte. Lassen Sie mich erklären, was passiert ist, warum es passiert ist, wie man es löst und was Sie aus meiner Erfahrung lernen können.

Das Problem: Flatpak-Aktualisierungsfehler

Kürzlich habe ich versucht, meine Flatpak-Anwendungen mit dem Befehl flatpak update zu aktualisieren. Statt einer reibungslosen Aktualisierung trat der folgende Fehler auf:

Updating 1/23…                        0%  0 bytes/s**  
OSTree:ERROR:src/libostree/ostree-fetcher-curl.c:526:sock_cb: code should not be reached  
Bail out! OSTree:ERROR:src/libostree/ostree-fetcher-curl.c:526:sock_cb: code should not be reached  
Aborted (core dumped)

Nach einigem Nachforschen entdeckte ich, dass das Problem durch ein Paket namens libcurl3-gnutls verursacht wurde, das ich aus dem Debian Backports Repository installiert hatte.

Was ist schiefgelaufen?

In einfachen Worten ist libcurl3-gnutls eine Kernsystembibliothek, die Ihrem System hilft, mit dem Internet zu kommunizieren.

Wenn Sie ein Paket aus dem Backports-Repository installieren, erhalten Sie im Grunde genommen eine neuere Version dieses Pakets als die in der stabilen Debian-Version verfügbare. Dies kann zwar nützlich sein, um die neuesten Funktionen zu bekommen, kann aber auch zu Kompatibilitätsproblemen führen, insbesondere mit Kernsystembibliotheken.

In meinem Fall verursachte die neuere Version von libcurl3-gnutls aus dem Backports-Repository, dass der Befehl flatpak update abstürzte.

Einige Benutzer haben dieses Problem bereits gemeldet. Der Debian-Entwickler Simon McVittie beschrieb dieses Problem in diesem Link wie folgt:

[...]
You did already install a core system library (libcurl3-gnutls) from
a repository other than stable (bookworm-backports), and that's what
triggered this. If you can downgrade libcurl3-gnutls back to the version
from stable, that should avoid this issue.

Updating core system libraries like libcurl has a risk of regressions
associated with it - that's why we have stable releases! - and that
risk doesn't go away just because the package has been made available
in bookworm-backports.
[...]

Bis vor ein paar Tagen wusste ich nicht, dass ich die Kernsystembibliotheken nicht aus den Backports installieren sollte. Also habe ich das problematische Paket wie vom Entwickler vorgeschlagen herabgestuft.

Wie man es repariert

Glücklicherweise ist die Lösung unkompliziert. Sie müssen lediglich das Paket libcurl3-gnutls auf die Version downgraden, die mit der stabilen Debian-Version geliefert wird. Sehen wir uns an, wie es geht:

Schritt 1: Verfügbare Versionen auflisten

Zuerst müssen Sie sehen, welche Versionen von libcurl3-gnutls auf Ihrem System verfügbar sind. Sie können dies tun, indem Sie Folgendes ausführen:

apt-cache policy libcurl3-gnutls

Beispielausgabe von meinem Debian-12-System:

libcurl3-gnutls:  
 Installed: 8.10.1-1~bpo12+1  
 Candidate: 8.10.1-1~bpo12+1  
 Version table:  
*** 8.10.1-1~bpo12+1 100  
       100 /var/lib/dpkg/status  
    7.88.1-10+deb12u7 500  
       500 http://deb.debian.org/debian bookworm/main amd64 Packages  
    7.88.1-10+deb12u5 500  
       500 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages

Wie Sie in der obigen Ausgabe sehen, ist die installierte Version 8.10.1-1~bpo12+1, die aus dem Backports-Repository stammt. „bpo“ im Paketnamen zeigt an, dass sie aus Backports stammt. Die stabile Version ist 7.88.1-10+deb12u7.

Schritt 2: Das Paket herabstufen

Um libcurl3-gnutls auf die stabile Version herabzustufen, führen Sie aus:

sudo apt install libcurl3-gnutls=7.88.1-10+deb12u7

Sie werden eine Bestätigungsaufforderung sehen, die fragt, ob Sie fortfahren möchten. Geben Sie y ein und drücken Sie die Eingabetaste.

Reading package lists... Done  
Building dependency tree... Done  
Reading state information... Done  
The following packages were automatically installed and are no longer required:  
 libnghttp3-9 libngtcp2-16 libngtcp2-crypto-gnutls8  
Use 'sudo apt autoremove' to remove them.  
The following packages will be DOWNGRADED:  
 libcurl3-gnutls  
0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 0 not upgraded.  
Need to get 385 kB of archives.  
After this operation, 100 kB disk space will be freed.  
Do you want to continue? [Y/n] y  
Get:1 http://deb.debian.org/debian bookworm/main amd64 libcurl3-gnutls amd64 7.88.1-10+deb12u7 [385 kB]  
Fetched 385 kB in 1s (727 kB/s)            
dpkg: warning: downgrading libcurl3-gnutls:amd64 from 8.10.1-1~bpo12+1 to 7.88.1-10+deb12u7  
(Reading database ... 187778 files and directories currently installed.)  
Preparing to unpack .../libcurl3-gnutls_7.88.1-10+deb12u7_amd64.deb ...  
Unpacking libcurl3-gnutls:amd64 (7.88.1-10+deb12u7) over (8.10.1-1~bpo12+1) ...  
Setting up libcurl3-gnutls:amd64 (7.88.1-10+deb12u7) ...  
Processing triggers for libc-bin (2.36-9+deb12u8) ...

Jetzt wurde das Paket auf die Version 7.88.1-10+deb12u7 herabgestuft.

Schritt 3: Überprüfen Sie das Herabstufen

Nachdem das Downgrade abgeschlossen ist, können Sie überprüfen, ob das Paket heruntergestuft wurde, indem Sie Folgendes ausführen:

apt-cache policy libcurl3-gnutls

Sie sollten sehen, dass die installierte Version jetzt die stabile Version ist, 7.88.1-10+deb12u7.

Schritt 4: Flatpak-Anwendungen aktualisieren

Versuchen Sie schließlich erneut, den Befehl flatpak update auszuführen. Diesmal sollte er ohne Fehler funktionieren:
![[Update Flatpak Applications.png]]

Ursache des Flatpak-Update-Problems

Wenn Sie kürzlich curl auf Version 8.10.0 aus den Backports aktualisiert oder aus dem Quellcode kompiliert haben, erhalten Sie denselben Fehler, wenn Sie versuchen, Ihre Flatpak-Anwendungen zu aktualisieren.

Ich dachte, dass das Ersetzen der Backports-Version von Curl durch die stabile Version dieses Problem beheben würde, aber das tat es nicht. Ich musste das Paket libcurl3-gnutls downgraden, um es zu beheben.

Die eigentliche Ursache des flatpak update-Fehlers war eine Inkompatibilität zwischen curl-Bibliothek (8.10.0) und der libostree-Bibliothek, die von flatpak verwendet wird.

  • Wie in diesem Fehlerbericht erwähnt, meldete ein Debian-Benutzer, dass nach dem Upgrade von curl auf Version 8.10.0 flatpak update mit einer Fehlermeldung fehlschlug, die darauf hinweist, dass Code in der Datei ostree-fetcher-curl.c nicht erreicht werden sollte.
  • Dies ließ sich auf einen Commit in der libcurl-Bibliothek zurückverfolgen, der änderte, wie Sockets behandelt werden.
  • Das Problem war besonders ausgeprägt bei Nutzern, die libcurl3-gnutls aus dem bookworm-backports-Repository installiert hatten, da dies eine neuere Version von libcurl bereitstellte als die stabile Debian-Version.
  • Das Herabstufen von libcurl3-gnutls auf die stabile Version wurde als Workaround bestätigt.
  • Der Maintainer des ostree-Pakets in Debian hat Patches aus dem Upstream-Projekt angewendet, um die Inkompatibilität mit curl 8.10.x zu beheben.
  • Die korrigierte Version von ostree wurde zunächst in den instabilen und testenden Debian-Zweigen veröffentlicht und später über das bookworm-proposed-updates-Repository im stabilen Zweig verfügbar gemacht.

Daher entstanden die flatpak update-Fehler durch eine Änderung in libcurl, die die Funktionalität von libostree beeinträchtigte. Dies wurde durch das Anwenden von Patches auf libostree gelöst, um die Kompatibilität mit der neueren curl-Bibliothek wiederherzustellen.

Wenn also der Flatpak-Update-Befehl nach der Aktualisierung auf Curl 8.10.0 fehlschlägt, downgraden Sie einfach das libcurl3-gnutls auf die Version aus dem stabilen Repository wie oben beschrieben.

Mögliche Konsequenzen der Installation von Core-Systembibliotheken aus dem Backports-Repository

  • Regressionen: Das Aktualisieren von Kernsystembibliotheken wie libcurl aus Backports birgt das Risiko von Regressionen. Regressionen sind unbeabsichtigte Folgen von Software-Updates, die dazu führen können, dass bestehende Funktionen fehlerhaft werden oder schlechter funktionieren. Deshalb gibt es stabile Releases, um solche Risiken zu minimieren.
  • Kompatibilitätsprobleme: Die Installation einer neueren Version einer Kernbibliothek aus Backports kann zu Kompatibilitätsproblemen mit anderer Software führen, die auf der älteren Version basiert. Dies liegt daran, dass die aktualisierte Bibliothek Änderungen enthalten könnte, die mit der für die vorherige Version entwickelten Software nicht kompatibel sind.
  • Abhängigkeitskonflikte: Zurückportierte Bibliotheken können Abhängigkeiten von neueren Versionen anderer Bibliotheken haben, die in der stabilen Version nicht verfügbar sind. Dies kann Abhängigkeitskonflikte erzeugen und die ordnungsgemäße Funktion des Systems verhindern.

Gelehrte Lektionen

1. Halten Sie sich bei Kernbibliotheken an Stable

Wenn es um grundlegende Systembibliotheken geht, ist es im Allgemeinen sicherer, bei den Versionen zu bleiben, die von der stabilen Debian-Version bereitgestellt werden. Diese Versionen wurden gründlich getestet und verursachen eher keine Kompatibilitätsprobleme.

2. Verwenden Sie Backports mit Bedacht

Während Backports nützlich sein können, um die neuesten Funktionen zu erhalten, sollten sie mit Vorsicht verwendet werden. Installieren Sie Pakete aus Backports nur, wenn Sie die potenziellen Risiken verstehen und darauf vorbereitet sind, eventuelle Probleme zu bewältigen.

3. Wissen, wie man ein Downgrade durchführt

Wenn Sie nach der Installation eines Pakets aus Backports auf Probleme stoßen, kann es Ihnen viel Zeit und Frustration ersparen, zu wissen, wie man auf eine stabile Version zurückgeht.

Fazit

Die Installation von Kernsystembibliotheken aus Backports kann unerwartete Probleme verursachen, wie ich auf die harte Tour gelernt habe. Wenn man bei stabilen Versionen bleibt und die potenziellen Risiken versteht, kann man diese Probleme vermeiden und das System reibungslos am Laufen halten. Denken Sie daran, dass das Neueste nicht immer das Beste ist, besonders wenn es um Kernsystemkomponenten geht.

Ich sage nicht, dass Backports nicht empfohlen wird. Vermeiden Sie einfach die Installation von Systemkernbibliotheken aus Backports. Sie können es verwenden, um andere Apps zu installieren.

Verwandte Lektüre:

  • Beheben von Flatpak-Update-Fehlern: Problem mit beschädigtem Dateiobjekt