Installation à partir de la source. Comment résoudre les dépendances sans détruire le gestionnaire de packages

19

La compilation et l'installation de logiciels sont une douleur et un problème que je ne peux pas surmonter. Je veux juste parcourir ma compréhension de ce processus avec quelqu'un de plus compétent pour éclaircir mon esprit et passer au niveau suivant.

De nombreux logiciels scientifiques dont j'ai besoin ne sont pas distribués sous forme de packages. Je comprends que "./configure" configure les variables de compilation et la vérification des dépendances "make" fait la compilation "sudo make install" met toutes les bibliothèques et les bacs à leur place. Mais ça ne marche jamais. Je sors rarement de l'étape a) "./configure" sans entrer dans l'enfer des dépendances, et si je le fais, b) "sudo make install" nuira probablement à ma boîte.

a) L'enfer de la dépendance est très frustrant. Parfois, j'ai la bibliothèque, mais ça ne lui plaît pas. Ou la bibliothèque ne veut pas installer. Ou "configurer" ne le trouve pas. Ou ma distribution l'a placé quelque part où il ne devrait pas être. Ou il y a deux versions dans mon système. Le problème est que je ne comprends pas comment diagnostiquer et donc résoudre ces problèmes. Quelles sont les bonnes références à apprendre pour quelqu'un qui n'a pas besoin de devenir programmeur?

b) Ma compréhension est que «make install» remplacera certaines bibliothèques et modifiera les paramètres sans que mon gestionnaire de paquets en soit conscient. Par conséquent, certains programmes ne s'exécutent pas, d'autres ne peuvent pas être mis à jour. Donc, si je n'utilise pas "make install", et que je garde juste le binaire compilé dans mon répertoire utilisateur avec un lien symbolique ajouté au PATH, serai-je en clair?

Ma boîte est mono-utilisateur, a des tonnes de HD gratuit, donc je ne me soucie pas vraiment d'avoir plusieurs (des dizaines) de copies de bibliothèques si cela résout mes problèmes. L'espace est bon marché.

Lenz
la source
3
Vous ne dites pas quelle distribution vous utilisez, ce serait une information intéressante. Si vous exécutez un dérivé Debian, vous pouvez utiliser apt-get build-dep <package>pour installer automatiquement les dépendances nécessaires.
Marco
J'utilise CentOS 6 (pour avoir ce que le super-gourou de notre laboratoire utilise), mais j'avais l'habitude d'utiliser Ubuntu.
Lenz
Bienvenue dans la vie d'un conditionneur de distribution. Faire tout ce suivi des dépendances n'est pas particulièrement difficile, mais c'est une corvée.
Gilles 'SO- arrête d'être méchant'
Voir les gestionnaires de packages non root et peut-être d'autres questions marquées non-root-user qui concernent l'installation du logiciel et la gestion des packages.
Gilles 'SO- arrête d'être méchant'

Réponses:

16

La plupart des paquets auront <package>-dev(pour Debian) ou <package>-devel(pour Red Hat) qui seront les bibliothèques nécessaires pour créer des liens.

Ainsi, par exemple, si la source le dit libxml, dans les systèmes basés sur Debian, vous trouverez libxml2et libxml2-dev(utilisez apt-cache search <dependancy>pour les trouver).

Vous en aurez besoin libxml2-devpour le construire et l' libxml2exécuter.

L' ./configureétape prend généralement en charge les indicateurs comme --with-libxml=/usr/lib/pour le pointer vers les bibliothèques correctes ( ./configure --helpdoit répertorier toutes les options). Il prend également généralement en charge la modification de l'emplacement d'installation avec --prefix=$HOME/sw. L'utilisation d'un préfixe en dehors de ce que votre gestionnaire de packages contrôle est le meilleur moyen d'éviter les conflits avec les logiciels installés par le gestionnaire de packages.

Sur Debian et dérivés en utilisant un --prefixdes /usr/local/ou /opt/local/devraient être en sécurité.

Si une bibliothèque (ou une version) dont vous avez besoin n'est pas disponible dans le gestionnaire de paquets, téléchargez simplement la source et compilez-la en utilisant des options similaires. Surtout, utilisez un --prefixextérieur à votre gestionnaire de paquets et lors de la compilation du logiciel que vous souhaitez vraiment utiliser --with-<library>=/<path/to/installed/library>.

bahamat
la source
5

Il y a l'outil auto-aptqui peut être utilisé pour cela.

De l' homme auto-apt :

auto-apt est un programme qui vérifie l'accès aux fichiers des programmes exécutés dans des environnements auto-apt. Si un programme accède à un fichier de paquet non installé, auto-apt installera le paquet contenant le fichier, en utilisant apt-get.

Il est utilisé comme suit:

auto-apt run ./configure

Une autre façon est d'utiliser apt-get build-dep <package>sur les distributions basées sur Debian.

Marco
la source
apt-get build-dep <package>travaillé pour moi. C'était frustrant de courir ./configureencore et encore pour apprendre un package supplémentaire!
HeatfanJohn
2

Pour les distributions basées sur RPM, vous pouvez vous essayer à créer des packages appropriés (ce n'est pas si difficile ...).

Les avantages d'un package approprié sont que votre gestionnaire de packages garde une trace du logiciel et vous pouvez facilement répliquer votre configuration ailleurs / sur la prochaine machine. Avec un package source approprié, le portage vers l'avant (nouvelle version en amont, correctif de correction de bogue, les bibliothèques sous-jacentes sont mises à jour) est plus facile que d'avoir à tout comprendre à partir de zéro la prochaine fois.

vonbrand
la source