Так вот что я узнал об этой проблеме за последние пару недель.
С предварительно упакованными двоичными файлами вы не можете создать пакет debian с целевым каталогом dynamicall, определенным во время выполнения. Я считаю, что это возможно при установке пакета, который построен из источника, где вы можете установить каталог установки с помощью configure. Но в этом случае, поскольку они встроены в машины Ubuntu, они не имеют такой возможности, поэтому я не преследовал такой вариант. Я разработал нестандартный метод (хак) для установки, который действительно работал. Поскольку пакеты debian просто содержат tar-шар относительно/просто создайте ваш пакет относительно каталога в/tmp. В сценарии postinst вы можете определить, где скопировать файлы из архива в постоянное место.
Я ожидал, что после перезагрузки и автоматического удаления подкаталога в/tmp, dpkg может не знать, что пакет файлов существует. Это не проблема. Когда я запускал 'dpkg -l myapp', он показывал, что все еще установлен. Обновление пакета с помощью dpkg/apt-get также работало без сбоев.
Что я нашел, так это то, что если вы попытаетесь удалить пакет с помощью «dpkg -r myapp», который dpkg попытается удалить/tmp, что было бы плохо. Однако/tmp не легко удаляется, поэтому он никогда не удался. Плюс в нашей ситуации мы никогда не удаляем пакеты, а просто просто обновляем их.
В конечном итоге мне пришлось отказаться от универсального пакета из-за различий кода в источниках, что привело к необходимости перекомпиляции на платформу, но я бы оставил его таким образом, и это действительно сработало.
Я попытался использовать --instdir, чтобы изменить каталог установки пакета, и он перемещает файлы, но dpkg терпит неудачу, так как файл dpkg не может быть найден относительно нового instdir. Использование -instdir похоже на chroot. Я также попробовал --admindir и --root в различных комбинациях, чтобы увидеть, могу ли я использовать систему dpkg относительно /, но установить перемещение файлов, но они не сработали. Я предполагаю, что rpm имеет параметр перемещения, который работает, но не Ubuntu.
Существует опция, которую вы можете передать 'dpkg' для использования другого корня, чем'/usr' для установки. Пакеты 'deb' не имеют« установочного каталога »в этом смысле - это поможет, если вы добавите примеры того, что у вас есть сейчас, и то, что вы бы хотели. В теории вы могли бы перемещать вещи из своего сценария postinst, но я бы сильно отговаривал вас. – tripleee
Хорошая идея. Я попытался использовать -instdir =, и он скопировал файлы, но postinst не будет запускаться с тех пор, как -instdir делает chroot, поэтому вы также должны иметь каталог dpkg admin. Я также попытался использовать --root и --admindir в комбинации, чтобы увидеть, могу ли я разбить две каталоги. rpm имеет флаг перемещения, чтобы вы могли перемещать местоположение пакета. Я должен иметь динамический каталог, так как этот пакет должен жить в разных местах в двух разных встроенных дистрибутивах linux. Например, просто предположим, что один файл в tarball, который живет в разных местах на разных машинах. –
Я бы просто создал два разных пакета 'deb', если только файл не является conffile. Примеры все равно помогут. Типичный управляемый пакетами файл будет выглядеть как '/ usr/lib/yourpackage.so' и типичный conffile, например. '/ И т.д./yourpackage.cfg'. – tripleee