Действительно ли это возможно, для доступа к файлам Debian-пакета из его postinst сценария?
обычно, я использовал бы что-то как dpkg -c path/to/deb
, но вызов apt/dpkg в postinst сценарии не возможен, правильно?
В настоящее время я устанавливаю использование пакета dpkg -i path/to/deb
, позже пакет должен предлагаться репозиторием.
Чего я пытаюсь достигнуть:
dpkg -i myPackage_1.0-0_all.deb
распаковывает файлы (особенно *.specialTag)
postinst запускает скрипт, который работает со всеми *.specialTag файлами в системе (использование find / -name *.specialTag
).
Это хорошо работает, при отсутствии старых *.specialTag файлов в системе, потому что: Если я удаляю *.specialTag файл из myPackage_1.0-0_all.deb
, создайте новую версию myPackage_1.0-1_all.deb
и установите его, затем *.specialTag файл находится все еще в системе. Мой postinst-сценарий будет находить его и работать с ним.
Таким образом, то, что я имею в виду, не должно циклично выполняться через все файлы в системе, но только через тех, в которых я приношу со мной myPackage_1.0-1_all.deb
Но затем я должен назвать dpkg/apt в postinst-сценарии
Спасибо.
Для получения списка файлов, установленных пакетом, можно использовать dpkg -L YOUR-PACKAGE-NAME
, и это работает, как Вы ожидали бы во время postinst
. (Таким образом, если Ваш пакет называют example
, команда dpkg -L example
.)
dpkg -L
, кажется, работает, даже когда /var/lib/dpkg/lock
lockfile заблокирован, и в любом случае блокировка не сохранена во время postinst
.
можно также использовать файл /var/lib/dpkg/info/YOUR-PACKAGE-NAME.list
, который dpkg
создает во время установки пакета прежде, чем выполнить postinst
. (Таким образом, если Ваш пакет называют example
, файл /var/lib/dpkg/info/example.list
.)
Оба из вышеупомянутого дает список всех файлов (и все родительские каталоги до корня, который Вы, возможно, должны отфильтровать в зависимости от того, что Вы делаете), которые содержатся в пакете.
Насколько я считал этот схематика , файлы должны быть полностью распакованы на postinst. Таким образом, если бы Вы получили файл usr/share/foo/script.sh
в пакете, то необходимо смочь получить доступ к этому сценарию в /usr/share/foo/script.sh
: