Как использовать 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, и вы можете извлечь всю информацию и файлы с ним, все в С++.