Wann war das letzte dist-upgrade?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
paedubucher
Beiträge: 932
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Wann war das letzte dist-upgrade?

Beitrag von paedubucher » 30.07.2020 10:33:33

Ich administriere eine Flotte virtueller Server, ca. 60 an der Zahl. Die meisten laufen unter Ubuntu in den Versionen 16.04 LTS bzw. 18.04 LTS. In manchen Aspekten unterscheidet sich Ubuntu recht stark von Debian, bei diesem Problem verhält es sich aber ziemlich ähnlich. (Von daher bin ich hier schon im richtigen Forum.) Mein Problem ist folgendes: Ich möchte wissen, wann das letzte dist-upgrade stattgefunden hat. Eigentlich habe ich das Problem gelöst, ich möchte aber erfahren, ob es vielleicht einen besseren/zuverlässigeren oder eleganteren Mechanismus gibt.

Grundsätzlich besuche ich die einzelnen Hosts nacheinander mit einem Skript. Dieses Problem ist bereits für andere Kontexte gelöst. Darum möchte ich hier nur einen einzelnen Host betrachten.

Unter /var/log/apt gibt es verschiedene Log-Dateien. Das ist zum einen das aktulle history.log. Andererseits hat es mehrere archivierte Logdateien, die komprimiert sind, also history.log.1.gz, history.log.2.gz usw. Die Dateien enthalten Einträge der folgenden Struktur:

Code: Alles auswählen

Start-Date: 2020-07-19  21:21:51
Commandline: apt-get upgrade
Requested-By: debian (1000)
Upgrade: qemu-utils:amd64 (1:3.1+dfsg-8+deb10u5, 1:3.1+dfsg-8+deb10u6)
End-Date: 2020-07-19  21:21:52

Start-Date: 2020-07-30  10:11:29
Commandline: apt-get dist-upgrade
Requested-By: debian (1000)
Upgrade: grub-common:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), grub2-common:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), redis:amd64 (5:5.0.3-4+deb10u1, 5:5.0.3-4+deb10u2), grub-pc:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), grub-pc-bin:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), qemu-utils:amd64 (1:3.1+dfsg-8+deb10u6, 1:3.1+dfsg-8+deb10u7), redis-tools:amd64 (5:5.0.3-4+deb10u1, 5:5.0.3-4+deb10u2), redis-server:amd64 (5:5.0.3-4+deb10u1, 5:5.0.3-4+deb10u2)
End-Date: 2020-07-30  10:11:36
Für mich sind die folgenden Zeilen relevant: Commandline: apt-get dist-upgrade ... und End-Date: ....

Als ersten Schritt möchte ich mal alle Dateien zusammenhängen. Mit zcat -f kann ich sowohl komprimierte als auch unkomprimierte Dateien zusammenhängen:

Code: Alles auswählen

zcat -f /var/log/apt/history.log*
Nun kann ich die Zeilen mit grep -E folgendermassen einschränken:

Code: Alles auswählen

grep -E '(^Commandline:|^End-Date:)'
Kombiniert ergibt dies folgende Session (Ausgabe gekürzt):

Code: Alles auswählen

$ zcat -f /var/log/apt/history.log* | grep -E '(^Commandline:|^End-Date:)'
Commandline: apt-get autoremove python3-virtualenv
End-Date: 2020-04-04  14:58:50
Commandline: apt-get install python3-venv
End-Date: 2020-04-04  14:58:57
Commandline: apt-get upgrade
End-Date: 2020-04-05  12:51:53
Commandline: apt-get dist-upgrade
End-Date: 2020-04-05  12:52:14
Commandline: apt-get install lsof
End-Date: 2020-04-11  00:42:59
Ich habe oben jeweils meine Befehlszeile und darauf folgend den Endzeitpunkt. Nun möchte ich jeweils Die Zeile nach Commandline: apt-get dist-upgrade herausfiltern, wozu ich awk verwende:

