Wie man mit apt-file auf Debian und Ubuntu nach fehlenden Paketen sucht

Version 1.0
Author: Falko Timme


Diese Kurzanleitung veranschaulicht, wie man mit apt-file auf Debian und Ubuntu Systemen nach fehlenden Paketen sucht. Mit Hilfe von apt-file kannst Du nach einem Dateinamen suchen und erhältst den Namen des Pakets, das die Datei enthält, sodass Du das entsprechende Paket installieren kannst.

Ich kann aber nicht garantieren, dass dies bei Dir funktioniert!

1 Ausgangssituation

Ich nehme an Du kennst das: Du versuchst Software aus der Quelle zu erstellen und plötzlich wird der Vorgang abgebrochen, da eine Datei fehlt, von der Du noch nie zuvor gehört hast:

root@falko-desktop:~/avant-window-navigator-0.1.1# make
make all-recursive
make[1]: Entering directory `/root/avant-window-navigator-0.1.1'
Making all in src
make[2]: Entering directory `/root/avant-window-navigator-0.1.1/src'
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -DORBIT2=1 -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/libwnck-1.0 -I/usr/include/gconf/2 -I/usr/include/orbit-2.0 -DDATADIR=""/usr/local/share"" -DGNOMELOCALEDIR=""/usr/local/share/locale"" -g -O2 -Wall -pedantic -std=c99 -fno-strict-aliasing -fmessage-length=0 -D_FORTIFY_SOURCE=2 -MT main.o -MD -MP -MF ".deps/main.Tpo" -c -o main.o main.c;
then mv -f ".deps/main.Tpo" ".deps/main.Po"; else rm -f ".deps/main.Tpo"; exit 1; fi
main.c:21:21: error: gtk/gtk.h: No such file or directory
In file included from main.c:25:
awn-gconf.h:69: error: expected â)â before â*â token
In file included from main.c:26:
awn-bar.h:43: error: expected specifier-qualifier-list before âGtkWindowâ
awn-bar.h:45: warning: struct has no members
awn-bar.h:48: error: expected specifier-qualifier-list before âGtkWindowClassâ
awn-bar.h:49: warning: struct has no members
awn-bar.h:51: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
awn-bar.h:55: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
awn-bar.h:57: error: expected â)â before â*â token
awn-bar.h:58: error: expected â)â before â*â token
In file included from main.c:27:
awn-window.h:43: error: expected specifier-qualifier-list before âGtkWindowâ
awn-window.h:45: warning: struct has no members
awn-window.h:48: error: expected specifier-qualifier-list before âGtkWindowClassâ
awn-window.h:49: warning: struct has no members
awn-window.h:55: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
In file included from main.c:28:
awn-app.h:30:29: error: libwnck/libwnck.h: No such file or directory
In file included from main.c:28:
awn-app.h:60: error: expected specifier-qualifier-list before âWnckWindowâ
awn-app.h:80: warning: struct has no members
awn-app.h:83: error: expected â)â before â*â token
In file included from main.c:29:
awn-win-manager.h:35: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
main.c:32: error: expected â)â before â*â token
main.c: In function âmainâ:
main.c:48: error: âGtkWidgetâ undeclared (first use in this function)
main.c:48: error: (Each undeclared identifier is reported only once
main.c:48: error: for each function it appears in.)
main.c:48: error: âwinâ undeclared (first use in this function)
main.c:49: error: âbarâ undeclared (first use in this function)
main.c:50: error: âboxâ undeclared (first use in this function)
main.c:51: error: âwinmanâ undeclared (first use in this function)
main.c:52: error: âlabâ undeclared (first use in this function)
main.c:54: warning: implicit declaration of function âgtk_initâ
main.c:56: warning: implicit declaration of function âawn_bar_newâ
main.c:58: warning: implicit declaration of function âawn_window_newâ
main.c:59: warning: implicit declaration of function âgtk_window_set_policyâ
main.c:59: warning: implicit declaration of function âGTK_WINDOWâ
main.c:61: error: âexposeâ undeclared (first use in this function)
main.c:64: warning: implicit declaration of function âgtk_hbox_newâ
main.c:66: warning: implicit declaration of function âawn_win_mgr_newâ
main.c:68: warning: implicit declaration of function âgtk_box_pack_startâ
main.c:68: warning: implicit declaration of function âGTK_BOXâ
main.c:68: warning: implicit declaration of function âgtk_label_newâ
main.c:72: warning: implicit declaration of function âgtk_container_addâ
main.c:72: warning: implicit declaration of function âGTK_CONTAINERâ
main.c:74: warning: implicit declaration of function âgtk_widget_show_allâ
main.c:76: warning: implicit declaration of function âgtk_window_set_transient_forâ
main.c:79: warning: implicit declaration of function âgtk_mainâ
make[2]: *** [main.o] Error 1
make[2]: Leaving directory `/root/avant-window-navigator-0.1.1/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/avant-window-navigator-0.1.1'
make: *** [all] Error 2
root@falko-desktop:~/avant-window-navigator-0.1.1#

Also woher weiß man, welches (offensichtlich fehlende) Paket diese Datei enthält, so dass man das Paket installieren und den Vorgang neu starten kann?

Für Debian basierte Systems (wie Ubuntu) ist die Lösung apt-file. Es lässt Dich nach Dateinamen suchen und liefert Dir die Pakete an, die diese Datei enthalten.

2 Installation von apt-file

apt-file wird wie folgt installiert:

apt-get install apt-file

Nach der Installation müssen wir die Datenbank von apt-file wie folgt aktualisieren:

apt-file update

Das musst Du auch dann jedes Mal tun, wenn Du /etc/apt/sources.list bearbeitest.

3 Nach Paketen suchen

Lass uns jetzt nach dem Paket suchen, das die Datei gtk/gtk.h enthält. So könntest Du suchen:

apt-file search gtk.h

aber das hätte zur Folge, dass Du einen Haufen Pakete aufgelistet bekommst, also lass uns die Suche eingrenzen indem wir Folgendes laufen lassen

apt-file search gtk/gtk.h

Das Ergebnis sieht in etwa so aus:

root@falko-desktop:~/avant-window-navigator-0.1.1# apt-file search gtk/gtk.h
libgfcui-dev: usr/include/gfc-2.0/gfc/gtk/gtk.hh
libgtk+2.0-directfb-dev: usr/include/directfb/gtk-2.0/gtk/gtk.h
libgtk1.2-dev: usr/include/gtk-1.2/gtk/gtk.h
libgtk2.0-dev: usr/include/gtk-2.0/gtk/gtk.h
libgtk2.0-doc: usr/share/doc/libgtk2.0-doc/gtk/gtk.html
root@falko-desktop:~/avant-window-navigator-0.1.1#

Wie Du siehst, gibt es drei Pakete, in denen gtk/gtk.h (eines beinhaltet gtk/gtk.hh, ein anderes gtk/gtk.html welches nicht das ist, wonach wir suchen) enthalten ist. Es ist Dir überlassen, das richtige zu installieren. Wenn Du unsicher bist, kannst Du alle drei Pakete installieren oder einfach eins nach dem anderen installieren und überprüfen, ob der Fehler weiterhin auftritt. In unserem Fall ist das richtige Paket libgtk2.0-dev, also installieren wir es:

apt-get install libgtk2.0-dev

Nun versuchen wir die Erstellung erneut:

root@falko-desktop:~/avant-window-navigator-0.1.1# make
make all-recursive
make[1]: Entering directory `/root/avant-window-navigator-0.1.1'
Making all in src
make[2]: Entering directory `/root/avant-window-navigator-0.1.1/src'
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -DORBIT2=1 -pthread -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/libwnck-1.0 -I/usr/include/gconf/2 -I/usr/include/orbit-2.0 -DDATADIR=""/usr/local/share"" -DGNOMELOCALEDIR=""/usr/local/share/locale"" -g -O2 -Wall -pedantic -std=c99 -fno-strict-aliasing -fmessage-length=0 -D_FORTIFY_SOURCE=2 -MT main.o -MD -MP -MF ".deps/main.Tpo" -c -o main.o main.c;
then mv -f ".deps/main.Tpo" ".deps/main.Po"; else rm -f ".deps/main.Tpo"; exit 1; fi
In file included from /usr/include/gtk-2.0/gtk/gtk.h:170,
from main.c:21:
/usr/include/gtk-2.0/gtk/gtktextbuffer.h:52: warning: ISO C restricts enumerator values to range of âintâ
/usr/include/gtk-2.0/gtk/gtktextbuffer.h:53: warning: ISO C restricts enumerator values to range of âintâ
/usr/include/gtk-2.0/gtk/gtktextbuffer.h:55: warning: ISO C restricts enumerator values to range of âintâ
In file included from main.c:28:
awn-app.h:30:29: error: libwnck/libwnck.h: No such file or directory
In file included from main.c:28:
awn-app.h:60: error: expected specifier-qualifier-list before âWnckWindowâ
awn-app.h:80: warning: struct has no members
awn-app.h:83: error: expected â)â before â*â token
main.c: In function âmainâ:
main.c:52: warning: unused variable âlabâ
make[2]: *** [main.o] Error 1
make[2]: Leaving directory `/root/avant-window-navigator-0.1.1/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/root/avant-window-navigator-0.1.1'
make: *** [all] Error 2
root@falko-desktop:~/avant-window-navigator-0.1.1#

Wie Du siehst, ist der anfängliche Fehler behoben, aber es fehlt trotzdem noch eine Datei libwnck/libwnck.h, asso lass uns nach dem fehlenden Paket suchen:

apt-file search libwnck/libwnck.h

Dieses Mal haben wir Glück. Es gibt nur ein Paket, das die Datei enthält:

root@falko-desktop:~/avant-window-navigator-0.1.1# apt-file search libwnck/libwnck.h
libwnck-dev: usr/include/libwnck-1.0/libwnck/libwnck.h
root@falko-desktop:~/avant-window-navigator-0.1.1#

Also installieren wir das fehlende Paket:

apt-get install libwnck-dev

4 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte