Forum: PC-Programmierung Linux Software packen für Installation


von Martin J. (bluematrix) Benutzerseite


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

von Dr. Sommer (Gast)


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.

von Fred (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Wenn du deinen Source nicht herausrücken willst,

dann kann er natürlich dennoch Distributionspakete bauen. Das hat mit 
Open-Source rein gar nichts zu tun.

von Dr. Sommer (Gast)


Lesenswert?

Fred schrieb:
> dann kann er natürlich dennoch Distributionspakete bauen. Das hat mit
> Open-Source rein gar nichts zu tun.
Achja stimmt, er kann natürlich alle benötigten Libraries mit in das 
Distributions-Paket packen.

von Fred (Gast)


Lesenswert?

Er kann vor allem die benötigten Libraries einfach nicht selbst packen, 
sondern die Pakete der Distribution als Abhängigkeit nutzen.

Ist ja nicht so, daß Qt exotisch wäre.

von Dr. Sommer (Gast)


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...

von Εrnst B. (ernst)


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.

von Fred (Gast)


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.

von petar (Gast)


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.

von Martin J. (bluematrix) Benutzerseite


Lesenswert?

könnt ihr mir einen Linux-Packagemanager empfehlen, der mir das ganze 
etwas erleichtert.

von physiker (Gast)


Lesenswert?

Man kann auch einen build service benutzen wie:
http://openbuildservice.org

von lmgtfy (Gast)


Lesenswert?

Martin J. schrieb:
> könnt ihr mir einen Linux-Packagemanager empfehlen, der mir das ganze
> etwas erleichtert.

https://www.google.de/#q=deb+build+package
https://www.google.de/#q=ppa+ubuntu

Und bitte ein eigenes repo aufmachen, dann reicht ein Eintrag in der 
/etc/apt/sources.list um automatisch mit Updates versorgt zu werden.

Tausendmal besser als dieser ganze install.exe Rotz.

von Dr. Sommer (Gast)


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.

von Fred (Gast)


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.

von Martin J. (bluematrix) Benutzerseite


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

von Dr. Sommer (Gast)


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?

von Dr. Sommer (Gast)


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...

von Εrnst B. (ernst)


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.

von Fred (Gast)


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.

von Dr. Sommer (Gast)


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.

von Fred (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Ja - aber da ist das ABI auch schon geändert. Unter Ubuntu zB gibts kein
> Package mit dem gewünschten ABI.

Pech. Dann nimm das ältere Ubuntu.

Meine Güte, so ein Problem hat man halt, wenn man zehn Jahre seine 
Software nicht anfaßt.

von Dr. Sommer (Gast)


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.

von Fred (Gast)


Lesenswert?

Dein Kram ist bestimmt noch a.out. g

von martin (Gast)


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.

von Fatal (Gast)


Lesenswert?

Willkommen in der Paketierungs-Hölle.
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 
:-)

von martin (Gast)


Lesenswert?

das kann man so sagen.
... auch wenn man Tante google ausführlich befragt, habe ich noch keine 
Anleitung gefunden die am Ende auch funktioniert, dabei nutzen doch so 
viele Qt :-(

von Michael R. (Firma: Brainit GmbH) (fisa)


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?

: Bearbeitet durch User
von Martin J. (bluematrix) Benutzerseite


Lesenswert?

Michael Reinelt schrieb:
> Warum willst du den Source nicht veröffentlichen? Hängt ein
> geschäftsmodell dran?

Da einige Teile des Quellcodes schon bei kommerziellen Projekten 
verwendet wurden und ich diese daher nicht veröffentlichen kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.