Code: Alles auswählen

awk '/Commandline: apt-get dist-upgrade/ { getline; print }'
Jetzt habe ich nur noch ein paar Datumszeilen:

Code: Alles auswählen

$ zcat -f /var/log/apt/history.log* | grep -E '(^Commandline:|^End-Date:)' | awk '/Commandline: apt-get dist-upgrade/ { getline; print }'
End-Date: 2020-07-30  10:11:36
End-Date: 2020-05-12  18:34:14
End-Date: 2020-04-05  12:52:14
Jetzt kann ich das Jahr rausfiltern:

Code: Alles auswählen

grep -o -E '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}'
Numerisch sortieren, und der letzte Eintrag ist dann das gesuchte Datum:

Code: Alles auswählen

sort -n | tail -1
Somit wäre mein Problem gelöst:

Code: Alles auswählen

$ zcat -f /var/log/apt/history.log* | grep -E '(^Commandline:|^End-Date:)' | awk '/Commandline: apt-get dist-upgrade/ { getline; print }' | grep -o -E '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}' | sort -n | tail -1
2020-07-30
Nun frage ich mich, ob das die eleganteste Lösung ist, zumal die Pipeline ja doch recht lange ist. Da ich mit awk doch ein recht mächtiges Programm aufrufe, könnte ich vielleicht mehr daran abdelegieren.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
hikaru
Moderator
Beiträge: 13896
Registriert: 09.04.2008 12:48:59

Re: Wann war das letzte dist-upgrade?

Beitrag von hikaru » 30.07.2020 10:51:49

Im Prinzip würde ich es genauso machen, aber im Detail anders rangehen.
Das zcat auf die verschiedenen Archive solltest du dir sparen können, wenn dich nur das letzte dist-upgrade interessiert, denn du brauchst dafür nur das aktuelle, unkomprimierte Log.
Dann würde ich als ersten Schritt auch nicht die Timestamps grepen, sondern die dist-upgrades. Das sollte weniger Treffer liefern.
Mit grep -A kannst du dir außerdem auf deine Treffer folgende Zeilen mit ausgeben lassen, so dass du mit grep -A 3 'apt-get dist-upgrade' direkt die passenden(!) Timestamps erhältst, also später nicht mehr sortieren musst.
Theoretisch könntest du jetzt diese Ausgabe abermals grepen um nur die Timestamps übrigzubehalten, aber da dich eh nur das letzte dist-upgrade interessiert, reicht auch ein tail -n 1

Mag sein, das das jetzt nicht 100%ig durchdacht von mir und daher zu einfach ist. Und sicher spielt hier auch eine Rolle, dass ich mit awk etwas auf Kriegsfuß stehe. Aber so wäre mein Ansatz.

Benutzeravatar
paedubucher
Beiträge: 932
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Wann war das letzte dist-upgrade?

Beitrag von paedubucher » 30.07.2020 11:08:32

hikaru hat geschrieben: ↑ zum Beitrag ↑
30.07.2020 10:51:49
Im Prinzip würde ich es genauso machen, aber im Detail anders rangehen.
Das zcat auf die verschiedenen Archive solltest du dir sparen können, wenn dich nur das letzte dist-upgrade interessiert, denn du brauchst dafür nur das aktuelle, unkomprimierte Log.
Nach welcher Logik werden die alten Logs wegkomprimiert? Wenn ich monatelang nur apt-get upgrade mache, dann dürfte ja im aktujellsten Log kein dist-upgrade mehr zu finden sein. Und in meinem Fall können diese eben Monate zurückliegen.
hikaru hat geschrieben: ↑ zum Beitrag ↑
30.07.2020 10:51:49
Dann würde ich als ersten Schritt auch nicht die Timestamps grepen, sondern die dist-upgrades. Das sollte weniger Treffer liefern.
Mit grep -A kannst du dir außerdem auf deine Treffer folgende Zeilen mit ausgeben lassen, so dass du mit grep -A 3 'apt-get dist-upgrade' direkt die passenden(!) Timestamps erhältst, also später nicht mehr sortieren musst.
Leider kann es da noch Zeilen dazwischen geben:

