Wie kann ich Updates unter Arch Linux verantwortungsvoll automatisch ausführen?


14

Ich bin ein bisschen ein Neuling in Arch Linux und gewöhne mich immer noch an einige seiner Paradigmen. Ich komme mit vielen Gewohnheiten aus einer anderen Distribution, die etwas strukturierter und in gewisser Weise vorhersehbar waren.

Eine Sache, die ich mit ein paar Systemen machen möchte¹, ist, einem Cron-Job das automatische Aktualisieren aller Systempakete zu ermöglichen. Dies scheint ziemlich einfach zu sein, es sei denn, ich möchte aussagekräftige Rückmeldungen vom System, die mir sagen, wie die Dinge gelaufen sind, die nicht so ausführlich waren, dass ich sie ignoriere, bis ich feststelle, dass das System funktioniert.

  • Die volle Ausgabe von pacmanist nicht erforderlich. Es ist mir egal, wie lange die Downloads gedauert haben oder ob es sich um das Update 46 von 53 handelt.
  • Erfolge interessieren mich größtenteils nicht.
  • Ich kümmere mich um Fehler. Wenn ein Aktualisierungslauf fehlschlägt, möchte ich darüber informiert werden und bestimmte Fehlermeldungen sollten durchgepatcht werden.
  • Ich kümmere mich um die "Hinweise", die während der Installation ausgegeben werden. Zum Beispiel sagte das heutige Systemd-Update:

    :: coredumps are no longer sent to the journal by default. To re-enable:  
    echo >/etc/sysctl.d/50-coredump.conf \  
        "kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e"
    

    Oder das Dateisystem hat dies erzeugt:

    warning: /etc/group installed as /etc/group.pacnew  
    warning: /etc/passwd installed as /etc/passwd.pacnew  
    warning: /etc/shadow installed as /etc/shadow.pacnew
    

    Diese letzte Kategorie hat mich dazu veranlasst, diese Frage zu stellen, da sie im gesamten Paketsatz sehr inkonsistent zu sein scheint. Einige davon scheinen von erzeugt worden zu sein post_upgrade(), andere voninstall() usw. . Manchmal sind sie in stdout geschrieben, manchmal in stderr. Das Format der Nachrichten ist sehr unterschiedlich: Manchmal wird ein ganzer Block in irgendeiner Weise eingerückt, manchmal wird nur eine leere Zeichenfolge als Echo ausgegeben.

Ich möchte Informationen zu Dingen erhalten, die möglicherweise einen Eingriff in ein System erfordern, ansonsten aber nicht gestört werden. Gibt es ein Tool, das diese Daten intelligent verwaltet und die Systemadministration vereinfacht? Gibt es eine Möglichkeit, die Ausgabe von Paketen unabhängig von der Installation durch pacman zu generieren? Oder bin ich alleine, um eine Art Parser zu schreiben, der harmlose Dinge aus dem Installationsprotokoll herausfiltert?

¹ Bitte beachten Sie, dass ich schlau genug bin, dies nicht auf Produktionsservern und nicht ohne vollständige Systemsicherungen auf Snapshot-Basis zu tun, die die Wiederherstellung im Katastrophenfall vereinfachen.


Das erste, was ich tun würde, ist das Entfernen des yaourtTags, sowohl von Ihrer Frage als auch von Ihrem konzeptionellen Modell: Der Versuch, dies mit den offiziellen Repos zu tun, wird schwierig genug sein, und das Hinzufügen von zufälligen Paketen aus der AUR zum Mix macht es quixotic ...
jasonwryan

Oh, und das ist keine dumme Idee; aber es drückt sehr gegen die Art und Weise, wie Arch arbeitet. Einmal täglich zu benutzen checkupdatesund zu -Syuhandhaben ist eine ziemlich triviale Aufgabe. Ich sehe keinen wirklichen Nutzen für die ganze Arbeit, die Ihr Vorschlag mit sich bringen würde.
Jasonwryan

@jasonwryan Ich wollte das erweitern, aber ich habe tatsächlich einige AUR-Pakete, die ich in denselben Workflow einbauen möchte. Momentan nutze ich yaourt ausgiebig und vermisse die Tatsache, dass es keine Trockenlaufunterstützung für Paketverwaltungsoperationen gibt! : /
Caleb

2
Die DNA von Arch macht dir die Hände schmutzig: Es ist einfach nicht so, wie es geplant ist. Sie mögen dorthin gelangen, aber es wird ein Pyrrhussieg sein und, wenn hier dokumentiert, eine ganze Reihe von Neulingen an den Rand einer Klippe führen, auf die sie völlig unvorbereitet sind ...
jasonwryan

