Как запрашивать и управлять репозиториями пакетов Debian в Python?

Я хочу иметь возможность просматривать локальные файлы .deb и удаленные репозитории и выводить зависимости и т. д., чтобы я мог создавать свои собственные репозитории и частичные зеркала (возможно, путем создания файлов конфигурации для reprepro).

Проблема заключается в том, что многие инструменты командной строки, помогающие в этом (apt-rdepends и т. д.), предполагают, что вы работаете в целевой системе и используете локальный кеш apt, в то время как я часто буду обрабатывать разные вещи для разных целей. Дистрибутивы Ubuntu и Debian из того, на котором я сейчас работаю, поэтому я хотел бы сделать это немного на расстоянии вытянутой руки.

Мощные, но очень плохо документированные пакеты python-apt позволяют мне проверять файлы .deb в локальной файловой системе и извлекать зависимости. Теперь мне интересно, есть ли аналогичные инструменты для разбора файлов Packages.gz из репозиториев? (Это не так уж сложно, но я не хочу изобретать велосипед!)

Общая цель состоит в том, чтобы создать и поддерживать два репозитория: один с нашими собственными пакетами и частичное зеркало дистрибутива Ubuntu с некоторыми известными необходимыми пакетами плюс все, от чего зависят они или наши собственные.


person Quentin Stafford-Fraser    schedule 15.05.2013    source источник


Ответы (2)


Очень эффективным способом является создание локальных кэшей apt для всех соответствующих дистрибутивов. Инструмент chdist из пакета devscripts позволяет создавать ряд таких кешей без необходимости использования привилегий root. Затем вы можете использовать инструменты, к которым вы привыкли (например, apt-rdepends), чтобы запросить эти кэши, заключив их в chdist. Вы даже можете указать python-apt на свой локальный кеш, используя аргумент ключевого слова rootdir для apt.cache.Cache, где затем вы можете разрешать зависимости.

person Helmut Grohne    schedule 08.01.2014

Вы можете проверить repoman, по крайней мере, вы можете позаимствовать некоторые идеи из него.

Например. чтобы получить информацию о пакете deb, например https://github.com/synack/repoman#get-detailed-information-about-a-package-1

[
{
    "SHA1": "cae8b9a4a821237a24b5757566efdc95391090d4",
    "Maintainer": "Jeremy Grosser <[email protected]>",
    "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

person number5    schedule 31.03.2014