Code: Alles auswählen

$ zcat -f /var/log/apt/history* | grep -A 3 'apt-get dist-upgrade'

Requested-By: debian (1000)
Upgrade: grub-common:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), grub2-common:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), redis:amd64 (5:5.0.3-4+deb10u1, 5:5.0.3-4+deb10u2), grub-pc:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), grub-pc-bin:amd64 (2.02+dfsg1-20, 2.02+dfsg1-20+deb10u1), qemu-utils:amd64 (1:3.1+dfsg-8+deb10u6, 1:3.1+dfsg-8+deb10u7), redis-tools:amd64 (5:5.0.3-4+deb10u1, 5:5.0.3-4+deb10u2), redis-server:amd64 (5:5.0.3-4+deb10u1, 5:5.0.3-4+deb10u2)
End-Date: 2020-07-30  10:11:36
--
Commandline: apt-get dist-upgrade
Requested-By: debian (1000)
Install: linux-image-4.19.0-9-cloud-amd64:amd64 (4.19.118-2, automatic)
Upgrade: linux-image-cloud-amd64:amd64 (4.19+105+deb10u3, 4.19+105+deb10u4)
--
Commandline: apt-get dist-upgrade
Requested-By: debian (1000)
Install: linux-image-4.19.0-8-cloud-amd64:amd64 (4.19.98-1, automatic)
Upgrade: linux-image-cloud-amd64:amd64 (4.19+105+deb10u1, 4.19+105+deb10u3)
Von daher muss ich mich schon zunächst auf die beiden relevanten Zeilenarten einschränken.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

TomL

Re: Wann war das letzte dist-upgrade?

Beitrag von TomL » 30.07.2020 14:41:02

Diese Variante produziert bei mir:

Code: Alles auswählen

# zgrep -i -E "commandline|end-date" * | grep "full-upgrade" -A 1 | grep -v "^-" | awk '!(NR%2){print $0 " " p}{p=$0}' | awk -F ' ' '{print $2 "; " $3 "; " $6}' | sort

2019-07-09; 10:44:39; full-upgrade
2019-07-12; 09:34:42; full-upgrade
2019-07-15; 09:40:45; full-upgrade
2019-07-21; 09:51:13; full-upgrade
2019-07-26; 21:15:32; full-upgrade
2019-07-29; 16:01:47; full-upgrade
2019-08-10; 10:51:17; full-upgrade
2019-08-13; 10:10:49; full-upgrade
2019-08-16; 09:54:02; full-upgrade
2019-08-19; 09:49:10; full-upgrade
2019-08-22; 09:49:58; full-upgrade
2019-09-03; 14:40:25; full-upgrade
2019-09-06; 11:14:19; full-upgrade
2019-09-09; 10:34:57; full-upgrade
2019-09-18; 09:55:12; full-upgrade
2019-09-20; 22:33:07; full-up usw.usw.

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: Wann war das letzte dist-upgrade?

Beitrag von MSfree » 30.07.2020 15:06:02

http://ftp.debian.org/debian/dists/

Code: Alles auswählen

[DIR]	Debian8.11/	2019-07-06 09:37 	-
[DIR]	Debian9.13/	2020-07-18 11:00 	-
[DIR]	Debian10.4/	2020-05-09 08:55 	- 

Benutzeravatar
paedubucher
Beiträge: 932
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Wann war das letzte dist-upgrade?

Beitrag von paedubucher » 30.07.2020 22:28:10

TomL hat geschrieben: ↑ zum Beitrag ↑
30.07.2020 14:41:02
Diese Variante produziert bei mir:

Code: Alles auswählen

