Страница 1 из 1

как распространяемый пакет создать?

Добавлено: 17 мар 2021, 17:13
X-Ray
Serg писал(а): В Linux нет .dll (Dynamic Link Librаry), в Linux .so - Shared Object (Code), т.е. единственный экземпляр этого объектного (скомпилированного) кода в памяти может одновременно использоваться несколькими приложениями. Можно начать с гугления "linux so".
Да это понятно (про PLT, GOT и всю эту машинерию я знаю), а как распространяемый пакет создать то? В linux я нуб, собрать и написать могу, а распространить нет.

Re: как распространяемый пакет создать?

Добавлено: 17 мар 2021, 17:52
Serg
X-Ray писал(а): а как распространяемый пакет создать то?
Это зависит от целевого дистрибутива. В дистрибутивах есть "менджеры пакетов", которые ведают установкой, обновлением, удалением компонентов системы. В состав этих "менеджеров" обычно входит средство создания таких пакетов.

Re: как распространяемый пакет создать?

Добавлено: 17 мар 2021, 18:36
Kost_irk
Я думаю автору проще состряпать .appimage, чтобы сильно не привязываться к дистрибутиву. Этот формат таскает свои библиотеки с собой. Я находил пару утилит для этого дела, вот только не понял, как их заставить работать. Я не программист, просто приходится иногда. Вкратце, там вроде проблема с версией системы, на которой собирается пакет.

Re: как распространяемый пакет создать?

Добавлено: 17 мар 2021, 21:12
Serg
Kost_irk писал(а): Этот формат таскает свои библиотеки с собой.
Достаточно компилятору-линкеру указать опцию "-static" и все библиотеки чудесным образом окажутся внутри исполняемого файла.

В случае appimage (как впрочем и установки из исходников) все преимущества пакетных менеджеров сливаются в помойку, а это и контроль целостности файлов с цифровой подписью, и жёсткий учёт файлов (какой файл какому пакеты принадлежит, а какой "залётный") и компактный бэкап системных файлов (только каталог /etc и список установленных пакетов)...

Re: как распространяемый пакет создать?

Добавлено: 18 мар 2021, 06:42
Kost_irk
Serg писал(а): Достаточно компилятору-линкеру указать опцию "-static" и все библиотеки чудесным образом окажутся внутри исполняемого файла
А можно поподробней? Я так понимаю, что таким образом можно включить свои библиотеки, а как быть с системными?
Я так понимаю, в линуксе основная проблема с запуском левых приложений - именно несоответствие системного окружения между компами на которых происходила сборка и запуск. Можно оставить эту проблему менеджеру пакетов, а можно сделать appimage по типу скачал-запустил. Мне например очень не нравится, когда какая-нибудь мелкая программулька собрана на самых распоследних библиотеках хз зачем, и просто чтобы запустить ее напосмотреть нужно обновлять систему. При этом никакой функционал свежих либ не используется, просто так сложилось, что они были на компе сборщика и их версии забиты гвоздями в приложение.

Re: как распространяемый пакет создать?

Добавлено: 18 мар 2021, 07:23
Kost_irk
Почитал тут немного, тема очень холиварная. Вроде как на свежих дистрибутивах ветер дует в сторону snap.

Re: как распространяемый пакет создать?

Добавлено: 18 мар 2021, 13:09
Serg
Kost_irk писал(а): Я так понимаю, что таким образом можно включить свои библиотеки, а как быть с системными?
Всё библиотеки.
Kost_irk писал(а): А можно поподробней?
В доках на конкретный компилятор.
Kost_irk писал(а): Я так понимаю, в линуксе основная проблема с запуском левых приложений - именно несоответствие системного окружения между компами на которых происходила сборка и запуск.
Это проблема не самого Linux, а отсутствие в нём диктатуры как в Windows/MacOS, т.е. любой желающий может выпустить свой собственный дистрибутив со своими особенностями, а пользователи и производители софта сами, без принуждения решают каким дистрибутивом пользоваться и какие дистрибутивы поддерживать в своём софте.
Kost_irk писал(а): Мне например очень не нравится, когда какая-нибудь мелкая программулька собрана на самых распоследних библиотеках хз зачем, и просто чтобы запустить ее напосмотреть нужно обновлять систему. При этом никакой функционал свежих либ не используется, просто так сложилось, что они были на компе сборщика и их версии забиты гвоздями в приложение.
Вам никто не мешает не пользоваться результатом труда такого сборщика и собрать пакет самостоятельно. :)
Ну или выбрать другой дистрибутив. Например RedHat прямым текстом гарантирует полную бинарную совместимость всех версий пакетов в пределах одной мажорной версии RHEL (и как следствие CentOS).
А для посмотреть можно воспользоваться контейнерами (docker).

Re: как распространяемый пакет создать?

Добавлено: 10 июл 2021, 00:38
ex71
Kost_irk писал(а): Я так понимаю, в линуксе основная проблема с запуском левых приложений - именно несоответствие системного окружения между компами на которых происходила сборка и запуск.
это зависит от дистрибутива, а не от левости компа. Во-первых есть два вида дистрибутивов: RPM и DEB. Все остальное - производные от них.
Есть основное ядро системы, оно не зависит от окружения библиотек или софта. Собственно дистрибутив это обертка вокруг ядра.
Поставил ты кеды или гном - никакой разницы для ядра не будет. Для софта - да, потому что будет либо GTK либо Qt (библиотеки графики).
Менеджер пакетов это опять же определенный софт с определенными конфигами где лежат либы, а где конфиги.

а в остальном если закинешь библиотеки в нужные места то даже можно тупо пакет собранные для deb запустить в rpm дистрибутивах. Все равно что софт собранный под XP запускать в 7 - косяки могут быть, но работать будет.

Есть build.opensuse.org который позволяет в окружении заданного дистрибутива собрать пакет "в облаке" с твоим кодом и твоими конфигами. На выходе получишь один пакет который будет согласно конфигам требовать для установки нужные пакеты в свое окружение. В итоге, при установке "своего" пакета будешь получать список зависимостей типа:
Screenshot_20210710_002944.jpg (2810 просмотров) <a class='original' href='./download/file.php?id=196581&sid=e13f345bdb2d733e617165f59931edf1&mode=view' target=_blank>Загрузить оригинал (65.14 КБ)</a>