Dziś będzie o bardzo użytecznym programie apt-file. Dobrodziejstwo paczek w Ubuntu/Debianie może stać się przekleństwem, kiedy chcemy zainstalować program w nowszej wersji lub program nie znajdujący się w repozytoriach. Wtedy na pomoc przychodzi standardowa kompilacja. Zdarza się jednak, że pomimo wielkiego wysiłku i starań, zrobienia użytku z apt-cache search i przekopania 3/4 zasobów Internetu, pozostaje tylko bezradnie rozłożyć ręce. Cholerze czegoś wciąż brakuje i uparcie o tym informuje. Właśnie wtedy do akcji wkracza apt-file (;
Ten wpis nie miałby miejsca, gdyby nie publikacja Falko Timme’a na HowtoForge – How To Search For Missing Packages With apt-file On Debian and Ubuntu
. Mój tekst jest jego luźnym tłumaczeniem oraz wyciągiem z własnych doświadczeń (;
1. Hipotetyczna sytuacja
./configure poszło jak z bicza trzasnął, z uśmiechem na ustach można wpisać make (pozwoliłem sobie skrócić output, dłuższą część treści można znaleźć w artykule, którym się posiłkowałem):
~$ make
[…]
-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:
[…]
Teraz, jak dotrzeć do paczek, które mogą zawierać wymagany plik? Jeśli pod ręką nie ma fusów ani szklanej kuli, trzeba zaprząc do pracy apt-file. Ale skąd go wziąć?
2. Instalacja apt-file
sudo apt-get install apt-file
Po instalacji trzeba wydać jedno polecenie, które w zależności od posiadanego łącza internetowego i zawartości sources.list, może nieco czasu zająć. Dodatkowo, należy pamiętać o jego ponownym wykonaniu, po zmianach wprowadzonych w sources.list.
apt-file update
3. Poszukiwania czas zacząć
Teraz należy dokładniej przyjrzeć się komunikatowi o błędzie. Czego brakuje? error: gtk/gtk.h: No such file or directory. Można więc zacząć poszukiwania od:
apt-file search gtk.h
Ale to zwraca zbyt dużo wyników. Potrzeba konkretów:
apt-file search gtk/gtk.h
W odpowiedzi powinno wyświetlić się coś takiego:
~$ 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
Jak widać powyżej, do wyboru są trzy paczki zawierające gtk/gtk.h (jedna zawiera gtk/gtk.hh, druga gtk/gtk.html, które nie są tym, czego szukamy). Właśnie teraz jest moment, w którym należy dokonać właściwego wyboru – który zależy wyłącznie od Ciebie. Jeśli nie wiesz/nie jesteś pewien/pewna, która ma to być paczka, masz dwa rozwiązania:
- Zainstalować wszystkie trzy;
- Zainstalować jedna po drugiej i metodą prób i błędów odnaleźć tę właściwą.
W przykładowym poszukiwaniu, tę właściwą paczką jest libgtk2.0-dev, więc trzeba ją doinstalować:
sudo apt-get install libgtk2.0-dev
To raz możemy sprawdzić make’iem, czy to już wszystko:
~$ make
[…]
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â
[…]
Cóż to tym razem? libwnck/libwnck.h? Żaden problem:
apt-file search libwnck/libwnck.h
libwnck-dev: usr/include/libwnck-1.0/libwnck/libwnck.h
Tym razem jedna paczka, więc pozostało tylko ją zainstalować:
sudo apt-get install libwnck-dev
To już wszystko, życzę udanej zabawy (:
Super sprawa! Od jakiś dwóch tygodni zabieram się za skompilowanie pewnego programu pod Ubuntu. Nie chciało mi się przekopywać przez zależności i odkładałem ten moment na później. Teraz, dzięki apt-file wszystko powinno pójść gładko.
Dzięki za HOWTO!
Thx za info. Wkoncu zycie stanie sie prostrze 🙂
czyzby powoli tworzyla nam sie nowa planeta ? ;]
A co z takim przypadkiem:
hhhh@a2000ubuntu:~$ sudo apt-get install apt-file
Password:
Czytanie list pakietów… Gotowe
Budowanie drzewa zależności
Reading state information… Gotowe
Należy uruchomić `apt-get -f install’, aby je naprawić:
Następujące pakiety mają niespełnione zależności:
apt-file: Wymaga: libconfigfile-perl ale nie zostanie zainstalowany
Wymaga: libapt-pkg-perl ale nie zostanie zainstalowany
digikamimageplugins: Wymaga: digikam ale nie zostanie zainstalowany
Wymaga: digikam (> 1:0.8) ale nie zostanie zainstalowany
Wymaga: digikam (
przy probie :
apt-file update
mam :
E: Can’t write in /var/cache/apt/apt-file: No such file or directory
o co biega ?
problem rozwiazany 😀
hej-ho jak rozwiązałeś ten problem?
zrob to z poziomu sudo ^^
Wpis trochę stary, ale można by jeszcze opisać „auto-apt” 🙂