Как запустить скрипт только при первой установке пакета и во время обновлений?

Во-первых, в зависимости от возраста ноутбука, очистите вентиляционные отверстия.

lesswatts имеет полный набор руководств для снижения энергопотребления:

http: // www. lesswatts.org/tips/index.php

Для скорости процессора см.

http://www.lesswatts.org/tips/index.php

1
задан 12 May 2018 в 10:01

4 ответа

Просмотрите эту диаграмму из вики-файла Debian о том, как вызываются скрипты-хранители:

Если вы следуете по левой стороне (путь «все идет нормально»), вы увидите, что [ f4] вызывается с самой последней версией. Это дает вам возможность различать обновление и новую установку - в случае обновления ваш postinst будет называться как

postinst configure 1.23-0ubuntu1

, где 1.23-0ubuntu1 - это ранее установленная версия вашего пакета, тогда как для новой установки он будет называться как

postinst configure

Это также позволяет вам обрабатывать случай, когда вам нужно выполнить действие при обновлении с определенной версии - вы можете проверить postinst для эта версия.

Это позволяет легко проверить, выполняется ли сценарий на «установке» или «обновлении». Если $ 2 является нулевым, то это установка. поэтому:

if [ -z "$2" ]; then
  do install stuff
else
  do upgrade stuff
fi
25
ответ дан 25 May 2018 в 14:31

Возможно, вы сможете использовать скрипт debian / preinst в сочетании с postinst.

В сценарии preinst проверьте файл, который ваш pkg определенно устанавливает. Если он присутствует, ничего не делайте (поскольку ваш пакет был ранее установлен), иначе выполните свои шаги настройки.

Если ваши шаги настройки требуют, чтобы ваш pkg был установлен (в этом случае вышеуказанное не будет работать, поскольку preinst запускается до установки), тогда ваш preinst-скрипт мог бы записать файл, например: / tmp / setupmypkg , Ваш скрипт postinst может просто проверить, присутствует ли этот файл, и если да, то делайте две вещи:

ваши начальные шаги настройки удаляют файл / tmp / setupmypkg
2
ответ дан 25 May 2018 в 14:31
  • 1
    Да, это сработает, и я сейчас делаю что-то подобное. Но он по-прежнему выглядит немного взломанным ... Я надеялся, что это будет более естественным способом. Это не похоже на такой экзотический запрос? – Jeroen 7 February 2012 в 05:28

Я так не думаю, но вы можете легко изменить сценарии preinst / postinst, чтобы проверить, установлен ли пакет в первый раз и принять стандартное действие.

Может быть что-то вроде этого,

в preinst.

if not is_package_istalled():
    export MY_PACKAGE_FIRST_INSTALL

в postinst,

if MY_PACKAGE_FIRST_INSTALL:
    Do First Install Setup 

Edit

Хмм, возможно, вы можете просто проверить все это прямо в postinst, потому что я думаю, что dpkg не установил статус пакета как установленный до выполнения postinst, но я не уверен. Таким образом, вышесказанное могло бы прийти,

в postinst,

if not is_package_istalled():
    Do First Install Setup 

Где, is_package_installed, вы можете определить статус установки. Может быть что-то вроде «dpkg --status packagename»

ИЛИ

Почему бы просто не проверить, действительно ли изменения, которые вы хотите сделать, уже существуют и продолжаются, если они не являются. [ ! d10]

0
ответ дан 25 May 2018 в 14:31
  • 1
    Я не понимаю. Откуда происходит IS_INSTALLED? – Jeroen 7 February 2012 в 02:48
  • 2
    Нет IS_INSTALLED, это просто псевдокод. Просто пример. IS_INSTALLED может быть результатом команды типа «dpkg --status package_name». Я имел в виду, что вы можете проверить, установлен ли пакет в preinst, установить состояние var и затем на основе этого состояния var принять меры в postinst. – Owais Lone 7 February 2012 в 03:07

Я обнаружил, что тестирование на $ 2 в вашем скрипте postinst configure не работает должным образом, если вы уже установили свой пакет раньше, а затем удалили его (но без очистки), затем попробуйте снова установить его. В этом случае сценарий postinst по-прежнему получает аргумент версии для этапа postinst configure.

Однако, если вы установили пакет раньше, затем удалите И очистите его, а затем снова установите повторно, «postinst configure «скрипт НЕ получит аргумент версии в $ 2

0
ответ дан 25 May 2018 в 14:31

Другие вопросы по тегам:

Похожие вопросы: