bennet_01
Anmeldungsdatum: 27. August 2019
Beiträge: 36
|
Hallo,
Ich möchte ein Programm schreiben, was automatisch Updates installiert und den Rechner danach wenn nötig neu startet. Ich habe ein bisschen gegoogelt und etwas gefunden: https://serverfault.com/questions/92932/how-does-ubuntu-keep-track-of-the-system-restart-required-flag-in-motd Darin steht, dass man | sudo /usr/share/update-notifier/notify-reboot-required
|
ausführt und die Dateien /var/run/reboot-required
und
/var/run/reboot-required.pkgs überprüft. Wenn ich jetzt Updates installiere und danache den oben genannten Befehl ausführe, kann ich in den Dateien sehen, ob ein Neustart erforderlich ist: | >> cat /var/run/reboot-required
*** Neustart des Systems erforderlich ***
>> cat /var/run/reboot-required.pkgs
paket1
paket2
paket3
|
Wenn ich die Befehle direkt nach einem Neustart ausführe: | >> cat /var/run/reboot-required
*** Neustart des Systems erforderlich ***
>> cat /var/run/reboot-required.pkgs
|
Gibt es einen zuverlässigen weg, zu überprüfen, ob ein Neustart benötigt wird?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Hallo, bennet_01 schrieb: Ich habe ein bisschen gegoogelt und etwas gefunden: https://serverfault.com/questions/92932/how-does-ubuntu-keep-track-of-the-system-restart-required-flag-in-motd Darin steht, dass man | sudo /usr/share/update-notifier/notify-reboot-required
|
ausführt
Das ist ein Fehlschluss, denn das steht nicht im verlinkten Text - das genannte Skript wird von der Paketverwaltung ausgeführt, wenn Pakete installiert wurden, die einen Neustart benötigen. Sprich du musst in deinem Skript lediglich testen, ob /var/run/reboot-required
existiert und falls das der Fall darauf reagieren.
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5323
|
unattended-upgrades ist dir bekannt? Wenn du das automatische Ausfuehren deaktivierst, hast du die selbe Funktionalitaet, nur robuster und anpassbar.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
Ich habe hier ein Skript, das dem schon recht nahe kommt. Nachteil bei komplett automatisch ist halt, dass man dann nicht mehr gefragt wird, welche Version einer Konfigurationsdatei man behalten möchte. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 | #!/bin/sh
# Update all packages and do cleanup
# run as root
test $(id -u) -eq 0 || exec sudo "DEBUG=$DEBUG" "$0" "$@"
# switch on debug output if $DEBUG is set
test -z "$DEBUG" || set -x
# exit on any error
set -e
start=$(date +%s)
show(){ echo ''; echo ">>>> $(( $(date +%s) - start )) >> $*"; "$@"; }
# repair dangling installs
show apt-get install -f --yes
# get new package lists
# test -e /var/lib/apt/periodic/update-success-stamp && test $(( $(date +%s) - $(date +%s -r /var/lib/apt/periodic/update-success-stamp) )) -le 3600 || \
show apt-get update
# automatically upgrade all packages that can be upgraded
show apt-get dist-upgrade --yes
# remove unused package configurations
show apt-get autoclean
# refresh snap packages
show snap refresh || echo 'no snap'
# show reboot indicator
cat /var/run/reboot-required 2>/dev/null || {
# if no reboot necessary purge uninstalled packages
show apt-get autoremove --yes
dpkg-query -l | awk '/^rc/ {print $2}' | xargs -rtd \\n apt-get purge --yes
}
show sync
show : end
# EOF
|
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
rklm schrieb: Ich habe hier ein Skript, das dem schon recht nahe kommt. Nachteil bei komplett automatisch ist halt, dass man dann nicht mehr gefragt wird, welche Version einer Konfigurationsdatei man behalten möchte. | # automatically upgrade all packages that can be upgraded
show apt-get dist-upgrade --yes
|
Funktioniert das wirklich zuverlässig für alle Pakete? Ich kenne aus https://debian-handbook.info/browse/de-DE/stable/sect.automatic-upgrades.html 6.8.5 "Die Wunderkombination", die dafür sorgt, dass apt zuverlässig nicht-interaktiv läuft und die Beibehaltung der bestehenden Konfigurationsdateien erzwingt:
export DEBIAN_FRONTEND=noninteractive
yes '' | apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" dist-upgrade
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
seahawk1986 schrieb:
Funktioniert das wirklich zuverlässig für alle Pakete?
Ich führe das immer manuell aus, sieh meine Bemerkungen. Insofern, für mich tut es, was es soll. ☺
|
bennet_01
(Themenstarter)
Anmeldungsdatum: 27. August 2019
Beiträge: 36
|
seahawk1986 schrieb: Das ist ein Fehlschluss, denn das steht nicht im verlinkten Text - das genannte Skript wird von der Paketverwaltung ausgeführt, wenn Pakete installiert wurden, die einen Neustart benötigen. Sprich du musst in deinem Skript lediglich testen, ob /var/run/reboot-required
existiert und falls das der Fall darauf reagieren.
OK, das erklärt dann wohl, warum die Dateien immer erstellt wurden.
sebix schrieb: unattended-upgrades ist dir bekannt? Wenn du das automatische Ausfuehren deaktivierst, hast du die selbe Funktionalitaet, nur robuster und anpassbar.
Nein, ist mir nicht bekannt. Hat das die gleiche Funktionalität wie das Skript zum updaten oder das mit dem Neustart? rklm schrieb: Ich habe hier ein Skript, das dem schon recht nahe kommt. Nachteil bei komplett automatisch ist halt, dass man dann nicht mehr gefragt wird, welche Version einer Konfigurationsdatei man behalten möchte.
Danke für das Skript, am ende soll aber alles in Python oder so eingebunden werden. Noch ein Paar fragen: 1. Was bedeutet das show vor den apt-Aufrufen?
2. Was passiert in den letzten drei Zeilen?
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5323
|
bennet_01 schrieb: sebix schrieb: unattended-upgrades ist dir bekannt? Wenn du das automatische Ausfuehren deaktivierst, hast du die selbe Funktionalitaet, nur robuster und anpassbar.
Nein, ist mir nicht bekannt. Hat das die gleiche Funktionalität wie das Skript zum updaten oder das mit dem Neustart?
Beides - siehe Dokumentation des Pakets und die manpages.
|
bennet_01
(Themenstarter)
Anmeldungsdatum: 27. August 2019
Beiträge: 36
|
sebix schrieb: bennet_01 schrieb: sebix schrieb: unattended-upgrades ist dir bekannt? Wenn du das automatische Ausfuehren deaktivierst, hast du die selbe Funktionalitaet, nur robuster und anpassbar.
Nein, ist mir nicht bekannt. Hat das die gleiche Funktionalität wie das Skript zum updaten oder das mit dem Neustart?
Beides - siehe Dokumentation des Pakets und die manpages.
Da habe ich schon geguckt, ist beides nicht sehr aufschlussreich. Da steht nur, dass es Sicherheitsupdates installiert. Mein Programm soll aber alle Updates installieren.
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5323
|
bennet_01 schrieb: sebix schrieb: bennet_01 schrieb: sebix schrieb: unattended-upgrades ist dir bekannt? Wenn du das automatische Ausfuehren deaktivierst, hast du die selbe Funktionalitaet, nur robuster und anpassbar.
Nein, ist mir nicht bekannt. Hat das die gleiche Funktionalität wie das Skript zum updaten oder das mit dem Neustart?
Beides - siehe Dokumentation des Pakets und die manpages.
Da habe ich schon geguckt, ist beides nicht sehr aufschlussreich. Da steht nur, dass es Sicherheitsupdates installiert. Mein Programm soll aber alle Updates installieren.
Du kannst konfigurieren, von welchen Quellen die Updates installiert werden sollen, in /etc/apt/apt.conf.d/50unattended-upgrades Parameter Unattended-Upgrade::Allowed-Origins (ist per default auf Sicherheitsupdates beschraenkt).
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12801
|
Danke für das Skript, am ende soll aber alles in Python oder so eingebunden werden.
Du kannst natürlich das gesamte Skript aus Python heraus aufrufen oder die einzelnen Befehle.
1. Was bedeutet das show vor den apt-Aufrufen?
Siehe die Shell-Funktion, die oben im Skript definiert ist.
2. Was passiert in den letzten drei Zeilen?
Eigentlich kann ja nur Zeile 42 rätselhaft sein. Der hier ausgeführte Befehl ":" ist eine Nop. Das ist ein uraltes Shell-Dingen, das kaum jemand kennt. Das habe ich nur eingefügt, damit noch einmal ein Zeitstempel ausgegeben wird, damit man sehen kann, wie lange sync gedauert hat.
|