# zgrep -i -E "commandline|end-date" * | grep "full-upgrade" -A 1 | grep -v "^-" | awk '!(NR%2){print $0 " " p}{p=$0}' | awk -F ' ' '{print $2 "; " $3 "; " $6}' | sort
[code]
...
Und bei mir gar nichts.
MSfree hat geschrieben: ↑ zum Beitrag ↑
30.07.2020 15:06:02
http://ftp.debian.org/debian/dists/

Code: Alles auswählen

[DIR]	Debian8.11/	2019-07-06 09:37 	-
[DIR]	Debian9.13/	2020-07-18 11:00 	-
[DIR]	Debian10.4/	2020-05-09 08:55 	- 
Da steht, seit wann ein dist-upgrade angeboten wird. Mich interessiert, wann es auf meinem Server eingespielt worden ist.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

TomL

Re: Wann war das letzte dist-upgrade?

Beitrag von TomL » 30.07.2020 23:06:44

paedubucher hat geschrieben: ↑ zum Beitrag ↑
30.07.2020 22:28:10
Und bei mir gar nichts.
Äääh... ja... das ist ja auch korrekt. Ich suche nach "full-upgrade", weil icht apt verwende.... das musst Du natürlich bei Dir auf "dist-upgrade" ändern, weil Du anscheinend apt-get verwendest.
paedubucher hat geschrieben: ↑ zum Beitrag ↑
30.07.2020 22:28:10
Mich interessiert, wann es auf meinem Server eingespielt worden ist.
Genau das sollte mein Beispiel eigentlich anzeigen... Du musst es nur anpassen... :wink:

MaGe
Beiträge: 1796
Registriert: 01.06.2014 17:12:16

Re: Wann war das letzte dist-upgrade?

Beitrag von MaGe » 31.07.2020 08:03:47

Keine Ahnung! dumme Frage, macht das nicht das gleiche

Code: Alles auswählen

 cat /var/log/apt/history.log | grep "Start-Date"| awk '{print $2}'| tail -1 
2020-07-30



gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: Wann war das letzte dist-upgrade?

Beitrag von MSfree » 31.07.2020 08:59:18

MaGe hat geschrieben: ↑ zum Beitrag ↑
31.07.2020 08:03:47
Keine Ahnung! dumme Frage, macht das nicht das gleiche

Code: Alles auswählen

 cat /var/log/apt/history.log | grep "Start-Date"| awk '{print $2}'| tail -1 
2020-07-30
1. useless use of cat
2. liefert das nur die Stellen, in denen "Start-Date" vorkommt. Das kann aber auch durch ein apt-get purge ... oder apt-get install ... etc. verursacht werden.

Wenn du das mit awk machen willst, dann so:

Code: Alles auswählen

zcat /var/log/apt/history.* |\
awk '{
  if( $1 == "Commandline:" ) {
    if( ( $2 == "apt" && $3 == "full-upgrade" ) || ( $2 == "apt-get" && $3 == "dist-upgrade" ) ) {
      split( prev, array)
      print $2" "$3" " array[2]
    }
  }
  prev=$0
}' |\
sort

TomL

Re: Wann war das letzte dist-upgrade?

Beitrag von TomL » 31.07.2020 11:39:40

MSfree hat geschrieben: ↑ zum Beitrag ↑
31.07.2020 08:59:18
Wenn du das mit awk machen willst, dann so:
Das ist bei mir leider unvollständig:

Code: Alles auswählen

# zcat /var/log/apt/history.* |awk '{
  if( $1 == "Commandline:" ) {
    if( ( $2 == "apt" && $3 == "full-upgrade" ) || ( $2 == "apt-get" && $3 == "dist-upgrade" ) ) {
      split( prev, array)
      print $2" "$3" " array[2]
    }
  }
  prev=$0
}' |sort

