Как использовать libapt (или libept) в Debian-подобной системе для получения списка пакетов и получения их информации? - PullRequest
11 голосов
/ 04 декабря 2008

Кто-нибудь использовал libapt или libept для вывода списка пакетов и получения информации о пакете в системе, подобной debian?

Libapt не совсем хорошо документирован, и я нашел несколько примеров и учебных пособий по libept. Может кто-нибудь объяснить мне лучшие методы

  1. получить список всех пакетов в apt-системе
  2. получить информацию об отдельных пакетах (например, имя, версия, зависимости, описание и т. Д.)
  3. получить список файлов, установленных одним пакетом

Работать напрямую с внутренними файлами apt довольно просто, но я хочу использовать библиотеку для соблюдения требований apt.

Ответы [ 4 ]

10 голосов
/ 31 мая 2014

В debian есть пакет под названием libapt-pkg-doc, который содержит некоторую документацию (например, ссылку на API). После установки вы можете получить к нему доступ в файле: ///usr/share/doc/libapt-pkg-doc/html/index.xhtml.

Я только что взглянул на libapt, и вот что я выучил до сих пор:

Как перечислить все пакеты:

#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;
}
6 голосов
/ 04 декабря 2008

Посмотрите, как реализован apt-cache (8). Получить источник с помощью apt очень просто:

# apt-get source apt

В исходном файле cmdline/apt-cache.cc есть функция с именем DumpPackage(), которая извлекает информацию из именованного файла в кеш.

0 голосов
/ 23 января 2016

Просто отметим, что есть wpkg , который может читать пакеты Debian и предоставлять вам всю информацию. Однако он ничего не знает о базах данных apt или dpkg. Он будет способен читать .deb, и вы можете извлечь всю информацию и файлы с ним, все в C ++.

0 голосов
/ 26 февраля 2009

Существует также DPKG :: Parse из CPAN, если вы используете perl.

...