Я запускаю хост Debian Squeeze, который использую для создания многоязычного проекта (python, java, php ...) и автоматически генерирую пользовательские пакеты (debian и RPM) (через jenkins)
Целевыми дистрибутивами этих пакетов Debian являются Etch, Lenny и Squeeze. Но у нашего проекта есть некоторые собственные зависимости, которые доступны только через DebianRelease + 1
репозиторий (т.е. Lenny + 1 == Squeeze
, Squeeze + 1 == Wheezy
). Нам, например, нужен jetty
пакеты от Squeeze in Lenny, и cyrus-imapd-2.4
пакеты от Wheezy в Squeeze. Дополнительная информация:
Некоторые пакеты мы можем просто выполнить «вручную», отразив пакеты DebianRelease + 1 в наших собственных репозиториях. Например, jetty
пакет от Squeeze будет нормально работать на Ленни, потому что ему не нужна масса дополнительных зависимостей.
Однако нам нужно пересобрать некоторые пакеты. Например, cyrus-imapd-2.4 от Wheezy имеет множество неудовлетворенных зависимостей от Squeeze. Поэтому нам нужно перестроить его в Squeeze, а затем загрузить в наше репо.
Мне нужен простой способ узнать, есть ли какие-либо обновления для этих дополнительных пакетов (как «обычные», так и «обновления безопасности»). Я мог бы написать простой скрипт, который запускается еженедельно, получает некоторые параметры из файла и генерирует отчет об обновлениях. Допустим, файл выглядит так:
jetty:squeeze
cyrus-imapd-2.4:wheezy
Сценарий должен запускаться как обычный пользователь, чтобы не испортить правильную конфигурацию системы и выдавать соответствующие команды для создания этого отчета.
Есть ли в Debian какие-то встроенные apt-*
Команды / параметры, посвященные этой проблеме, я мог бы использовать для написания этого скрипта? Если нет, может ли кто-нибудь придумать другое чистое решение для достижения того, что мне нужно?
Да. Для этого я использую apt-show-versions. Установка так же проста, как:
# apt-get install apt-show-versions
В моем /etc/apt/apt.conf у меня есть:
APT::Default-Release "unstable";
В /e/a/sources.list у меня есть записи для нестабильных, экспериментальных и иногда других временных репозиториев, таких как старый архив снимков emacs.
Вот пример a-s-v с обновленным пакетом из экспериментального:
# apt-show-versions -a xmonad
xmonad 0.10.1~darcs20120707-1 install ok installed
xmonad 0.10-4+b2 unstable 192.168.10.1:3142
xmonad 0.10.1~darcs20120707-1 experimental 192.168.10.1:3142
xmonad/experimental uptodate 0.10.1~darcs20120707-1
Вот пример нестабильного и экспериментального пакета, но у меня только нестабильная версия:
# apt-show-versions -a zsh
zsh 4.3.17-1 install ok installed
zsh 4.3.17-1 unstable 192.168.10.1:3142
zsh 5.0.0-2 experimental 192.168.10.1:3142
zsh/unstable uptodate 4.3.17-1
Я могу использовать apt-show-versions, чтобы узнать, есть ли обновления в экспериментальной версии:
# apt-show-versions |grep manually| head
autogen/experimental *manually* upgradeable from 1:5.16-2 to 1:5.16.2-2
iproute/experimental *manually* upgradeable from 20121001-1 to 20121001-2
iproute-doc/experimental *manually* upgradeable from 20121001-1 to 20121001-2
Это также приятно, потому что он покажет вам пакеты, которые больше не доступны ни в одном репо:
#apt-show-versions |grep -v uptodate |grep "No available"
brscan2 0.2.5-1 installed: No available version in archive
dfc-depends 1.0 installed: No available version in archive
google-chrome-unstable 24.0.1297.0-r162078 installed: No available version in archive