Abhängigkeiten eines Programms finden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
wckl
Beiträge: 615
Registriert: 10.08.2007 15:26:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: St. Georges de Didonne

Abhängigkeiten eines Programms finden

Beitrag von wckl » 15.11.2017 14:00:43

Hallo,

ich habe das Python-Programm Mnemosyne zum Laufen gebracht.
Es haben einige Pakete gefehlt - leider habe ich mir nicht gemerkt, welche das waren :(

Kann man durch ein Programm feststellen welche Dateien / Pakete mnemosyne beim Aufruf bzw. bei der Programmausführung benutzt?

Vielen Dank für Hinweise.
wckl

TomL
Beiträge: 3705
Registriert: 24.07.2014 10:56:59

Re: Abhängigkeiten eines Programms finden

Beitrag von TomL » 15.11.2017 14:05:23

Als Beispiel für Midnight-Commander

Code: Alles auswählen

apt-cache rdepends mc
apt-cache depends mc
ldd /usr/bin/mc
Hth
vg, Thomas

wckl
Beiträge: 615
Registriert: 10.08.2007 15:26:28
Lizenz eigener Beiträge: GNU General Public License
Wohnort: St. Georges de Didonne

Re: Abhängigkeiten eines Programms finden

Beitrag von wckl » 15.11.2017 14:18:37

Das hilft wohl nicht:

Code: Alles auswählen

apt-cache rdepends mnemosyne
E: Keine Pakete gefunden
apt-cache depends mnemosyne
E: Keine Pakete gefunden
ldd /usr/local/bin/mnemosyne 
	das Programm ist nicht dynamisch gelinkt
Wie gesagt, es ist ein Python-Programm; in testing sind die Pakete gelöscht.

Ich habe es aus dem Tar-Archiv auf der Projektseite installiert.


Benutzeravatar
hikaru
Beiträge: 9909
Registriert: 09.04.2008 12:48:59

Re: Abhängigkeiten eines Programms finden

Beitrag von hikaru » 15.11.2017 14:26:50

wckl hat geschrieben: ↑ zum Beitrag ↑
15.11.2017 14:00:43
Kann man durch ein Programm feststellen welche Dateien / Pakete mnemosyne beim Aufruf bzw. bei der Programmausführung benutzt?
Du kannst mit Debianstrace herausfinden, welche Dateien ein Programmaufruf öffnet:

Code: Alles auswählen

strace -e trace=open mnemosyne
Dabei ist allerdings zu bedenken, dass möglicherweise nur bestimmte Aktionen innerhalb des Programms bestimmte Dateien öffnen. Z.B. wäre bei einem Programm mit einer Speicherfunktion anzunehmen, dass die Bibliotheken für den Speicherdialog nur geöffnet werden, wenn auch tatsächlich die Speicherfunktion im Programm aufgerufen wird.

Außerdem werden hier keine Abhängigsketten beachtet. Wenn z.B. dein Programm Bibliothek A öffnet, die wiederum Bibliothek B öffnet, dann erscheinen beide im strace-Output. Als Abhängigkeit in einem selbstgebauten Debianpaket bräuchtest du aber natürlich nur Paket A angeben, denn Paket A sollte selbst Paket B als Abhängigkeit definieren.

Als Hinweis sei vielleicht noch erwähnt, dass strace einen erheblichen Overhead beim Ressourcenverbrauch erzeugt. Das aufgerufene Programm wird also deutlich langsamer laufen als normalerweise.

tobo
Beiträge: 543
Registriert: 10.12.2008 10:51:41

Re: Abhängigkeiten eines Programms finden

Beitrag von tobo » 15.11.2017 14:55:17

wckl hat geschrieben: ↑ zum Beitrag ↑
15.11.2017 14:18:37
Wie gesagt, es ist ein Python-Programm; in testing sind die Pakete gelöscht.
Ja. In Stable und Unstable ist es aber in gleicher Version vorhanden:

Code: Alles auswählen

$ rmadison  mnemosyne
mnemosyne  | 2.0~RC1-3     | oldoldstable       | source, all
mnemosyne  | 2.2.1-2       | oldstable          | source, all
mnemosyne  | 2.2.1-2       | oldstable-kfreebsd | source, all
mnemosyne  | 2.4-0.1       | stable             | source, all
mnemosyne  | 2.4-0.1       | unstable           | source, all

Die Abhängigkeiten in Stretch:

Code: Alles auswählen

$ apt-cache depends mnemosyne
mnemosyne
  Depends: libqt5sql5-sqlite
  Depends: python3
  Depends: python3-cherrypy3
  Depends: python3-matplotlib
  Depends: python3-pyqt5
  Depends: python3-pyqt5.qtsql
  Depends: python3-pyqt5.qtwebchannel
  Depends: python3-pyqt5.qtwebengine
  Depends: python3-webob
  Depends: <python3:any>
    python3
  Depends: libjs-sphinxdoc

Und das kann man auch online schauen:
https://packages.debian.org/stretch/mnemosyne

mat6937
Beiträge: 1062
Registriert: 09.12.2014 10:44:00

Re: Abhängigkeiten eines Programms finden

Beitrag von mat6937 » 16.11.2017 11:08:48

wckl hat geschrieben: ↑ zum Beitrag ↑
15.11.2017 14:00:43
Kann man durch ein Programm feststellen welche Dateien / Pakete mnemosyne beim Aufruf bzw. bei der Programmausführung benutzt?
Das geht z. B. auch mit lsof:

Code: Alles auswählen

lsof -np $(pidof <Programm>)
(ohne Spitze Klammern).

EDIT:

Ein kleines Beispiel:

Code: Alles auswählen

# ps -fC python
UID        PID  PPID  C STIME TTY          TIME CMD
xx        5662  2342  0 11:05 pts/1    00:00:00 python -m SimpleHTTPServer 8080

Code: Alles auswählen

# lsof -np $(pidof python)
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
python  5662   xx  cwd    DIR    8,1    12288 1310722 /home/xx
python  5662   xx  rtd    DIR    8,1     4096       2 /
python  5662   xx  txt    REG    8,1  3172768 3932492 /usr/bin/python2.7
python  5662   xx  mem    REG    8,1  1742840  786460 /lib/i386-linux-gnu/libcrypto.so.1.0.0
python  5662   xx  mem    REG    8,1   358624  786452 /lib/i386-linux-gnu/libssl.so.1.0.0
python  5662   xx  mem    REG    8,1  9006448 3932272 /usr/lib/locale/locale-archive
python  5662   xx  mem    REG    8,1   280108  786716 /lib/i386-linux-gnu/libm-2.19.so
python  5662   xx  mem    REG    8,1    99888  786680 /lib/i386-linux-gnu/libz.so.1.2.8
python  5662   xx  mem    REG    8,1     9816  786601 /lib/i386-linux-gnu/libutil-2.19.so
python  5662   xx  mem    REG    8,1    13856  786730 /lib/i386-linux-gnu/libdl-2.19.so
python  5662   xx  mem    REG    8,1  1763068  786718 /lib/i386-linux-gnu/libc-2.19.so
python  5662   xx  mem    REG    8,1   134614  786720 /lib/i386-linux-gnu/libpthread-2.19.so
python  5662   xx  mem    REG    8,1    42716  786654 /lib/i386-linux-gnu/libnss_files-2.19.so
python  5662   xx  mem    REG    8,1    15292 4071757 /usr/lib/python2.7/lib-dynload/_hashlib.i386-linux-gnu.so
python  5662   xx  mem    REG    8,1    32792 4071760 /usr/lib/python2.7/lib-dynload/_ssl.i386-linux-gnu.so
python  5662   xx  mem    REG    8,1   134380  786744 /lib/i386-linux-gnu/ld-2.19.so
python  5662   xx    0u   CHR  136,1      0t0       4 /dev/pts/1
python  5662   xx    1u   CHR  136,1      0t0       4 /dev/pts/1
python  5662   xx    2u   CHR  136,1      0t0       4 /dev/pts/1
python  5662   xx    3u  IPv4  49022      0t0     TCP *:http-alt (LISTEN)

Antworten