gzip: /var/log/apt/history.log: not in gzip format
apt full-upgrade 2019-03-04
apt full-upgrade 2019-03-25
apt full-upgrade 2019-03-30
usw.
gzip: /var/log/apt/history.log: not in gzip format wird nicht ausgewertet. Mein Beispiel bringt alles... apt und apt-get, jetzt auch ohne vorher den Pfad zu wechseln.

Code: Alles auswählen

# zgrep -i -E "commandline|end-date" /var/log/apt/* | egrep "full-upgrade|dist-upgrade" -A 1 | grep -v "^-" | awk '!(NR%2){print $0 " " p}{p=$0}' | awk -F ' ' '{print $2 "; " $3 "; " $6}' | sort

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: Wann war das letzte dist-upgrade?

Beitrag von MSfree » 31.07.2020 11:51:39

TomL hat geschrieben: ↑ zum Beitrag ↑
31.07.2020 11:39:40
Das ist bei mir leider unvollständig:
Danke für den Hinweis, dann eben so:

Code: Alles auswählen

zcat -f /var/log/apt/history.* |awk '{
  if( $1 == "Commandline:" ) {
    if( ( $2 == "apt" && $3 == "full-upgrade" ) || ( $2 == "apt-get" && $3 == "dist-upgrade" ) ) {
      split( prev, array)
      print $2" "$3" " array[2]
    }
  }
  prev=$0
}' |sort
zcat kann auch unkomprimierte Dateien "caten", dann muß aber "-f" mitgegeben weden.

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: Wann war das letzte dist-upgrade?

Beitrag von tobo » 31.07.2020 12:35:18

Eine sed-Version:

Code: Alles auswählen

zgrep -EhB1 "(full|dist)-upgrade" /var/log/apt/history.log* | sed -E '/^C/d;/^-/d;s/.* (.*)  .*/\1/' | sort | tail -1
Ebenfalls ausgestattet mit der lokalen Datumsgrenzenunschärfe bezüglich Start/End-Date.

Benutzeravatar
paedubucher
Beiträge: 932
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Wann war das letzte dist-upgrade?

Beitrag von paedubucher » 01.08.2020 13:42:19

tobo hat geschrieben: ↑ zum Beitrag ↑
31.07.2020 12:35:18
Eine sed-Version:

Code: Alles auswählen

zgrep -EhB1 "(full|dist)-upgrade" /var/log/apt/history.log* | sed -E '/^C/d;/^-/d;s/.* (.*)  .*/\1/' | sort | tail -1
Ebenfalls ausgestattet mit der lokalen Datumsgrenzenunschärfe bezüglich Start/End-Date.
Ah, du gehst über das Startdatum! Ist natürlich auch eine Idee. Könnte es allenfalls Einträge mit Start- aber ohne Enddatum geben, z.B. bei abgebrochenen Vorgängen? Oder erscheinen die einfach nicht im Log?

Dein Ansatz ist der bisher schönste, finde ich.
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: Wann war das letzte dist-upgrade?

Beitrag von tobo » 01.08.2020 14:59:04

paedubucher hat geschrieben: ↑ zum Beitrag ↑
01.08.2020 13:42:19
Ah, du gehst über das Startdatum! Ist natürlich auch eine Idee.
Ist halt einfacher. Die Zeile mit dem Startdatum ist eine Zeile darüber, die mit dem Enddatum ist 2, 3 oder 4 Zeilen darunter.
Könnte es allenfalls Einträge mit Start- aber ohne Enddatum geben, z.B. bei abgebrochenen Vorgängen?
Ich meinte eher kurz vor Mitternacht gestartet und nach 0:00 Uhr fertig.
Oder erscheinen die einfach nicht im Log?
Habe gerade mal meinem firefox-esr ein downgrade verordnet, dann ein dist-upgrade nachgeschoben und dieses abgebrochen. Start-Date bezieht dabei auf den Beginn des Konfigurierens, also nach dem Paket-Download. Ist so wie erwartet/erhofft - Der Fehler wird gelistet, danach kommt ein End-Date:
Start-Date: 2020-08-01 14:37:15
Commandline: apt-get install firefox-esr=68.10.0esr-1~deb9u1
Downgrade: firefox-esr:amd64 (68.11.0esr-1~deb9u1, 68.10.0esr-1~deb9u1)
End-Date: 2020-08-01 14:37:24

