Abhängigkeitspfade zu systemd und mögliche Alternativen
Abhängigkeitspfade zu systemd und mögliche Alternativen
Es sieht so aus, als hinge geeqie ab bullseye von systemd ab. Kann man das umgehen?
hikaru: Threadtitel korrigiert
hikaru: Threadtitel korrigiert
Zuletzt geändert von fischig am 04.10.2021 21:02:46, insgesamt 3-mal geändert.
Re: qeeqie und systemd
Zumindest wird nix mit systemd in den direkten Abhängigkeiten angezeigt. Worauf beziehst du dich?
Re: qeeqie und systemd
In Bullseye gibt es diesen Abhängigkeitspfad*: geeqie → libgtk-3-0 → libatk-bridge2.0-0 → libdbus-1-3 → libsystemd0.
Den ersten Schritt dieser Kette gab es in Buster noch nicht. Da hing geeqie noch von libgtk2.0-0 ab.
Soweit ich mich aus eigenen geeqie-Backport-Versuchen vor geraumer Zeit erinnern kann, lässt sich die libgtk-Version in neueren geeqie-Versionen nicht einfach austauschen.
libsystemd0 ist zwar aus dem Code von systemd gebaut, hängt aber von keinen weiteren Systemd-Paketen ab. Nur diese Lib auf dem System zu haben bedeutet also nicht, dass Systemd läuft.
Die "reine Lehre" ist das natürlich trotzdem nicht. Ich könnte mir vorstellen, dass man dieser Liste irgendwo einen Dummy unterschieben könnte. Wo man das aber machen sollte um möglichst wenige Nebeneffekte zu kriegen, und wie diese Nebeneffekte aussähen, kann ich aber nicht abschätzen.
*) Falls jemand einen netten (einfachen, automatischen und robusten) Weg kennt, solch einen Abhängigkeitspfad zu erzeugen, fände ich das Klasse. Ich habe es zu Fuß mit apt-rdepends und grep gemacht.
Den ersten Schritt dieser Kette gab es in Buster noch nicht. Da hing geeqie noch von libgtk2.0-0 ab.
Soweit ich mich aus eigenen geeqie-Backport-Versuchen vor geraumer Zeit erinnern kann, lässt sich die libgtk-Version in neueren geeqie-Versionen nicht einfach austauschen.
libsystemd0 ist zwar aus dem Code von systemd gebaut, hängt aber von keinen weiteren Systemd-Paketen ab. Nur diese Lib auf dem System zu haben bedeutet also nicht, dass Systemd läuft.
Die "reine Lehre" ist das natürlich trotzdem nicht. Ich könnte mir vorstellen, dass man dieser Liste irgendwo einen Dummy unterschieben könnte. Wo man das aber machen sollte um möglichst wenige Nebeneffekte zu kriegen, und wie diese Nebeneffekte aussähen, kann ich aber nicht abschätzen.
*) Falls jemand einen netten (einfachen, automatischen und robusten) Weg kennt, solch einen Abhängigkeitspfad zu erzeugen, fände ich das Klasse. Ich habe es zu Fuß mit apt-rdepends und grep gemacht.
- Livingston
- Beiträge: 1454
- Registriert: 04.02.2007 22:52:25
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 127.0.0.1
Re: qeeqie und systemd
Selbst die Macher von https://devuan.org werden libsystemd0 nicht immer vollständig los, und es kann in bestimmten Konstellationen als Abhängigkeit auftauchen. Aber wenn die damit leben können, dann wird's wohl nicht allzu dramatisch sein.hikaru hat geschrieben:11.08.2021 22:33:40libsystemd0 ist zwar aus dem Code von systemd gebaut, hängt aber von keinen weiteren Systemd-Paketen ab. Nur diese Lib auf dem System zu haben bedeutet also nicht, dass Systemd läuft.
Die "reine Lehre" ist das natürlich trotzdem nicht. Ich könnte mir vorstellen, dass man dieser Liste irgendwo einen Dummy unterschieben könnte. Wo man das aber machen sollte um möglichst wenige Nebeneffekte zu kriegen, und wie diese Nebeneffekte aussähen, kann ich aber nicht abschätzen.
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams
Douglas Adams
Re: geeqie und systemd
@hikaru: debtree
Re: qeeqie und systemd
Meine Bastelei hat wohl zu lang gebrauchthikaru hat geschrieben:11.08.2021 22:33:40In Bullseye gibt es diesen Abhängigkeitspfad*: geeqie → libgtk-3-0 → libatk-bridge2.0-0 → libdbus-1-3 → libsystemd0.
Ich bin auf debtree gestoßen, das macht allerdings eine grafische Baumdarstellung der Abhängigkeiten. Finden könnte man sowas damit aber ja auch. Mich würd auch interessieren, wenns da etwas nicht grafisches, fertiges für gibt.hikaru hat geschrieben:11.08.2021 22:33:40*) Falls jemand einen netten (einfachen, automatischen und robusten) Weg kennt, solch einen Abhängigkeitspfad zu erzeugen, fände ich das Klasse. Ich habe es zu Fuß mit apt-rdepends und grep gemacht.
Ansonsten hats mich natürlich in den Fingern gejuckt, dafür was zu basteln. Auf die Schnelle, mit einer guten alten Rekursion:
Code: Alles auswählen
$ cat find_trans_dep
#!/bin/sh
set -eu
: ${SKIPS:=}
lvl=$1
next_lvl=$(($lvl - 1))
pkg=$2
trans_dep=$3
[ "$lvl" -lt 0 ] && exit 0
for dep in $(apt-cache depends "$pkg" 2>/dev/null | awk '$1=="Depends:" { print $2; }'); do
if [ "$dep" = "$trans_dep" ]; then
echo "$pkg -> $trans_dep"
exit 0
fi
case " $SKIPS " in
*" $dep "*)
continue
esac
output=$("$0" $next_lvl "$dep" "$trans_dep")
if [ -n "$output" ]; then
echo "$pkg -> $output"
exit 0
fi
done
Code: Alles auswählen
$ time SKIPS="libc6 libgcc1 libstdc++6 libx11-6 zlib1g" ./find_trans_dep 4 geeqie libsystemd0
geeqie -> libchamplain-0.12-0 -> libgtk-3-0 -> libatk-bridge2.0-0 -> libdbus-1-3 -> libsystemd0
real 2m27,555s
user 2m21,474s
sys 0m6,956s
Code: Alles auswählen
time SKIPS="libc6 libgcc1 libstdc++6 libx11-6 zlib1g" ./find_trans_dep_sh 4 geeqie libsystemd0
geeqie -> libchamplain-0.12-0 -> libgtk-3-0 -> libatk-bridge2.0-0 -> libdbus-1-3 -> libsystemd0
real 0m40,307s
user 0m38,004s
sys 0m2,590s
Ich seh nach 13 Jahren zum ersten Mal, dass es einen [deb-src]-BBCode gibt, ha. Der wird wohl nicht oft benutzt.
Manchmal bekannt als Just (another) Terminal Hacker.
Re: geeqie und systemd
Ein vollständiger Graph ist mir eigentlich zu viel (Edit: @JTH: u.A. wegen der Geschwindigkeit. ). Was ich gern gehabt hätte wäre ein Programm, in das ich zwei Paketnamen stecke, und als Ergebnis erhalte ich entweder den kürzesten, oder alle Pfade zwischen diesen beiden Paketen, aber eben nur zwischen diesen beiden Paketen - idealerweise ohne Grafik, sondern als reine CLI-Ausgabe.
Re: geeqie und systemd
debtree erzeugt die Grafik doch via graphviz/dot, folglich sollte man dort den dot-Code ausgeben lassen koennen, den man dann, statt in eine Grafik umzuwandeln, mit awk *hihi* nachbearbeitet und nur den Pfad ausgibt, der vom Start- zum Endpaket fuehrt. -- Hoert sich ganz einfach an.
Use ed once in a while!
Re: geeqie und systemd
@niemand:
Bei smutberts Tipp konnte man ein Glied der Pfadkette durch ein anderes, das nicht von systemd abhing, ersetzen.
hikarus³ Pfad landet nicht bei systemd. Dass libsystemd0 nicht systemd ist und man ( auch devuan!² ) ersteres auch ohne systemd nicht los wird ist bekannt und die lib ist dementsprechend auch installiert. Wo also die Abhängigkeit zu letzterem entsteht, macht dein Pfad noch nicht klar, mir jedenfalls (noch) nicht.
libgtk3.0 scheint ein solcher Kandidat zu sein. Wenn ich das apt-get-install-Spielchen damit wiederhole lande ich wieder (u.a.) bei systemd.
¹ an welchem erinnere ich z.Z. nicht sicher, muss aber wohl was mit sound gewesen sein
² nur interessehalber, neugierig: ist es das, was dich dazu bringt, die Macher als „Radikalinskis“ einzustufen?
³ Danke für die rechtschreibliche Korrektur dieses vermaledeiten Programmnamens!
Ganz schlicht auf apt-get (-s) install geeqie:Worauf beziehst du dich?
Code: Alles auswählen
Die folgenden NEUEN Pakete werden installiert:
dbus dbus-user-session dconf-gsettings-backend dconf-service geeqie geeqie-common glib-networking glib-networking-common
glib-networking-services gsettings-desktop-schemas libaom0 libapparmor1 libargon2-1 libass9 libatk-bridge2.0-0 libatspi2.0-0
libavcodec58 libavfilter7 libavformat58 libavutil56 libblas3 libbluray2 libbs2b0 libchamplain-0.12-0 libchamplain-gtk-0.12-0
libchromaprint1 libclutter-1.0-0 libclutter-gtk-1.0-0 libcodec2-0.9 libcogl-pango20 libcogl-path20 libcogl20 libcolord2
libcryptsetup12 libdav1d4 libdconf1 libde265-0 libdjvulibre-text libdjvulibre21 libffmpegthumbnailer4v5 libfftw3-double3
libflite1 libgfortran5 libgme0 libgsm1 libgtk-3-0 libgtk-3-common libheif1 libjson-c5 libjson-glib-1.0-0
libjson-glib-1.0-common liblapack3 liblcms2-2 liblilv-0-0 liblirc-client0 liblua5.1-0 libmp3lame0 libmpg123-0 libmysofa1
libnorm1 libnspr4 libnss3 libnuma1 libopenjp2-7 libopenmpt0 libpam-systemd libpgm-5.3-0 libpocketsphinx3 libpoppler-glib8
libpoppler102 libpostproc55 libproxy1v5 libpsl5 librabbitmq4 librest-0.7-0 librubberband2 libsamplerate0 libserd-0-0
libshine3 libsnappy1v5 libsodium23 libsord-0-0 libsoup-gnome2.4-1 libsoup2.4-1 libsoxr0 libspeex1 libsphinxbase3
libsratom-0-0 libsrt1.4-gnutls libssh-gcrypt-4 libswresample3 libswscale5 libtheora0 libtwolame0 libudfread0 libva-drm2
libva-x11-2 libva2 libvdpau1 libvidstab1.1 libvorbisfile3 libvpx6 libwavpack1 libwayland-cursor0 libwayland-egl1 libwebpmux3
libx264-160 libx265-192 libxvidcore4 libzmq5 libzvbi-common libzvbi0 ocl-icd-libopencl1 systemd systemd-sysv
systemd-timesyncd
An etwas in dieser Art dachte ich. smutbert hat mir sowas mal bei einem anderen Programm¹ gezeigt. Insofern hätte auch ich diesen Wunsch:hikaru hat geschrieben:In Bullseye gibt es diesen Abhängigkeitspfad*: Debiangeeqie → Debianlibgtk-3-0 → Debianlibatk-bridge2.0-0 → Debianlibdbus-1-3 → Debianlibsystemd0.
Es wäre schön, wenn dabei meine Frage nicht unter die Räder geriete.einen netten (einfachen, automatischen und robusten) Weg kennt, solch einen Abhängigkeitspfad zu erzeugen
Bei smutberts Tipp konnte man ein Glied der Pfadkette durch ein anderes, das nicht von systemd abhing, ersetzen.
hikarus³ Pfad landet nicht bei systemd. Dass libsystemd0 nicht systemd ist und man ( auch devuan!² ) ersteres auch ohne systemd nicht los wird ist bekannt und die lib ist dementsprechend auch installiert. Wo also die Abhängigkeit zu letzterem entsteht, macht dein Pfad noch nicht klar, mir jedenfalls (noch) nicht.
libgtk3.0 scheint ein solcher Kandidat zu sein. Wenn ich das apt-get-install-Spielchen damit wiederhole lande ich wieder (u.a.) bei systemd.
¹ an welchem erinnere ich z.Z. nicht sicher, muss aber wohl was mit sound gewesen sein
² nur interessehalber, neugierig: ist es das, was dich dazu bringt, die Macher als „Radikalinskis“ einzustufen?
³ Danke für die rechtschreibliche Korrektur dieses vermaledeiten Programmnamens!
Re: geeqie und systemd
Danke fuer die Terminalausgabe. Jetzt ist auch klar, was du mit Systemd meinst ... eben nicht diese Lib von der mir bislang ausgegangen sind.
Will er Systemd auch installieren wenn du die Recommends deaktivierst: `--no-install-recommends'?
Will er Systemd auch installieren wenn du die Recommends deaktivierst: `--no-install-recommends'?
Use ed once in a while!
Re: geeqie und systemd
Ich weiß nicht, was du meinst Da kommen bestimmt noch mehr Basteleienfischig hat geschrieben:12.08.2021 08:13:11Es wäre schön, wenn dabei meine Frage nicht unter die Räder geriete.
Die Kette wäre hier folgende:
geeqie -> libgtk-3-0 -> libgtk-3-common -> dconf-gsettings-backend -> dconf-service -> dbus-user-session -> systemd.
Alles harte Abhängigkeiten, keine Recommends. Bei dconf-service zeigt die Abhängigkeit allerdings eigentlich auf die virtuellen Paketnamen default-dbus-session-bus (= dbus-user-session) ODER dbus-session-bus (= dbus-user-session ODER dbus-x11) – hoffentlich verständlich. dbus-x11 hängt nicht von systemd ab.
Du könntest dbus-user-session und damit systemd also mit Vorab- oder expliziter zusätzlicher Installation von dbus-x11 vermeiden, fischig.
Manchmal bekannt als Just (another) Terminal Hacker.
Re: geeqie und systemd
Deaktivierung der Recommends ist bei mir Standard.Meillo hat geschrieben:Will er Systemd auch installieren wenn du die Recommends deaktivierst
Die Frage war:JTH hat geschrieben:Ich weiß nicht, was du meinst
Kann man die Frage anders verstehen als: „Kann man bei der Installation von geeqie die Installation von systemd umgehen?“fischig hat geschrieben:Es sieht so aus, als hinge geeqie ab bullseye von systemd ab. Kann man das umgehen?
Und so in der Art war die Antwort, auf die ich spekuliert hatte:
Bingo, Herr JTH! Ich verneige mich in Ehrfurcht!JTH hat geschrieben:Du könntest dbus-user-session und damit systemd also mit Vorab- oder expliziter zusätzlicher Installation von dbus-x11 vermeiden
Code: Alles auswählen
# apt-get install dbus-x11 geeqie
[...]
Die folgenden NEUEN Pakete werden installiert:
dbus dbus-x11 dconf-gsettings-backend dconf-service geeqie geeqie-common glib-networking glib-networking-common
glib-networking-services gsettings-desktop-schemas libaom0 libapparmor1 libass9 libatk-bridge2.0-0 libatspi2.0-0
libavcodec58 libavfilter7 libavformat58 libavutil56 libblas3 libbluray2 libbs2b0 libchamplain-0.12-0 libchamplain-gtk-0.12-0
libchromaprint1 libclutter-1.0-0 libclutter-gtk-1.0-0 libcodec2-0.9 libcogl-pango20 libcogl-path20 libcogl20 libcolord2
libdav1d4 libdconf1 libde265-0 libdjvulibre-text libdjvulibre21 libffmpegthumbnailer4v5 libfftw3-double3 libflite1
libgfortran5 libgme0 libgsm1 libgtk-3-0 libgtk-3-common libheif1 libjson-glib-1.0-0 libjson-glib-1.0-common liblapack3
liblcms2-2 liblilv-0-0 liblirc-client0 liblua5.1-0 libmp3lame0 libmpg123-0 libmysofa1 libnorm1 libnspr4 libnss3 libnuma1
libopenjp2-7 libopenmpt0 libpgm-5.3-0 libpocketsphinx3 libpoppler-glib8 libpoppler102 libpostproc55 libproxy1v5 libpsl5
librabbitmq4 librest-0.7-0 librubberband2 libsamplerate0 libserd-0-0 libshine3 libsnappy1v5 libsodium23 libsord-0-0
libsoup-gnome2.4-1 libsoup2.4-1 libsoxr0 libspeex1 libsphinxbase3 libsratom-0-0 libsrt1.4-gnutls libssh-gcrypt-4
libswresample3 libswscale5 libtheora0 libtwolame0 libudfread0 libva-drm2 libva-x11-2 libva2 libvdpau1 libvidstab1.1
libvorbisfile3 libvpx6 libwavpack1 libwayland-cursor0 libwayland-egl1 libwebpmux3 libx264-160 libx265-192 libxvidcore4
libzmq5 libzvbi-common libzvbi0 ocl-icd-libopencl1
0 aktualisiert, 109 neu installiert, 0 zu entfernen und 54 nicht aktualisiert.
ich verfüge nicht über genügend Kenntnisse, um mich alleine sicher und zielführend durch den Abhängigkeiten-Dschungel zu schlagen. Insofern begrüßte ich wie hikaru auch ein Programm, das mich da ans Händchen nimmt, bzw. die Arbeit erleichtert. Aber das ist sekundär.
190 MB für'n Bildbetrachter finde ich ziemlich viel Holz, gegenüber knapp 10 MB, die phototonic auf dem schmalen System verlangt. Insofern weiß ich nicht, ob ich's mache. Aber ich weiß jetzt, wie ich's machen könnte. Nochmals danke!
Ich lass' den Thread noch mal 'ne Weile offen. Vielleicht kommt ja bei der sekundären Frage wirklich noch was!
PS:
einen Schreibfehler korrigiert
Zuletzt geändert von fischig am 12.08.2021 13:08:22, insgesamt 1-mal geändert.
Re: geeqie und systemd
@all: Gibt es denn eine Moeglichkeit, dass ich bei der Installation bei allen Alternativprogrammen in den Abhaengigkeiten (interaktiv) auswaehlen kann, welches ich moechte, bzw. dabei sehe wie gross deren Abhaengigkeitsbaeume sind? Manchmal unterscheidet sich die Groesse der Abhaengigkeit dabei ja nennenswert. Bzw. kann man irgendwie sagen: Nimm immer die kleinste Abhaengigkeitsoption (z.B. wenigster Speicherplatz)?
@fischig: Geeqie war bislang mein bevorzugtes Bildverwaltungsprogramm, wenn ich mehr Uebersicht/Features/Komfort wollte als sxiv bietet. Frueher ist mir das immer klein vorgekommen (nachdem mit gThumb zu fett geworden war). Jetzt muss ich wohl die naechste Stufe runter wechseln, nachdem auch Geeqie fett zu werden scheint ...
(Edit: Auf meinem minimalistischen FreeBSD will er fuer gthumb 600MB, fuer geeqie 460MB installieren. Fuer phototonic nur 80MB.)
@fischig: Geeqie war bislang mein bevorzugtes Bildverwaltungsprogramm, wenn ich mehr Uebersicht/Features/Komfort wollte als sxiv bietet. Frueher ist mir das immer klein vorgekommen (nachdem mit gThumb zu fett geworden war). Jetzt muss ich wohl die naechste Stufe runter wechseln, nachdem auch Geeqie fett zu werden scheint ...
(Edit: Auf meinem minimalistischen FreeBSD will er fuer gthumb 600MB, fuer geeqie 460MB installieren. Fuer phototonic nur 80MB.)
Use ed once in a while!
Re: geeqie und systemd
Ich finde, die Frage will gut überlegt/ausprobiert sein. Das allermeiste, was hier bei mir verlangt wird, sind ja libs. Und je nachdem, wie das individuelle System ansonsten gestaltet ist, mag sich der zusätzliche lib-Aufwand ja deutlich reduzieren. Das ist letztlich, was ich an Debian so schätze: Das Baukastensystem, man kann vielleicht auch sagen: KISS. Und ich fürchte laienhaft, systemd ist dem nicht gerade förderlich.Meillo hat geschrieben:Jetzt muss ich wohl die naechste Stufe runter wechseln, nachdem auch Geeqie fett zu werden scheint ...
PS:
die beiden letzten Posts haben sich wohl zeitlich überschnitten.
Re: geeqie und systemd
Ein Werkzeug, das solche entweder-oder-Abhängigkeiten richtig interaktiv abfragt, kenne ich auch nicht. Um solche Abhängigkeitsbäume nachzuvollziehen, benutz ich immer aptitudes Ncurses-UI. Damit kann man die, finde ich, halbwegs schnell, ohne diverse apt-cache-, apt-rdepends- etc. Aufrufe, durchgehen und sieht auch an den entsprechenden Stellen, wie hier oben, die alternativen Möglichkeiten für einzelne Abhängigkeiten. Optimal komfortabel ist das aber auch nicht.Meillo hat geschrieben:12.08.2021 12:40:13@all: Gibt es denn eine Moeglichkeit, dass ich bei der Installation bei allen Alternativprogrammen in den Abhaengigkeiten (interaktiv) auswaehlen kann, welches ich moechte, bzw. dabei sehe wie gross deren Abhaengigkeitsbaeume sind? Manchmal unterscheidet sich die Groesse der Abhaengigkeit dabei ja nennenswert. Bzw. kann man irgendwie sagen: Nimm immer die kleinste Abhaengigkeitsoption (z.B. wenigster Speicherplatz)?
Da kommt bestimmt noch wasfischig hat geschrieben:12.08.2021 12:19:47Ich lass' den Thread noch mal 'ne Weile offen. Vielleicht kommt ja bei der sekundären Frage wirklich noch was!
Manchmal bekannt als Just (another) Terminal Hacker.
Re: geeqie und systemd
Da hast du natuerlich recht. Ich habe halt sehr minimalistische Systeme, folglich habe ich die ganzen Libs noch nicht. Mein /usr hat ohne Quellcode nur 4,7 GB. Fuer eine einzige Anwendung, die ich nur alle paar Monate mal nutze, das um 10% zu vergroessern kommt mir unverhaeltnismaessig vor. Aber das ist mehr eine Grundsatzsache als in diesem Fall technische Notwendigkeit. Das geeqie von oldoldoldoldstable wuerde mir vollkommen reichen, aber um gleichwenig Features und Platzverbrauch zu haben muss ich nun ein anderes Programm nutzen. Aber wie dem auch sei ... ist nicht so wichtig.fischig hat geschrieben:12.08.2021 12:48:28Das allermeiste, was hier bei mir verlangt wird, sind ja libs. Und je nachdem, wie das individuelle System ansonsten gestaltet ist, mag sich der zusätzliche lib-Aufwand ja deutlich reduzieren.
@JTH: Danke fuer den Tipp.
Use ed once in a while!
Re: geeqie und systemd
Das nennst du minimal?
Ich liege da in der Regel unter 2.5GB.
Re: geeqie und systemd
Es gibt Unterschiede da dies ein FreeBSD ist, Enthalten ist dort z.B. ein Portstree mit 900MB und LLVM mit 600MB.
Use ed once in a while!
Re: geeqie und systemd
Hier ein Versuch, eine einzelne Abhängigkeitskette aus einem debtree-Output zu holen:
Die Liste ist im Vergleich zu den übrigen Beispielen hier im Thread umgekehrt zu lesen, also "systemd ist eine Abhängigkeit von dbus-user-session." usw. Der Grund hierfür und für die zeilenweise Ausgabe der Pakete ist Faulheit, denn so musste ich keine Arbeit in die Präsentation stecken.
Das Script legt zwei Dateien im aktuellen Verzeichnis ab: Den debtree-Output als STARTPAKETNAME.dot, und den dijkstra-Output als STARTPAKETNAME.dks.
Hintergrund:
Mein Ansatz war, den kürzesten Pfad vom Startpaket (hier geeqie) zum Zielpaket (hier systemd) zu finden. Für dieses Problem des kürzesten Weges in einem Graphen gibt es eine Standardlösung, den Dijkstra-Algorithmus. [1]
dijkstra aus graphviz ist eine Implementierung dieses Algorithmus'. graphviz wiederum ist eine Empfehlung von debtree. Es lag also nahe, dieses Programm zu nutzen.
Die Option -p gibt das jeweils vorherige Paket in de Kette mit an. So konnte ich mich relativ einfach durchhangeln.
Leider ist der dijkstra-Output sehr hässlich und nur sehr eingeschränkt steuerbar. Pakete werden mal in Anführungszeichen ("") gesetzt und mal nicht (je nachdem ob der Name nur aus alphanumerischen Zeichen besteht oder z.B. Bindestriche enthält). Auch der Zeilenabschluss (Komma oder eckige Klammer + Semikolon) hängt davon ab). Die Whitespaces in der Ausgabe sind offenbar weder Leerzeichen noch Tabs. Dass ein Record über mehrere Zeilen läuft fällt dann schon kaum noch ins Gewicht. All das lässt die grep-Zeile so kompliziert erscheinen, obwohl es eigentlich ganz trivial ist.
[1] https://de.wikipedia.org/wiki/Dijkstra-Algorithmus
Code: Alles auswählen
#!/bin/bash
START=$1
END=$2
if [ $# -lt 3 ]
then
DKS=${START}.dks
debtree --no-alternatives $START 2>/dev/null > ${START}.dot
dijkstra -dp $START ${START}.dot > $DKS
echo $END
else
DKS=$3
fi
egrep -A 1 "(\s|\")$END(\s|\").*\[dist" $DKS | tail -n 1 | sed 's/.\+prev=//' | tr -d '",;]' | while read PKG
do
echo $PKG
if [ "$PKG" != "$START" ]
then
$0 $START $PKG $DKS
fi
done
Code: Alles auswählen
$ time ./dijkstra_dep.sh geeqie systemd
systemd
dbus-user-session
xdg-desktop-portal-gtk
libwebkit2gtk-4.0-37
zenity
geeqie
real 0m0,506s
user 0m0,481s
sys 0m0,050s
Das Script legt zwei Dateien im aktuellen Verzeichnis ab: Den debtree-Output als STARTPAKETNAME.dot, und den dijkstra-Output als STARTPAKETNAME.dks.
Hintergrund:
Mein Ansatz war, den kürzesten Pfad vom Startpaket (hier geeqie) zum Zielpaket (hier systemd) zu finden. Für dieses Problem des kürzesten Weges in einem Graphen gibt es eine Standardlösung, den Dijkstra-Algorithmus. [1]
dijkstra aus graphviz ist eine Implementierung dieses Algorithmus'. graphviz wiederum ist eine Empfehlung von debtree. Es lag also nahe, dieses Programm zu nutzen.
Die Option -p gibt das jeweils vorherige Paket in de Kette mit an. So konnte ich mich relativ einfach durchhangeln.
Leider ist der dijkstra-Output sehr hässlich und nur sehr eingeschränkt steuerbar. Pakete werden mal in Anführungszeichen ("") gesetzt und mal nicht (je nachdem ob der Name nur aus alphanumerischen Zeichen besteht oder z.B. Bindestriche enthält). Auch der Zeilenabschluss (Komma oder eckige Klammer + Semikolon) hängt davon ab). Die Whitespaces in der Ausgabe sind offenbar weder Leerzeichen noch Tabs. Dass ein Record über mehrere Zeilen läuft fällt dann schon kaum noch ins Gewicht. All das lässt die grep-Zeile so kompliziert erscheinen, obwohl es eigentlich ganz trivial ist.
[1] https://de.wikipedia.org/wiki/Dijkstra-Algorithmus
Re: geeqie und systemd
Du machst einfach in die letzte Zeile hinter das `done' noch ein `|tac' und die Liste ist anders rum.Die Liste ist im Vergleich zu den übrigen Beispielen hier im Thread umgekehrt zu lesen, also "systemd ist eine Abhängigkeit von dbus-user-session." usw. Der Grund hierfür und für die zeilenweise Ausgabe der Pakete ist Faulheit, denn so musste ich keine Arbeit in die Präsentation stecken.
Use ed once in a while!
Re: geeqie und systemd
Cool Länger her, dass mir der über den Weg gelaufen ist.hikaru hat geschrieben:12.08.2021 22:42:08Mein Ansatz war, den kürzesten Pfad vom Startpaket (hier geeqie) zum Zielpaket (hier systemd) zu finden. Für dieses Problem des kürzesten Weges in einem Graphen gibt es eine Standardlösung, den Dijkstra-Algorithmus. [1]
dijkstra aus graphviz ist eine Implementierung dieses Algorithmus'. graphviz wiederum ist eine Empfehlung von debtree. Es lag also nahe, dieses Programm zu nutzen.
An die Ausführungszeiten bin ich selbst mit einem parallel in obiger, naiver Lösung nicht herangekommen
Manchmal bekannt als Just (another) Terminal Hacker.
Re: geeqie und systemd
Hmm...Meillo hat geschrieben:12.08.2021 22:49:30Du machst einfach in die letzte Zeile hinter das `done' noch ein `|tac' und die Liste ist anders rum.
Code: Alles auswählen
$ tail dijkstra_dep.sh
egrep -A 1 "(\s|\")$END(\s|\").*\[dist" $DKS | tail -n 1 | sed 's/.\+prev=//' | tr -d '",;]' | while read PKG
do
echo $PKG
if [ "$PKG" != "$START" ]
then
$0 $START $PKG $DKS
fi
done | tac
$ time ./dijkstra_dep.sh geeqie systemd
systemd
xdg-desktop-portal-gtk
zenity
geeqie
libwebkit2gtk-4.0-37
dbus-user-session
real 0m0,512s
user 0m0,480s
sys 0m0,067s
tac nach dem Ende des ursprünglichen Scripts aufzurufen funktioniert natürlich:
Code: Alles auswählen
$ time ./dijkstra_dep.sh geeqie systemd | tac
geeqie
zenity
libwebkit2gtk-4.0-37
xdg-desktop-portal-gtk
dbus-user-session
systemd
real 0m0,506s
user 0m0,472s
sys 0m0,061s
Re: geeqie und systemd
Darf ich noch einwerfen, dass der kürzeste Pfad nicht immer der Beste sein muss?
https://de.wikipedia.org/wiki/Bellman-Ford-Algorithmus
Ein langer Pfad, von kleinen Paketen, die man bereits auf der Kiste hat, ist vermutlich einem kurzen mit großen Paketen, die dann auch noch installiert werden müssen, vorzuziehen.
https://de.wikipedia.org/wiki/Bellman-Ford-Algorithmus
Ein langer Pfad, von kleinen Paketen, die man bereits auf der Kiste hat, ist vermutlich einem kurzen mit großen Paketen, die dann auch noch installiert werden müssen, vorzuziehen.
Re: geeqie und systemd
Bei der Frage geht's aber doch hauptsächlich um die Frage ob es überhaupt einen Pfad gibt (= kann es sein, dass ein bestimmtes Paket als Abhängigkeit eines anderen installiert werden muss). Die Kosten/Länge des Pfads wäre dabei egal. (Oder vertue ich mich dabei?)eggy hat geschrieben:13.08.2021 07:18:22Darf ich noch einwerfen, dass der kürzeste Pfad nicht immer der Beste sein muss?
Manchmal bekannt als Just (another) Terminal Hacker.
Re: geeqie und systemd
Hmm ...
War gestern wohl schon ein bisschen spaet. Hab da die Rekursion gar nicht gesehen. (Wobei ich noch nicht verstehe warum die hier ein Problem ist.)
Und jetzt ist es vielleicht noch zu frueh und ich uebersehe wieder was.
Trotzdem: Wenn du bei einer Rekursion absteigend ausgeben willst, dann machst du die Ausgabe einfach hinter den Rekursionsaufruf.
War gestern wohl schon ein bisschen spaet. Hab da die Rekursion gar nicht gesehen. (Wobei ich noch nicht verstehe warum die hier ein Problem ist.)
Und jetzt ist es vielleicht noch zu frueh und ich uebersehe wieder was.
Trotzdem: Wenn du bei einer Rekursion absteigend ausgeben willst, dann machst du die Ausgabe einfach hinter den Rekursionsaufruf.
Use ed once in a while!