Schleife über alle reinen Paketnamen mit "dpkg -l" und jeden Paketnamen an "apt-cache policy" reichen ist einfach. Die Installierte Version erkenne ich an den 3 Sternchen. Aber dann schauen, ob da nur eine einzelne eingerückte Zeile und nicht mehrere eingerückte Zeilen da sind und bei der dann schauen ob die dann "/var/lib/dpkg/status" lautet klingt mir eher nach der Aufgabe für einen Parser. Das muss doch einfacher gehen. Jemand eine Idee?openssh-server:
Installiert: 1:6.7p1-5+deb8u4
Installationskandidat: 1:6.7p1-5+deb8u4
Versionstabelle:
*** 1:6.7p1-5+deb8u4 0
500 http://ftp.de.debian.org/debian/ jessie/main amd64 Packages
100 /var/lib/dpkg/status
1:6.7p1-5+deb8u3 0
500 http://security.debian.org/ jessie/updates/main amd64 Packages
Nur lokal installierte Pakete anzeigen [gelöst]
-
- Beiträge: 939
- Registriert: 16.02.2009 09:35:10
Nur lokal installierte Pakete anzeigen [gelöst]
Synaptic hat da ja den schönen Menüpunkt "Installiert (lokal oder veraltet)". Ich brauche diese Funktionalität aber in einem script. Ich weiß, dass mich "dpkg nicht weiterbringt. Die Google-Lösungen benutzen aptitude, aber das ist auf den Zielsystemen auch nicht installiert. "apt-cache policy" hat auf jeden Fall die Informationen, die ich brauche:
Zuletzt geändert von nudgegoonies am 19.04.2018 10:06:48, insgesamt 1-mal geändert.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Re: Nur lokal installierte Pakete anzeigen
Wie wäre es mit apt-show-versions?
Das oder aptitude ist jedenfalls wesentlich schneller als die Liste mit apt-cache abzuklappern. Das Abklappern würde ich aber wenn mit »apt -a show Paketname« und der Zeile APT-Sources machen, ist allerdings weder schön noch schnell
Code: Alles auswählen
$ apt-show-versions | grep "No available version in archive$"
Code: Alles auswählen
for i in $(dpkg -l | grep '^i' | awk '{ print $2 }'); do apt -a show $i 2> /dev/null | grep "^APT-Sources:" | grep -v "/var/lib/dpkg/status" > /dev/null || echo $i; done
-
- Beiträge: 939
- Registriert: 16.02.2009 09:35:10
Re: Nur lokal installierte Pakete anzeigen
Danke für den Tip. Es funktioniert sehr gut. Leider ist das auf den ganzen Servern auch nicht installiert. Ein Grep nach "newer than version in archive" brachte dann auch die internen Backports von Paketen, die es in Debian auch gibt zutage. Auch das ist mir sehr wichtig. Das "apt -a show" findet tatsächlich beide Arten von Paketen. Läuft auf meiner nicht gerade schwachen Workstation aber schon mehr als eine Viertelstunde
P.S.
Das grep -v stimmt glaube ich nicht. Bei mir funktionioert es so:
P.S.2.
apt ist auch nicht installiert. Sind viele Wheezy und Jessie Rechner wovon erstere demnächst abgeschafft werden. Es gibt also kein Tool, was zur minimalen Standardinstallation von Debian gehört, mit dem man es einfach rauskriegen kann
P.S.
Das grep -v stimmt glaube ich nicht. Bei mir funktionioert es so:
Code: Alles auswählen
for i in $(dpkg -l | grep '^i' | awk '{ print $2 }'); do apt -a show $i 2> /dev/null | grep "^APT-Sources:" | grep "/var/lib/dpkg/status" > /dev/null && echo $i; done
apt ist auch nicht installiert. Sind viele Wheezy und Jessie Rechner wovon erstere demnächst abgeschafft werden. Es gibt also kein Tool, was zur minimalen Standardinstallation von Debian gehört, mit dem man es einfach rauskriegen kann
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
- schorsch_76
- Beiträge: 2597
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Re: Nur lokal installierte Pakete anzeigen
Mit Versionscode
Ohne Versionscode
Siehe
http://debiananwenderhandbuch.de/dpkg.html
Code: Alles auswählen
dpkg --get-selections
Code: Alles auswählen
dpkg --get-selections | cut -f 1
http://debiananwenderhandbuch.de/dpkg.html
dpkg --get-selections [<pattern> ...] get list of selections to stdout
Gibt, ohne weitere Parameter, eine Liste aller installierten Pakete aus. Wird zusätzlich ein „*“ angegeben, so werden alle Pakete mit dem aktuellen Zustand ausgegeben. Dies zeigt also auch zu löschende und nicht installierte Pakete an.
Diese Ausgabe kann in eine Datei geschrieben werden und mittels der Option --set-selections (beispielsweise auf einem anderen System oder aus einem Backup) wieder eingelesen werden. Somit können einzelne Systeme sehr leicht dupliziert werden. Auch kann auf diesem Wege ein System nach einem Hardware-Ausfall wiederhergestellt werden.
Beispiel:
dpkg --get-selections \* > /tmp/PAKETLISTE
Re: Nur lokal installierte Pakete anzeigen
ich sehe nicht wie die Ausgabe von dpkg weiterhilft – jedenfalls erkenne ich dort nirgends ob ein Paket über apt verfügbar ist oder nicht
Was da mit dem "grep -v" beim Kopieren und Einfügen passiert ist, weiß ich auch nicht - irgendwie habe ich da eine alte geteste und für kaputt befundene Version in der Zwischenablage gehabt. Dasselbe wäre mir übrigens um ein Haar bei diesem Beitrag wieder passiert - ich hab das Gefühl mein Clipboard ist kaputt.
Das ist fies, aber du kannst dasselbe glaube ich auch mit "apt-cache -a show" machen und stattdessen nach "^MD5sum:" oder "^SHA256:" greppen – zumindest in stretch erscheinen diese Werte nur bei über apt verfügbaren Paketen. Es funktioniert unter stretch gleich wie die "apt show"-Variante und ist sogar kürzer (aber nicht schneller ):nudgegoonies hat geschrieben:18.04.2018 10:50:56[…]
P.S.2.
apt ist auch nicht installiert. Sind viele Wheezy und Jessie Rechner wovon erstere demnächst abgeschafft werden. Es gibt also kein Tool, was zur minimalen Standardinstallation von Debian gehört, mit dem man es einfach rauskriegen kann
Code: Alles auswählen
for i in $(dpkg -l | grep '^i' | awk '{ print $2 }'); do apt-cache -a show $i | grep "^MD5sum:" > /dev/null || echo $i; done
Re: Nur lokal installierte Pakete anzeigen
Damit kannst du dir (ganz gemächlich) anzeigen lassen, woher ein Paket kommt:
Wenn du den output auf 'file:' eingrenzt, dann siehst du das gewänschte Ergebnis.
deutlich flotter, aber von hinten durch die Brust ins Auge ist dieser Ansatz:
Code: Alles auswählen
for i in $(aptitude search ~i -F "%p"); do apt-cache madison $i ; done
deutlich flotter, aber von hinten durch die Brust ins Auge ist dieser Ansatz:
Code: Alles auswählen
# cron-apt ohne dpkg-repack installieren:
apt install apt-clone
apt-clone clone /tmp/ | grep "not installable"
- schorsch_76
- Beiträge: 2597
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Re: Nur lokal installierte Pakete anzeigen
Ah, sorry, das hab ich falsch verstanden ...
-
- Beiträge: 939
- Registriert: 16.02.2009 09:35:10
Re: Nur lokal installierte Pakete anzeigen
Hallo Smutbert. Deine letzte Lösung scheint jetzt zu ziehen. Allerdings sind die Pakete aus unterschiedlichen Repos alle untershiedlich mit Prüfsummen ausgestattet. Aber alle Pakete, die zu keinem Repo gehören, haben auf jeden Fall keine. Darum noch die Oders im Grep. Ein Problem war noch, dass die eigenen Backports wieder nicht gefunden wurden, weil apt-show dazu natürlich noch die Debian Pakete in Debian Repos mit Prüfsummen findet. Aber diese Zeile sollte es tun, da ich nach mehrmaligen ausprobieren herausgefunden habe, dass das momentan installierte Paket im ersten Block angezeigt wird. Darum noch das sed in der Zeile:
Danke Dir
Hallo schorsch_76 und ThorstenS. Danke für die Antworten. Ich will auf den über 100 Kisten nichts zusätzlich installieren. Darum die Suche nach einer Lösung, die mit einem Minimal-Debian funktioniert.
Code: Alles auswählen
for i in $(dpkg -l | grep '^i' | awk '{ print $2 }'); do apt-cache -a show $i | sed '/^$/q' | grep -e "^MD5sum" -e "^SHA1:" -e "^SHA256:" > /dev/null || echo $i; done
Hallo schorsch_76 und ThorstenS. Danke für die Antworten. Ich will auf den über 100 Kisten nichts zusätzlich installieren. Darum die Suche nach einer Lösung, die mit einem Minimal-Debian funktioniert.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Re: Nur lokal installierte Pakete anzeigen [gelöst]
Ok, das Argument verstehe ich. Hier mal eine klein wenig eingekürzte Version:
Code: Alles auswählen
for i in $(dpkg -l | awk '/^i/{ print $2 }'); do apt-cache -a show $i | sed '/^$/q' | egrep -q "^(MD5sum|^SHA(1|256):)" || echo $i; done
-
- Beiträge: 939
- Registriert: 16.02.2009 09:35:10
Re: Nur lokal installierte Pakete anzeigen [gelöst]
Danke Dir für die Optimierung. Awk und komplexe Regexe mit Operatoren sind bei mir noch Entwicklungsfelder.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.