Linux Software packen für Installation

OP Persönliche Seite #3590599
Lesenswert?

Hallo,

ich beschäftige mich erst seit kurzem mit Linux, speziell Ubuntu und 
einigen Embedded Boards.
Mit Qt habe ich ein Programm geschrieben und möchte dieses jetzt für 
andere zur Verfügung stellen, so dass diese das auch auf Ihren Rechnen 
nutzen können.
Bei Windows würde ich jetzt ein Installationspacket mit den notwendigen 
Qt Bibliotheken und der EXE erstellen. Dafür verwende ich Install 
Jammer.

Wie mache ich das ganze jetzt bei Linux und was muss ich alles 
mitliefern, damit das System auch bei den anderen läuft?

Danke
Gast #3590607
Lesenswert?

Martin J. schrieb:
> Wie mache ich das ganze jetzt bei Linux und was muss ich alles
> mitliefern, damit das System auch bei den anderen läuft?
Wenn dein Programm Open-Source sein darf: Schreib ein makefile, s.d. man 
es mit "make && make install" kompilieren & installieren kann, und 
liefere das zusammen mit dem Source Code aus. Dann kann sich das jeder 
für sein System compilen.
Wenn du Langeweile hast kannst du noch Pakete für verbreitere Linux 
Distributionen wie Ubuntu machen (siehe Google wie das jeweils geht). Da 
schreibst du dann rein dass Qt installiert sein soll (Abhängigkeit), 
dafür sorgt dann der Package Manager beim installieren.

Wenn du deinen Source nicht herausrücken willst, musst du das Programm 
compilen und zusammen mit allen benötigten Libraries (Qt und alle dessen 
Abhängigkeiten etc.) in ein .tar.bz2 Archiv packen und das ausliefern. 
Dazu ein Readme welche Datei im Archiv man starten muss um das Programm 
zu starten. Das ist die Möglichkeit mit dem geringsten Aufwand 
(insbesondere für die User) Nicht-Open-Source Software für Linux zu 
verteilen.
Gast #3591531
Lesenswert?

Fred schrieb:
> Er kann vor allem die benötigten Libraries einfach nicht selbst
> packen,
> sondern die Pakete der Distribution als Abhängigkeit nutzen.
Ja, dann muss er alle Nase lang sein Programm neu kompilieren & 
ausliefern, wenn die Distribution eine neue Qt-Version rausbringt. Macht 
er das nicht ist das Programm in einiger Zeit nur noch mit großem 
Aufwand installierbar...
#3591542
Lesenswert?

Dr. Sommer schrieb:
> Ja, dann muss er alle Nase lang sein Programm neu kompilieren &
> ausliefern, wenn die Distribution eine neue Qt-Version rausbringt. Macht
> er das nicht ist das Programm in einiger Zeit nur noch mit großem
> Aufwand installierbar...

Warum? Die Bibliotheken selber und die Packager achten normalerweise 
sehr auf  Binärkompatibilität.

Wenn deine Abhängigkeiten richtig sind (z.B. "qt-4.8"), dann machen die 
üblichen Linux-Packagemanager auch kein ungefragtes Update auf eine 
nicht-kompatible Version (qt-5)

Ich kann hier noch problemlos Programme ausführen, die vor vielen, 
vielen Jahren (ältestes was grad griffbereit rumliegt: Dez. 2005) 
kompiliert wurden.
Gast #3591563
Lesenswert?

Dr. Sommer schrieb:
> Ja, dann muss er alle Nase lang sein Programm neu kompilieren &
> ausliefern, wenn die Distribution eine neue Qt-Version rausbringt. Macht
> er das nicht ist das Programm in einiger Zeit nur noch mit großem
> Aufwand installierbar...

Blödsinn.

Schau dir docjh einfach mal in einer beliebigen Linux-Distri an, wie die 
Pakete da aussehen. Die Paketnamen reichen schon.
Gast #3591573
Lesenswert?

