Les formats de paquets RPM (RedHat Package Manager) et deb de debian sont une surcouche à ces précédents formats basiques. Ils rajoutent un ensemble de Métadonnées caractérisant les fichiers qu'ils rassemblent.

Ces deux formats sont les plus répandus, même s'ils en existent d'autres. Leurs fonctionnalités sont très proches, apporter un moyen de gérer les dépendances, les versions, et toutes autres informations relatives au paquet en question, ainsi que de fournir un moyen d'exécuter certaines commandes à l'intallation, la mise à jour ou la désinstallation d'un paquet.

Dans les principale différences, on notera que les paquets deb prennent généralement pour politiques de demander les paramètres de configuration du paquet lors de son installation, alors que les paquets rpm tendent plutôt à apporter une configuration par défaut. Des diff-Aérences notables existent aussi quant à la façon de-b cr-Aéer ces paquets

-b

Toutefois, la gestion de milliers de paquets montre rapidement les limites du système de paquet de base, ainsi des outils comme la suite apt pour deb et urpm pour rpm permettent de gérer au niveau global les installations, mise-à-jour d'un grand nombre de paquets simultanément, en prenant en compte les problèmes de dépendances et conflits éventuels. Smart est aussi un nouvel outils qui permet de g-Aérer un-b ensemble de paquets. De plus Smart est capable de g-Aérer des sources-b deb comme urpmi, ou encore yum, et plusieurs autres.

3.2. Commande de base rpm

Le format générique d'un paquet RPM est généralement :

[Nom]-[Version]-[Release].[Architecture].rpm

Le Nom est le nom du paquet, Version la version de l'auteur du programme, Release la version du distributeur du programme, Architecture la plate-forme pour laquelle le paquet a été compilé. Dans la politique de nommage Mandriva, on remarquera les release commençant par un 0, cela signifie que le paquet est basé sur une version non finale du programme. Concernant les architectures, noarch signifie que le paquet ne contient aucun fichier spécifique à un processeur donné (de la documentation ou des scripts perl par exemple), et src signifie que ce paquet contient les sources du programme.

La commande rpm permet d'interroger un paquet rpm ou la base de données rpm d'un système. Les principales commandes sont :

3.3. Gestion des dépendances

Rapidement l'installation et la mise à jour d'un grand nombre de paquets se révèle un véritable casse-tête pour peu que certaines dépendances créent des conflits ou des des boucles dans les interdépendances. La suite URPM permet de créer une couche d'abstraction supérieure pour la gestion des paquets.

La commande urpmi permet d'installer, désinstaller, mettre à jour un système. Sur les CD Mandriva Linux ou sur les mirroirs FTP, les paquets RPM sont accompagnés de fichiers spéciaux, les hdlist.cz et synthesis.hdlist.cz qui résument les informations principales sur tous les paquets disponibles. Ainsi lors de l'installation d'un paquet avec urpmi, celui-ci est capable de trouver toutes les dépendances nécessaires.

Les principales commandes associées à la suite URPM :

3.4. Création de RPM

Un premier besoin de recompiler un rpm découle d'une dépendance de celui-ci vers une librairie qui a été mise-à-jour ou du besoin de ce RPM pour une plate-forme dont le binaire n'existe pas. Il suffit dans ce cas là de recompiler le RPM contenant les sources du programme.

Il faut installer les dépendances nécessaires à la compilation du programme avec la commande urpmi -s /SRPMS/postfix-2.0.13-3mdk.src.rpm

Ensuite on recompile le paquet avec la commande rpm --rebuild /SRPMS/postfix-2.0.13-3mdk.src.rpm

Si le paquet n'existe pas ou s'il doit être modifié, par exemple pour inclure une version plus récente du programme, ou une configuration différente, il faut modifier le fichier de spécification du RPM. Dans ce cas il faut installer le paquet source du RPM, avec la commande rpm -i /SRPMS/wget-1.8.2-12mdk.src.rpm par exemple.

Il est préférable de compiler les paquets en tant qu'utilisateur et non root, pour ne pas masquer certains problèmes potentiels dus au permissions, et limiter les risques d'endommagement du système. Un fichier .rpmmacros est nécessaire pour définir les paramêtres nécessaires à l'installation des paquets sources en tant qu'utilisateur :


%_topdir                %(echo $HOME)/rpm
%_tmppath               %(echo $HOME)/rpm/tmp/
%distribution           Mandriva Linux
%vendor                 Mandriva
%packager               Warly 

Le paquet source s'installe dans les sous-répertoires de rpm, les fichiers sources dans SOURCES et le fichier de spécifications dans SPECS. Lors de la compilation, les fichiers sont décompressés dans BUILD, puis les paquets générés dans RPMS et SRPMS.

