2008-12-04 14 views
10

Ai đó đã sử dụng libapt hoặc libept để liệt kê các gói và nhận thông tin về gói trong một hệ thống giống như debian?Làm thế nào để sử dụng libapt (hoặc libept) trong hệ thống giống như debian để liệt kê các gói và nhận các infos của chúng?

Libapt không được ghi chép đầy đủ và tôi đã tìm thấy một số ví dụ và hướng dẫn về khiếu nại. Ai đó có thể giải thích cho tôi phương pháp tốt nhất để

  1. có được một danh sách của tất cả các gói trong apt-hệ thống
  2. get thông tin về gói đơn (như tên, phiên bản, sự phụ thuộc, mô tả, vv
  3. get danh sách file cài đặt bởi một gói duy nhất

làm việc trực tiếp với các tập tin nội bộ apt là khá đơn giản, nhưng tôi muốn sử dụng một thư viện để tôn trọng kỹ thuật apt.

Trả lời

6

Hãy nhìn vào cách apt-cache (8) được triển khai. Lấy nguồn với apt là dễ dàng:

# apt-get source apt 

Trong tập tin nguồn cmdline/apt-cache.cc theres là một chức năng gọi là DumpPackage() được chiết xuất thông tin từ một file có tên trong bộ nhớ cache.

0

Ngoài ra còn có DPKG :: Phân tích cú pháp từ CPAN nếu bạn đang sử dụng perl.

10

Trong debian có gói được gọi là libapt-pkg-doc chứa một số tài liệu (như tham chiếu API). Sau khi cài đặt, bạn có thể truy cập nó tại tập tin: ///usr/share/doc/libapt-pkg-doc/html/index.xhtml.

Tôi chỉ mới có một cái nhìn tại libapt và đây là những gì tôi đã học được cho đến nay:

Làm thế nào để liệt kê tất cả các gói:

#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; 
} 
+0

Danh sách đó có liệt kê tất cả các gói * đã cài đặt * hay không, hoặc liệt kê tất cả các gói có sẵn để cài đặt * không? –

+1

@ ThrowawayAccount3Million nó liệt kê các gói có sẵn nếu tôi nhớ chính xác – eyelash

-2

Chỉ cần đề cập đến, đó là wpkg trong đó có khả năng để đọc các gói Debian và cung cấp cho bạn tất cả thông tin. Tuy nhiên, nó không biết gì về cơ sở dữ liệu apt hoặc dpkg. Nó sẽ có khả năng đọc một .deb và bạn có thể trích xuất tất cả các thông tin và các tập tin với nó, tất cả trong C++.

Các vấn đề liên quan