Wie kann ich in Disco auf systemd-241 aktualisieren?

Wie kann ich in Disco auf systemd-241 aktualisieren?

Es gibt einen Fehler in systemd-240, der sich auf jackdbus auswirkt und mein gesamtes Audio-Setup kaputt macht. Der Fehler wurde in systemd-241 behoben. Gibt es eine Möglichkeit, auf systemd-241 zu aktualisieren?

Antwort1

Eine andere Möglichkeit wäre, systemd-240 mit dem angewendeten Patch neu zu kompilieren, vorausgesetzt, er lässt sich sauber auf systemd-240 anwenden.

Wenn es möglich ist, ist es tatsächlich einfach. Sie müssen Ihren Patch lediglich zur Liste der von Ubuntu bereits verwendeten Patches hinzufügen.

Antwort2

Haftungsausschluss

Ich empfehle diese Methode nicht als gute Lösung für das Problem. Probieren Sie es auf eigenes Risiko aus.

Darüber hinaus wird Ubuntu 19.10 mit systemd 242 ausgeliefert. Wenn Sie also ein Upgrade auf Ubuntu 19.10 planen, gibt es keinen Grund, dies auszuprobieren.

Ein Fix „über“ die aktuelle Installation

Im Grunde ist es die Idee, die insolsTiCes Antwort: Patchen Sie die Quelle der Distribution. Aber dann: Installieren Sie nicht das ganze systemdSystem neu. Ersetzen Sie nur die systemdausführbare Datei – das ist möglich, da der Patch nur den Code von betrifft systemd. Auf diese Weise bin ich sicher, dass ich die aktuelle Installation nicht zu sehr durcheinander bringe.

Mein Weg zur Lösung war nicht so „linear“, wie ich ihn beschreiben werde, denn zunächst wollte ich das Originalsystem v240 patchen (mit den richtigen Bits aus v241), es erstellen und benutzerdefiniert installieren. Dann bin ich auf die Verwendung von umgestiegenAbonnieren.

Die folgende Beschreibung ist geschriebenals obIch habe es problemlos verstanden. Ich hoffe, dass ich beim Aufräumen der Schritte keine Details vergessen habe.

Folgendiese AnleitunginstallierenAbonnieren, bereiten Sie die Umgebung für den Build vor ( sudo pbuilder create --distribution disco --debootstrapopts --variant=buildd), laden Sie die Quelle herunter ( apt-get source systemd). Sie erhalten drei Dateien (zwei Archive und ein .dsc) und ein Verzeichnis. Daher möchten Sie den Befehl apt-get wahrscheinlich in einem brandneuen Ordner ausführen, um eine Dateiverschmutzung in Ihrem aktuellen Verzeichnis zu vermeiden.

Dann klonendas systemd-Github-Repositoryund sehen Sie sich das Tag v241 ( git checkout tags/v241) an.

Jetzt muss ich diff -uzwischen dem von Ubuntu src/core/main.cund dem mit dem Tag v241 einen Patch erhalten, sagen wir my.patch. Ich habe ihn bearbeitet, um Dinge zu entfernen, die mehr als nur das Memlock-Limit betreffen könnten (eine ähnliche Korrektur wurde auch für die Anzahl der offenen Dateideskriptoren vorgenommen, und ich habe sie ebenfalls beibehalten), und auch, um die Header in der Form richtig zu gestalten:

--- a/src/core/main.c ....
+++ b/src/core/main.c ....

Statt aund bkönnen Sie natürlich auch andere Namen verwenden.

Im Ordner systemd-240(erhalten durch Ausführen apt-get source systemdvon ) befindet sich debian/patches. Kopieren Sie es my.patchdorthin und fügen Sie den Dateinamen am Ende von hinzu debian/patches/series.

Versuchen Sie, das Paket () zu erstellen sudo pbuilder build systemd_240-6ubuntu5.dsc. Dadurch sollten auch die Abhängigkeiten erhalten werden. Wenn alles in Ordnung ist, haben Sie das .debin /var/cache/pbuilder/result/. Allerdings ist es das „Original“.

Wechseln Sie in das Verzeichnis systemd-240und führen Sie aus pdebuild --use-pdebuild-internal.

Nach einer Weile… gibt /var/cache/pbuilder/resultes einen neuen .deb(den gleichen Namen wie vorher…), aber dieses Mal ist es der gepatchte. Sie sollten eine Zeile sehen, wenn Sie

tar -tJf /var/cache/pbuilder/result/systemd_240-6ubuntu5.debian.tar.xz |grep my.patch

vorausgesetzt, Sie haben Ihrem Patch einen Namen gegeben my.patchund dieser tar.xzträgt den Namen.

Entpacken Sie nun die Datei .debin a-folder( dpkg-deb -R systemd_240-6ubuntu5_amd64.deb a-folder) und kopieren Sie sie als Root a-folder/lib/systemd/systemdin /lib/systemd/. Vergessen Sie nicht, das Original zu sichern /lib/systemd/systemd(ich habe es in umbenannt __systemd). Wenn etwas schief geht, können Sie die neue durch die alte ersetzen, wahrscheinlich aus einer Wiederherstellungsshell.

Nach dem Neustart ulimit -lsollte Folgendes stehen unlimited(hängt von Ihrer Konfiguration ab, aber ich nehme an, Sie haben bis hierher gelesen, weil Sie das für Ihren Benutzer in der Audiogruppe erwarten).

Ressourcen

  • System v240 gepatcht; Ich habe dieses nicht kompiliert und ausprobiert — wenn Siedürfenund von den ursprünglichen Versionen aktualisieren möchten systemd, dann schlage ich vor, die neueste Version zu verwenden und das neueste Tag auszuwählen, z. B. heute istVersion 243.
  • der Patch alsgist auf github, dieses wurde auf die Ubuntu- systemdQuelle, Version 240-6ubuntu5.7, angewendet.

Dieser Patch wird nicht wie im vorherigen Abschnitt beschrieben generiert, weil ichunterschiedDie Ubuntu-Quelle mit den bereits gepatchten Versionen main.cfinden Sie imvorgenannter ZweigDas Endergebnis sollte nicht sehr unterschiedlich sein.

Schlussbemerkung

Als mir dieses Problem vor einiger Zeit zum ersten Mal auffiel, habe ich nach der Überprüfung, ob die Konfiguration in Ordnung war, beschlossen, zu warten, bis Ubuntu es behoben hätte (ich konnte es nicht auf einen Fehler von systemd zurückführen).

Aber heute hat es mich daran gehindert, Dinge zu tun, die ich wirklich tun wollte, und deshalb habe ich beschlossen, dass es an der Zeit ist, etwas dagegen zu unternehmen.

HierInKommentar 7dort habe ich gefundender systemd-Bugzum ersten Mal erwähnt, dann habe ich diese Frage gefunden.

Wenige Stunden später habe ich auch eine zwei Tage alte Meldung vom 19.10. gesehen.

Es muss nicht extra darauf hingewiesen werden, dass das Ersetzen einer ausführbaren Datei in einem „paketgesteuerten System“ nicht unbedingt eine gute Idee ist. In diesem Fall ist es für mich jedoch in Ordnung.

verwandte Informationen