Les principales commandes rpm pour la constructions de RPM :

Il existe un mode emacs ou xemacs (rpm-spec-mode) très pratique pour l'édition de fichier SPECS et la création de paquets.

3.5. Fichier SPEC

Un fichiers SPEC est un ensemble de définitions et de commandes qui définissent le paquet et sa configuration. Un panel de commandes prédéfinies est fourni par les macros RPM. Elles sont appelées avec le préfixe '%'.


Summary:        A utility for retrieving files using the HTTP or FTP protocols.
Name:           wget
Version:        1.8.2
Release:        12mdk
Group:          Networking/WWW
License:        GPL
URL:            http://www.gnu.org/directory/GNU/wget.html

Information de base sur le RPM, nom, version, licence...


Source0:        ftp://prep.ai.mit.edu/pub/gnu/%{name}-%{version}.tar.bz2
Source2:        wget-1.6-zh_CN.GB2312.po

Patch0:         wget-1.6-passive_ftp.patch.bz2
[...]
Patch11:        wget-1.8.2-fix-fr-translation.patch.bz2

Ensemble des archives utilisées pour fabriquer les RPMs.


Provides:       webclient webfetch
BuildRequires:  gettext
BuildRequires:  openssl-devel
BuildRequires:  texinfo
BuildRoot:      %_tmppath/%name-%version-%release-root
Prereq:         /sbin/install-info

Gestion des dépendances, ce qu'apporte le RPM, ce dont il a besoin pour être construit, et éventuellement ce dont il a besoin pour être installé (Prereq). rpm calcule par lui-même beaucoup de dépendances automatiquement, en faisant des ldd sur les binaires, et en cherchant les modules utilisés dans des scripts perl par exemple.


%description
GNU Wget is a file retrieval utility which can use either the HTTP or FTP...

Description du paquet.


%prep

%setup -q
%patch0 -p1 -b .passive_ftp

[...]

%patch11 -p0 -b .frtypo

Premières étapes de préparation, décompression des sources et application des patch.


%build

autoconf
%configure
%make
make check

%install
rm -rf $RPM_BUILD_ROOT
%makeinstall

[...]

%find_lang %name

Compilation et installation des fichiers dans un répertoire temporaire. Les macro %make, %configure, %makeinstall correspondent à des appels standards aux commandes de compilation et d'installation.


%clean
rm -fr %buildroot

%post
%_install_info %{name}.info

%preun
%_remove_install_info %{name}.info

Actions à faire suite à l'installation (%post), ou la désinstallation (%preun). Existe aussi les sections %pre (avant l'installation) et %postun (après la désintallation).


%files -f %name.lang
%defattr(-,root,root,-)
%verify(not md5 size mtime) %config(noreplace) %_sysconfdir/wgetrc
%doc AUTHORS COPYING ChangeLog MACHINES MAILING-LIST NEWS README TODO
%_bindir/*
%_infodir/*
%_mandir/man1/wget.1*

Définition des fichiers qui seront dans le paquet.


%changelog
* Sat Sep 06 2003 Thierry Vignaud  1.8.2-12mdk
- fix wrong french translation (#4915)

[...]

* Fri Nov 14 1997 Cristian Gafton 
- first build against glibc

Historique des modifications du paquet.

3.6. Recompilation d'une distribution

L'étude du fichier SPEC montre l'existence de plusieurs niveaux de dépendances. Les dépendances nécessaires pour compiler un paquet, pour l'installer et pour l'utiliser. L'ensemble de ces dépendances associées à tous les paquets de la distributions, sources et binaires, constitue un graphe qui sert de base pour calculer les chemins optimums de recompilation de la distribution.

Généralement, une approche consiste à compiler la nouvelle version d'un logiciel avec un système existant, puis de recompiler séquentiellement tous les programmes jusqu'à avoir un certain degrè de certitude sur la complétude de l'ensemble. Ceci reste théorique puisque le système de départ influe le système d'arrivée, et un paquet ne contient pas toujours les différentes versions des outils utilisés pour sa création.

L'existence de cycles rend cette tâche assez complexe, et induisent la nécessité de plusieurs recompilations du même paquet pour arriver à un état stable ou deux compilations succéssives produisent deux paquets identiques.

Liens

À propos de l'auteur :
http://people.mandriva.com/~warly
http://perso.wanadoo.fr/warly/

Sites de Mandriva Linux
Mandriva Linux
Mandriva/

Sites de la communauté Mandriva Linux
Bugzilla
Wiki


Last modified: Mon Oct 10 19:38:52 CEST 2005