**Génération de paquets Linux**
====== Génération de paquets RPM ======
===== Documentation officielle ======
* http://www.rpm.org/max-rpm/
===== Spec file sections =====
Explication des différents mots-clés utilisables dans un fichier spec. Il est très probable que l'utilisation tel quel de ces exemples ne fonctionne pas. Tous les mots-clés ne sont pas utilisables en même temps. L'objectif de cette partie est de présenter les possibilités. Pour des exemples complets se reporter à la section [[#Complete spec file example|des fichiers spec exemples]].
==== Preambule ====
#
# Example spec file
#
Summary: A CD player
Name: cdplayer
Version: 1.0
Release: 1
License: GPL
Group: Applications/Sound
Source: ftp://....
URL: http://siteofficiel.fr
Distribution: Red Hat Enterprise Linux
Icon: foo.xpm
Vendor: Societe
Packager: nom packager
%description
Le logiciel decrit sur plusieurs lignes sans soucis
pour peu qu'on a des choses a dire
==== Prep section ====
Dans la prep section, on peut utiliser une macro qui décompresse un tar.gz et faire un cd dans les sources.
%prep //first script rpm executes during a build
%setup //macro pour décompresser l'archive tar des sources
==== Build section ====
%build //execute when %prep script left off
make
==== Install section ====
%install //to do whatever is necessary to actually install the newly built software
make install
==== Verify script ====
%check //run test suite of the built software to ensure that the binaries work correctly
make test or make check
==== Clean section ====
%clean //to clean up the software's build directory tree
rm -rf $RPM_BUILD_ROOT
==== Install/uninstall scripts ====
%pre //execute before installation
%post //executed after installation
%preun //executed before the package has been removed
%postun //executed after the package has been removed
==== File list ====
%files //which files on the build system are to be packaged
%doc //flags the filename(s) that follow, as being documentation
%config //flags the specified file as being a configuration file
%attr //permits finer control over three key file attributes (permission, user and group)
%attr(, ) file
%attr(755, root, root) foo.bar
%attr(755, -, root) foo.bar
%defattr //allows setting of default attributes for files and directives
%defattr(, , , )
%ghost //files not add to the package
%verify //ability to verify the integrity of the software it has installed is impressive
%docdir //add directory to the list of directories that will contain documentation
%dir //add the content of that directory but just files, not others sub-directories
===== Complete spec file example =====
Cette section comprend des exemples de fichiers spec fonctionnel à utiliser tel quel.
Fichier spec pour un paquet vide à utiliser pour marquer une installation dans la base RPM (fonctionnel).
Summary: Software for project
Name:
Version:
Release: el5.6
License: GPLv3+
Group: Applications/System
Vendor:
Packager: system team
%description
%files
Fichier spec pour un paquet qui contient une archive qu'on souhaite décompresser et réaliser une action d'installation (fonctionnel).
Summary: Software for project
Name:
Version:
Release: el5.6
License: GPLv3+
Group: Applications/System
BuildRoot: /usr/src/redhat/SOURCES/
Prefix:/V
%description
Description de
%pre
%prep
%build
%install
%post
cd /V/version
/bin/tar xfz V.tgz
touch /V/test
%postun
rm -rf /V
%clean
%files
%defattr(-,root,root)
/V
/V/version
/V/version/V.tgz
Fichier spec présenté dans max-rpm mais non testé par mes soins.
#
# Example spec file
#
Summary: A CD player
Name: cdplayer
Version: 1.0
Release: 1%{?dist}
License: GPL
Group: Applications/Sound
Source: ftp://....
URL: http://siteofficiel.fr
Distribution: Red Hat Enterprise Linux
Icon: foo.xpm
Vendor: Societe
Packager: nom packager
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
Le logiciel decrit sur plusieurs lignes sans soucis
pour peu qu'on a des choses a dire
spec complet qui m' inspiré et a l'air fonctionnel mais à tester.
Name: npm
Version: 2.7.0.100
Release: 1%{?dist}
Summary: The "NPM-MPS System"
Group: Applications/Text
License: GPLv3+
Source0: npm_2.7.0-100.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
this is only to test for mb and mpe
%files
/usr/bin/mb
/usr/bin/mpe
===== rpmrc file =====
Afficher les valeurs retenues dans le contexte dans lequel est exécuté la commande.
rpm --showrc
Ordre hiérarchique de prise en compte des différents fichiers de configuration.
* /usr/lib/rpmrc : file always read, do not edit.
* /etc/rpmrc : is fair game for modifications and additions
* ~/.rpmrc
* In the command line : --rcfile
Changer les valeurs des chemins par défaut.
buildroot //default : none
topdir //the path of the top-level directory tree. The following entries base their default values on the value of topdir.
* sourcedir //default : /SOURCES
* specdir //default : /SPECS
* builddir //default : /BUILD
* rpmdir //default : /RPMS
* srcrpmdir //default : /SRPMS
===== Génération RPM =====
Pour générer des RPM, utiliser un compte utilisateur de base. L'utilisation du compte root est à proscrire. Néanmoins pour cela, l'arborescence de création de paquet (forge) doit disposer du bon propriétaire. Par défaut sous Red Hat, c'est le dossier ''/usr/src/redhat'' qui est apporté par rpm-build qui est utilisé pour générer.
chown -R /usr/src/redhat
Exécuter les instructions %prep, %build, %install, %check et génération du paquet rpm binaire et rpm source.
cd /usr/src/redhat
rpmbuild -ba
Exécuter les instructions %prep, %build, %install, %check et génération uniquement du paquet rpm binaire.
cd /usr/src/redhat
rpmbuild -bb
===== Extraction du contenu d'un paquet rpm =====
Avec un paquet RPM construit, il peut être intéressant d'en extraire le contenu sans l'installer.
Extraire le contenu du paquet php-common. Pour extraire le contenu, les dossiers de destinations doivent être créé en local au préalable.
mkdir extraction
cd extraction
mkdir etc
rpm2cpio php-common-5.3.3-1.el5.remi.x86_64.rpm | cpio --extract
Avec ceci, on obtient que le contenu du dossier etc du paquet, les autres dossiers vont émettre des erreurs. Dans notre cas, on ne souhaite que la configuration, le reste ne nous intéresse pas.
On peut aussi utiliser la commande ''rpm2tgz'' pour convertir le paquet RPM en archive tar.gz et l'exploiter ensuite avec la commande tar. S'il s'agit d'un paquet RPM binaire, on ne pourra pas consulter les opérations effectuées lors de l'installation ou la désinstallation (l'équivalent des scripts d'installation ou de désinstallation dans d'autres systèmes de gestion de paquet) : pour cela, vous devez extraire le fichier SPEC du paquet RPM source et y lire les sections {pre,post}-install et {pre,post}-uninstall.