Dr. Sommer schrieb:
> Ja, dann muss er alle Nase lang sein Programm neu kompilieren &
> ausliefern, wenn die Distribution eine neue Qt-Version rausbringt. Macht
> er das nicht ist das Programm in einiger Zeit nur noch mit großem
> Aufwand installierbar...
Qt ist aufwärtkompatibel, also alles mit Qt 4.0 kompilierte läuft auch 
mit Qt-Versionen die größer gleich 4.0 sind.

Εrnst B✶ schrieb:
> Wenn deine Abhängigkeiten richtig sind (z.B. "qt-4.8"), dann machen die
> üblichen Linux-Packagemanager auch kein ungefragtes Update auf eine
> nicht-kompatible Version (qt-5)
Qt5 ist größtenteils kompatibel zu Qt4.
Kompiliert läuft alles, außer es sind einige der wenigen Qt-Klassen 
verwendet worden, die in Qt5 rausgeflogen sind. Diese Klassen sind aber 
schon immer (Qt 4.0) als deprecated markiert.
Beim Kompilieren gilt das selbe, außer, dass einige Header-includes 
angepasst werden müssen.

Alles weitere:
http://qt-project.org/wiki/Transition_from_Qt_4.x_to_Qt5
http://www.kdab.com/porting-from-qt-4-to-qt-5/
http://www.heise.de/developer/artikel/C-Framework-Was-sich-mit-Qt-5-aendert-1784154.html
und speziell:
http://www.heise.de/developer/artikel/C-Framework-Was-sich-mit-Qt-5-aendert-1784154.html?artikelseite=4
1
Ein Qt-4-Programm funktioniert auch nach der Auslieferung von 
2
Qt 5 ohne jegliche Probleme weiter.
Gast #3593274
Lesenswert?

Martin J. schrieb:
> könnt ihr mir einen Linux-Packagemanager empfehlen, der mir das
> ganze
> etwas erleichtert.
Der, der bei der jeweiligen Distribution mitgeliefert ist... apt bei 
debian (ubuntu, ...), portage bei Gentoo, pacman bei Arch, RPM bei Red 
Hat etc. etc.

Εrnst B✶ schrieb:
> Warum? Die Bibliotheken selber und die Packager achten normalerweise
> sehr auf  Binärkompatibilität.
Ah, ist ja schön dass das bei Qt so ist. Es gibt aber jede Menge 
Bibliotheken, bei denen das nicht so ist. Und wenn man dann eine alte 
Software ausführen will muss man irgendwo im Internet die alten 
Bibliotheken ausgraben und installieren. Um die Sache noch lustiger zu 
machen sind manche Bibliotheken ja nichtmal in der selben Version 
kompatibel, wenn verschiedene ./configure -Optionen angegeben wurden.
Gast #3593301
Lesenswert?

Dr. Sommer schrieb:
>> Warum? Die Bibliotheken selber und die Packager achten normalerweise
>> sehr auf  Binärkompatibilität.
> Ah, ist ja schön dass das bei Qt so ist. Es gibt aber jede Menge
> Bibliotheken, bei denen das nicht so ist. Und wenn man dann eine alte
> Software ausführen will muss man irgendwo im Internet die alten
> Bibliotheken ausgraben und installieren. Um die Sache noch lustiger zu
> machen sind manche Bibliotheken ja nichtmal in der selben Version
> kompatibel, wenn verschiedene ./configure -Optionen angegeben wurden.

Jetzt hör endlich mit deinen Ammenmärchen auf! DIe Distributionen achten 
da sehr genau drauf. Da passiert ganz selten mal was.
OP Persönliche Seite #3596995
Lesenswert?

ich würde mein Programm gern mit den benötigten Bibliotheken verteilen.

nach der Struktur
app
/lib
/lib/platforms

