Упаковка проприетарного программного обеспечения для Linux
Я занимаюсь кроссплатформенной разработкой и хочу создать красивый, автономный (!) Пакет для Linux. Я знаю, что обычно это не так, но приложению требуются все данные в одном месте, поэтому я устанавливаю их в / opt, как и многие другие проприетарные программные пакеты. В конечном итоге я предоставлю пакеты deb и rpm, но пока это будет только .tar.gz. Пользователь должен где-то извлечь его, и он должен работать. Я бы предпочел не иметь установщика.
Сначала мои вопросы, потом подробности:
Как другие люди упаковывают проприетарное программное обеспечение для Linux?Существуют ли инструменты для упаковки программного обеспечения, включая общие библиотеки?Теперь для некоторых деталей: это мой проект (я называю этоFoo для этого) макет:
foo (двоичный)config.iniданныеТеперь в пакете появятся два дополнительных элемента:
ЛИЭСfoo.shЛИЭС будет содержать все общие библиотеки, необходимые для проекта, иfoo.sh скрипт, который устанавливает LD_LIBRARY_PATH для включенияЛИЭС, Поэтому пользователь выполнитfoo.sh и программа должна запуститься.
У меня есть сценарий оболочки, который упаковывает программное обеспечение в следующие шаги:
Создайте пустой каталог и скопируйте в него foo.shЗапустите процесс сборки исделать установку в новый каталогКопировать общие библиотеки из файловой системыУпакуйте все как .tar.gzЧто ты думаешь об этом? Есть некоторые проблемы с этим подходом:
Мне приходится жестко кодировать все зависимости дважды (один раз в CMake, один раз в скрипте упаковки)Я должен определить номер версии дважды (один раз в исходном коде, один раз в сценарии упаковки)Как ты делаешь это?
Редактировать: Еще один вопрос, который только что возник: как вы определяете, от каких библиотек зависит ваше программное обеспечение? Я сделаллдд фу, но есть очень много. Я посмотрел на то, как выглядят пакеты WorldOfGoo, и они поставляют очень мало библиотек. Как я могу предположить, какая библиотека будет присутствовать в системе пользователя, а какая нет? Просто установите все целевые дистрибутивы в виртуальный утренник и посмотрите, что требуется?