Was Niko in seinem Techgruben-Beitrag Größe von installierten Paketen anzeigen für debianbasierte Paketmanager schön gezeigt hat, geht leider bei RPMs nicht ganz so leicht, aber das wird uns nicht aufhalten. @Nico: Guter Beitrag.Weitermachen 🙂 In meinem Beitrag geht es heute nicht nur um die Größe, sondern auch um das „wie man zum Ergebnis kommt“. Wer die Lösung sucht, die ist ganz am Ende.
Die Größe von installierten Paketen ermitteln
Die Option „-q“ steht bei rpm für Query, also die Datenbankabfrage. rpm -q paketname liefert den vollständigen Paketnamen aus. Einfaches Beispiel:
$ rpm -q firefox
 firefox-65.0-4.fc28.x86_64
Wir haben den Paketnamen, klasse. Und nun ? Wenn wir mehr über Firefox wissen möchten, dann müssen wir RPM das sagen:
$ rpm -qi firefox
 Name : firefox
 Version : 65.0
 Release : 4.fc28
 Architecture: x86_64
 Install Date: Mo 18 Feb 2019 12:01:46 CET
 Group : Unspecified
 Size : 221446243
 License : MPLv1.1 or GPLv2+ or LGPLv2+
 Signature : RSA/SHA256, Di 05 Feb 2019 12:51:38 CET, Key ID e08e7e629db62fb1
 Source RPM : firefox-65.0-4.fc28.src.rpm
 Build Date : Mo 04 Feb 2019 19:07:57 CET
 Build Host : buildvm-20.phx2.fedoraproject.org
 Relocations : (not relocatable)
 Packager : Fedora Project
 Vendor : Fedora Project
 URL : https://www.mozilla.org/firefox/
 Bug URL : https://bugz.fedoraproject.org/firefox
 Summary : Mozilla Firefox Web browser
 Description :
 Mozilla Firefox is an open-source web browser, designed for standards
 compliance, performance and portability.
Die Option „–i“ gibt uns also detaillierte Informationen über das Paket aus. Da könnte man mit grep und viel Bashmagie was drehen. Bleibt noch das Problem, daß wir den Paketnamen brauchen. Das können wir leicht umgehen, in dem wir pauschal alle Pakete auflisten lassen. Die Option „-a“ macht es möglich: rpm -qia . Probiert es nicht aus, das ist echt viel an Infos 🙂
Das Queryformat
Natürlich geht das besser, denn RPM bietet an, daß es die Infos genauso ausgibt wie man es braucht. Die nötige Option lautet „–queryformat“ :
$ rpm -q firefox –queryformat „%{NAME} uses %{SIZE:humaniec}\n“
 firefox uses 211M
Schön, damit kann man arbeiten 🙂 Die Größe nach vorn, Paketname dahinter:
$ rpm -q firefox –queryformat „%{SIZE:humaniec}:%{NAME}\n“
 211M:firefox
Das ist schon besser. Da kann man einen Sort drauf ansetzen:
rpm -qa –queryformat „%{SIZE:humaniec}:%{NAME}\n“ | sort -r -n
„-r -n“ Reverse, also groß zuerst, und numerisch sortieren. Sort erkennt automatisch, was keine Zahl mehr ist und sortiert entsprechend. Aber stimmt die Ausgabe auch wirklich?
Schauen wir uns mal die Top 30 an :
$ rpm -qa –queryformat „%{SIZE:humaniec}:%{NAME}\n“ | sort -r -n | head -n 30
1024K:python2-coverage
 1022K:openssh-server
 1019K:xorg-x11-drv-wacom
 1019K:libgcrypt
 1018K:tix
 1016K:libmx
 1015K:vte
 1015K:python2-simplejson
 1010K:pyzy
 1009K:ncurses-libs
 1008K:libappstream-glib
 1007K:libxcb
 1007K:libodfgen
 1007K:boost-locale
 1006K:eris
 1006K:dracut
 1004K:libxcb
 1004K:libtomcrypt
 1003:openoffice-brand-impress
 1002:openoffice-brand-writer
 1000:openoffice-brand-math
 1000:openoffice-brand-draw
 1000:openoffice-brand-calc
 1000:openoffice-brand-base
 999K:at-spi
 997K:vte3
 996K:mdadm
 995K:rubberband
 995K:ncurses-libs
 994K:cjs
Ein Paket mit 1024 KB, also 1 MB, soll das größte Paket in der Liste sein? Das kann nicht sein. Ist es auch nicht. Schon das Firefoxpaket von oben hat 211 MB. Wo ist da jetzt der Fehler?
Ist klar, wir lassen die Paketgröße mit dem Zusatz „:humaniec“ ausgeben. Das erzeugt die 211M oder 1024K , weil „211M:firefox“ besser lesbar ist für Menschen, also „221446243:firefox“. Nun ist aber 1024 größer als 211 🙂 Sort hat also alles richtig gemacht, aber die sortierten Informationen waren falsch vorbereitet.
So wird es besser
$ rpm -qa –queryformat „%{SIZE}:%{NAME}\n“ | sort -r -n | head -n 30
 2104146639:0ad-data
 573182723:supertuxkart-data
 526795437:wesnoth-data
 369138973:wine-debuginfo
 346355557:linux-firmware
 319608404:naev-data
 250326767:wine-staging64
 242843598:skypeforlinux
 236453994:wine-core
 221999655:wine-staging-common
 221446243:firefox
 …
Wenig überraschend toppt 0.AD alle anderen Pakete mit seinen 2GB an Grafikdaten 😉 Firefox mit seinen 211 M liegt abgeschlagen auf Platz 11 😉
Es geht auch etwas kürzer, aber nicht viel:
rpm -qa –qf „%{SIZE}:%{NAME}\n“ | sort -rn | head -30
Natürlich habe ich mal rumgeschaut, was zu dem Thema schon mal verfasst wurde. Leider war nichts besseres da, da es wohl schon das Optimum ist. Aber man kann natürlich immer noch was daraus lernen, z.b. wie man mit AWK Bytes in MB umrechnen kann :
rpm -qa –qf ‚%{SIZE} %{NAME}\n‘ | awk ‚{printf(„%sMb %s\n“, $1 / 1000 / 1000, $2)}‘ | sort -k1 -n
Dummerweise funktioniert das Sort in der Ausgabe nicht sauber, aber der AWK Teil ist nett 🙂
 (Quelle für den AWK Part: list-all-packages-by-installed-size-bytes-on-rpm-distros )