
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 systemd
System neu. Ersetzen Sie nur die systemd
ausfü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 -u
zwischen dem von Ubuntu src/core/main.c
und 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 a
und b
können Sie natürlich auch andere Namen verwenden.
Im Ordner systemd-240
(erhalten durch Ausführen apt-get source systemd
von ) befindet sich debian/patches
. Kopieren Sie es my.patch
dorthin 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 .deb
in /var/cache/pbuilder/result/
. Allerdings ist es das „Original“.
Wechseln Sie in das Verzeichnis systemd-240
und führen Sie aus pdebuild --use-pdebuild-internal
.
Nach einer Weile… gibt /var/cache/pbuilder/result
es 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.patch
und dieser tar.xz
trägt den Namen.
Entpacken Sie nun die Datei .deb
in a-folder
( dpkg-deb -R systemd_240-6ubuntu5_amd64.deb a-folder
) und kopieren Sie sie als Root a-folder/lib/systemd/systemd
in /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 -l
sollte 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-
systemd
Quelle, 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.c
finden 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.