Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux
On se lasse de tout, sauf de comprendre.
Attribué à Virgile.
13 janvier 2015 : Reprise de cette page, toujours encore en construction.
Pour : linuxien averti.
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.
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.
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.
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é.
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.
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.
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.
Dans une console :
cd ~/Téléchargements
curl -O http://paiiou.free.fr/Tuto/Install/mga5/build
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).
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
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 -
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.
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é.
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)
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.
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.
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.
Pour le moment, le paquetage créé se trouve dans l'espace confiné (que vous venez de quitter).
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.
Si vous n'avez plus besoin de l'environnement confiné, vous pouvez maintenant le supprimer :
./paiiou-chroot.delete -p /home/chroot/mageia-4-i586
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 :
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 :
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 :
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.
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.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.
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.
Avec votre éditeur de texte
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.
Les instructions relatives au patch se font dans le fichier .spec