EEIJ

Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux


Sommaire


Conforme à XHTML 1.0 Strict Conforme à CSS!

On se lasse de tout, sauf de comprendre.
Attribué à Virgile.

Modification ou création de paquetages rpm

Historique

13 janvier 2015 : Reprise de cette page, toujours encore en construction.

Difficulté

Pour : linuxien averti.

 Introduction

Comme moi, vous pouvez être amenés à modifier un paquetage rpm ou à en créer un nouveau.
Cette page ne décrira de loin pas tous les cas de figure. Puisse-t-elle simplement vous guider.

Il existe différentes solutions pour avoir un environnement permettant de créer des paquetages personnels.
La solution ici retenue consiste à utiliser chroot (ou système confiné).
En pratique, cela consiste à créer un autre système d'exploitation dans un répertoire complètement isolé du reste.
Il permet ainsi de créer un environnement qui fonctionne avec des règles différentes, mais avec le même matériel.
On peut ainsi faire tourner une debian au sein de mageia, ou encore un linux 32 bits au sein de linux 64 bits.

Cela permet notamment de créer des paquetages i586 et x86_64 sur une Mageia x86_64.

Haut

 Les contraintes

Haut

 Les outils

paiiou-chroot.install

Il crée un système Mageia minimal confiné.
Le script doit être lancé dans une console root et il faut lui indiquer l'emplacement d'un miroir.
Il faut également un fichier nommé pseudo avec le pseudo du packageur et un fichier de configuration .rpmmacros.
Par défaut le système est créé dans le répertoire /home/chroot.

paiiou-chroot.tarball

Il crée une archive réutilisable du système Mageia minimal confiné créé avec paiiou-chroot.install.
Le script doit être lancé dans une console root et il faut lui indiquer l'emplacement du système confiné.
Par défaut l'archive est placée dans le même répertoire que ce script.

paiiou-chroot.delete

Il efface proprement système Mageia minimal confiné créé avec paiiou-chroot.install (après avoir supprimé les montages).
Le script doit être lancé dans une console root et il faut lui indiquer l'emplacement du système confiné.

paiiou-chroot.extract

Il extraie, dans le répertoire de destination, le système Mageia à partir de l'archive qui a été créée.
Le script doit être lancé dans une console root et il faut lui indiquer l'emplacement et le nom de l'archive.
Par défaut le système est créé dans le répertoire /home/chroot.

paiiou-chroot.goto

Il permet à l'utilisateur spécifié dans le fichier pseudo d'accéder à l'environnement confiné.
Le script doit être lancé dans une console root et il faut lui indiquer l'emplacement du système confiné.
L'utilisateur accède ensuite à son espace personnel avec la commande su - son_pseudo.

build

Ce script prépare votre ordinateur.
Il télécharge les scripts précédents, vous demande le nom de l'utilisateur qui va créer les paquetages, créée le fichier de configuration, crée le fichier pseudo correspondant à l'utilisateur.

Haut

 Installation des outils

Télécharger 'build'

Dans une console :
cd ~/Téléchargements
curl -O http://paiiou.free.fr/Tuto/Install/mga5/build

Exécuter le script

Le script doit être exécuté dans une console, avec les droits de root :
su le mot de passe root est demandé
sh ./build

Un répertoire 'buildscripts' est créé dans votre 'home', les autres scripts y sont téléchargés, le fichier de configuration de rpmbuild y est créé (pour cela, vous devez préciser votre nom ou pseudo).

Haut

 Utilisation des outils

Tous ces outils s'utilisent dans une console root :

La première chose à faire est de créer le système confiné correspondant à la version et à l'architecture du paquetage à créer. Vous pouvez, bien sûr, créer les autres environnements dont vous aurez besoin.
C'est paiiou-chroot.install qui permet de créer (voir ci-dessus)

Vous pouvez ensuite, si vous voulez, créer une archive à partir de ce système confiné, avec paiiou-chroot.tarball.

Pour effacer un environnement qui ne sert plus, parce que trop de dépendances y ont été ajoutées, c'est évidemment paiiou-chroot.delete.

Pour recréer un environnement confiné propre, vous pouvez extraire d'une archive, avec paiiou-chroot.extract.

Enfin, pour créer ou modifier des paquetages, il faut accéder à cet environnement confiné.
C'est avec paiiou-chroot.goto