Die benötigten Bibliotheken für Qt habe ich schon mit "ldd ./app" aus 
findig gemacht und zusammen kopiert. Weiterhin habe ich auch schon den 
"platforms" Ordner unter linux in mein Projekt kopiert.

Was muss ich jetzt noch beachten, bzw. alles machen damit das gelingt 
und mein Programm auch auf einem anderem Rechner läuft. Momentan bekomme 
ich immer den Fehler, dass die Bibliotheken nicht gefunden werden.

Wie sagen ich beim ausführen, wo er nach den qt libs suchen muss oder 
muss ich das beim kompilieren schon festlegen?


Danke
Gast #3597013
Lesenswert?

Martin J. schrieb:
> Wie sagen ich beim ausführen, wo er nach den qt libs suchen muss

Mit der Umgebungsvariable LD_LIBRARY_PATH.

Martin J. schrieb:
> Die benötigten Bibliotheken für Qt habe ich schon mit "ldd ./app" aus
> findig gemacht und zusammen kopiert.
Sicher dass das alle sind? Dynamisch (dlopen) geladene Bibliotheken 
werden so nicht gefunden. Und hast du auch alle Datendateien (grafiken, 
übersetzungen, ...) kopiert? Wäre es nicht einfacher gleich das ganze 
Qt-Paket reinzukopieren?
Gast #3597019
Lesenswert?

Fred schrieb:
> Jetzt hör endlich mit deinen Ammenmärchen auf! DIe Distributionen achten
> da sehr genau drauf. Da passiert ganz selten mal was.
Dann muss das bei mir wohl einfach Pech sein. Ich kann meine eigenen 
Programme von 2007 nicht mehr starten weil die Herren 
Bibliotheksentwickler die Funktionen umbenannt haben. Fur ein Spiel 
brauchte ich mal eine alte libjpeg Version. Mathematica brauchte, wimre, 
ein paar alte GUI-Libraries, etc...
#3598612
Lesenswert?

Martin J. schrieb:
> Was muss ich jetzt noch beachten, bzw. alles machen damit das gelingt
> und mein Programm auch auf einem anderem Rechner läuft.

Für den Endanwender am einfachsten: Pack das Programm in das für die 
Ziel-Linux-Distribution vorgesehene Format.
=> Du musst dich um nichts kümmern, fehlende Libraries werden 
automatisch nachinstalliert, und eine große Entwicklergemeine kümmert 
sich darum, das alles kompatibel bleibt. Probleme wie "Dr. Sommer" sie 
hatte, treten nicht auf. Das passiert nur, wenn man selber kompiliert 
oder nicht zur Distribution passende Fremd-Software installiert. Klar: 
Wenn der Paketmanager nicht weiß, was installiert ist, kann er sich auch 
nicht um den Erhalt der kompatiblen Bibliotheksfunktionen/versionen 
kümmern.

Für dich als Entwickler am einfachsten: Link Statisch, wenn's erlaubt 
ist (GPL usw), Ansonsten: Leg alles in ein Verzeichnis und kompilier mit 
passendem run-path, pack alles in ein großes Tar-Gz.
Gast #3598621
Lesenswert?

Dr. Sommer schrieb:
> Dann muss das bei mir wohl einfach Pech sein. Ich kann meine eigenen
> Programme von 2007 nicht mehr starten weil die Herren
> Bibliotheksentwickler die Funktionen umbenannt haben.

Natürlich machen die das bei ABI-Änderungen! Du mußt halt die alte 
Bibliotheksversion über den Paketmanager installieren. Die wird bestimmt 
parallel zur neuesten angeboten.
Gast #3598660
Lesenswert?

Fred schrieb:
> Natürlich machen die das bei ABI-Änderungen!
Natürlich, und die gibts ständig
> Du mußt halt die alte
> Bibliotheksversion über den Paketmanager installieren. Die wird bestimmt
> parallel zur neuesten angeboten.
Ja - aber da ist das ABI auch schon geändert. Unter Ubuntu zB gibts kein 
Package mit dem gewünschten ABI.

