Недавно я начал собирать часть своего программного обеспечения и публиковать его на Launchpad. Установка и удаление работают нормально, но обновление пакета с одной версии до следующей версии проблематично.
Проблема в том, что есть некоторые сценарии, которые нужно запускать только во время первой установки пакета. Эти сценарии заполняют БД, создают пользователя и т. Д. В настоящее время они называются в разделе package.postinst configure)
. Однако это приводит к их вызову во время обновления, а также показано на диаграмме .
Есть ли способ включить сценарий сопровождающего в пакет .deb, который выполняется только при первой установке пакета, а не при обновлении? Или какой изящный способ включить некоторые сценарии начальной установки в пакет .deb?
Вы можете использовать скрипт debian / preinst в сочетании с postinst.
В сценарии preinst проверьте наличие файла, который определенно устанавливает ваш pkg. Если он присутствует, ничего не делайте (поскольку ваш пакет был ранее установлен), в противном случае выполните шаги по настройке.
Если ваши шаги установки требуют, чтобы ваш pkg был установлен (в этом случае вышеописанное не будет работать, потому что preinst запускается перед установкой), тогда ваш скрипт preinst может записать файл, например: / tmp / setupmypkg. Ваш скрипт postinst может просто проверить, присутствует ли этот файл, и если это так, сделать две вещи:
источник
Я обнаружил, что тестирование на $ 2 в вашем скрипте «postinst configure» не работает должным образом, если вы уже установили свой пакет один раз, затем удалили его (но без очистки), а затем попробуйте переустановить снова. В этом случае сценарий postinst по-прежнему получает аргумент версии для шага «postinst configure».
Однако, если вы установили пакет раньше, затем удалите и очистите его, а затем переустановите заново, сценарий "postinst configure" НЕ получит аргумент версии в $ 2.
источник
Я так не думаю, но вы можете легко изменить сценарии preinst / postinst, чтобы проверить, устанавливается ли пакет в первый раз, и выполнить стандартные действия.
Может быть что-то вроде этого,
в preinst.
в постинст,
редактировать
Хм, может быть, вы можете просто проверить все это непосредственно в postinst, потому что я думаю, что dpkg не установит статус пакета как установленного перед запуском postinst, но я не уверен. Таким образом, вышесказанное может прийти,
в постинст,
Где is_package_installed может быть вашей функцией для определения статуса установки. Может быть что-то вроде 'dpkg --status packagename'
ИЛИ
Почему бы просто не проверить, внесены ли изменения, которые вы хотите внести, и продолжить, только если их нет.
источник