2
Ich habe es letztes Jahr einige Zeit lang versucht und bin zu dem Schluss gekommen, dass die einzige Möglichkeit, Upgrades zu erzielen, ohne Systeme regelmäßig zu töten, darin besteht, neue Images zu erstellen (dies scheint der Basistestpunkt und zuverlässiger in Arch zu sein) und dann die Dienste mit einer Konfiguration zu transplantieren Management-Tool. Vielleicht haben sich die Aktualisierungen etwas beruhigt, aber es gab 3-4 in einem Zeitraum von 6 Monaten, die ein System ohne manuellen Eingriff auslaugen würden.
Matt

Antworten:


11

Ich möchte sowohl für Sie als auch für jede andere Person, die auf diesen Thread stößt, klar sein. Was Sie tun möchten, ist nicht möglich. Arch macht kein Geheimnis daraus, dass es von Ihnen erwartet, dass Sie Ihr System verwalten. Ein Teil dieser Verantwortung ist für den Aktualisierungszyklus vorhanden.

Nun gibt es Schritte des Aktualisierungsprozesses, die Sie verantwortungsvoll automatisieren können, die jedoch niemals automatisiert werden -Syu. Sie müssen nur für das Upgrade da sein.

Sie können beispielsweise einen cronJob einrichten , der alle Pakete herunterlädt, die installiert werden müssen (aber nicht installieren). Folgendes ist ein Auszug aus der pacmanDokumentation:

SYNC OPTIONS
...
-w  --downloadonly
    Retrieve all packages from the server, but do not install/upgrade anything.

Sie können dann einen cronJob einrichten , der ausgeführt werden soll sudo pacman -Syuw. Ich kenne mich nicht so gut auscron den Planungsfähigkeiten. Wenn es jedoch in der Lage ist, einen Job nur auszuführen, nachdem eine bestimmte Bedingung erfüllt wurde (z. B. ein Befehl, der einen bestimmten Wert zurückgibt), ist es ziemlich trivial, das Herunterladen neuer Pakete nach Bedarf auszulösen.

Ich könnte mir checkupdates | wc -lzum Beispiel vorstellen, einen Scheck gegen auszuführen. Wenn eine Zahl über Null zurückgegeben wird, können Sie den Download auslösen. Auch dies ersetzt jedoch nicht das Ausführen einer, -Syuwenn Sie anwesend und bereit sind, das Upgrade durchzuführen.

Für den letzten Teil Ihrer Frage, wo Sie die Ausgabe der Ereignisse während eines Upgrades erhalten, suchen Sie /var/log/pacman.log. Es enthält alle Fehlerinformationen, die Sie interessieren könnten.


Es gibt ein Werkzeug , das gemacht werden sollpacman für unbekannte Benutzer ein wenig benutzerfreundlicher gestaltet werden soll. Wenn ich mich nicht irre, wird auch eine Benachrichtigung über Nachrichten angezeigt, falls ein Update vorhanden sein sollte, das manuelle Eingriffe erfordert.

Dieses Tool mag Ihr Leben auf kurze Sicht ein wenig einfacher machen, es wird jedoch niemals einen Ersatz für das vernünftige und sorgfältige Befolgen der Mailinglisten darstellen.


2
Für Hinweise zu offiziellen Paketen, die manuelle Eingriffe erfordern, würde ich empfehlen, dass Sie arch-dev-public und arch-general folgen .
HalosGhost

Auch @jasonwryan ist völlig richtig. Dies pacmankönnte möglich sein. Das yaourtist nicht machbar.
HalosGhost

yaourtTatsächlich gelingt dies etwas besser, als pacmanwenn, wie ich meine, die Standardkonfiguration, die kaum mehr als ein Aur-Helfer ist, die Dinge auf lange Sicht mit ziemlicher Sicherheit ruinieren würde. Es ist jedoch äußerst konfigurierbar und kann so gestaltet werden, dass Quellbäume sehr effektiv gepflegt werden. Beides yaourtund trotzdem pacmannur wickeln alpm.
mikeserv

Oder ich denke, es ist wahrer zu sagen, yaourtWraps pacmanund einige zusätzliche alpmFunktionen und pacmanWraps alpm. In jedem Fall yaourtreicht das aber aus pacman.
mikeserv