Haut

 Dans le système confiné

Entrez dans le système confiné :

Vous êtes maintenant dans le système confiné correspondant à cauldron 32 bits, même si votre ordinateur a une architecture 64 bits. Mais vous y êtes en tant que root, ce qui est déconseillé pour construire des paquetages.
Vous allez devenir simple utilisateur avec la commande su - votre_pseudo_de_constructeur (il vous sera rappelé).
Notez bien : su -

 Créer un paquetage Mageia4 à partir de Mageia5

Pour continuer, prenons un exemple concrêt : reconstruire un paquetage binaire à partir de son paquetage source.
Vous avez trouvé une application dans cauldron et vous voulez créer son paquetage pour Mageia4.
Attention ! ceci n'est pas toujours possible. Le paquetage souhaité peut avoir des dépendances incompatibles avec Mageia4.

Prérequis

Si vous voulez créer un paquetage mageia4 i586, il faut bien sûr avoir créé l'environnement confiné mageia4 i586. Vous y accédez comme indiqué ci-dessus et vous vous y connectez avec le login qui vous est indiqué.

Téléchargement

Il faut télécharger le fichier source dans votre répertoire rpm/SRPMS

Vous pouvez utiliser curl ou aria :
cd ~/rpmbuild/SRPMS
aria2c ftp://ftp.belnet.be/pub/mageia/distrib/cauldron/SRPMS/core/release/gzip-1.6-7.mga5.src.rpm
dont vous adapterez le chemin et le nom du fichier. Il faut bien sûr, connaître l'emplacement et le nom exacts du fichier.

