% $Id$ \documentclass[blends,slideColor,colorBG,pdf,ps2pdf]{prosper} \usepackage[frenchb]{babel} \usepackage[T1]{fontenc} %\usepackage{multicol} \usepackage{moreverb} \title{RPM et politique de packaging} \subtitle{Adapter un rpm à sa distribution} \author{Olivier Thauvin} \email{olivier.thauvin@aerov.jussieu.fr} %%\institution{ %% \includegraphics*[height=0.3\textheight]{gnutux.eps} %%} \NoFrenchBabelItemize \begin{document} \maketitle \part{Introduction} \begin{slide}{Plan} \end{slide} \part{RPM rappel} \overlays{2}{ \begin{slide}{RPM: Rpm Package Manager} Qu'est ce ? \begin{itemize} \item un ensemble d'outils \item un format d'archive (.rpm) \item des fichiers au format rpm \end{itemize} \bigskip \FromSlide{2} Rôle: \begin{itemize} \item installer \item inventorier \item controler %\item faciliter l'installation des logiciels %\item suivi des version (evr) %\item assurer que l'environnement est compatible avec le logiciel %\item assurer l'intégrité du système \end{itemize} \end{slide} } \begin{slide}{le paquet} Un fichier .rpm contenant: \begin{itemize} \item{entête} les informations sur le rpm \begin{itemize} \item des informations pratiques sur le logiciel (nom, version, url, \ldots) \item sur la fabrication du rpm \item une liste de dépendances \item la liste des fichiers contenus \item l'historique du paquet (changelog) \end{itemize} \item une archive contenant les fichiers \end{itemize} \end{slide} \begin{slide}{faire un rpm} \begin{center} \includegraphics*[height=1\textheight]{rpm-building} \end{center} \end{slide} \begin{slide}{le fichier spec} Il décrit: \begin{itemize} \item le (ou les) rpm(s) produit(s) \item le moyen de compiler le logiciel \end{itemize} \bigskip Il est composé de sections: \begin{itemize} \item En-tête, \%description \item \%package \item \%prep, \%build, \%install, \%check \item \%files \item \%verify, \%pre, \%preun, \%post, \%postun, \%posttrans, \ldots \item \%changelog \end{itemize} \end{slide} \begin{slide}{specfile: exemple} \begin{small} \verbatiminput{simple.spec} \bigskip \begin{verbatim} $ rpm -ba simple.spec Ecrit: /home/users/olivier/RPM/SRPMS/simple-1-1.src.rpm \o/ \end{verbatim} \end{small} \end{slide} \begin{slide}{les macros} Variable propres à rpm. Origine: \begin{tabular}{|l|l|} \hline localisation&fournisseur\\ \hline \hline fichiers macros systèmes&rpm\\ \hline fichiers macros systèmes&distribution\\ \hline \verb+~/.rpmmacros+&utilisateur\\ \hline fichier spec&packager\\ \hline \end{tabular} \bigskip Elles fournissent des valeurs ou des fonctions. \end{slide} \part{Politique: généralité} \overlays{2}{ \begin{slide}{Pourquoi définir une politique} \begin{itemize} \item homogénéité \item factorisation du travail \item qualité \item faciliter le travail \end{itemize} \bigskip Bref, c'est bien (tm) \bigskip \FromSlide{2} Elle doit être: \begin{itemize} \item justifiée \item expliquée \item discutée \item documentée \item approuvée \end{itemize} \end{slide} } \begin{slide}{Root est méchant} On ne construit pas sous root,\\ On ne construit pas sous root,\\ Et on ne construit pas sous root.\\ \bigskip Risques : \begin{itemize} \item polluer son système \item passer à coté d'erreurs \item compromission, corruption du système \item c'est impossible sur la machine de compilation finale \item ça donne des boutons %\item ça rend impuissant \end{itemize} \end{slide} \begin{slide}{ne pas changer la config} L'environnement de rpm fourni adapte les rpms les uns aux autres. On trouve notamment: \begin{itemize} \item les chemins par défaut \item la génération des dépendences \item post-installation \end{itemize} \end{slide} \begin{slide}{Règles de base résumées} \begin{itemize} \item se documenter \item demander aux gens habitués à faire des packages pour leur distribution \item comprendre plutôt que contourner \item un package bien fait pour une distribution est souvent incompatible avec les autres \item faire intégrer son paquet dans la distribution (ça ne vaut pas que pour rpm) \end{itemize} \end{slide} \part{cas concret: Mandriva} \overlays{2}{ \begin{slide}{Configuration utilisateur} \begin{itemize} \item definir son environnement rpm \item définir le packager tag \end{itemize} \FromSlide{2} .rpmmacros: \bigskip \begin{small} \listinginput[5]{1}{rpmmacros} \end{small} \end{slide} } \overlays{2}{ \begin{slide}{mkrel} Problématique des backport: \begin{tabular}{|l|l|c|l|} \hline &cooker&&stable\\ \hline \hline sans&1mdv&==&1mdv\\ \hline avec&1mdk&>&0.1.20060mdk\\ &1mdv2007.0&>&1mdv2006.0\\ \hline \end{tabular} \bigskip \FromSlide{2} Release: 1mdk devient: Release: \%mkrel 1 \end{slide} } \begin{slide}{chemin des fichiers} \begin{itemize} \item Prefix a une signification particulière, ne pas l'utiliser \item respecter les emplacements standards \item préférer les macros \item /usr/local est réservé aux logiciels installé sans rpm \end{itemize} \end{slide} \begin{slide}{chemin standard} \bigskip \begin{small} \begin{tabular}{|l|l|l|} \hline chemin¯o&usage\\ \hline \hline /usr&\%\_prefix&chemin général\\ \hline /etc&\%\_sysconfdir&configuration\\ \hline /usr/bin&\%\_bindir&application\\ \hline /usr/sbin&\%\_sbindir&app. pour root\\ \hline /usr/lib&\%\_libdir&librairies\\ /usr/lib64&&\\ \hline /usr/share&\%\_datadir&données\\ \hline /usr/share/man&\%\_mandir&pages de man\\ \hline \end{tabular} \end{small} \end{slide} \begin{slide}{compilation} Section \%build: \begin{itemize} \item utiliser les bonne options (\%optflags) \item faire attention aux chemins \end{itemize} \bigskip Cas simple: autotools \begin{verbatim} %configure %make \end{verbatim} \end{slide} \begin{slide}{compilation (suite)} Example d'un cas compliqué: {\begin{verbatim} export CFLAGS="%optflags" ./configure \ --prefix %_prefix \ --bindir %_bindir \ --libdir %_libdir \ # parallèle make don't work make \end{verbatim}% } \end{slide} \begin{slide}{installation} Section: \%install \begin{itemize} \item installer les fichiers dans \%buildroot \end{itemize} \bigskip Cas simple: Autotools \begin{verbatim} %makeinstall_std \end{verbatim} ou \begin{verbatim} %makeinstall \end{verbatim} \begin{small} \begin{verbatim} make install DEST=%buildroot #installation d'un fichier: cat > %buildroot%_sysconfdir/%name.cfg <