Simon ! Je sais ce que vous ressentez ; j'ai également eu du mal avec cette partie de l'apprentissage de Linux. Sur la base de mes propres expériences, j'ai écrit un tutoriel sur certains des points que vous avez abordés (principalement comme référence pour moi-même !): http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . Je pense que vous apprécierez ma remarque sur la simplicité de construction/installation des applications Python :)
J'espère que cela vous aidera ! Et bonne compilation.
Tim Jones
Construire/Installer une application à partir des sources sous Ubuntu Linux
Bien que les dépôts d'Ubuntu soient remplis d'excellentes applications, il vous arrivera un jour ou l'autre de tomber sur un outil indispensable qui n'est pas dans les dépôts (ou qui n'a pas de paquet Debian) ou dont vous avez besoin d'une version plus récente que celle qui se trouve dans les dépôts. Que faire ? Eh bien, vous devez construire l'application à partir des sources ! Ne vous inquiétez pas, ce n'est pas aussi compliqué que ça en a l'air. Voici quelques conseils, basés sur mon expérience d'amateur ! (Bien que j'utilise Ubuntu pour cet exemple, les concepts généraux devraient être applicables à la plupart des distributions Unix/Linux, telles que Fedora, et même la plateforme Cygwin sous Windows).
Le processus de base de construction (compilation) de la plupart des applications à partir des sources suit la séquence suivante : configurer --> compiler --> installer. Les commandes typiques d'Unix/Linux pour effectuer ces opérations sont les suivantes : config
--> make
--> make install
. Dans certains cas, vous trouverez même des pages web qui montrent que tous ces éléments peuvent être combinés en une seule commande :
$ config && make && make install
Bien entendu, cette commande suppose qu'il n'y a pas de problème dans l'une ou l'autre de ces étapes. C'est là qu'on s'amuse !
Pour commencer
Si vous n'avez jamais compilé une application à partir des sources sur votre système, vous devrez probablement la configurer avec des outils de développement généraux, tels que le logiciel gcc
des fichiers d'en-tête courants (il s'agit de code déjà écrit par quelqu'un d'autre et utilisé par le programme que vous êtes en train d'installer) et l'outil make. Heureusement, dans Ubuntu, il existe un métapackage appelé build-essential
qui l'installera. Pour l'installer (ou simplement vérifier que vous l'avez déjà !), lancez cette commande dans le terminal :
$ sudo apt-get install build-essential
Maintenant que vous disposez de la configuration de base, téléchargez les fichiers sources de l'application et enregistrez-les dans un répertoire pour lequel vous disposez des droits de lecture/écriture, comme votre répertoire "personnel". En général, ces fichiers se trouvent dans un fichier d'archive dont l'extension est soit .tar.gz
o .tar.bz2
. Les .tar
signifie simplement qu'il s'agit d'une "archive sur bande", c'est-à-dire d'un regroupement de fichiers qui préserve leur structure de répertoire relative. Les .gz
est l'abréviation de gzip (GNU zip), un format de compression populaire sous Unix/Linux. De même, l'extension .bz2
signifie bzip2, un format de compression plus récent qui offre une compression plus élevée (taille de fichier compressé plus petite) que gzip.
Après avoir téléchargé le fichier source, ouvrez une fenêtre de terminal (System Terminal dans le menu Ubuntu) et placez-vous dans le répertoire où vous avez enregistré votre fichier. (J'utiliserai ~/download
dans cet exemple. Ici, "~" est un raccourci vers votre répertoire "personnel"). Utilisez la commande tar pour extraire les fichiers de l'archive téléchargée :
Si votre fichier est une archive gzip (c'est-à-dire qu'il se termine par .tar.gz
), utilisez la commande :
$ tar -zxvf filename.tar.gz
Si votre fichier est une archive bzip2 (par exemple, il se termine par .tar.bz2
), utilisez la commande :
$ tar -jxvf filename.tar.gz
Conseil : si vous ne voulez pas avoir à vous se souvenir de tous les commutateurs de la ligne de commande pour extraire des archives, je vous recommander l'un de ces utilitaires (ou les deux) ces utilitaires : dtrx (mon préféré !) ou deco (plus populaire). Avec l'un ou l'autre l'un ou l'autre de ces utilitaires, il suffit d'entrer le nom de l'utilitaire (dtrx ou deco) et le nom du fichier. le nom du fichier, et il fait tout le reste. le reste. Ces deux utilitaires "savent" comment gérer la plupart des formats d'archives que vous êtes susceptible de et ils ont une excellente gestion des erreurs.
Lorsque vous construisez à partir d'une source, vous risquez de rencontrer deux types d'erreurs :
- Les erreurs de configuration se produisent lorsque vous exécutez le script de configuration script (généralement appelé config ou configure) pour créer un fichier makefile spécifique à votre installation.
- Les erreurs de compilation se produisent lorsque vous exécutez la commande make (après que le fichier makefile a été généré) et que le compilateur ne parvient pas à trouver le code dont il a besoin.
Nous allons examiner chacun de ces problèmes et voir comment les résoudre.
Configuration et erreurs de configuration
Après avoir extrait le fichier d'archive du code source, dans le terminal, vous devez vous rendre dans le répertoire qui contient les fichiers extraits. Généralement, le nom de ce répertoire sera le même que le nom du fichier (sans l'extension .tar.gz
o .tar.bz2
). Cependant, il arrive que le nom du répertoire soit simplement le nom de l'application, sans aucune information sur la version.
Dans le répertoire source, recherchez un fichier README
et/ou un fichier INSTALL
(ou quelque chose de similaire). Ces fichiers contiennent généralement des informations utiles sur la manière de construire/compiler l'application et de l'installer, y compris des informations sur les dépendances. Les "dépendances" ne sont qu'un nom fantaisiste pour désigner d'autres composants ou bibliothèques nécessaires à la réussite de la compilation.
Après avoir lu le README
et/ou INSTALL
(et, si possible, de la documentation en ligne relative à l'application), recherchez un fichier exécutable (pour lequel l'autorisation "x" a été définie) nommé config
o configure
. Parfois, le fichier peut avoir une extension, telle que .sh
(par exemple, config.sh
). Il s'agit généralement d'un Shell Shell qui exécute d'autres utilitaires pour confirmer que vous disposez d'un environnement "sain" pour la compilation. En d'autres termes, il vérifie que vous avez installé tout ce dont vous avez besoin.
Conseil : s'il s'agit d'une application basée sur Python basée sur Python vous devriez trouver un fichier nommé setup.py
. Les applications Python sont généralement très très simples à installer. Pour installer cette application en tant que root (par exemple devant la commande suivante sous Ubuntu), exécutez cette commande :
$ python setup.py install
C'est tout ce qu'il faut faire. à faire. Vous pouvez sauter le reste de ce et passer directement à l'utilisation et profiter de votre application.
Exécutez le script de configuration script dans le terminal. Typiquement, vous pouvez (et devriez !) exécuter votre configuration script avec votre compte utilisateur normal.
$ ./config
Le script affiche quelques messages pour vous donner une idée de ce qu'il fait. Souvent, le script vous indiquera s'il a réussi ou échoué et, s'il a échoué, vous donnera des informations sur la cause de l'échec. Si vous n'obtenez aucun message d'erreur, vous pouvez généralement supposer que tout s'est bien passé.
Si vous ne trouvez aucun script qui ressemble à une configuration script, cela signifie généralement que l'application est très simple et qu'elle est indépendante de la plate-forme. Cela signifie que vous pouvez simplement passer à l'étape de construction/compilation ci-dessous, car le fichier Makefile
devrait fonctionner sur n'importe quel système.
Un exemple
Dans ce tutoriel, je vais utiliser le lecteur RSS textuel Newsbeuter comme exemple des types d'erreurs que vous pouvez rencontrer lors de la construction de votre application. Pour Newsbeuter, le nom de la configuration script est config.sh
. Sur mon système, lorsque je lance config.sh
les erreurs suivantes se produisent :
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
En faisant quelques recherches, j'ai découvert qu'en fait, la sqlite3
a été installée. Cependant, comme j'essaie de construire à partir des sources, il s'agit d'une astuce que je ne peux pas utiliser. config.sh
recherche en fait les bibliothèques de développement (en-têtes) pour le programme sqlite3
. Dans Ubuntu, la plupart des paquets ont un équivalent de développement associé qui se termine par -dev
. (D'autres plateformes, telles que Fedora, utilisent souvent un suffixe de paquetage de type -devel
pour les paquets de développement).
Pour trouver le paquetage approprié pour le sqlite3
nous pouvons utiliser le paquet de développement apt-cache
dans Ubuntu (et, de la même manière, l'utilitaire yum
dans Fedora) :
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
Cette commande renvoie une liste assez longue de résultats, nous devons donc faire un peu de travail de détective pour déterminer quel est le paquet approprié. Dans ce cas, le paquet approprié s'avère être libsqlite3-dev
. Remarquez que parfois le paquet que nous recherchons aura l'extension lib
au lieu du même nom de paquet avec le préfixe -dev
. En effet, nous recherchons parfois une bibliothèque partagée qui peut être utilisée par de nombreuses applications différentes. Pour installer libsqlite3-dev
Lancez la commande apt-get install dans le terminal :
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
Maintenant, nous devons exécuter config.sh
pour s'assurer que nous avons résolu ce problème de dépendance et que nous n'en aurons plus d'autres. (Bien que je ne le montre pas ici, dans le cas de Newsbeuter, j'ai également dû installer le paquetage libcurl4-openssl-dev
). De plus, si vous installez un paquet de développement (comme libsqlite3-dev
) et le paquet d'applications associé (par exemple, sqlite3
) n'est pas déjà installé, la plupart des systèmes installeront automatiquement le paquetage d'application associé en même temps.
Lorsque la configuration s'exécute avec succès, elle crée un ou plusieurs fichiers make. Ces fichiers sont généralement nommés Makefile
(n'oubliez pas que la casse des noms de fichiers est importante sous Unix/Linux !) Si le paquetage de construction comprend des sous-répertoires, tels que src
etc., chacun de ces sous-répertoires contiendra un fichier Makefile
Le projet est également en cours d'élaboration.
Erreurs de construction et de compilation
Nous sommes maintenant prêts à compiler l'application. Cette étape est souvent appelée construction et le nom est emprunté au processus de construction de quelque chose dans le monde réel. Les différents "morceaux" de l'application, qui sont généralement plusieurs fichiers de code source, sont combinés pour former l'application globale. L'utilitaire make gère le processus de construction et appelle d'autres applications, telles que le compilateur et l'éditeur de liens, pour effectuer le travail. Dans la plupart des cas, il vous suffit d'exécuter make (avec votre compte utilisateur habituel) à partir du répertoire où vous avez exécuté la configuration. (Dans certains cas, comme la compilation d'applications écrites avec la bibliothèque Qt, vous devrez lancer une autre application "wrapper" comme qmake. Encore une fois, vérifiez toujours l'option README
et/ou INSTALL
pour plus de détails).
Comme pour la configuration script ci-dessus, lorsque vous lancez make (ou un utilitaire similaire) dans le terminal, il affiche des messages sur ce qui s'exécute et sur les éventuels avertissements et erreurs. Vous pouvez généralement ignorer les avertissements, car ils sont principalement destinés aux développeurs de l'application et leur indiquent que certaines pratiques standard sont violées. En général, ces avertissements n'affectent pas le fonctionnement de l'application. En revanche, les erreurs de compilation doivent être traitées. Avec Newsbeuter, lorsque j'ai lancé make, tout s'est bien passé pendant un moment, mais j'ai ensuite obtenu une erreur :
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
Le processus de création s'arrêtera dès que la première erreur sera rencontrée. La gestion des erreurs du compilateur est parfois délicate. Vous devez examiner les erreurs pour trouver des indices sur le problème. Généralement, le problème est que certains fichiers d'en-tête, qui ont généralement une extension de .h
o .hpp
sont manquants. Dans le cas de l'erreur ci-dessus, il est (ou devrait être !) clair que le problème est que stfl.h
est introuvable. Comme le montre cet exemple, il convient d'examiner les premières lignes du message d'erreur et de remonter jusqu'à la cause sous-jacente du problème.
Après avoir consulté la documentation de Newsbeuter (ce que j'aurais dû faire avant de commencer, mais alors cette partie du tutoriel n'aurait pas eu beaucoup de sens !), j'ai découvert qu'il nécessite une bibliothèque tierce appelée STFL. Que faisons-nous dans ce cas ? Eh bien, nous répétons essentiellement le même processus pour la bibliothèque requise : nous obtenons la bibliothèque et exécutons le processus configure-build-install pour elle, puis nous reprenons la construction de l'application souhaitée. Par exemple, dans le cas de STFL, j'ai dû installer la bibliothèque libncursesw5-dev
pour qu'il se construise correctement. (En général, il n'est pas nécessaire de refaire l'étape de configuration de notre application d'origine après l'installation d'une autre application requise, mais cela ne fait jamais de mal non plus).
Après avoir installé avec succès la boîte à outils STFL, le processus make pour Newsbeuter s'est déroulé avec succès. Le processus make reprend généralement là où il s'est arrêté (à l'endroit de l'erreur). Ainsi, les fichiers qui ont déjà été compilés avec succès ne seront pas recompilés. Si vous souhaitez tout recompiler, vous pouvez lancer make clean all pour supprimer tous les objets compilés, puis relancer make.
Installation
Une fois que le processus de construction s'est achevé avec succès, vous êtes prêt à installer l'application. Dans la plupart des cas, il est préférable d'installer l'application dans les zones communes du système de fichiers (par ex, /usr/bin
o /usr/share/bin
etc.), vous devrez exécuter l'installation en tant que root. L'installation est vraiment l'étape la plus simple de tout le processus. Pour l'installer, dans le terminal, exécutez
$ make install
Vérifier que le résultat de ce processus ne comporte pas d'erreurs. Si tout s'est déroulé correctement, vous devriez pouvoir exécuter le nom de la commande dans le terminal et celle-ci se lancera. (Ajoutez & à la fin de la ligne de commande, s'il s'agit d'une application GUI, sinon vous ne pourrez pas utiliser la session de terminal tant que l'application n'aura pas fini de s'exécuter).
Lorsque vous créez une application à partir des sources, elle n'ajoute généralement pas d'icône ou de raccourci dans les menus de l'interface graphique d'Ubuntu. Vous devrez l'ajouter manuellement.
C'est en gros le processus, bien que potentiellement itératif, de construction et d'installation d'une application à partir des sources dans Ubuntu. Après l'avoir fait plusieurs fois, cela deviendra une seconde nature pour vous !