5

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

挑战在于,许多帮助解决此问题的命令行工具(apt-rdepends 等)假设您在目标系统上运行并使用本地 apt 缓存,而我通常会处理不同的东西Ubuntu 和 Debian 发行版来自我目前正在运行的发行版,所以我想多做一点。

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

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

4

2 回答 2

0

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

于 2014-01-08T06:26:15.237 回答
0

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

例如获取 deb 包信息,如https://github.com/synack/repoman#get-detailed-information-about-a-package-1

[
{
    "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

于 2014-03-31T23:37:00.143 回答