Grâce à l’effort des développeurs et mainteneurs de nos distributions, il est très rare que le besoin de compiler un logiciel se fasse sentir. C’est une tâche qui parait très compliquée, et pourtant cela se résume souvent à lancer quelques commandes en suivant une notice. Je vous propose donc un exemple avec le logiciel Geany qui se prête bien à l’exercice: ses dépendances peu nombreuses sont toutes présentes dans les dépôts de ma distribution (c’est la condition pour que la compilation ne se transforme effectivement pas en chasse au trésor).
Geany est un environnement de développement intégré. Je l’aime beaucoup, car il est très léger, loin des usines à gaz telles que [mettez ici le nom d’un logiciel écrit en Java ou Electron], au point qu’il peut remplacer un éditeur de texte en usage courant.
Il est disponible dans les dépôts de toutes les bonnes distributions, mais souvent en version un peu âgée. C’est le cas sous Linux Mint que j’utilise, certes il y a une version récente en Flatpak du logiciel, c’est installable en 2 clics et 3Gio depuis la logithèque mais ça ne me convient pas pour diverses raisons.
Pourquoi compiler son logiciel alors? L’avantage premier est d’avoir la toute dernière version du logiciel, voire d’utiliser une version de développement. On a ainsi accès aux dernières fonctionnalités, et on peut aider à rendre le logiciel meilleur en rédigeant des rapports de bugs, voire en corrigeant les bugs soi-même. Je rencontre justement quelques bugs gênants concernant la coloration syntaxique, alors c’est l’occasion de régler ça.
Sur le site officiel du projet ils proposent de télécharger les sources pour compiler soi-même le logiciel, et sur le dépôt Github il est expliqué comment procéder. C’est facile, allons-y!
On télécharge puis on extrait le fichier geany-1.37.1.tar.gz
qui correspond à la dernière version stable. On ouvre un terminal dans le dossier contenant les sources, et on tape:
./configure
Le script vérifie que nous avons tout le nécessaire pour compiler le logiciel. Il me dit:
No package 'gtk+-3.0' found
No package 'glib-2.0' found
No package 'gio-2.0' found
No package 'gmodule-no-export-2.0' found
Dans votre cas il risque également de réclamer un compilateur et d’autres outils de développement (gcc, make), qui devraient pouvoir s’installer avec le paquet build-essentials
.
Pour ma part, j’installe donc le paquet libgtk-3-dev
qui correspond à la première ligne du précédent rapport. dev
signifie que ce sont les fichiers nécessaires pour du développement, c’est ce qu’il nous faut.
Puis je relance le script:
sudo apt install libgtk-3-dev
./configure
Ce qui donne:
configure: error: The intltool scripts were not found. Please install intltool.
Le script ne réclame plus les trois autres packages, car ils ont été installés en même temps que libgtk3
, mais faut maintenant installer intltool
. J’en profite pour installer également checkinstall
.
sudo apt install intltool checkinstall
On relance le script, qui nous dit:
Configuration is done OK.
On peut passer à la suite, la compilation! Il suffit de taper « make » dans le terminal et de laisser faire pendant quelques minutes.
Une fois le logiciel compilé, il faut l’installer. La documentation nous dit de faire un sudo make install
pour cela, ce qui va copier les fichiers compilés un peu partout dans le système. Ça marche mais ça complique la désinstallation du logiciel, c’est pourquoi nous allons créer un paquet deb à l’aide de checkinstall
. On utilisera donc cette commande:
sudo checkinstall
Quand c’est fait, on désinstalle complètement l’ancienne version de Geany puis on installe la nouvelle:
sudo apt autoremove geany
sudo dpkg -i geany_1.37.1-1_amd64.deb
Le logiciel est installé, on peut le lancer depuis le menu, ou depuis le terminal en tapant son petit nom:
geany
geany: error while loading shared libraries: libgeany.so.0: cannot open shared object file: No such file or directory
Ouch! Il ne trouve pas le fichier libgeany.so.0 qui est pourtant bien installé dans /usr/local/lib. On va alors créer un lien symbolique dans le dossier /usr/lib pour qu’il le trouve.
sudo ln -s /usr/local/lib/libgeany.so.0 /usr/lib
Voilà, ça marche, je peux retourner travailler!
# Plutôt construire un paquet
Posté par niol (site web personnel) . Évalué à 10.
Si tu utilises Debian ou une de ses dérivées, je te conseille de plutôt faire un paquet avec à peu près les étapes suivantes (il doit probablement y avoir encore plus simple) :
Pour aller plus loin, tu peux regarder par exemple
sbuild
pour éviter d'avoir à installer les dépendances de construction etreprepro
pour distribuer les paquets construits à plusieurs machines.[^] # Re: Plutôt construire un paquet
Posté par Nibel . Évalué à 6. Dernière modification le 19 août 2021 à 15:55.
Même remarque pour Arch.
Il est préférable de faire un paquet, il suffit d'un fichier PKGBUILD dans lequel on écrit nos quelques instructions et ça roule tout seul.
Avantage : le gestionnaire de paquets de la distro le gère et l'a dans sa base de données. Il peut se désinstaller comme n'importe quel autre paquet. Beaucoup plus agréable pour la maintenance.
Ca fait des années que je n'ai plus fait une compilation à la mano, le PKGBUILD est aussi simple à écrire qu'il est puissant.
La majeure partie des morts l'était déjà de son vivant et le jour venu, ils n'ont pas senti la différence.
[^] # Re: Plutôt construire un paquet
Posté par marzoul . Évalué à 4.
J'ajoute quelques précisions pour Archlinux,
pour ceux qui ne sont pas encore allés regarder comment les choses sont faites ;-)
Le lien du package construit à partir des sources est le suivant :
https://aur.archlinux.org/packages/geany-git/
Le fichier PKGBUILD correspondant est consultable directement depuis la page, ou bien avec le lien suivant :
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=geany-git
Pour le package officiel correspondant à des versions stables, le lien est le suivant :
https://archlinux.org/packages/community/x86_64/geany/
Le fichier PKGBUILD correspondant est consultable directement depuis la page, ou bien avec le lien suivant :
https://github.com/archlinux/svntogit-community/blob/packages/geany/trunk/PKGBUILD
Bonne soirée !
[^] # Re: Plutôt construire un paquet
Posté par Nibel . Évalué à 3.
Pour geany spécifiquement, avec une interface de pacman avec le support d'AUR type yay :
yay -S geany
La majeure partie des morts l'était déjà de son vivant et le jour venu, ils n'ont pas senti la différence.
# Dépendances…
Posté par Pinaraf . Évalué à 10.
Plutôt que d'essayer jusqu'à ce que ça marche (et rater d'éventuelles dépendances optionnelles), mieux vaut commencer par un
apt build-dep geany
# Sous Slackware on aime bien compiler.
Posté par Yth (Mastodon) . Évalué à 6.
La même chose sous Slackware est assez simple.
Il faut aller chercher le geany.SlackBuild sur slackbuilds.org.
On vérifie avec le geany.info : il n'y a aucune dépendance, le système de base suffit.
Mettre les sources à côté.
Et hop : ./geany.Slackbuild
Bon, c'est en version 1.36.0…
Alors tu prends bien les sources de la 1.37.1, et tu fais :
VERSION=1.37.1 ./geany.Slackbuild
Ah, voilà, le paquet pour la bonne version !
Plus qu'à installer le paquet : upgradepkg --install-new /tmp/geany-1.37.1-x86_64-1yth.txz
Et tout ça s'automatise avec des outils comme les sbotools.
Mais derrière tu as juste un fichier .SlackBuild, à la structure très standard (par rapport à l'ensemble des SlackBuilds), maintenu à jour en général très efficacement (bon, en ce moment avec l'approche de la 15.0, c'est un poil plus compliqué que ça).
Et tu adaptes exactement comme tu veux !
Ça s'applique aussi aux paquets du système de base, tout y est fait avec des SlackBuilds et on peut très facilement en reprendre un et modifier pour ses propres besoins. Mais bon, ça m'est très peu souvent arrivé de chercher à modifier un paquet de base.
Et en fait, ça pourrait probablement s'adapter à un peu n'importe quelle distribution, il suffirait de créer un script /sbin/makepkg qui appelle le générateur de paquet local avec les bons paramètres.
# Précisions
Posté par Funix (site web personnel, Mastodon) . Évalué à 8.
Il est souvent intéressant de faire un configure --help pour prendre connaissance de toutes les options possibles, car par défaut certaines ne sont pas activées. Avec une compilation basée sur cmake l'équivalent est cmake -LH
Pour le problème de biblio non trouvée, il faut vérifier que /usr/local/lib est bien dans le fichier /etc/ld.so.conf (puis taper ldconfig pour prendre en compte le nouveau chemin).
https://www.funix.org mettez un manchot dans votre PC
[^] # Re: Précisions
Posté par Pinaraf . Évalué à 4.
Je préfère ccmake pour ça, l'interface curses est plus sympa.
# distro à jour
Posté par BAud (site web personnel) . Évalué à 3.
Dand Mageia 8, c'est bien la 1.37.1 de geany qui est disponible :
https://madb.mageia.org/package/show/name/geany
surtout quand tu utilises une distro à jour :-)
Bon, côté Mageia on triche un peu : lorsqu'il y a peu de dépendances, c'est plutôt la dernière version qui est empaquetée et fournie, plutôt que de s'embêter à rétro-porter des correctifs.
ça c'est un peu un faux argument : de quelles fonctionnalités as-tu besoin dans la toute dernière version serait un peu plus justifié (réponse : bin si la version disponible fonctionne bien même si « ancienne », il vaut mieux trouver la fonction qui manque pour ne pas l'utiliser)
Ce n'est pas donné à tout le monde (même si ce n'est souvent pas si difficile…)
C'est une très bonne raison, tout à ton honneur, mais pas forcément à recommander à tout le monde :-)
Bon, comme toi, je ne suis pas le meilleur exemple, vu que je suis souvent en Cauldron (la version de développement de Mageia) tout comme auparavant j'étais en Cooker. Bon, ce qui m'embête, c'est que j'ai peu de bugs à remonter, à croire que c'est comme en Debian Sid :p
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.