Εrnst B✶ schrieb:
> Probleme wie "Dr. Sommer" sie
> hatte, treten nicht auf.
Und wie funktioniert das? Nur weil mein Programm in einem .deb Archiv 
ist ist das ABI von der Library plötzlich kompatibel?

Εrnst B✶ schrieb:
> und eine große Entwicklergemeine kümmert
> sich darum, das alles kompatibel bleibt.
Ja, indem sie auf irgendwelchen obskuren Seiten Binaries der alten 
Library-Versionen anbieten - super praktisch.

Εrnst B✶ schrieb:
> oder nicht zur Distribution passende Fremd-Software installiert
Und GENAU SO EINE will der TO ja erstellen! Wäre die Software opensource 
und gäbe es einen Package Maintainer der regelmäßig neue Binaries 
kompiliert und publiziert, ja, dann funktioniert das.

Εrnst B✶ schrieb:
> Für dich als Entwickler am einfachsten: Link Statisch, wenn's erlaubt
> ist (GPL usw)
Und technisch möglich, siehe Daten-Dateien und mit dlopen geladene 
Binaries.
> Ansonsten: Leg alles in ein Verzeichnis und kompilier mit
> passendem run-path, pack alles in ein großes Tar-Gz.
Also genau das was ich die ganze Zeit schon sage. Sowas.
Gast #3598672
Lesenswert?

Fred schrieb:
> Pech. Dann nimm das ältere Ubuntu.
Und genau das meine ich. Da hat der normale User keine Lust drauf. Da 
nimmt er lieber die Konkurrenz-Software, oder gleich Windows.
> Meine Güte, so ein Problem hat man halt, wenn man zehn Jahre seine
> Software nicht anfaßt.
Wären alle Libraries mit dabei gepackt - wie das bei Windows-Programmen 
üblich ist - hätte man diese Probleme nicht.
Gast #3598846
Lesenswert?

oh je das ich hier solch eine Diskussion los trete habe ich nicht 
gedacht. Ich hätte aber auch nicht gedacht, das es solch ein Aufwand 
ist.

Auf Grund der vielen Nachfrage, wollt ich es den Usern meines Programms 
ermöglichen dieses auch auf Linux zu betreiben. Hab es also auf Ubuntu 
erstellt und es an bestimmten Stellen auf Linux angepasst.
Ich habe nicht erwartet, das bei Linux das verteilen von Software 
schwieriger ist als das erstellen.

Und ja ich möchte den Quellcode nicht veröffentlichen, auch wenn das 
Programm für manchen Programmierer trivial ist. Außerdem möchten vielen 
Nutzer das Programm einfach nur entpacken und danach sofort verwenden 
können, ohne groß Erfahrung mit Linux zu haben. Viele haben einfach nur 
einen zweit PC mit Ubuntu und darauf läuft es.

Wer kann mir jetzt eine Anleitung geben wie ich mein Programm, erstellt 
mit Qt4.8.5 relativ einfach und ohne großen Aufwand packen kann, so dass 
es auch auf anderen Systemen läuft.
(Firma: Brainit GmbH) #3599128
Lesenswert?

Fatal schrieb:
> Aber ist ja kein Ding. Deine Software muss nur so berühmt wie firefox
> werden und schon paketieren alle Maintainer diverser Distris für dich

Nö, nicht ganz. Normalerweise helfen einem die "Package Maintainers" 
sehr gut. Bei Debian z.B. kann man das recht schnell an so einen abgeben 
(zumindest gings mir mit lcd4linux so)

ABER: mit Closed Source wirst du da das Nachsehen haben. Was ich auch 
voll verstehe. Die machen das ja auch großteils freiwillig und in ihrer 
Freizeit.

Warum willst du den Source nicht veröffentlichen? Hängt ein 
geschäftsmodell dran?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren