Abhängigkeitspfade zu systemd und mögliche Alternativen
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Mir wär's ganz lieb, wenn meine dummen Anwenderanfragen nebenbei mitbeantwortet werden könnten , den code verstehen werde ich, wenn überhaupt, sowieso erst hinterher. Also: Müssen die als Parameter übergebenen Programme installiert sein? Aptitude nutze ich zwar auch nie, aber das zu installieren, wäre mir die Sache wert.
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Nein.fischig hat geschrieben:18.08.2021 12:40:51Also: Müssen die als Parameter übergebenen Programme installiert sein?
Du musst nur debtree und graphviz installieren, damit das Script funktioniert.
Zudem muessen die zwei als Parameter uebergebenen Programme auch tatsaechlich eine Abhaengigkeit haben, naemlich in der Richtung: Parameter1 haengt von Parameter2 ab. (Damit dieser Fall automatisch abgefangen wird und eine Fehlermeldung kommt muss das Script verbessert werden. Wenn du aber nur Parameter uebergibst, wo das der Fall ist, dann geht es.)
Use ed once in a while!
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Ok, das fängt dann bei mir (unabsichtlich) die while-Schleife ab.Meillo hat geschrieben:18.08.2021 11:21:22Na, wenn es die Pakete nicht gibt oder sie keine Abhaengigkeiten haben, dann gibt es im Graphen auch keinen Pfad zwischen ihnen, folglich kann man (in der Implementierung mit sed) auch keinen naechsten bzw. vorigen Wert finden. Da kommt der leere Wert her: beim ersten rekursiven Aufruf, weil die Ausgabe des sed-Befehls leer ist.
Man müsste den debtree-Output nach $START und $END greppen, bzw. schon vor dem Aufruf von debtree prüfen, ob es das Paket $START überhaupt gibt.Meillo hat geschrieben:18.08.2021 11:21:22Vermutlich sollte man die Ausgabe von debtree nach $END greppen, um zu sehen, ob wir ueberhaupt suchen muessen, oder ob gar kein Pfad zwischen den zwei Paketen vorhanden ist.
Aber selbst wenn beides positiv ist, ist damit immer noch nicht sichergestellt, dass es einen Pfad zwischen beiden gibt.
Die älteste auffindbare Version ist debtree 1.0 [1] und da gab es den Verweis auf aptitude auch schon. Schade, der ursprüngliche Code ist wohl verloren.JTH hat geschrieben:18.08.2021 11:38:16Ja – gibt’s leider nicht mehr. Stattdessen wird auf aptitude why verwiesen.
notiertJTH hat geschrieben:18.08.2021 11:38:16Ich rufe an der Stelle mal dazu auf, immer alle, alle, alle Variablennutzungen zu quoten
gvpr sieht vielversprechend aus. Ich vermute, damit könnte man hier noch viel mehr machen, als einfach nur sed zu ersetzen (z.B. tatsächlich den/die Graphen von geeqie nach systemd extrahieren).JTH hat geschrieben:18.08.2021 11:38:16Ich habe am Wochenende auf zwei Zugfahrten nochmal weiter gebastelt. Es gibt von Graphviz ein awk-ähnliches Werkzeug, gvpr, das die Graphen wirklich „versteht“. Damit könnte man z.B. den einen sed-Aufruf ersetzen, der sich auf die gleichbleibende Formatierung des Graphquelltextes verlässt (Auszug):
Dummerweise stehe ich mit awk (als Vorbild) auf Kriegsfuß und es gibt nicht viele gvpr-Beispiele im Netz. Ich hatte gehofft, "Extrahiere den Abschnitt von Knoten A bis Knoten B aus Graph G!" wäre eine leicht zu recherchierende Standardaufgabe.
Zu meiner Verteidigung:Meillo hat geschrieben:18.08.2021 11:47:41(Um mich rauszureden : Ich habe einfach hikarus Stil uebernommen, auch seine if-then-Formatierung und die geschweiften Klammern wo sie vor Punkt nicht noetig waren. Waehrend diese anderen Dinge jedoch nicht schaedlich sind, sind es die fehlenden Double-Quotes doch ... und insofern haette ich die nicht hinnehmen, sondern korrigieren sollten. )
An der (vermeintlich) wichtigen Stelle hatte ich Quotes :
Code: Alles auswählen
if [ "$PKG" != "$START" ]
Hatte ich hier [2] gemacht.fischig hat geschrieben:18.08.2021 12:40:51Mir wär's ganz lieb, wenn meine dummen Anwenderanfragen nebenbei mitbeantwortet werden könnten
[1] http://snapshot.debian.org/package/debt ... ebtree_1.0
[2] viewtopic.php?f=29&t=181683&start=30#p1279512
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Jajafischig hat geschrieben:18.08.2021 12:40:51Mir wär's ganz lieb, wenn meine dummen Anwenderanfragen nebenbei mitbeantwortet werden könnten
Nein, die betrachteten Pakete müssen nicht installiert sein, geeqie hab ich z.B. nicht installiert, kann die Skripte trotzdem ausführen. Nur debtree und graphviz brauchen die Skripte zum Ausführen.
Woher der Fehler bei dir kommt, ist mir nicht ganz klar. Ich kann ihn nur provozieren, wenn ich dem Skript nur einen, statt zwei Paketnamen übergebe. Hast du das vllt versehentlich gemacht?
Mein Wunsch wär, auf dem Wege noch alle Pfade, die zu einer bestimmten Abhängigkeit führen, anzuzeigen. Und super wäre natürlich, zusätzlich die gesuchten Wege zur Vermeidung einer Abhängigkeit rauszufinden.Meillo hat geschrieben:18.08.2021 11:47:41Schoen zu sehen wie viel Potenzial dieses Thema und dieser Thead noch hat!
Edit: Ups, ihr wart schneller.
Manchmal bekannt als Just (another) Terminal Hacker.
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Hier eine Version, die abfaengt, ob das Zielpaket eine Abhaengigkeit ist:
Zudem sind alle Variablenexpansionen gequotet.
Es fehlt noch auszuwerten, wenn debtree das Startpaket nicht findet. Da muss man schauen was debtree dazu sagt. Vermutlich kann man dessen Return-Wert pruefen. (Aber da ich kein debtree hier habe und es darum nicht testen kann, ueberlasse ich diesen Teil euch.)
@JTH: Bis hier hin war das alles noch nett mit Shell und Co. Wenn es um die von dir gewuenschte, umfassende Umsetzung geht, waere das der Punkt, wo ich (nun, da ich eine Menge ueber das Problem gelernt habe) neu ansetzen wuerde, mit einer passenden Programmiersprache und passenden Datenstrukturen, nicht bloss dieser rudidmentaeren String-Fiddelei. Sondern den Baum im Speicher aufbauen, die Ausgabe auf der internen Datenstruktur basieren, Abstraktion, usw.
Code: Alles auswählen
#!/bin/sh
START="$1"
END="$2"
DKS="${START}.dks"
recurse() {
if [ "$1" != "$START" ]
then
recurse $(sed -n '/[[:space:]"]'$1'[[:space:]"].*\[dist/ {n; s/[]",;]//g; s/.*prev=//p;}' "$DKS")
fi
echo "$1"
}
debtree --no-alternatives "$START" 2>/dev/null > "${START}.dot"
dijkstra -dp "$START" "${START}.dot" > "$DKS"
if ! grep -wq "$END" "$DKS"
then
echo "$END is no dependency of $START" >&2
exit 1
fi
recurse "$END"
Es fehlt noch auszuwerten, wenn debtree das Startpaket nicht findet. Da muss man schauen was debtree dazu sagt. Vermutlich kann man dessen Return-Wert pruefen. (Aber da ich kein debtree hier habe und es darum nicht testen kann, ueberlasse ich diesen Teil euch.)
@JTH: Bis hier hin war das alles noch nett mit Shell und Co. Wenn es um die von dir gewuenschte, umfassende Umsetzung geht, waere das der Punkt, wo ich (nun, da ich eine Menge ueber das Problem gelernt habe) neu ansetzen wuerde, mit einer passenden Programmiersprache und passenden Datenstrukturen, nicht bloss dieser rudidmentaeren String-Fiddelei. Sondern den Baum im Speicher aufbauen, die Ausgabe auf der internen Datenstruktur basieren, Abstraktion, usw.
Use ed once in a while!
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Das geht mit diesem debtree-Output (--no-alternatives) prinzipiell nicht.JTH hat geschrieben:18.08.2021 12:51:01Mein Wunsch wär, auf dem Wege noch alle Pfade, die zu einer bestimmten Abhängigkeit führen, anzuzeigen.
Den Schalter hatte ich in meinen ursprünglichen Versuchen eingebaut, als ich noch nicht auf dijkstra zurückgriff und etwas Ähnliches selbst implementieren wollte, weil ich mich mit der zusätzlichen Komplexität des Outputs nicht beschäftigen wollte.
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Das habe ich wohl nicht - zuletzt dank eures Arbeitstempos - überlesen. (Ich hatte heute bisher nur sporadisch Gelegenheit, mal in den Rechner zu schauen)hikaru hat geschrieben:Hatte ich hier [2] gemacht.fischig hat geschrieben:Mir wär's ganz lieb, wenn meine dummen Anwenderanfragen nebenbei mitbeantwortet werden könnten
debtree (nicht deptree?) musste ich nachinstallieren. graphviz hatte ich schon bei einer anderen Meillo-Variante nachinstallieren müssen. Dass debtree fehlt, wurde bisher nicht angemeckert. Mit der doppelt "geqouteten" (das ist ja ein furchtbarer Begriff!) Variablen kriege ich jetzt einen Abhängigkeiten-Pfad!
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
@fischig: die Scriptinggang läuft immer erst dann ̶a̶̶m̶o̶̶k̶ ähm zu Hochtouren auf, wenn die grundsätzlichen Fragen aus dem Weg geräumt sind, nicht dass noch einer stolpert
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Ja stimmt, das schließt man damit ja quasi aus. debtree hat anscheinend auch weitere Einschränkungen, wenn es um entweder-oder-Abhängigkeiten und virtuelle Pakete (wie das hier mal erwähnte dbus-session-bus) geht. An der Stelle wärs dann wohl notwendig, viel mit gvpr selbst rumzuhantieren, oder sinnvoll, wie Meillo erwähnt hat, es in einer höherenpassenderen Sprache zu lösen.
Das bietet sich an der Stelle dann langsam an, jo. Ich hatte schonmal einen Blick auf die apt-Bindings für Python und Perl geworfen. In einem ersten Schritt würde man dafür zum Teil aber wahrscheinlich debtree nachbauen – und da haben mich die 1200 Zeilen des Tools doch erstmal abgeschrecktMeillo hat geschrieben:18.08.2021 12:58:21Bis hier hin war das alles noch nett mit Shell und Co. Wenn es um die von dir gewuenschte, umfassende Umsetzung geht, waere das der Punkt, wo ich (nun, da ich eine Menge ueber das Problem gelernt habe) neu ansetzen wuerde, mit einer passenden Programmiersprache und passenden Datenstrukturen, nicht bloss dieser rudidmentaeren String-Fiddelei. Sondern den Baum im Speicher aufbauen, die Ausgabe auf der internen Datenstruktur basieren, Abstraktion, usw.
Ich hab hier nochmal eine Variante, die auch die beiden neuen „Anforderungen“ – keine Ausgabe, wenns keinen Pfad gibt, und Fehlermeldung bei nicht existenten Paketen (zumindest fürs erste Argument) – ohne extra Aufwand, nur durch das Verhalten von gvpr, mit erfüllt:
Code: Alles auswählen
#!/bin/bash
require()
{
if ! command -v "$1" &>/dev/null; then
echo "Missing command “$1”. Is the “$2” package installed?" >&2
exit 2
fi
}
require debtree debtree
require dijkstra graphviz
require gvpr graphviz
PKG=$1
DEP=$2
debtree \
--endlist=<(echo "$DEP") \
--no-alternatives \
--no-skip \
--quiet \
--skiplist=/dev/null \
"$PKG" |
dijkstra -dp "$PKG" |
# Pick the (shortest) dependency path:
gvpr -a "'$DEP'" '
BEG_G {
$tvtype = TV_fwd;
$tvroot = node($, ARGV[0]);
}
N[$.name == $tvroot.name] {
if ($.prev) {
edge_sg($T, node($T, $.prev), node($T, $.name), "");
$tvroot = node($G, $.prev);
}
} ' |
# Pretty-print the path:
gvpr -a "'$PKG'" '
BEG_G {
$tvtype = TV_fwd;
$tvroot = node($, ARGV[0]);
}
N[$.name != $tvroot.name] {
printf(" -> ");
}
N { printf($.name); }
END_G { print(); } '
aw(o)k?eggy hat geschrieben:18.08.2021 18:15:36@fischig: die Scriptinggang läuft immer erst dann ̶a̶̶m̶o̶̶k̶ […]
Manchmal bekannt als Just (another) Terminal Hacker.
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
btw, ohne den Thread kapern zu wollen: Kennt ihr die Geschichte um den Namen von awk?
Use ed once in a while!
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Aho, Weinberger und Kernigham ... oder gibt's da noch ne andere Story?
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Leider finde ich nicht mehr wo ich diese Story gelesen habe: Es waren diese drei Personen, die da an einer neuen Idee/Sprache tueftelten. Es war wohl fuer die anderen Kollegen auffaellig, dass diese drei seit einer Weile staendig zusammen rumhingen, ohne dass man genau gewusst haette, an was so Interessantem sie arbeiteten. Jedenfalls fingen die anderen dann an, wenn sie an den dreien vorbei kamen, sie zu necken, indem sie ``awk, awk, awk'' riefen. (Einerseits sind das deren Anfangsbuchstaben, andererseits ist es kurz fuer das englische Wort ``awkward'', was sowas wie ungeschickt, peinlich, heikel bedeutet). So waren es wohl eher die Kollegen, die diesen Namen im Spass aufgebracht haben.eggy hat geschrieben:18.08.2021 20:54:53Aho, Weinberger und Kernigham ... oder gibt's da noch ne andere Story?
... ich hoere schon, wie es demnaechst hier durch die Threads schallt: Awoks, Awoks, Awoks ... wenn man uns drei mal wieder entdeckt, wie wir uns in einem Thread breit machen.
Use ed once in a while!
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Immer interessant, so ein bisschen (Unix-) Geschichte
Aber ... oh nein, was hab ich mit dem awok da angerichtet
Aber ... oh nein, was hab ich mit dem awok da angerichtet
Manchmal bekannt als Just (another) Terminal Hacker.
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Der nächste Kandidat: geany. Auch hier kann man über die Installation von dbus-x11 statt dbus-user-sessionsystemd umgehen.
Ich habe das jetzt einfach durch „Versuch und Irrtum“ festgestellt. Das Desideratum: „Alternativen aufzeigen“ steht ja nach wie vor aus, richtig?
Schön fänd' ich auch, wenn apt von sich aus alternative Abhängigkeiten wählte/anböte, statt installierte (und im Repo vorhandene!) Pakete durch neu zu installierende zu ersetzen.
Ich habe das jetzt einfach durch „Versuch und Irrtum“ festgestellt. Das Desideratum: „Alternativen aufzeigen“ steht ja nach wie vor aus, richtig?
Schön fänd' ich auch, wenn apt von sich aus alternative Abhängigkeiten wählte/anböte, statt installierte (und im Repo vorhandene!) Pakete durch neu zu installierende zu ersetzen.
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Der nächste Kandidat: gparted
Der Abhängigkeitenpfad ist:
default-logind ist laut Paketverwaltung (z.Z.?) in bullseye gar nicht verfügbar ¹
Ergo: kein gparted ohne systemd in bullseye?
¹ https://packages.debian.org/bullseye/policykit-1
Der Abhängigkeitenpfad ist:
Code: Alles auswählen
gparted --> policykit-1 --> default-logind --> libpam-systemd --> systemd
Ergo: kein gparted ohne systemd in bullseye?
¹ https://packages.debian.org/bullseye/policykit-1
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
policykit-1 hat eigentlich eine Abhängigkeite auf default-logind | logind (default-logind oder logind). Dieses Oder wird dir wegen Einschränkungen von debtree nicht ausgegeben.
Beides sind virtuelle Pakete. default-logind wird bereitgestellt durch libpam-systemd. logind durch libpam-systemd und libpam-elogind. Du kannst die Kette hier also wohl so alternativ auflösen:
Wie oben schon mal indem du libpam-elogind explizit mit- oder vorab installierst.
Beides sind virtuelle Pakete. default-logind wird bereitgestellt durch libpam-systemd. logind durch libpam-systemd und libpam-elogind. Du kannst die Kette hier also wohl so alternativ auflösen:
Code: Alles auswählen
gparted --> policykit-1 --> logind (= libpam-elogind) --> elogind
Manchmal bekannt als Just (another) Terminal Hacker.
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Doch! - Oder ich lese nicht richtig. Beide Pakete (sowohl default-logind als auch logind) werden als alternative Abhängigkeit für policykit-1 ausgegeben. Aber da beide gleichzeitig auch als „z.Z. nicht verfügbar“ (wie immer ich das verstehen soll) ausgegeben werden, habe ich nicht weiter nach Ersatz für eines der beiden gesucht. So fit bin ich nicht.JTH hat geschrieben:Dieses Oder wird dir wegen Einschränkungen von debtree nicht ausgegeben.
Trotzdem danke für den Hinweis auf libpam-elogind!
Ich mach' das hier auch mehr zu Dokumentationszwecken. Ich bin ja vielleicht nicht der einzige, der sich bemüht, ein aktuelles Debian ohne systemd - so wie versprochen - aufgesetzt zu kriegen.
In diesem Sinne änderte ich gerne nochmal den Threadtitel: „Abhängigkeitspfade zu systemd und mögliche Alternativen“.
Aber ich bin zu autoritätsfixiert, um einen moderatorenseits geänderten Titel eigenmächtig noch mal zu ändern.
edit:
Dunnerlüttchen: mit lipbam-elogind lässt sich sogar bleachbit wieder ohne systemd installieren und als Sahnehäubchen wird auch die Klette libsystemd0 mit entfernt!
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
Tatsache, wenn man debtree etwas anders als in unseren Skriptlösungen hier ausm Thema aufruft, stellt es die Oder-Alternativen dar. Ich hatte im Hinterkopf, dass es das nicht kann.
apt show verrät dir ja, dass beide ein virtuelles Paket sind:fischig hat geschrieben:04.10.2021 19:57:31Aber da beide gleichzeitig auch als „z.Z. nicht verfügbar“ (wie immer ich das verstehen soll) ausgegeben werden, habe ich nicht weiter nach Ersatz für eines der beiden gesucht.
Code: Alles auswählen
$ apt show default-logind logind
Package: default-logind
State: not a real package (**virtual**)
Package: logind
State: not a real package (**virtual**)
[…]
Code: Alles auswählen
$ apt-cache showpkg logind
[…]
Reverse Provides:
libpam-systemd 247.9-4 (= 247.9-4)
libpam-systemd 247.3-6 (= 247.3-6)
libpam-elogind 246.9.1-1+debian1 (= 246.9.1-1+debian1)
Ist genehmigt Spart uns ein Aufsplitten (Oder ist das Titeländern nach anderthalb Monaten womöglich für nicht-Mods eingeschränkt?)fischig hat geschrieben:04.10.2021 19:57:31In diesem Sinne änderte ich gerne nochmal den Threadtitel: „Abhängigkeitspfade zu systemd und mögliche Alternativen“.
Aber ich bin zu autoritätsfixiert, um einen moderatorenseits geänderten Titel eigenmächtig noch mal zu ändern.
Manchmal bekannt als Just (another) Terminal Hacker.
Re: Abhängigkeitspfade zu systemd und mögliche Alternativen
Du überschätzt meine geistige Beweglichkeit.JTH hat geschrieben:apt show verrät dir ja, dass beide ein virtuelles Paket sind
Re: geeqie und systemd (Abhängigkeitspfade und Alternativen finden)
weil das "apt show" eher dem "apt-cache show" entsprichtJTH hat geschrieben:04.10.2021 20:50:53Keine Ahnung, warum das apt show nicht einfach genauso macht …Code: Alles auswählen
$ apt-cache showpkg logind
schau mal in die manpage von apt-cache, da gibts showpkg und show