如何在Python中查询和管理Debian软件包存储库?

时间:2013-05-15 15:04:25

标签: python debian apt

我希望能够查看本地.deb文件和远程存储库并推断出依赖关系等,以便我可以构建自己的存储库和部分镜像(可能通过为reprepro创建配置文件)。

挑战在于许多帮助解决此问题的命令行工具(apt-rdepends等)假设您在目标系统上运行并使用本地apt缓存,而我经常会处理从我正在运行的Ubuntu和Debian发行版中获取不同的Ubuntu和Debian发行版的内容,所以我想在公平的范围内做更多的事情。

有能力但很难记录的python-apt软件包让我可以检查本地文件系统上的.deb文件并提取依赖项。我现在想知道是否有类似的工具来解析存储库中的Packages.gz文件? (这不是太棘手,但我不想重新发明轮子!)

总体目标是创建和维护两个存储库:一个包含我们自己的包,一个Ubuntu发行版的部分镜像,包含一些已知的必需包以及它们或我们自己的包所依赖的任何内容。

2 个答案:

答案 0 :(得分:0)

一种非常有效的方法是为所有相关的发行版创建本地apt缓存。 chdist包中的工具devscripts允许您创建许多这些缓存,而无需使用root权限。然后,您可以使用您习惯使用的工具(例如apt-rdepends)通过将它们包装在chdist中来查询这些缓存。您甚至可以使用rootdir关键字参数将python-apt指向本地缓存,然后您可以在其中解析依赖关系。

答案 1 :(得分:0)

您可能想查看repoman,至少可以从中借用一些想法。

E.g。得到像https://github.com/synack/repoman#get-detailed-information-about-a-package-1

这样的deb包信息
[
{
    "SHA1": "cae8b9a4a821237a24b5757566efdc95391090d4",
    "Maintainer": "Jeremy Grosser <synack@digg.com>",
    "Description": "server-side, HTML-embedded scripting language (meta-package) This package is a meta-package that, when installed, guarantees that you have at least one of the four server-side versions of the PHP5 interpreter installed.  Removing this package won't remove PHP5 from your system, however it may remove other packages that depend on this one. . PHP5 is an HTML-embedded scripting language. Much of its syntax is borrowed from C, Java and Perl with a couple of unique PHP-specific features thrown in. The goal of the language is to allow web developers to write dynamically generated pages quickly. . Homepage: http://www.php.net/",
    "Package": "php5",
    "Section": "web",
    "MD5sum": "0efa615337f0ba59d8369e4469884730",
    "Installed-Size": "20",
    "Filename": "pool/main/p/php5/php5_5.2.9-digg8_all.deb",
    "Priority": "normal",
    "Depends": "libapache2-mod-php5 (>= 5.2.9-digg8) | php5-cgi (>= 5.2.9-digg8), php5-common (>= 5.2.9-digg8)",
    "Version": "5.2.9-digg8",
    "Architecture": "all",
    "SHA256": "26844b968f6b51c1a02fd59c21455bf6ba47e46e47e53c6676af0ee4c2dd799b",
    "Size": "1024"
}

代码https://github.com/synack/repoman/blob/master/repoman/repository.py#L187