c++ - como - instalar paquetes en debian por consola
¿Cómo usar libapt(o libept) en un sistema similar a Debian para listar paquetes y obtener sus informaciones? (4)
Observe cómo se implementa apt-cache (8). Obtener la fuente con apt es fácil:
# apt-get source apt
En el archivo fuente cmdline/apt-cache.cc
hay una función llamada DumpPackage()
que extrae información de un archivo con nombre en la caché.
¿Alguien usó libapt o libept para hacer una lista de paquetes y obtener información sobre el paquete en un sistema similar a Debian?
Libapt no está bien documentado, y he encontrado algunos ejemplos y tutoriales sobre Libept. ¿Alguien puede explicarme los mejores métodos para
- obtener una lista de cada paquete en el apt-system
- obtener información sobre paquetes individuales (como nombre, versión, dependencias, descripción, etc.)
- obtener una lista de archivos instalados por un solo paquete
Trabajar directamente con archivos internos apt es bastante simple, pero quiero usar una biblioteca para respetar las especificaciones de apt.
También está DPKG :: Parse de CPAN si está usando perl.
En Debian hay un paquete llamado libapt-pkg-doc
que contiene cierta documentación (como una referencia API). Una vez instalado, puede acceder a él en el archivo: ///usr/share/doc/libapt-pkg-doc/html/index.xhtml.
Acabo de echar un vistazo a libapt y aquí está lo que he aprendido hasta ahora:
Cómo enumerar todos los paquetes:
#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;
}
Solo para mencionar, hay wpkg que tiene la capacidad de leer paquetes de Debian y darle toda la información. Sin embargo, no sabe nada sobre las bases de datos apt o dpkg. Será capaz de leer un .deb y puede extraer toda la información y los archivos con él, todo en C ++.