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