Пакет Debian: файл rm при удалении, но не при обновлении

Пишу твики для взломанной iOS, которые упакованы в .deb файлов. Твик сохраняет свои данные в /var/mobile/Library/Application Support/TweakName/file.save. Я хотел бы rm сохранять этот файл, когда пользователь удаляет твик, чтобы не оставлять файлы лежать без дела. Но насколько я понимаю, сценарий postrm запускается как при обновлении пакета, так и при его удалении, и я хотел бы сохранить сохраненное состояние между версиями, так как я не ожидаю, что какое-либо обновление изменит формат сохранения (и я с этим можно справиться, если возникнет).

Итак, есть ли способ отличить удаление от обновления и запустить команду только в случае удаления?


person drewmm    schedule 26.04.2013    source источник


Ответы (1)


Вы правы в том, что обновление приложения запускает сценарии «удаления» (а также сценарии установки для следующей версии).

Однако система пакетов также передаст скриптам параметры командной строки, и вы можете использовать их, чтобы определить, в каком сценарии вы находитесь: обновление или удаление.

Если вы просто хотите перепроектировать, какие параметры были переданы скрипту, поместите это в скрипт (например, postrm):

echo "postrm called with args= " $1 $2

Когда я устанавливаю обновление и удаляю пакет, я вижу это:

iPhone5:~ root# dpkg -i /Applications/HelloJB.deb
(Reading database ... 3530 files and directories currently installed.)
Preparing to replace com.mycompany.hellojb 1.0-73 (using /Applications/HelloJB.deb) ...
prerm called with args= upgrade 1.0-73
Unpacking replacement com.mycompany.hellojb ...
Setting up com.mycompany.hellojb (1.0-74) ...
postinst called with args= configure 1.0-73

iPhone5:~ root# dpkg -r com.mycompany.hellojb
(Reading database ... 3530 files and directories currently installed.)
Removing com.mycompany.hellojb ...
prerm called with args= remove
postrm called with args= remove

Итак, если вы хотите rm только файл во время удаления, поместите это в скрипт postrm:

#!/bin/bash

echo "postrm" $1
if [ $1 = "remove" ]; then
  echo "deleting user data on uninstall"
  /bin/rm /var/mobile/Library/Application Support/TweakName/file.save
fi

exit 0

Примечание: вы не указали, устанавливаются ли они Cydia или dpkg непосредственно в командной строке. Я не могу протестировать с Cydia прямо сейчас, но общая концепция должна быть такой же. Как вы, наверное, заметили, при установке пакетов через Cydia отображается стандартный вывод сценариев установки по мере их запуска.

person Nate    schedule 27.04.2013
comment
Чрезвычайно полезно, как всегда. Установка Cydia — это мой основной вариант использования, поэтому я протестирую его завтра и убедитесь, что он работает. Спасибо! - person drewmm; 27.04.2013