Howtos GNU/Linux .: kozaki :. Howtos GNU/Linux

Construire un RPM sur Linux Mandriva

Compiler et installer une application sont 2 choses *différentes* ; si vous cherchez comment installer un logiciel voyez la page rpmdrake>>> ou urpmi, merci.

Introduction : Pourquoi compiler un Packetage-source (sRPM) ?

  • Créer soit même les rpms à partir des sources, ça évite d'en mettre partout sur son dur (cas du tarball > ./configure && make && make install). Sur une distrib qui gère les packages comme Mandriva avec urpmi, ça permet aussi au système de tj être au courant de ce qui est installé / installable / désinstalable
  • Optimiser l'application pour son système avec les FLAGS spécifiques pour son CPU
  • Cross-compiler càd. compiler sur une machine puissante un src.rpm ou un tarball pour un vieux Pentium sur lequel ça prendrait des heures (ou jours lol).

tuxfamily.org a réalisé un guide très complet pour réaliser ses paquets RPM. Plus récent que cette page, je vous le recommande en priorité !

I - Construire un RPM depuis un RPM source (SRPM)

1.1 : Configuration

1.1.1) Les outils :

On présente ici ceux sous Mandriva.

  • Le package rpm est la version Red Hat patchée pour Mandriva. (version 4.2.2 sur mdk-10.0, comme rpm-build)
  • Le package rpm-build contient les scripts utilisés pour construire (to build) les packages.
  • Le package spec-helper est un outil permettant de minimaliser les specfiles en réalisant automatiquemetn certaines actions, comme "stripping" les binaries & compresser les pages man.
  • Le package libtool es utilisé par certains scripts configure pour construire (to build) les librairies partagées (shared libraries).

1.1.2) Arborescence rpm & fichiers de configuration

Créer l'arborescence nécessaire pour rpm

Pour construire des paquetages, rpm a besoin d'une arborescence spéciale dans le dossier home utilisateur. Cette arborescence peut être créée par la commande suivante :

mkdir -p ~/rpm/{BUILD,RPMS/$ARCH,RPMS/noarch,SOURCES,SRPMS,SPECS,tmp}

Dans cette ligne, remplacer $ARCH par l'architecture (ou les architectures) pour laquelle (lesquelles) seront construits ces paquetages ; c'est en général i586, mais ce peut être aussi sparc/alpha/ppc ou {i386,i586,athlon}.
Vous aurez donc au final quelque-chose comme celà :

rpm/:

BUILD/ RPMS/ SOURCES/ SPECS/ SRPMS/ tmp/
/RPMS:
athlon/ i386/ i486/ i586/ i686/ noarch/

Note : si vous faites tout en root --à vos risques et péris, comme tout ce que "root" touche), les packages sont construits puis créés dans /usr/src/rpm/, où il n'y a plus qu'à les pêcher (Mandriva 2009).

Les fichiers de configuration "standards" sur mandrake 10 :

RPM est configuré par :

  • /usr/share/rpm/rpmrc ou /usr/lib/rpm/rpmrc sur les versions ultérieures de Mandriva) : configuration par défaut pour la distrib > Ne pas les modifier !
  • /etc/rpmrc : configuration pour la machine (absent par défaut ; cf modèle ci-dessous)
  • ~/.rpmrc & ~/.rpmmmacros : configuration personnelle pour éviter les risques, ou pour compiler pour une autre machine (càd une autre architecture CPU).

~/.rpmrc :

buildarchtranslate: i386: i586
buildarchtranslate: i486: i586
buildarchtranslate: i586: i586
buildarchtranslate: i686: i586

~/.rpmmacros

%_topdir $HOME/rpm
%_tmppath $HOME/rpm/tmp

%_signature gpg
%_gpg_name Mandrakelinux
%_gpg_path ~/.gnupg
%distribution Mandrakelinux
%vendor Mandrakesoft

En remplaçant '$HOME' par votre répertoire personnel.

1.2) Optimiser ou pas, là est la question !

1.2.1) Pas la peine...

...de personnaliser son $HOME/.rpmrc avec les optflags pour le CPU sur lequel on veut installer l'appli !
- Utiliser urpmi avec des sources élargies et mises à jour permet d'avoir de meilleures résultats. Après tout c'est le matériel qu'il faut optimiser.. pas les applis.
- On peut construire un RPM à partir d'un tarball (si il n'existe pas encore de version packagée) pour garder un système propre, entièrement gérable avec urpmi --mais sans "optimisation".
Dans ce cas, créer et utiliser les fichiers de configuration standards et suivre la méthode donnée sur le MandrivaRpmHowTo ci-dessous.