Wie hier angemerkt , -Syuwist das potentiell ziemlich gefährlich. Es kann Teilaktualisierungen erstellen, wenn die Aktualisierungen nicht angewendet werden und die Software später mit installiert wird -S.
Sparhawk

1

Es gibt ein altes Drehbuch, das wirklich gute Arbeit leistet. es heißt safepac .

BEARBEITEN: Dieses Skript ist auf github hier noch verfügbar: https://github.com/bencahill/binfiles/blob/master/safepac

Was macht es und wie funktioniert es?

Normalerweise aktualisiere ich Arch, indem ich die Nachrichten lese und dann tue pacman -Syuoder einfach tue pacman -Syuund wenn etwas schief geht, lese ich die Nachrichten. Dieses Skript führt nichts anderes aus: Es ruft die neuesten Nachrichteneinträge aus dem RSS-Feed ab, sedzaubert und vergleicht die Namen aller Pakete, für die Aktualisierungen für die Nachrichten verfügbar sind. Es stimmt mit "Paketname" und "Paketname-" in den Nachrichten überein, und wenn der Paketname irgendwo in den Nachrichten erscheint, ignoriert es das Paket und aktualisiert nur alle anderen. Auf diese Weise wird alles, was schief gehen könnte, aufgeschoben, bis man die Zeit hat, die Angelegenheit von Hand zu untersuchen, während unkritische Aktualisierungen nur automatisch durchgeführt werden!

Wenn Sie sich einmal um ein möglicherweise nicht reibungsloses Update gekümmert haben, möchten Sie in der Regel safepacein bestimmtes Paket nicht mehr ignorieren, da es immer noch in den Nachrichten ist. Dafür ist die Ignoranz da. Jedes Mal, wenn Sie manuell aktualisiert haben, können Sie den entsprechenden Nachrichteneintrag zur Ignorierliste mit hinzufügen , wobei die Nummer des Nachrichteneintrags steht. Sie können auch die Anzahl der neuesten Nachrichten angeben, die in die Analyse mit dem Switch einbezogen werden sollen. Das Skript ist auch intelligent genug, um nicht vorhandene Einträge zu überspringen. Wenn Sie Probleme mit Paketen haben, deren Namen sehr kurz sind und die möglicherweise willkürlich in den Nachrichten erscheinen (z. B. "yes"), können Sie sie zur Whitelist hinzufügen, damit sie immer installiert werden, auch wenn sie in den Nachrichten erscheinen.safepac -Ia xxxxxx-nsafepac -Wa

Bitte beachten Sie, dass Sie ein funktionierendes Mail-Setup benötigen, da dieses Skript Ihnen auch eine Digest-Mail (mit vollem Protokoll?) Und wichtige Teile des Updates sendet:

Analysieren der pacmanAusgabe, um nach diesen Wörtern zu suchen und sie dem Digest hinzuzufügen:
"note" "pacnew" "error" "important" "warning" "exists".

Das Skript ist alt, aber die Idee ist gut und funktioniert wahrscheinlich immer noch mit kleineren Updates, falls vorhanden.


Ein mögliches Problem ist, dass wichtige (oder aktuelle) Updates nicht in den Nachrichten erwähnt werden, sondern dass Sie selbst nachverfolgen müssen. Beispiel: Update von python2 auf python3
Lesto

Trotzdem können Sie checkupdates (pacman-utils) verwenden, um die Liste der Pakete abzurufen und sie dann per Remote-Whitelist aufzulisten. Dies ist gut, wenn Sie einen Pool haben. Dann ist es vielleicht besser, so etwas wie ein lokales
Repository einzurichten

-2

Ich benutze meine eigene Unfähigkeit , um yaourtmit Cron zu rennen .


1
Yaourt ist praktisch tot : Das ist eine spektakulär schlechte Idee.
Jasonwryan

Ich selbst habe yaourtviele Jahre gebraucht . Es war ein gutes Werkzeug, aber die Dinge, die es zum "Wickeln" baute, haben ihre Form geändert und es macht jetzt einige Dinge ganz falsch. An dieser Stelle ist es so problematisch, dass die Autoren des Tools gesagt haben, dass sie es selbst nicht mehr verwenden. Wenn Sie einen AUR-Helfer suchen, empfehlen wir Ihnen, einen der aktiv gewarteten zu probieren. Ich habe zu yaymir gewechselt und bin ziemlich glücklich.
Caleb

Dieses Dienstprogramm funktioniert auch bei yaymir.
Vadzim
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.