создание дистрибутива программы под linux

serge18

хочу создать дистрибутив своей тулзы под линукс. то есть чтобы пользователь скачал архив, распаковал, запустил INSTALL и радовался жизни. простейший INSTALL подразумевает копирование программы в папку пользователя, добавление ссылки куданибудь в /usr/bin, копирование so в /opt/lib/
до этого я программировал только под debian для себя и был счастлив, поэтому появились соответствующий вопрос:
в чем принципиальные отличия между различными дистрибутивами линукса со стороны программиста, какие-нибудь подводные камни (с) ? кроме версии ядра =) т.е. наверняка возможно без особого труда скомпилировать из под дебиана программу для убунты.

yroslavasako

, какие-нибудь подводные камни (с) ?
Динамическое линкование, лоадер, архитектура (x86,x86_64,arm)
Чтобы сделать самораспоковывающийся архив - посмотри на тулзу makeself.

elenangel

кроме версии ядра может быть косяк с версией glibc при некоторых способах линковки, конкретнее - вроде при статической линковке для функций вроде gethostbyname_r* на целевом компе нужна будет та же версия glibc.
еще возможны проблемы с разными менеджерами памяти в либах и проге в случае динамического связывания (хотя тут я не уверен).
*хинт: у меня про это сообщает сам компилер

marat7256

Есть правила хорошего тона, которым желательно следовать, например:
1. установка программы должна состоять из запуска следующих команд:
./configure
./make
./make install
2. программа должна по умолчанию ставиться в /usr/local

elenangel

современные правила хорошего тона подразумевают распространение программы в deb или rpm пакетах.

Ivan8209

Современные правила хорошего тона подразумевают распространение
вменяемых исходных текстов. А уж пользователь сам решит, где ему
поставить галочку, определяющую, в каком виде собирать двоичные
пакеты.
---
"This user is BSD-compliant."

serge18

о, отличная идея. почитаю как такие пакеты делать. впринципе, на deb и rpm и остановлюсь
собственно я не хотел исходный код прилагать, поэтому и рассматривал вариант распространения скомпилированной программы.

serge18

да, я как раз и думал об этом. указать зависимость от определенной версии glibc в пакете похоже будет ок.

serge18

рассматривается простейший случай - обе машины x86, kernel & glibc одной и той же версии, одна система - mandriva 32bit, другая - ubuntu 32bit.
под различием динамической линковки ты имеешь в виду что что одна и та же программа при вызове dlopen\dlsym\dlclose может сработать по разному на разных системах?
upd.
кстати, а разве лоадер и система динамической линковки не являются частью кернела?

Ivan8209

У тебя пакет использует функции только libc?
---
"Верь сводке погоды, но доверяй --- интуиции.
Будь особенно бдителен, когда всё хорошо и нет поводов для тревоги."

marat7256

Обычно это делают сборщики дистрибутивов.
Или ты предлагаешь человеку собирать под все возможные дистрибутивы самому?

elenangel

указать зависимость от определенной версии glibc в пакете похоже будет ок.
все пользователи других версий glibc скажут тебе спасибо

elenangel

обычно достаточно наличия сборки хотя бы в rpm или deb. их уже можно конвертить друг в друга (см. alien).
для остальных - давать сорцы или скомпиленные бинари, хотя в принципе тот же deb или rpm можно открыть как архив, посмотреть скрипты, распаковать куда надо и настроить руками.

Ivan8209

> кстати, а разве лоадер и система динамической линковки не являются частью кернела?
На линуксах это не входит даже в функциональность libc,
этим заведуют отдельная библиотека и отдельная программа.
---
"Прогресс науки обратно пропорционален числу выходящих журналов."

Werdna

современные правила хорошего тона подразумевают распространение программы в deb или rpm пакетах.
первый камент по делу, и за что-то заминусовали.
Конечно же, програ должна поставляться в пакетах под разные системы + исходники tar.gz, которые собираются либо cmake/make, либо устаревшим вариантом configure/make

yroslavasako

Конечно же, програ должна поставляться в пакетах под разные системы
ничего она не должна. Исходники, README и самораспаоквывающийся архив c бинарём в типичной конфигурации. А добавлять поддержку "всех систем" должны адепты этих систем.

elenangel

да это все гентушники, я ж забыл ebuild указать как вариант

sergey_m

Тем не менее авторы софта могут делать пакеты и под "все системы".

serge18

glibc разве не с оратной совместимостью?

serge18

я сейчас рассматриваю случай распространения дистрибутива без исходников
я совсем не на "ты" с линуксом
что значит различные конфигурации дистрибутива линукса? различный набор установленных компонент?
так, попробую с концептуальных вопросов типа "как _должна_ распространятся программа" вернуться вниз
допустим есть простая программа
 
#include "stdio.h"
int main
{
printf("Hello, world!\n");
return 0;
}

скомпилил ее gcc какой-то версии, пусть 4.0
насколько я понял выполнение конкретно этой программы зависит от рантайма - glibc
1) пусть конечная система один в один, но glibc отличается. правильно я понимаю что если версия glibc меньше чем системы на которой компилировалось, то программа не запустится. а если больше - то все ок.
2) совершенно произвольный линукс (для упрощения обе машины - 32битные). почему скомпиленная мной программа может не запустится на этой машине?

marat7256

Если скомпилишь/слинкуешь статически, то запустится везде.
Другое дело, не понятно, зачем тебе распространять программу в бинариках?

elenangel

Очевидно, чтобы не предоставлять свои исходники всем. Не все проги являются OpenSource, бывают free, и даже платные.

karkar

Если скомпилишь/слинкуешь статически, то запустится везде.
Неа, можно нарваться на "слишком старое ядро" даже в пределах 2.6.*.

marat7256

Ну, тогда такая софтина под линукс обречена на успех!

elenangel

skype, teamviewer, heroes of newerth, вообще любая проприетарная программа, которая не только под винды но и под линукс. я считаю что пусть будет лучше уж так, чем версия только под винду.

marat7256

Признаю ошибку.
Если у ТС столь же замечательный проект, то я только приветствую.

Ivan8209

То-то линуксовый скайп регулярно падает, причём не ясно где.
Организовать набор библиотек определённой версии специально для
одной программы в операционных системах куда меньшая проблема,
чем определение, что же именно они там сломали, что их программа
работает только на ядрах определённого сорта.
---
...Я работаю антинаучным аферистом...

elenangel

у меня падает ясно где - когда выбираю транслировать кусочек экрана и растягиваю область трансляции за предел рабочего стола или впритык к краю. других падений не замечал.

serega1604

>То-то линуксовый скайп регулярно падает, причём не ясно где.
типа нелинуксовый не падает или если падает, то сразу понятно где?

dangerr

skype, teamviewer, heroes of newerth, вообще любая проприетарная программа, которая не только под винды но и под линукс. я считаю что пусть будет лучше уж так, чем версия только под винду.
поставил плюс, но в отношении некоторых из них (скайп особенно) лучше б вообще никакой версии не было :)
Оставить комментарий
Имя или ник:
Комментарий: