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

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

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

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

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

Ответ 1

В 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;
}

Ответ 2

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

# apt-get source apt

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

Ответ 3

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

Ответ 4

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