Каков предпочтительный способ публикации приложения, работающего только в двоичном формате, для нескольких дистрибутивов Linux?

StackOverflow https://stackoverflow.com/questions/1502543

Вопрос

У меня есть Linux-приложение с закрытым исходным кодом, которое я хочу распространять.Это приложение использует wxWidgets/GTK, поэтому существует огромный список общих библиотек (60+), от которых зависит это приложение.

Какой способ публикации приложения предпочтителен и поддерживается максимальное количество дистрибутивов?

  • Нужно ли создавать приложения для каждого поддерживаемого дистрибутива и публиковать их отдельно?Недостатком этого метода является сложность сборки (chroot и сборка для каждого дистрибутива), и он будет работать только в поддерживаемом дистрибутиве.

  • Нужно ли добавлять все общие библиотеки в установщик и использовать их с переменной env LD_LIBRARY_PATH (например, VMware)?Недостатком этого является увеличение размера установщика.

  • Это создание полностью статического приложения?Это, конечно, невозможно, поскольку это нарушит некоторые лицензии.

  • Это смесь того или иного варианта?Как большинство коммерческих поставщиков публикуют свои собственные графические приложения (предпочтительно на базе GTK)?

Это было полезно?

Решение

Вам следует взглянуть на Стандартная база Linux.Он создан специально, чтобы помочь людям в вашем положении.Он определяет среду, на которую могут положиться сторонние разработчики приложений, поэтому существует установленная версия libc и других библиотек, а определенные программы и каталоги находятся в известных местах.Все основные дистрибутивы Linux поддерживают LSB.

Тем не менее, вам, вероятно, все равно следует упаковать результат специально для каждого основного дистрибутива — просто чтобы ваши клиенты могли управлять вашим приложением с помощью своих знакомых инструментов управления пакетами.

Другие советы

По сути, есть два пути.При желании вы можете выбрать оба.

Первый способ — это обычный способ, которым это делают игры и тому подобное.Создайте подкаталог lib/, используйте LD_LIBARY_PATH и включите практически каждую общую библиотеку, которая вам нужна.Это гарантирует пользователю безболезненную работу, но увеличивает размер установщика и, возможно, увеличивает объем памяти.Я бы даже не пытался повторно использовать уже существующие библиотеки, поскольку они имеют тенденцию исчезать по мере обновления системы.

Второй способ — предоставление дистрибутивных пакетов.Как правило, их не так уж и сложно сделать, и они затем будут хорошо интегрироваться с дистрибутивами и, кроме того, будут казаться гораздо более гостеприимными для ваших клиентов.2 минуса:Вам нужно будет сделать это для каждого дистрибутива (Debian, Ubuntu, SuSE, redhat, вероятно, будет хорошим началом), и вам нужно будет их поддерживать:со временем некоторые библиотеки перестанут быть доступны в определенной версии, и, таким образом, у пользователя возникнут проблемы с зависимостями.

В установщике проверьте, какие библиотеки установлены, а затем загрузите двоичные файлы для тех, которые не установлены.

Для дополнительного удобства ваших пользователей, если нет подключения к Интернету, попросите установщик сгенерировать ключ, который вы можете ввести на своем сайте, чтобы получить ZIP-архив, который затем можно передать установщику.

Для максимального удобства проверьте, какие библиотеки доступны в целевом дистрибутиве, и попросите пользователя использовать стандартный инструмент администратора для их установки.Таким образом, вы не будете засорять компьютер разными версиями одной и той же библиотеки.

Это сказало:Возможно, было бы разумнее поместить ваш ценный код в библиотеку ссылок, а затем предоставить его в виде двоичного объекта в исходном пакете.Таким образом, ваш код защищен так же, как если бы он был в чистом двоичном формате, и пользователи могут скомпилировать связующий код в своей любимой системе, не беспокоясь ни о чем.

Я имею в виду:Сколько стоит часть вашего кода, настраивающая пользовательский интерфейс?Сколько вы потеряете, если кто-то это украдет?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top