Получите новую версию в preinst сценарии обслуживания Debian - PullRequest
1 голос
/ 26 марта 2011

Я хочу, чтобы старый пакет Debian не топал поверх новой установленной версии пакета Debian.

Я пытаюсь сделать это, сравнивая текущую версию пакета Debian с той, которая в настоящее время установлена ​​в сценарии обслуживания debian / preinst. В идеале я хотел бы предоставить предупреждение и (продолжить г / п?) Приглашение.

Этот вопрос тесно связан с Как получить только что установленную версию в сценарии Debin postinst? . Эта проблема была создана в '09, поэтому я не уверен, стоит ли добавлять мой вопрос в этот вопрос или нет.

Ответ на старые вопросы звучал так: «Почему вы не можете просто жестко закодировать версию в вашем пакете?»

Мой ответ будет таким: я не хочу управлять версией в другом месте. Версия уже находится в журнале debian / changelog и скрипте init .py модуля Python как версия . Эта логика также должна быть реплицирована на несколько других внутренних пакетов Debian, которые мы поддерживаем. В идеале я хотел бы сделать это как можно проще, удалив шаги из процесса сборки пакета Debian.

Я прочитал соответствующие документы Debian http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html, и хотя я могу получить старую версию, я не могу получить версию, которую я сейчас устанавливаю.

Я повторил env в debian / preinst, и он предоставляет переменную окружения, содержащую версию ...: SUDO_COMMAND = / usr / bin / dpkg -i python-mypkg_1.9.3-2_all.deb. Я должен быть в состоянии получить версию таким образом, но я не уверен, могу ли я рассчитывать на то, что эта переменная будет существовать в каждом дистрибутиве, в котором будет развернут этот пакет. Это также похоже на взлом, чтобы сделать это таким образом.

Мне известен dpkg-parsechangelog, который является отличным инструментом !, но он работает только при распаковке пакета. Об этом ясно говорится и в документации.

Я также пытался использовать модуль Python pckg_resources для обнаружения версии с помощью: pckg_resources.require ("mypkg") [0]. version . Если модуль еще не установлен на целевой машине, он выйдет из строя - что имеет абсолютный смысл.

Похоже, должна быть опция либо в файле debian / control, либо в каком-либо инструменте, который я могу использовать, чтобы предотвратить это, не изобретая колесо. Спасибо всем!

Ответы [ 2 ]

0 голосов
/ 16 апреля 2018

Попробуйте:

dpkg-query --show --showformat='${Version}' packagename
0 голосов
/ 01 апреля 2011

Я собираюсь использовать SUDO_COMMAND. Это, по крайней мере, сделает так, чтобы мне не приходилось жестко кодировать версию в предварительном сценарии обслуживания (она уже существует в двух других местах !!). Это экстремальный взлом, но я не смог найти никакой полезной документации, которая могла бы направить меня к более разумному подходу.

FYI, переменная env, SUDO_COMMAND, существует в каждой среде Debian, которую я использовала.

...