Share

Faut-il etre expérimenté.e pour participer à un projet open source ?
Réponse rapide : non.

C’est meme l’inverse, c’est en participant à un projet opensource et en rejoignant sa communauté que l’on passe du grade de débutant.e à chevroné.e.
Et pour commencer, rien de mieux que le projet : openSUSE Factory.

Tous les packages présents dans la distribution openSUSE passent par cette fabrique.
La chaine d’intégration continue (CI) teste le code soumis par les équipes de developpement dans plusieurs machines virtuelles pour simuler tous les environements possible : du traditionel x86 au processeur ARM pour l’IOT et le Edge.

Cette chaine peut être suivie en temps réel via un dashboard qui liste les packages qui sont en erreur.

Prenons l’exemple de iftop, un package très utile qui affiche les flux réseaux en mode console à la mainère de top pour les processus.
Ce package est en erreur sous Factory alors qu’il se compile parfaitement dans les versions précédentes de openSUSE.
Pourquoi ? Lançons une investigation.

Les erreurs sont visibles dans les logs de compilation du package iftop :
[ 84s] /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/ld: iftop-tui.o (symbol from plugin): in function `tui_print': [ 84s] (.text+0x0): multiple definition of `service_hash'; iftop-iftop.o (symbol from plugin):(.text+0x0): first defined here

openSUSE est un projet en perpétuel amélioration, à chaque nouvelle version nous élevons les niveaux d’optimisation et de sécurisation du code.
Avec l’introduction de GCC10 par exemple, les codes sources en C où les déclarations de variable globale ne sont pas explicites provoque une erreur.
Plus d’info : https://www.gnu.org/software/gcc/gcc-10/porting_to.html

Si je reprends les quelques lignes d’erreurs affichées ci-dessus, on peut lire : la fonction tui_print, présente dans iftop-tui.o déclare la variable service_hash. Mais cette variable existe déjà dans iftop-iftop.o.
Ce qui est normal car il s’agit de la même variable.

Avec la nouvelle norme GCC10, cette déclaration implicite n’est plus autorisée.
Il est nécéssaire d’utiliser le mot clé extern à la déclaration pour que GCC n’y voit pas une vulnérabilité au niveau mémoire.

Il m’a donc fallu créer un patch pour déclarer les variables avec le mot clé « extern » :

Faire un patch avec git : https://git-scm.com/docs/git-diff
Créer un changelog : https://en.opensuse.org/openSUSE:Creating_a_changes_file_(RPM)#Patches_changes

Retrouvez toutes les commandes pour créer une branche – votre environement de travail dédié, herbergé sur l’open build service de openSUSE – et soummettre votre patch à la communautée.

OpenSUSE Factory : How_to_contribute_to_Factory

Et comme on dit par chez nous : Have a lot of fun…

Share
(Visited 1 times, 1 visits today)
Tags: , , , , , , ,
Category: Chameleon, DevOps, openSUSE, Technical Solutions
This entry was posted mercredi, 15 juillet, 2020 at 4:50
You can follow any responses to this entry via RSS.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

No comments yet