Start-Date: 2020-08-01 14:44:08
Commandline: apt-get dist-upgrade
Upgrade: firefox-esr:amd64 (68.10.0esr-1~deb9u1, 68.11.0esr-1~deb9u1)
Error: Sub-process /usr/bin/dpkg exited unexpectedly
End-Date: 2020-08-01 14:44:16

Start-Date: 2020-08-01 14:45:35
Commandline: apt-get dist-upgrade
Upgrade: firefox-esr:amd64 (68.10.0esr-1~deb9u1, 68.11.0esr-1~deb9u1)
End-Date: 2020-08-01 14:45:43

Benutzeravatar
paedubucher
Beiträge: 932
Registriert: 22.02.2009 16:19:02
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Schweiz
Kontaktdaten:

Re: Wann war das letzte dist-upgrade?

Beitrag von paedubucher » 01.08.2020 19:47:59

tobo hat geschrieben: ↑ zum Beitrag ↑
01.08.2020 14:59:04
Ist halt einfacher. Die Zeile mit dem Startdatum ist eine Zeile darüber, die mit dem Enddatum ist 2, 3 oder 4 Zeilen darunter.
Das stimmt!
tobo hat geschrieben:
paedubucher hat geschrieben: Könnte es allenfalls Einträge mit Start- aber ohne Enddatum geben, z.B. bei abgebrochenen Vorgängen?
Ich meinte eher kurz vor Mitternacht gestartet und nach 0:00 Uhr fertig.
OK, das ist mir nicht so wichtig. Ich kann meistens tagsüber Maintenance machen.
tobo hat geschrieben: Habe gerade mal meinem firefox-esr ein downgrade verordnet, dann ein dist-upgrade nachgeschoben und dieses abgebrochen. Start-Date bezieht dabei auf den Beginn des Konfigurierens, also nach dem Paket-Download. Ist so wie erwartet/erhofft - Der Fehler wird gelistet, danach kommt ein End-Date:
Start-Date: 2020-08-01 14:37:15
Commandline: apt-get install firefox-esr=68.10.0esr-1~deb9u1
Downgrade: firefox-esr:amd64 (68.11.0esr-1~deb9u1, 68.10.0esr-1~deb9u1)
End-Date: 2020-08-01 14:37:24

Start-Date: 2020-08-01 14:44:08
Commandline: apt-get dist-upgrade
Upgrade: firefox-esr:amd64 (68.10.0esr-1~deb9u1, 68.11.0esr-1~deb9u1)
Error: Sub-process /usr/bin/dpkg exited unexpectedly
End-Date: 2020-08-01 14:44:16

Start-Date: 2020-08-01 14:45:35
Commandline: apt-get dist-upgrade
Upgrade: firefox-esr:amd64 (68.10.0esr-1~deb9u1, 68.11.0esr-1~deb9u1)
End-Date: 2020-08-01 14:45:43
Hm, in diesem Fall habe ich natürlich auch ein Problem. Ein End-Date ist offenbar immer da. Ich muss auch darauf achten, dass im gleichen Block kein Error drin steckt. Das macht die ganze Übung natürlich noch etwas schwieriger...
Habe nun, ach! Java
Python und C-Sharp,
Und leider auch Visual Basic!
Durchaus programmiert mit heissem Bemühn.
Da steh' ich nun, ich armer Tor!
Und bin so klug als wie zuvor.

Benutzeravatar
whisper
Beiträge: 3373
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Wann war das letzte dist-upgrade?

Beitrag von whisper » 01.08.2020 20:51:45

