Pour personnaliser des logiciels et bénéficier de modules non présents dans les paquets officiels, il peut être nécessaire de compiler le logiciel depuis les sources.
Parfois, il s’agit simplement d’installer un logiciel qui n’est pas présent dans les dépôts.
La compilation depuis les sources peut parfois être complexe, car il faut connaître l’environnement du langage de programme.
Toutefois, grâce à ce tutoriel, vous trouverez les prérequis, les outils nécessaires ainsi que les commandes à passer pour compiler un logiciel sur Linux.
Table des matières
Comment compiler un logiciel depuis des sources sur Linux
Pour comprendre l’intérêt de compiler des paquets et logiciels, lire :
Préparer son système à la compilation
Pour obtenir votre système prêt à compiler des packages, il faut installer les utilitaires nécessaires à la compilation de sources comme gcc, make, g++, …
En général, on les trouve sous forme de paquets disponibles depuis les dépôts.
build-essential (Debian, Ubuntu, Mint)
Sur Debian, pour avoir les outils nécessaires à la compilation, il faut installer le paquet build-essential.
sudo apt install build-essential
kernel-devel (CentOS, Red Hat)
Du côté de Redhat, on installe les paquets nécessaires avec yum comme ceci :
sudo yum install gcc gcc-c++ kernel-devel make
base-devel (Arch)
Enfin sur la distribution Arch, il faut installer base-devel :
sudo pacman -S --needed base-devel
Obtenir le code source d’un logiciel
Le code source est donc les fichiers avec le langage informatique.
Pour les programmes Linux, en général, il s’agit de programme C, on trouve donc des fichiers avec l’extension .h et .c
Depuis le référentiel de votre distribution Linux
Tous les systèmes de paquets de chaque distribution Linux permettent de télécharger les sources des paquets disponibles depuis les dépôts.
Par exemple avec APT sur les distribuions à base Debian :
apt-get source packagename
Du côté des distributions Redhat avec yum, on utilise yumdownloader :
sudo yum install yum-utils
yumdownloader --source packagename
Enfin avec la distribution Arch Linux :
sudo pacman -S abs
sudo abs # this installs the ABS tree
sudo abs <packagename>
Depuis Github avec git
Github est in référentiel GitHub peut être utilisé pour stocker un projet de développement.
On peut donc y télécharger les codes sources d’un projet pour ensuite le compiler.
Pour vous y aider, les distributions Linux embarque l’outil git.
Cette commande télécharge tout le code source du référentiel GitHub et le stockera dans un répertoire avec le nom du projet.
git clone https://github.com/path-to-the-repo
En les téléchargements depuis le site officiel
La dernière méthode consiste à se rendre sur le site officiel du projet et chercher la partie download.
On arrive souvent à un lien vers une page avec les sources par version au format des tar.gz.
Vous pouvez alors utiliser wget ou curl pour récupérer les sources via un terminal.
Configurer le script
Le code source que vous avez téléchargé dans les étapes précédentes est toujours livré avec un script de configuration. Ce dernier vérifie votre système afin de s’assurer que tous les packages, librairies et outils essentiels nécessaires sont présents pour compiler avec succès et créer le makefile.
Afin d’exécuter le script de configuration, entrez dans le répertoire où votre code source est situé et exécuté:
./configure
Si le script de configuration retourne une erreur, c’est qu’en général il manque un package.
Bien souvent, il s’agit d’une librairies de développement (libxxx-dev).
Enfin le script de configuration accueille des paramètres que l’on nomme drapeaux (flags).
Cela permet de modifier les emplacements d’installation ou fichier de configuration.
./configure --conf-path=/chemin/fichier/conf/nginx.conf
Mais aussi d’activer des modules spécifiques.
C’est là tout l’intérêt de la compilation car vous pouvez activer des modules qui ne sont pas disponibles par les paquets de votre distribution de Linux.
Par exemple pour compiler php-fpm. avec le drapeaux –prefix pour indiquer l’emplacement d’installation et –enable pour activer les modules PHP.
./configure --prefix=/opt/php-8.0.2 --enable-mbstring --with-curl --with-zlib --enable-gd --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --with-mhash --with-zip --with-pdo-mysql --with-mysqli --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-jpeg=/usr --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --enable-opcache --enable-fpm --without-sqlite3
Voici un autre exemple avec les options de la compilation de nginx :
Le script effectue les vérifications et si tout est correct, on peut avoir un récapitulatif pour passer à l’étape suivant.
Compiler avec Make
Si votre commande de ./configure a été réussie, cela signifie qu’il a créé un fichier spécial appelé Makefile.
C’est le fichier qui définit l’ensemble des tâches à exécuter lors de la compilation et définit par le script de configuration.
On y trouve donc en en-tête des variables avec les flags et les dépendances.
Puis les commandes de compilation des binaires et les modules spécificités.
Pour lancer la compilation, utilisez la commande :
make
A nouveau des vérifications sont effectuées en début de compilation.
Puis les commandes gcc se déroulent pour compiler et créer les binaires.
La compilation peut prendre plusieurs minutes selon la taille du programme à compiler et la vitesse du PC.
Installer le logiciel compilé dans le système
Si tout s’est bien passé, le colis est prêt à être installé. Afin de réaliser cela, vous aurez besoin d’une troisième et dernière commande.
Elle doit être exécuté avec sudo ou en root car en général, cela nécessite d’écrire dans des dossiers du système.
sudo make install
Votre logiciel est installé et vous pouvez l’appelé à partir du binaire se trouvant en général dans /usr/local/bin ou /usr/share/bin.