J’ai une application Linux à source fermée que je veux dissortingbuer. Cette application utilise wxWidgets / GTK, il existe donc une énorme liste de bibliothèques partagées (60+) dont cette application dépend.
Quelle est la manière préférée de publier l’application et de prendre en charge le nombre maximum de dissortingbutions?
Est-ce pour construire l’application pour chaque dissortingbution prise en charge et les publier séparément? Cela a l’inconvénient d’être compliqué à construire (un chroot et un build par dissortingbution) et ne fonctionnera que sur la dissortingbution supscope.
Est-ce pour append toutes les bibliothèques partagées dans le programme d’installation et les utiliser avec la variable env LD_LIBRARY_PATH (comme VMware)? Cela a l’inconvénient d’augmenter la taille de l’installateur.
Est-ce pour construire une application complètement statique? Ce n’est sûrement pas possible car cela va casser certaines licences.
Est-ce un mélange de cela ou d’une autre option? Comment la plupart des fournisseurs commerciaux publient-ils leur propre application graphique (de préférence basée sur GTK)?
Vous devriez jeter un oeil à la base standard de Linux . Il est conçu spécifiquement pour aider les personnes dans votre position. Il définit un environnement sur lequel les développeurs d’applications tierces peuvent compter – il existe donc une version de libc et d’autres bibliothèques, et certains programmes et répertoires vivent dans des endroits connus. Toute la dissortingbution principale de Linux prend en charge LSB.
Cela dit, vous devriez toujours probablement emballer le résultat spécifiquement pour chaque dissortingbution majeure – juste pour que vos clients puissent gérer votre application avec leurs outils de gestion de paquets familiers.
Fondamentalement, il y a deux façons. Vous pouvez choisir les deux, si vous le souhaitez.
La première façon est la façon commune de faire les jeux et autres. Créez un sous-répertoire lib /, utilisez LD_LIBARY_PATH
et incluez à peu près toutes les bibliothèques partagées dont vous avez besoin. Cela garantit une expérience sans tracas à votre utilisateur, mais rend le programme d’installation plus volumineux et probablement aussi l’empreinte mémoire plus grande. Je ne tenterais même pas de réutiliser des bibliothèques préexistantes, car celles-ci auraient tendance à disparaître au fur et à mesure des mises à niveau du système.
La deuxième méthode consiste à fournir des packages de dissortingbution. Celles-ci ne sont généralement pas difficiles à réaliser et s’intègreront bien aux dissortingbutions et sembleront en outre beaucoup plus accueillantes pour vos clients. Les deux inconvénients sont les suivants: vous devrez le faire pour chaque dissortingbution (Debian, Ubuntu, SuSE, qui est probablement un bon début), et vous devrez les gérer: avec le temps, certaines bibliothèques ne seront plus disponibles. dans une version spécifique, et donc l’utilisateur aura des problèmes de dépendance.
Dans votre programme d’installation, vérifiez les bibliothèques installées, puis téléchargez les fichiers binarys pour ceux qui ne le sont pas.
Pour plus de confort pour vos utilisateurs, en l’absence de connexion à Internet, le programme d’installation doit générer une clé que vous pouvez saisir sur votre site Web pour recevoir une archive ZIP que vous pouvez ensuite envoyer à l’installateur.
Pour le plus grand confort, vérifiez quelles bibliothèques sont disponibles sur la dissortingbution cible et demandez à l’utilisateur d’utiliser l’outil d’administration standard pour les installer. De cette façon, vous ne polluez pas l’ordinateur avec différentes versions de la même bibliothèque.
Cela dit, il serait peut-être plus judicieux de mettre votre précieux code dans une bibliothèque de liens, puis de le fournir en tant que blob binary dans un paquet source. De cette façon, votre code est aussi protégé que dans un fichier binary pur et les utilisateurs peuvent comstackr le code de colle sur leur système favori sans que vous ayez à vous soucier de choses.
Je veux dire: quelle est la valeur de la partie de votre code qui définit l’interface utilisateur? Combien allez-vous perdre quand quelqu’un vole ça?