Interessante Thema.

Code: Alles auswählen

zgrep -i -E "commandline|end-date" /var/log/apt/history* | grep "full-upgrade" -A 1 | grep -v "^-" | awk '!(NR%2){print $0 " " p}{p=$0}' | awk -F ' ' '{print $2 "; " $3 "; " $6}' | sort
Finde ich praktisch.
Nur bin ich zu blöde, das als Alias zu definieren.
Hat da jemand eine Lösung?
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: Wann war das letzte dist-upgrade?

Beitrag von tobo » 01.08.2020 21:25:47

paedubucher hat geschrieben: ↑ zum Beitrag ↑
01.08.2020 19:47:59
Ich muss auch darauf achten, dass im gleichen Block kein Error drin steckt. Das macht die ganze Übung natürlich noch etwas schwieriger...
Nochmal eine Lösung mit sed; mit Bezug zum End-Date und ohne Errors. Die besorgt sich alle Blöcke (Start-Date bis End-Date), schaut/selektiert ob ein dist-upgrade oder full-upgrade vorhanden ist, entfernt alle Blöcke mit einem Error und gibt dann das Ende-Datum des Blocks aus. Danach noch sort und tail.

Code: Alles auswählen

zcat -f /var/log/apt/history* | sed -En '/^Start-Date:/{h;:a;n;H;/^End-Date:/!ba;x};/(full|dist)-upgrade/{/Error/d;s/^.*\n(End-Date.*)/\1/;s/.* (.*)  .*/\1/p}' | sort | tail -1
EDIT:
Da End-Date: immer auf der letzten Zeile eines Blocks liegt, geht es hintenraus auch noch ein wenig kürzer:

Code: Alles auswählen

zcat -f /var/log/apt/history* | sed -En '/^Start-Date:/{h;:a;n;H;/^End-Date:/!ba;x};/(full|dist)-upgrade/{/Error:/d;s/^.*\n.* (.*)  .*/\1/p}' | sort | tail -1
EDIT2:
Gelöscht - Falsche Logik!
Zuletzt geändert von tobo am 02.08.2020 12:24:21, insgesamt 3-mal geändert.

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: Wann war das letzte dist-upgrade?

Beitrag von tobo » 01.08.2020 22:50:19

whisper hat geschrieben: ↑ zum Beitrag ↑
01.08.2020 20:51:45
Interessante Thema.

Code: Alles auswählen

zgrep -i -E "commandline|end-date" /var/log/apt/history* | grep "full-upgrade" -A 1 | grep -v "^-" | awk '!(NR%2){print $0 " " p}{p=$0}' | awk -F ' ' '{print $2 "; " $3 "; " $6}' | sort
Finde ich praktisch.
Nur bin ich zu blöde, das als Alias zu definieren.
Hat da jemand eine Lösung?
Die Sache mit dem Quoting und dem Vermischen von ' und "!? Da der \ innerhalb von '...' keine Wirkung hat, wird ' (innerhalb der '...') mit '\'' ersetzt. Das erste ' schließt, danach das Zeichen mit \' und wieder Öffnen mit ':

Code: Alles auswählen

alias hist='zgrep -i -E "commandline|end-date" /var/log/apt/history* | grep "full-upgrade" -A 1 | grep -v "^-" | awk '\''!(NR%2){print $0 " " p}{p=$0}'\'' | awk -F '\'' '\'' '\''{print $2 "; " $3 "; " $6}'\'' | sort'

Benutzeravatar
whisper
Beiträge: 3373
Registriert: 23.09.2002 14:32:21
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: Wann war das letzte dist-upgrade?

Beitrag von whisper » 02.08.2020 08:36:25

tobo hat geschrieben: ↑ zum Beitrag ↑
01.08.2020 22:50:19
:THX:
Alter ist übrigens keine Ausrede, nur Erfahrung, die sich stapelt. 😉

Antworten