Il est plus pratique d'utiliser mc, en tant que client ftp :
cd ~/rpmbuild/SRPMS
mc Votre outil est ouvert, avec ses deux panneaux. (Pour changer de panneau, il suffit d'actionner la touche Tab ou de cliquer avec la souris)

didtrib-coffee, la base

Pour accéder au miroir de distrib-coffe par exemple :
cd ftp://distrib-coffee.ipsl.jussieu.fr et valider avec la touche Entrée.
Pour naviguer dans les répertoires : un clic simple pour sélectionner un répertoire ou fichier, un double-clic pour accéder à un répertoire. Parcourez successivement les répertoires pub linux Mageia distrib cauldron SRPMS core release.

distrib-coffee, le répertoire

Voici le répertoire release. C'est là que se trouve le fichier à télécharger. Dans le panneau droit, vous avez le répertoire local SRPMS, encore vide.

Avec les touches 'flèche haut', 'flèche bas', 'page haut', 'page bas', sélectionnez le fichier à télécharger. La touche F5 démarre le téléchargement.

Actionnez la touche Tab pour aller dans le panneau de droite, puis F10 pour quitter mc. Vous vous trouvez dans votre répertoire SRPMS.

L'intérêt de mc est que vous n'avez besoin de connaître ni l'emplacement exact, ni le nom exact du fichier.

Construction du paquetage i586

Il faut d'abord installer les dépendances de construction.
Dans votre console :
sudo urpmi --buildrequires gzip-1.6-7.mga5.src.rpm
Deux paquetages sont installés. Tout s'est bien passé ici. Les dependances existent et sont compatibles.

La construction peut maintenant se faire :
rpmbuild --rebuild gzip-1.6-7.mga5.src.rpm
Le paquetage est construit. Puisque nous nous trouvons dans une Mageia4 i586, le paquetage a l'extension 4.i586

Si vous avez terminé, vous pouvez quitter le système confiné :
exit pour quitter votre compte et encore une fois exit pour vous vous retrouvez dans votre console root et votre répertoire buildscripts.

Sauvegarde du paquetage i586

Pour le moment, le paquetage créé se trouve dans l'espace confiné (que vous venez de quitter).

paquetage terminé

Depuis votre répertoire buildscripts, vous pouvez très bien accéder à l'emplacement du paquetage.
Je propose de réutiliser mc :
Dans un panneau vous allez dans le répertoire de l'environnement confiné (par défaut : /home/chroot), là où se trouve le paquetage. Dans l'autre panneau vous allez dans le répertoire de destination.

Suppression du confinement

Si vous n'avez plus besoin de l'environnement confiné, vous pouvez maintenant le supprimer :
./paiiou-chroot.delete -p /home/chroot/mageia-4-i586

Haut

 Modifier un paquetage

Vous avez besoin de modifier un paquetage, par exemple pour ajouter, supprimer ou modifier une option de compilation. Ou pour toute autre raison.

Vous allez :

  1. accéder au système confiné avec paiiou-chroot.goto et su -. Voir plus haut.
  2. télécharger le paquetage source dans le répertoire ~/rpmbuild/SRPMS puis quittez mc. Voir ci-dessus.
  3. installer le paquetage : rpm -ivh le_paquetage_source
    Ne tenez pas compte de messages du genre "attention: groupe iurt inexistant"


En travaux Travaux




Les sources se trouvent maintenant dans le répertoire rpmbuild/SOURCES. Il y a habituellement un fichier archive et éventuellement des patchs.

Le répertoire rpmbuild/SPECS contient un fichier .spec qui définit notamment la procédure de construction du paquetage.
Ce fichier étant très complet, il sera étudié séparément :
Le fichier .spec :
Cliquez

Modification du paquetage source

Vous pouvez maintenant modifier les fichiers "source" se trouvant dans le répertoire rpm/SOURCES ainsi que le fichier .spec se trouvant dans rpm/SPECS.

Modifiez un paquetage .src.rpm, cela consiste normalement à ajouter, modifier ou supprimer des patches. Cela peut également être l'actualisation de la version des logiciels. En général vous ne modifiez pas les fichiers directement dans ce répertoire.

Vous devrez donc :

Reconstruction

Il ne reste plus qu'à reconstruire les paquetages source et binaires avec la commande :
rpmbuild -ba SPECS/fichier.spec fichier.spec étant bien entendu remplacé par le nom correspondant au paquetage à reconstruire.

Pour les curieux, survolez : les options de rpmbuild

La commande rpmbuild fichier.spec construit le paquetage. Elle possède plusieurs options, dont les plus importantes :

rpmbuild -bp : fait une construction partielle avec l'étape %prep.
Elle permet de décompresser et désarchiver les fichiers dans le répertoire BUILD
rpmbuild -bc : fait une construction partielle avec les étapes %prep et %build.
rpmbuild -bi : fait une construction partielle avec les étapes %prep, %build, %install et %check.
rpmbuild -bb : construit le paquetage binaire
rpmbuild -ba : construit les paquetages binaire et source

Haut

Créer un patch Travaux

En général, les correctifs ne se font pas en modifiant le fichier d'origine, mais en lui appliquant un patch lors de la construction du paquetage.
Un patch, est un fichier qui donne les différences entre deux autres fichiers, le modifié par rapport à l'original.

Le fichier original

Lors de la construction du rpm, les patches sont appliqués pendant la phase de préparation, normalement à partir du répertoire BUILD/%{name}-%{version} (Voir le paragraphe Le fichier .spec, ci-dessous.

Pour créer un patch, il faut d'abord trouver l'original. Je pense qu'une bonne solution est de l'amener dans ce répertoire ou dans l'un de ses sous-répertoires.

Ceci se fait facilement en lançant une construction partielle, avec la commande :
rpmbuild -bp SPECS/NomDuFichier.spec
Le fichier à modifier se trouve alors dans le répertoire BUILD/%{name}-%{version} ou un de ses sous-répertoires.

Dans de très rares cas, le fichier à modifier reste dans le répertoire SOURCES. Il ne faut pas modifier un fichier du répertoire SOURCES. Il faut donc que le processus de construction fasse une copie du fichier original, placée dans le répertoire BUILD/%{name}-%{version}. Une instruction cp %{_sourcedir}/Fichier original . sera placée dans la section %prep du fichier spec.
Refaites ensuite une construction partielle, comme ci-dessus, pour avoir la copie du fichier dans le répertoire BUILD.

Les modifications

Avec votre éditeur de texte

Le patch

Dans le répertoire BUILD/%{name}-%{version}, appliquez la commande :
diff -u CheminÉventuel/NomDuFichierOrigine NomDuFichier.mod > NomDuPatch.patch
Le nom du patch sera de la forme : nomDuPaquetage-version-mga-description.patch

Copiez ensuite ce patch dans le répertoire rpm/SOURCES.

Appliquer le patch

Les instructions relatives au patch se font dans le fichier .spec

Haut

Travaux Travaux