Упаковка проприетарного программного обеспечения для 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, и они поставляют очень мало библиотек. Как я могу предположить, какая библиотека будет присутствовать в системе пользователя, а какая нет? Просто установите все целевые дистрибутивы в виртуальный утренник и посмотрите, что требуется?

Ответы на вопрос(2)

Ваш ответ на вопрос