Gestern betrachtete ich während eines Updates, wie die Liste der zu aktualisierenden Pakete über mein Display lief, darunter auch Haskell und Python2. Da kam mir die Frage in den Sinn, warum braucht das System Haskell und Python2?
Das ist die Frage nach der Reverse Dependency von Paketen, also welche Pakete hängen von Paket x ab. Die Paketmanager der Distributionen beantworten diese Frage. Das möchte ich am Beispiel von Haskell unter Manjaro zeigen.
Wer es grafisch mag, findet die Antwort im Paketmanager Pamac. Man sucht nach "haskell", wählt das erstbeste installierte Paket und schaut bei den Detailinformationen im Reiter "Abhängigkeiten" in die Liste "Benötigt von".
Wer lieber im Terminal arbeitet, hat zwei Möglichkeiten. Zuerst muss man wissen, wie ein bestimmtes installiertes Haskell-Paket heisst: pacman -Q | grep haskell
zeigt eine entsprechende Liste. Dann kann man mit diesem Befehl die Pakete ermitteln, die von einem bestimmten Haskell-Paket abhängen:
pacman -Qi haskell-aeson | grep 'Benötigt von'
Benötigt von :
haskell-aeson-pretty haskell-citeproc haskell-doctemplates
haskell-hslua-aeson haskell-ipynb haskell-pandoc-types
haskell-servant haskell-servant-server haskell-skylighting-core
haskell-wai-extra haskell-yaml pandoc shellcheck
Die zweite Methode verwendet den Befehl pactree und sieht so aus:
pactree -r haskell-aeson
haskell-aeson
├─haskell-aeson-pretty
│ ├─haskell-citeproc
│ │ └─pandoc
│ └─pandoc
├─haskell-citeproc
├─haskell-doctemplates
│ └─pandoc
...
Wie ihr in den Beispielen gesehen habt, lautet des Rätsels Lösung Pandoc. Wer wissen möchte, wie man diese Information bei anderen Distributionen, bzw. Paketmanagern erhält, findet in der Quelle eine Übersicht.
Quelle: https://wiki.archlinux.org/title/Pacman/Rosetta#Querying_package_dependencies
Ein inoffizielles Arch user repository hat pandoc-bin ohne die haskell Abhängigkeiten, wer nicht jeden 2. Tag 800mb haskell aktualisieren möchte....
https://wiki.archlinux.org/title/Unofficial_user_repositories
https://gitlab.com/aur1/rstudio
Unter Debian gibt es ein vergleichbar einfaches Werkzeug auf der Kommandozeile. Hat man aptitude installiert, dann zeigt z.B.
aptitude why x11-common
an, wegen welchen anderen installierten Paketen x11-common automatisch installiert wurde.Die Ausgabe zwar etwas weniger schön (bzw. gewöhnungsbedürftig), aber dafür ausführlicher (und mit nur apt, wobei ich aptitude immer installiere):
apt rdepends x11-common
Das finde ich doch wirklich verblüffend, daß pandoc haskell benötigt:
Bei den RedHat-Derivaten wird es nicht bnötigt. Hier ist die dependency-Abfrage unter Fedora 36:
dnf repoquery --requires pandoc Letzte Prüfung auf abgelaufene Metadaten: vor 0:24:49 am Di 11 Okt 2022 13:11:28 CEST. /bin/sh libc.so.6(GLIBC_2.34)(64bit) libffi.so.8()(64bit) libffi.so.8(LIBFFI_BASE_8.0)(64bit) libffi.so.8(LIBFFI_CLOSURE_8.0)(64bit) libgmp.so.10()(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libm.so.6(GLIBC_2.27)(64bit) libm.so.6(GLIBC_2.29)(64bit) libz.so.1()(64bit) pandoc-common = 2.14.0.3-16.fc36 rtld(GNU_HASH)
Aber das war mir schon öfter aufgefallen, daß die unterschiedlichen Maintainer auch andere Vorstellungen von den dependencies haben Vielleicht sieht der Maintainer bei arclinux eine Softdependency, da pandoc in der Tat in Hasekell geschrieben wird. (s. https://de.wikipedia.org/wiki/Pandoc). Aber zum Gebrauch ist Haskell nicht notwendig, da pandoc eine binäre Anwendung ist:
file /usr/bin/pandoc /usr/bin/pandoc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=1f3dd1bdf9bb7c96d389a9d976f7efeca5c2ecd7, stripped