2008-12-04 13 views
10

Ktoś użył libapt lub libept do wypisania pakietów i uzyskania informacji o pakiecie w systemie debian-like?Jak korzystać z libapt (lub libept) w systemie debian-like, aby wyświetlić listę pakietów i uzyskać informacje o nich?

Libapt nie jest dobrze udokumentowany i znalazłem kilka przykładów i samouczków na temat libept. Czy ktoś może wyjaśnić mi najlepsze metody

  1. uzyskać listę wszystkich pakietów w systemie apt-get
  2. informacje o pojedynczych pakietów (takich jak nazwa, wersja, uzależnień, opis itd lista
  3. wysiąść pliki instalowane przez jednego pakietu

pracować bezpośrednio z mieszkaniem plików wewnętrznych jest dość proste, ale chcę użyć biblioteki do przestrzegania specyfikacji apt.

Odpowiedz

6

Spójrz na jak implementowany jest apt-cache (8). Uzyskanie źródła z apt jest proste:

# apt-get source apt 

W pliku źródłowym cmdline/apt-cache.cc Tam jest funkcja o nazwie DumpPackage() który wydobywa informacje z pliku o nazwie w pamięci podręcznej.

0

Istnieje również DPKG :: Parse z CPAN, jeśli używasz Perl.

10

W debian znajduje się pakiet o nazwie libapt-pkg-doc, który zawiera trochę dokumentacji (jak odniesienie API). Po zainstalowaniu możesz uzyskać do niego dostęp w pliku: ///usr/share/doc/libapt-pkg-doc/html/index.xhtml.

ja dopiero miał przyjrzeć libapt i tu jest to, czego nauczyliśmy się do tej pory:

Jak wymienić wszystkie pakiety:

#include <apt-pkg/cachefile.h> 
#include <apt-pkg/pkgcache.h> 

int main() { 
    // _config and _system are defined in the libapt header files 
    pkgInitConfig(*_config); 
    pkgInitSystem(*_config, _system); 

    pkgCacheFile cache_file; 
    pkgCache* cache = cache_file.GetPkgCache(); 

    for (pkgCache::PkgIterator package = cache->PkgBegin(); !package.end(); package++) { 
     std::cout << package.Name() << std::endl; 
    } 

    return 0; 
} 
+0

Czy to lista wszystkich * zainstalowanych * pakietów, czy też zawiera listę wszystkich pakietów dostępnych * do instalacji *? –

+1

@ ThrowawayAccount3Million wyświetla listę dostępnych pakietów, jeśli dobrze pamiętam – eyelash

-2

Wystarczy wspomnieć, jest wpkg który ma zdolność przeczytać pakiety Debiana i podać wszystkie informacje. Jednak nie wie nic o bazach danych apt lub dpkg. Będzie w stanie odczytać plik .deb i wyodrębnić z niego wszystkie informacje i pliki, a wszystko to w C++.