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

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

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

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

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


person Emilio    schedule 04.12.2008    source источник


Ответы (3)


В debian есть пакет под названием libapt-pkg-doc, который содержит некоторую документацию (например, справочник по API). После установки вы можете получить к нему доступ по адресу file:///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;
}
person eyelash    schedule 31.05.2014
comment
В нем перечислены все установленные пакеты или все пакеты, которые доступны для установки? - person Throw Away Account; 18.09.2016
comment
@ThrowawayAccount3Million перечисляет доступные пакеты, если я правильно помню - person eyelash; 18.09.2016

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

# apt-get source apt

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

person joveha    schedule 04.12.2008

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

person jeremiah    schedule 26.02.2009