Simon! Je sais ce que tu ressens; 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 didacticiel sur certains des éléments que vous abordez (principalement à titre de référence!): Http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . Je pense que vous apprécierez ma remarque sur la simplicité de la création / installation d'applications Python. :)
J'espère que ça aide! Et bonne compilation.
Tim Jones
Construire / Installer une application à partir du source dans Ubuntu Linux
Alors que les dépôts Ubuntu regorgent d’applications géniales, vous rencontrerez à un moment ou à un autre cet outil "indispensable" qui ne figure pas dans les dépôts (ou qui n’a pas de paquet Debian) ou vous avez besoin d’un version plus récente que dans les référentiels. Que faire? Eh bien, vous devez créer l’application à partir des sources! Ne vous inquiétez pas, ce n'est vraiment pas aussi compliqué que ça en a l'air. Voici quelques conseils, tirés de mon expérience d’amateur de rang! (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 plate-forme Cygwin sous Windows.)
Le processus de base de la construction (compilation) de la plupart des applications à partir des sources suit cette séquence: configure -> compiler -> install. Les commandes Unix / Linux typiques pour faire ces choses sont: config
-> make
-> make install
. Dans certains cas, vous trouverez même des pages Web qui montrent que toutes ces choses peuvent être combinées en une seule commande:
$ config && make && make install
Bien entendu, cette commande suppose qu'il n'y a pas de problèmes dans aucune de ces étapes. C'est là que le plaisir entre en jeu!
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 la gcc
suite du compilateur, des fichiers d'en-tête courants (considérez cela comme du code déjà écrit par quelqu'un d'autre utilisé par le programme que vous installez) et l'outil make. Heureusement, dans Ubuntu, il existe un métapaquet appelé build-essential
qui va installer cela. Pour l'installer (ou juste vous assurer que vous l'avez déjà!), Lancez cette commande dans le terminal:
$ sudo apt-get install build-essential
Maintenant que vous avez la configuration de base, téléchargez les fichiers source de l'application et enregistrez-les dans un répertoire pour lequel vous disposez d'autorisations de lecture / écriture, tel que votre répertoire "home". Généralement, ils seront dans un fichier d’archive avec l’extension de fichier .tar.gz
ou .tar.bz2
. Le .tar
signifie simplement qu'il est une « bande d' archive », qui est un regroupement de fichiers qui préserve leur structure de répertoire relatif. Le .gz
sigle signifie gzip (GNU zip), qui est un format de compression populaire Unix / Linux. De même, le .bz2
sigle de bzip2, qui est un nouveau format de compression offrant une compression plus élevée (taille de fichier compressée plus petite) que gzip.
Après avoir téléchargé le fichier source, ouvrez une fenêtre de terminal (Terminal système dans le menu Ubuntu) et accédez au répertoire dans lequel vous avez enregistré votre fichier. (Je vais utiliser ~/download
dans cet exemple. Ici, '~' est un raccourci vers votre répertoire "home".) Utilisez la commande tar pour extraire les fichiers du fichier archive téléchargé:
Si votre fichier est une archive gzip (par exemple, se termine par .tar.gz
), utilisez la commande suivante:
$ tar -zxvf filename.tar.gz
Si votre fichier est une archive bzip2 (se termine par exemple .tar.bz2
), utilisez la commande suivante:
$ tar -jxvf filename.tar.gz
Conseil: Si vous ne voulez pas vous souvenir de tous les commutateurs de ligne de commande pour extraire des archives, je vous recommande d’obtenir l’un (ou les deux) utilitaires suivants: dtrx (mon préféré!) Ou déco (plus populaire). Avec l’un ou l’autre de ces utilitaires, il vous suffit de saisir le nom de l’utilitaire (dtrx ou deco) et le nom du fichier, c’est lui qui fait le reste. Ces deux "savent" comment gérer la plupart des formats d'archives que vous êtes susceptible de rencontrer et ils ont une excellente gestion des erreurs.
Lors de la création à partir des sources, il existe deux types d’erreurs que vous êtes susceptible de rencontrer:
- Des erreurs de configuration se produisent lorsque vous exécutez le script de configuration (généralement nommé config ou configure) pour créer un fichier make spécifique à votre configuration.
- Les erreurs du compilateur surviennent lorsque vous exécutez la commande make (après la génération du fichier makefile) et que le compilateur est incapable de trouver le code dont il a besoin.
Nous examinerons chacune d’elles et discuterons de la façon de les résoudre.
Configuration et erreurs de configuration
Une fois que vous avez extrait le fichier d’archive de code source, dans le terminal, vous devez passer au répertoire contenant les fichiers extraits. En règle générale, ce nom de répertoire sera le même que le nom du fichier (sans l' extension .tar.gz
ou .tar.bz2
). Cependant, le nom du répertoire n'est parfois que le nom de l'application, sans aucune information de version.
Dans le répertoire source, recherchez un README
fichier et / ou un INSTALL
fichier (ou un nom 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. "Dépendances" ne sont qu'un nom de fantaisie pour d'autres composants ou bibliothèques nécessaires à la compilation.
Une fois que vous avez lu le fichier README
et / ou le INSTALL
fichier (et, espérons-le, examiné toute documentation en ligne pertinente pour l'application), recherchez un fichier exécutable (le jeu d'autorisations "x" figurant sur le fichier) est nommé config
ou configure
. Parfois, le fichier peut avoir une extension, telle que .sh
(par exemple, config.sh
). Il s'agit généralement d'un script 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érifiera que vous avez installé tout ce dont vous avez besoin.
Conseil: S'il s'agit d'une application basée sur Python, à la place d'un fichier de configuration, vous devriez trouver un fichier nommé setup.py
. Les applications Python sont généralement très simples à installer. Pour installer cette application en tant que root (par exemple, mettez sudo devant la commande suivante sous Ubuntu), exécutez cette commande:
$ python setup.py install
Cela devrait être tout ce que vous devez faire. Vous pouvez ignorer le reste de ce didacticiel et passer directement à l'utilisation de votre application et à son utilisation.
Exécutez le script de configuration dans le terminal. En règle générale, vous pouvez (et devriez!) Exécuter votre script de configuration avec votre compte utilisateur habituel.
$ ./config
Le script affichera quelques messages pour vous donner une idée de ce qu’il fait. Souvent, le script vous indique s'il a réussi ou non et, en cas d'échec, des informations sur la cause de l'échec. Si vous ne recevez aucun message d'erreur, vous pouvez généralement supposer que tout s'est bien passé.
Si vous ne trouvez aucun script ressemblant à un script de configuration, 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 l'option fournie Makefile
devrait fonctionner sur n'importe quel système.
Un exemple
Dans ce tutoriel, je vais utiliser le lecteur RSS à base de texte appelé Newsbeuter comme exemple des types d’erreurs que vous pouvez rencontrer lors de la création de votre application. Pour Newsbeuter, le nom du script de configuration est config.sh
. Sur mon système, lorsque j'exécute 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.
Après quelques recherches, j'ai découvert qu'en fait, l' sqlite3
application était installée. Cependant, étant donné que j'essaie de compiler à partir des sources, il s'agit d'un conseil qui config.sh
recherche réellement les bibliothèques de développement (en-têtes) sqlite3
. Dans Ubuntu, la plupart des paquets ont un paquet de développement associé qui se termine par -dev
. (D'autres plates-formes, telles que Fedora, utilisent souvent un suffixe de package -devel
pour les packages de développement.)
Pour trouver le paquet approprié pour le sqlite3
paquet de développement, nous pouvons utiliser l' apt-cache
utilitaire dans Ubuntu (et, de la même manière, l' yum
utilitaire dans Fedora):
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
Cette commande retourne une assez longue liste 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 package approprié s'avère être libsqlite3-dev
. Notez que parfois le paquet que nous recherchons aura le lib
préfixe, au lieu du même nom de paquet plus -dev
. En effet, nous cherchons parfois une bibliothèque partagée pouvant être utilisée par de nombreuses applications différentes. Pour l'installer libsqlite3-dev
, lancez la commande typique apt-get install dans le terminal:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
Maintenant, nous devons réexécuter config.sh
pour nous assurer que nous avons résolu ce problème de dépendance et que nous n’avons plus de problèmes de dépendance. (Bien que je ne le montre pas ici, dans le cas de Newsbeuter, je devais également installer le libcurl4-openssl-dev
package également.) De plus, si vous installez un package de développement (du type libsqlite3-dev
) et que le package d'application associé (par exemple, sqlite3
) n'est pas déjà installé, la plupart des systèmes installent automatiquement le package d’application associé au même moment.
Lorsque la configuration est exécutée avec succès, le résultat sera que cela créera un ou plusieurs fichiers make. Ces fichiers sont généralement nommés Makefile
(rappelez-vous que la casse du nom de fichier est importante dans Unix / Linux!). Si le package de construction comprend des sous-répertoires, tels que src
, etc., chacun de ces sous-répertoires contiendra également un Makefile
,.
Erreurs de construction et de compilation
Nous sommes maintenant prêts à compiler l'application. Cela s'appelle souvent bâtiment et son nom est emprunté au processus réel de construction de quelque chose. Les différentes "parties" de l'application, qui sont généralement plusieurs fichiers de code source, sont combinées pour former l'ensemble de l'application. 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, vous exécutez simplement make (avec votre compte utilisateur habituel) à partir du répertoire dans lequel vous avez exécuté la configuration. (Dans certains cas, tels que la compilation d'applications écrites avec la bibliothèque Qt, vous devrez exécuter une autre application "wrapper" comme qmake. Encore une fois, vérifiez toujours les documents README
et / ou INSTALL
pour plus de détails.)
Comme avec le script de configuration ci-dessus, lorsque vous exécutez make (ou un utilitaire similaire) sur le terminal, des messages concernant ce qui est en cours d'exécution ainsi que les avertissements et les erreurs s'affichent. Vous pouvez généralement ignorer les avertissements, car ils sont principalement destinés aux développeurs de l'application et leur indiquent qu'il existe certaines pratiques standard enfreintes. Généralement, ces avertissements n’affectent pas la fonction de l’application. D'autre part, les erreurs du compilateur doivent être traitées. Avec Newsbeuter, quand j'ai exécuté make, tout s'est bien passé pendant un moment, mais j'ai eu 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ête dès que la première erreur est rencontrée. La gestion des erreurs du compilateur peut parfois s'avérer délicate. Vous devez regarder 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 portent généralement l’extension .h
ou .hpp
, sont manquants. Dans le cas de l'erreur ci-dessus, il est (ou devrait être!) Clair que le problème est que le stfl.h
fichier d'en-tête est introuvable. Comme le montre cet exemple, vous souhaitez consulter les premières lignes du message d'erreur et rechercher la cause sous-jacente du problème.
Après avoir examiné la documentation de Newsbeuter (ce que j'aurais dû faire avant de commencer, mais cette partie du didacticiel n'aurait pas beaucoup de sens!), J'ai constaté qu'elle nécessite une bibliothèque tierce appelée STFL. Alors, que faisons-nous dans ce cas? Eh bien, nous répétons essentiellement le même processus pour la bibliothèque requise: obtenez la bibliothèque et exécutez le processus configure-build-install correspondant, puis reprenez la construction de l’application souhaitée. Par exemple, dans le cas de STFL, je devais installer le libncursesw5-dev
package pour pouvoir le construire correctement. (Habituellement, il n'est pas nécessaire de refaire l'étape de configuration sur notre application d'origine après avoir installé une autre application requise, mais cela ne fait jamais de mal non plus.)
Une fois la boîte à outils STFL installée avec succès, le processus de création de Newsbeuter s’est déroulé avec succès. Le processus de création est généralement repris là où il se termine (au moment de l'erreur). Ainsi, tous les fichiers ayant déjà été compilés avec succès ne seront pas recompilés. Si vous voulez tout recompiler, vous pouvez exécuter make clean all pour supprimer tous les objets compilés, puis réexécuter make.
L'installation
Une fois le processus de génération terminé, vous êtes prêt à installer l'application. Dans la plupart des cas, pour installer l'application sur les zones communes du système de fichiers (par exemple, /usr/bin
ou /usr/share/bin
, etc.), vous devez exécuter l'installation en tant que root. L'installation est vraiment l'étape la plus simple de tout le processus. Pour installer, dans le terminal, exécutez:
$ make install
Vérifiez la sortie de ce processus pour toutes les erreurs. Si tout a réussi, vous devriez pouvoir exécuter le nom de la commande dans le terminal et le lancer. (Ajoutez & à la fin de la ligne de commande, s'il s'agit d'une application graphique, ou vous ne pourrez pas utiliser la session de terminal tant que l'application ne sera pas lancée.)
Lorsque vous construisez une application à partir des sources, il n’est généralement pas ajouté d’icône ou de raccourci aux menus de l’interface graphique d’Ubuntu. Vous devrez ajouter ceci manuellement.
Et c’est essentiellement le processus, bien que potentiellement itératif, permettant de créer et d’installer une application à partir de la source dans Ubuntu. Après avoir fait cela à quelques reprises, cela deviendra une seconde nature pour vous!