Citation : " Optimization is a fools errand, as everyone knows, and has known for decades. One of the mantras of softare development is - do not optimize. Let the hardware do that. You stick to keeping the bugs out. Somebody else can work on putting them in." (avis de Peter sur alt.os.linux.mandrake).

1.2.2) Ca vaut la peine (et caypodur adjugé! )

Si vous disposez d'un processeur AMD Athlon XP, vous pouvez ne laisser que ce qui suit dans votre $HOME/.rpmrc :

buildarchtranslate: i386: athlon
buildarchtranslate: i486: athlon
buildarchtranslate: i586: athlon
buildarchtranslate: i686: athlon
buildarchtranslate: athlon: athlon

1.2.3) Ca vaut la peine (et ça marche pô ok... je sors ! )

- Il faut alors personnaliser son $HOME/.rpmrc avec les optflags pour le CPU visé.
La décision d'optimiser ou non vous appartient : il faut savoir que l'optimisation se fait souvent au détriment de la stabilité... D'où l'intéret de ne modifier que les fichiers de configuration rpm dans $HOME : celà permet de faire quelques tests sans saborder son beau système fraichement installé !
Les liens ci-dessous comportent des exemples d'optimisation. Il en existe peut-etre de plus récents... personnelement je me contente de (re)compiler pour l'architecture "athlon" (Athlon XP).

Sources :
* http://club.mandriva.com/xwiki/bin/view/KB/MandrivaRpmHowTo (lien mis à jour 22/09/05) english
* http://www.obulous.org/index.pl/mandrake_athlon_optimizations english

Pour aller plus loiiîîIIN (çacaypourlé kamikazes )

Tant qu'on y est doit-on recompiler des outils super importants comme binutils, gcc, gettext, glibc, ou les WM (Enlightement...) ? Et le kernel ?

Bah oui, tant qu'à optimiser sa machine pour son matériel, autant commencer par le commencement.

Vous trouverez tous les détails sur ce document : Mandrake à la Gentoo

1.3 : Méthode pas-à-pas

Mettre tel ou tel logiciel à jour en reconstruisant un paquetage binaire :

  1. Télécharger le source rpm (par exemple sur : ftp://ftp.mandrake.redbox.cz/Mandrivalinux/devel/cooker/SRPMS/)
  2. Le "rebuilder" en root :
    rpmbuild --rebuild <non_du_source_rpm>
    Utiliser les FLAGS de compil, ajouter le paramètre --target athlon :
    rpmbuild --rebuild --target athlon <non_du_source_rpm>
  3. Installer le binaire qui se trouve, en principe, dans le répertoire configuré auparavant, du genre $home/src/RPM/RPMS/i586
    Là, 2 possibilités
    a) Soit tu définis dans tes sources urpmi, une source locale que tu mets à jour dès que tu as "rebuildé" : /usr/src/RPM/RPMS/athlon
    b) Soit tu vas dans le rép. et un urpmi * fonctionne tout aussi bien qu'un rpm -U (C'est même mieux si tu as besoin d'une librairie qui n'est pas sur ta machine).
  4. Si le SRPM demande des librairies, fo les installer avant de continuer...

Avantages :
On recompile les sources selon le spec file du source_rpm (les trois phases : configure make make install). Cf man rpmbuild
En plus, les menus sont mis à jours... bref tout ce qui fait que l'on est tranquille.

II - Construire un RPM depuis les sources brutes *.tar.gz

Autrement dit, comment transformer un paquet source *.tar.gz en *.src.rpm ?
Vous avez trouvé un programme interressant sur freshmeat qui vous prévient quand le thé est prêt. Et vous le voulez disponible maintenant pour tous. Téléchargez le et placez l'archive dans le répertoire SOURCES.
Bon, tout s'organise autour du spec file et cela dépend beaucoup de l'arborescence d'une distribution.
Les spec files de Mdk organisent les liens pour les applications ; ils se basent sur le système de menu de Debian pour mettre à jour les menus, etc.

Donc il faut que votre tar.gz contienne un "spec file" qu'il conviendra sans doute de modifier quelque peu.
C'est le moment de te lancer dans l'étude des specfiles pour devenir un contributeur Mandriva.
Ça tombe bien, on est précisemment dans ce cas

Construire un Source RPM depuis les sources brutes

Doc à présent traduit sur club.mandriva.com : "MandrivaRpmHowTo A partir de sources brutes" !
Traduction soigneusement réalisée par des volontaires qui se sont réunis sur une mailing-liste en 2004 (l'union fait la force ;) et plus tard ont reçu l'aprobation de l'équipe Mandriva (Si je me trompe, injuriez-moi sur le forum !)

Compilation avancée

Contenu à venir... Sinon décrit dans les Guides RPMBuilden anglais (menu à droite)

Trop cool pour Internet Explorer