Quelle est la meilleure façon de distribuer une application binaire pour Linux?
Je viens de terminer le portage d'une application à partir de Windows dans Linux.
J'ai créer un programme d'installation de l'application.
L'application est pas open source => je dois distribuer l'application, les fichiers binaires (fichier exécutable, en couple .donc, les fichiers, les fichiers d'aide et des images).
J'ai trouvé plusieurs méthodes pour le faire:
- RPM et DEB paquets;
- programme d'installation .sh fichiers;
- Autopackage.
Je n'aime pas la première méthode (TR /min et les paquets DEB) parce que je ne veux pas mantain forfaits différents pour les différentes distributions Linux.
Quel est le meilleure façon pour distribuer une application binaire pour Linux?
Vous devez vous connecter pour publier un commentaire.
Avoir été par le biais de ce une couple de fois avec des produits commerciaux, je pense que la meilleure réponse est d'utiliser le programme d'installation natif pour chaque plate-forme. Autre chose produit une expérience désagréable pour l'utilisateur final, et dans la pratique, vous devez le tester sur chaque plate-forme que vous souhaitez à l'appui de toute façon, il n'est donc pas vraiment une charge de travail importante pour maintenir des paquets pour chaque. L'idée que vous pouvez créer un fichier binaire qui peut "juste travail" sur chaque plate-forme là-bas, y compris certains que vous n'avez jamais entendu parler, juste ne fonctionne vraiment pas bien.
Ma recommandation est que vous choisissez une plate-forme ou deux pour le soutien au départ (Red Hat et Ubuntu serait mes suggestions) et ensuite permettre à l'utilisateur de la demande du lecteur de la création de nouveaux packages d'installation. Peut-être faire savoir que vous êtes prêt à prendre en charge d'autres plates-formes, pour un prix modique qui couvre votre temps et effort dans l'emballage et les essais sur cette plate-forme. Si une plate-forme s'avère être très différents, vous devrez peut-être payer plus pour le support continu.
Oh, et je ne saurait trop insister sur la valeur des machines virtuelles pour de tels scénarios. Vous avez besoin de construire des ordinateurs virtuels pour chaque plate-forme de soutien, et peut-être de multiples machines virtuelles par plate-forme pour le rendre facile de tester différentes configurations.
Vous pourriez vouloir essayer InstallBuilder. Il est compatible (fonctionne sur Windows, Linux, Mac OS X, Solaris et presque tous les autres plates-formes Unix là). Il est utilisé par Intel, Motorola, GitHub, MySQL, Nokia/Trolltech et de nombreuses autres entreprises de sorte que vous serez en bonne compagnie 🙂 En plus binaire, les installateurs, il peut aussi créer de la croix-distribution Rpm et DEB paquets.
InstallBuilder est commercial, mais nous offrons des licences libres pour les programmes open source et très importantes réductions pour les mISVs ou en solo, les développeurs, juste nous laisser tomber une ligne.
Il y avait beaucoup de bonnes réponses (y compris la mienne :)) ici. Même si ce n'est plus sur la compatibilité binaire (que vous ne devez pas vous inquiéter au sujet de).
Pour l'installateur, je recommanderais autopackage (nous avons lancé avec succès plusieurs versions de notre logiciel avec elle), ils ont fait l' "installer.sh" la partie déjà et plus (bureau de l'intégration par exemple).
Vous devez être prudent et de tester vos scénarios de mise à niveau et d'autres choses, selon la complexité de la mise en package de structure, mais il est assez propre dans l'ensemble. J'ai corrigé quelques bugs avec la gestion des dépendances dans 1.2.6, de sorte qu'il doit être fine.
Mise à JOUR: La question d'origine a été supprimée, de sorte que la rediffusion complète de réponse ici, ignorer toutes les références à autopackage, qui a été fusionnée dans la Listaller, vous ne savez pas si les parties pertinentes ont survécu.
Pour les bibliothèques standard (comme crypto++, pthreads, etc) qui sont susceptibles d'être disponibles dans un réseau de distribution -- lier dynamiquement et d'informer les utilisateurs à obtenir de leur distro référentiel. Ou lier statiquement si c'est faisable.
Pour bizarre bibliothèques que vous devez de contrôle de version (si vous souhaitez déployer Qt4 application sur le territoire de l'ennemi des gnomes par exemple), les compiler vous-même et de l'installer dans un endroit privé seulement votre app connaît.
Ne jamais installer privé libs dans les lieux, sauf si vous pouvez être sûr de ne pas interférer avec le paquet de systèmes de toutes les distros vous soutenir. (et qu'ils ne peuvent pas interférer avec vous).
Utilisation rpath au lieu de LD_LIBRARY_PATH, et le configurer correctement pour tous vous les fichiers binaires et toutes les dll que font référence les uns aux autres. Vous pouvez définir rpath sur vous fichier binaire "$ORIGINE;$ORIGIN/../lib;/opt/mon/private/libs" et ont de l'éditeur de liens de recherche de ces lieux avant toute norme chemins. (à setsome de l'éditeur de liens drapeau pour origine le travail je pense). Assurez-vous de définir rpath sur votre libs trop: par exemple QtGui besoins QtCore, et si l'utilisateur arrive à installer le package standard avec la version différente, vous ne veulent absolument pas il a ramassé (exe -> ../lib/QtGui.donc (4.4.3) -> /usr/local/lib/QtCore.donc (4.4.2) -- un moyen sûr de mourir dès le début).
Si vous compilez avec tout rpath, vous pouvez le changer plus tard avec chrpath, rendant ainsi possible d'ajuster l'emplacement de l'installation dans le cadre de post-traitement ou le script d'installation.
Maintenir la compatibilité binaire. GLIB_C est à peu près statique pour vos utilisateurs, de sorte que vous devriez avoir un lien à l'encontre de certaines suffisamment ancienne version. 2.3 est un pari sûr. Vous pouvez utiliser APBuild -- gcc wrapper qui applique GLIB_C version et ne prend que quelques autres la compatibilité binaire des astuces, de sorte que vous n'avez pas à compiler tous les vous applications sur un très vieux distrib.
Si vous vous liez à quoi que ce soit de manière statique, il est généralement va être reconstruit avec APBuild trop, sinon il est lié à glisser plus récent GLIB_C symboles. Tous les .afin de vous installer en privé devra naturellement être construit avec elle aussi. Parfois, vous devez patcher tiers libs à utiliser les anciens symboles. (J'ai eu de patch ruby à rendement réel des autorisations au lieu de celles qui sont efficaces, car il n'existe pas de telles fonctions dans les anciennes GLIB_C. Toujours pas sûr si je me suis cassé quelque chose :)).
Pour l'intégration avec les environnements de bureau (fichier des associations, des types mime, les icônes, les entrées du menu démarrer, etc) utiliser xdg-utils. Attention cependant, comme tout sur linux, ils n'aime pas les espaces dans les noms de fichiers :). Assurez-vous de tester ces choses sur chaque cible distro -- xdg implémentations sont criblés avec des bugs et des bizarreries.
Pour la phase d'installation, vous pouvez offrir de la variété de natif de paquets (rpm, deb et un peu plus), ou le déploiement de votre propre programme d'installation, ou de trouver un installateur qui fonctionne sur toutes les distributions en contournant natif des gestionnaires de paquets. Nous avons utilisé avec succès Autopackage (même les personnes qui ont fait APbuild) pour que les.
Je vous dis une possibilité supplémentaire, bien que je ne suis pas au courant de son statut: le Loki installateur. Loki était une société de jeux vidéo de portage pour Linux. Ça s'est passé en 2002, mais le programme d'installation est disponible.
InstallShield est aussi disponible pour linux. Aucune idée sur le statut même si.
Bien que de nombreuses personnes vous propose d'aller avec tar.gz, s'il vous plaît ne pas. Je suppose que vous voulez fournir une expérience agréable pour la procédure d'installation pour vos utilisateurs. Un tar.gz est l'un des plus bas niveau, de faible qualité, à faible utilisabilité des choix que vous pouvez faire. Il fonctionne partout, car il n'est rien sur le fond, comme vous le savez.
Le gars à freedesktop.org et le LSB sont tout à fait clair sur l'endroit où placer des trucs. Ce que vous avez besoin est un sympathique programme pour le faire. Autopackage a mon humble avis les chiffres (je l'adore), mais malgré son âge, je n'ai pas vu un seul programme y distribuée sous forme d'un autopackage.
Évaluer attentivement, mais ne manquez pas la chance de faire partie de l'élan en faveur de celui-ci, simplement parce qu'il n'est pas populaire. Si cela fonctionne pour vous, et ça marche pour vos utilisateurs, tout le reste n'a pas d'importance.
Il n'y a pas de meilleure façon (universally speaking).
tar.gz les fichiers binaires, cela devrait fonctionner.
Créer un .le goudron.bz2 archive avec le binaire, puis de publier un flux pour elle, comme ceci:
Signer avec votre clé GPG. Vous pouvez utiliser les outils de 0install.net pour calculer l'empreinte et ajouter la signature GPG pour vous dans le format correct.
Ensuite, le mettre sur votre site web, à l'adresse dans le uri attribut. N'importe quel utilisateur sur la plupart des distributions Linux (par exemple, Ubuntu, Fedora, Debian, Gentoo, ArchLinux, etc) peut alors installer et exécuter votre programme avec:
Leur système permettra également de vérifier les mises à jour périodiquement. Il existe plusieurs Interfaces graphiques pour les différents environnements de bureau, mais la ligne de commande fonctionnera partout.
Également quelques-uns des flux existants pour l'inspiration.
Il est possible d'installer un RPM sur Debian et un APT sur RHEL.
Si vous allez lier statiquement ce programme, ou de manière dynamique des liens qu'avec des bibliothèques qui vous sera distribuer dans le paquet, alors il n'a pas beaucoup d'importance comment vous le distribuer. La façon la plus simple est tar.gz et qui serait à l'œuvre.
Otoh, que si elle est liée de façon dynamique avec système de bibliothèques, et en particulier si elle a des dépendances sur les bibliothèques dynamiques qui seront partagés avec le client, d'autres applications, vous sorte de besoin de faire soit des RPM, APT, ou les deux.
.deb
paquets.J'ai aussi regardé dans cette au travail et j'ai serions d'accord il n'est pas vraiment une "meilleure façon". Si votre application est distribué comme source alors j'irais avec la marque/le configurer méthodes emballés dans une tar.gz. Cela semble assez universelle dans le monde de Linux.
Un bon moyen de se faire une idée de ce à faire est de regarder plus organziation et de voir comment ils distribuent leurs binaires.