
Согласно пакету Debianдокументация по скрипту сопровождающего, предустановочный скрипт можно вызвать либо с аргументом , install
либо с upgrade
первым аргументом:
Скрипт
preinst
может быть вызван следующими способами:
new-preinst
установитьnew-preinst
установитьстарая-версия новая-версияnew-preinst
обновлениестарая-версия новая-версия
В чем разница между install old-version new-version
и upgrade old-version new-version
? Первая форма (просто install
) кажется понятной, но я не понимаю разницу между install
и upgrade
, где также указаны старые и новые номера версий.
решение1
Это объясняется враздел «подробности»:
- если пакет уже полностью установлен,
preinst
вызываетсяupgrade
и со старой и с новой версиями; - если пакет был ранее установлен и все еще имеет файлы конфигурации (он находится в состоянии «Config-Files»,то естьон отображается как
rc
вdpkg -l
выводе ),preinst
вызывается сinstall
и старой, и новой версиями; - если пакет устанавливается заново или был ранее удален,
preinst
вызывается сinstall
информацией о версии и без нее.
Поскольку preinst
запускается до фазы распаковки, upgrade
указывает на то, что доступна предыдущая версия содержимого пакета, тогда как install
указывает на то, что версия содержимого пакета отсутствует (кроме файлов конфигурации). Отдельно, если предоставлена информация о версии, это указывает на то, что могут быть файлы конфигурации, которые необходимо обработать.
Не так много сценариев, где разница между upgrade
и install
существенна, но один из них приходит на ум — это обновления, которые включают экспорт данных. Например, в upgrade
режимеslapd
экспортирует preinst
свои базы данных; в режиме это сделать невозможно, install
поскольку отсутствуют соответствующие инструменты.
решение2
Учитывать:
- Вы устанавливаете пакет A, версию x.
- Вы удаляете пакет A, но не очищаете его, поэтому файлы конфигураций, пользователи, группы и т. д. остаются.
- Вы устанавливаете пакет A, версию y.
Теперь скрипты поддержки должны обрабатывать эти conffiles, пользователей, группы и т. д., хотя, строго говоря, вы не обновляете, а просто устанавливаете. Вы можете увидеть это на второй блок-схеме здесь:«Установка пакета, который ранее был удален, но не очищен»