source: trunk/fairerpms/presentation.tex @ 119

Last change on this file since 119 was 117, checked in by nanardon, 18 years ago

r2161@localhost: olivier | 2006-07-07 00:24:30 +0200

  • fix another lowercase title
  • Property svn:keywords set to Id
File size: 9.3 KB
RevLine 
[91]1% $Id$
2\documentclass[blends,slideColor,colorBG,pdf,ps2pdf]{prosper}
3\usepackage[frenchb]{babel}
4\usepackage[T1]{fontenc}
[92]5%\usepackage{multicol}
6\usepackage{moreverb}
[91]7
[92]8
[102]9\title{RPM et politique de packaging}
[108]10\subtitle{Adapter un paquet à sa distribution}
[91]11\author{Olivier Thauvin}
12\email{olivier.thauvin@aerov.jussieu.fr}
13%%\institution{
14%%  \includegraphics*[height=0.3\textheight]{gnutux.eps}
15%%}
16
17\NoFrenchBabelItemize
18
19\begin{document}
[92]20\maketitle
[91]21
[92]22\part{Introduction}
[91]23
[92]24\begin{slide}{Plan}
[115]25\bigskip
26\begin{itemize}
27\item{RPM rappel}
28\item{Politique: généralité}
29\item{cas concret: Mandriva}
30\end{itemize}
[92]31\end{slide}
[91]32
[92]33\part{RPM rappel}
34
[98]35\overlays{2}{
[92]36\begin{slide}{RPM: Rpm Package Manager}
37Qu'est ce ?
38\begin{itemize}
[98]39    \item un ensemble d'outils
[92]40    \item un format d'archive (.rpm)
[98]41    \item des fichiers au format rpm
[92]42\end{itemize}
[98]43\bigskip
[92]44
[98]45\FromSlide{2}
[94]46Rôle:
[92]47\begin{itemize}
[98]48\item installer
49\item inventorier
50\item controler
51%\item faciliter l'installation des logiciels
52%\item suivi des version (evr)
[102]53%\item assurer que l'environnement est compatible avec le logiciel
[98]54%\item assurer l'intégrité du système
[92]55\end{itemize}
56\end{slide}
[98]57}
[92]58
[116]59\begin{slide}{Le paquet}
[92]60Un fichier .rpm contenant:
61\begin{itemize}
[98]62\item{entête} les informations sur le rpm
[92]63    \begin{itemize}
[102]64    \item des informations pratiques sur le logiciel (nom, version, url, \ldots)
[92]65    \item sur la fabrication du rpm
66    \item une liste de dépendances
67    \item la liste des fichiers contenus
68    \item l'historique du paquet (changelog)
69    \end{itemize}
[98]70\item une archive contenant les fichiers
[92]71\end{itemize}
72\end{slide}
73
[116]74\begin{slide}{Faire un rpm}
[92]75\begin{center}
76\includegraphics*[height=1\textheight]{rpm-building}
77\end{center}
78\end{slide}
79
[116]80\begin{slide}{Le fichier spec}
[93]81Il décrit:
82\begin{itemize}
[102]83\item le (ou les) rpm(s) produit(s)
[93]84\item le moyen de compiler le logiciel
85\end{itemize}
86\bigskip
[98]87Il est composé de sections:
[93]88\begin{itemize}
89\item En-tête, \%description
90\item \%package
91\item \%prep, \%build, \%install, \%check
92\item \%files
93\item \%verify, \%pre, \%preun, \%post, \%postun, \%posttrans, \ldots
94\item \%changelog
95\end{itemize}
[92]96\end{slide}
97
[116]98\begin{slide}{Specfile: exemple}
[92]99\begin{small}
100\verbatiminput{simple.spec}
101\bigskip
102\begin{verbatim}
103$ rpm -ba simple.spec
104Ecrit: /home/users/olivier/RPM/SRPMS/simple-1-1.src.rpm
105\o/
106\end{verbatim}
107\end{small}
108\end{slide}
109
[116]110\begin{slide}{Les macros}
[93]111Variable propres à rpm.
112
113Origine:
114\begin{tabular}{|l|l|}
115\hline
116localisation&fournisseur\\
117\hline
118\hline
119fichiers macros systèmes&rpm\\
120\hline
121fichiers macros systèmes&distribution\\
122\hline
123\verb+~/.rpmmacros+&utilisateur\\
124\hline
[98]125fichier spec&packager\\
[93]126\hline
127\end{tabular}
[94]128
129\bigskip
[93]130Elles fournissent des valeurs ou des fonctions.
131\end{slide}
132
[98]133\part{Politique: généralité}
[92]134
[95]135\overlays{2}{
[114]136\begin{slide}{Qu'est qu'un politique de packaging}
[115]137Définitions d'un ensemble de règles.
[114]138\FromSlide{2}
139\bigskip
[115]140
[114]141But:
142\bigskip
[94]143\begin{itemize}
[102]144\item homogénéité
[94]145\item factorisation du travail
146\item qualité
147\item faciliter le travail
148\end{itemize}
149\bigskip
150Bref, c'est bien (tm)
151\end{slide}
[95]152}
[92]153
[116]154\overlays{2}{
[114]155\begin{slide}{Règles générales: Root est méchant}
[98]156On ne construit pas sous root,\\
157On ne construit pas sous root,\\
158Et on ne construit pas sous root.\\
[116]159\FromSlide{2}
[94]160\bigskip
[92]161
[102]162Risques :
[94]163\begin{itemize}
164\item polluer son système
165\item passer à coté d'erreurs
166\item compromission, corruption du système
[102]167\item c'est impossible sur la machine de compilation finale
[94]168\item ça donne des boutons
[102]169%\item ça rend impuissant
[94]170\end{itemize}
171\end{slide}
[116]172}
[94]173
[114]174\begin{slide}{Règles générales: ne pas changer la config}
[99]175L'environnement de rpm fourni adapte les rpms les uns aux autres.
[94]176
[102]177On trouve notamment:
[94]178\begin{itemize}
179\item les chemins par défaut
180\item la génération des dépendences
[102]181\item post-installation
[94]182\end{itemize}
183\end{slide}
184
[98]185\begin{slide}{Règles de base résumées}
[94]186\begin{itemize}
187\item se documenter
188\item demander aux gens habitués à faire des packages pour leur distribution
[102]189\item comprendre plutôt que contourner
[94]190\item un package bien fait pour une distribution est souvent incompatible
191avec les autres
[98]192\item faire intégrer son paquet dans la distribution
[94]193(ça ne vaut pas que pour rpm)
194\end{itemize}
195\end{slide}
196
197\part{cas concret: Mandriva}
198
[96]199\overlays{2}{
200\begin{slide}{Configuration utilisateur}
201\begin{itemize}
[99]202\item definir son environnement rpm
[102]203\item définir le packager tag
[96]204\end{itemize}
[95]205
[96]206\FromSlide{2}
207.rpmmacros:
208\bigskip
209\begin{small}
210\listinginput[5]{1}{rpmmacros}
211\end{small}
212\end{slide}
[111]213}
[96]214
[116]215\begin{slide}{Politique de nommage des paquets}
[110]216\begin{itemize}
[112]217\item nom de paquet en minuscules (il y a quelques exceptions)
[110]218\item le nom du paquet correspond au nom logiciel
219\item les module pour langage sont préfixé par le nom du langage
220\end{itemize}
221
[111]222Exemples:
[110]223\begin{itemize}
224\item perl
225\item rpm
226\item perl-POE
227\end{itemize}
228\end{slide}
229
[98]230\overlays{2}{
[116]231\begin{slide}{\%mkrel}
[98]232Problématique des backport:
233
234\begin{tabular}{|l|l|c|l|}
235\hline
236&cooker&&stable\\
237\hline
238\hline
239sans&1mdv&==&1mdv\\
240\hline
241avec&1mdk&>&0.1.20060mdk\\
242&1mdv2007.0&>&1mdv2006.0\\
243\hline
244\end{tabular}
245\bigskip
246\FromSlide{2}
247
248Release: 1mdk
249
250devient:
251
252Release: \%mkrel 1
253
254\end{slide}
255}
256
[116]257\begin{slide}{Chemin des fichiers}
[100]258\begin{itemize}
259\item Prefix a une signification particulière, ne pas l'utiliser
260\item respecter les emplacements standards
261\item préférer les macros
262\item /usr/local est réservé aux logiciels installé sans rpm
263\end{itemize}
264\end{slide}
265
[116]266\begin{slide}{Chemin standard}
[100]267\bigskip
268\begin{small}
269\begin{tabular}{|l|l|l|}
270\hline
271chemin&macro&usage\\
272\hline
273\hline
274/usr&\%\_prefix&chemin général\\
275\hline
276/etc&\%\_sysconfdir&configuration\\
277\hline
278/usr/bin&\%\_bindir&application\\
279\hline
280/usr/sbin&\%\_sbindir&app. pour root\\
281\hline
[108]282/usr/lib&\%\_libdir&bibliothèques\\
[100]283/usr/lib64&&\\
284\hline
285/usr/share&\%\_datadir&données\\
286\hline
287/usr/share/man&\%\_mandir&pages de man\\
288\hline
289\end{tabular}
290\end{small}
291\end{slide}
292
[116]293\begin{slide}{Compilation et installation}
[104]294Compilation du soft:
[100]295
296\begin{itemize}
297\item utiliser les bonne options (\%optflags)
298\item faire attention aux chemins
[104]299\item installer les fichiers dans \%buildroot
[100]300\end{itemize}
301\bigskip
[104]302Cas simple avec autotools
[100]303
[104]304{\scriptsize\begin{verbatim}
305%build
[100]306%configure
307%make
[104]308
309%install
310%makeinstall_std
[100]311\end{verbatim}
[104]312}
[100]313\end{slide}
314
[116]315\begin{slide}{Extraits de spec}
[100]316Example d'un cas compliqué:
317
[104]318{\tiny\begin{verbatim}
[100]319export CFLAGS="%optflags"
320./configure \
321    --prefix %_prefix \
322    --bindir %_bindir \
[104]323    --libdir %_libdir
[100]324# parallèle make don't work
325make
326
[104]327%install
[100]328make install DEST=%buildroot
329
330#installation d'un fichier:
331cat > %buildroot%_sysconfdir/%name.cfg <<EOF
332blabla
333EOF
[104]334\end{verbatim}%
335}
336
[100]337\end{slide}
338
339\overlays{3}{
[116]340\begin{slide}{Intégrer les fichiers dans le paquet}
[100]341\begin{itemstep}
342\item tout les fichiers doivent être listés
343\item utiliser les macros
344\item les répertoires propres au logiciels doivent être intégrés
345\end{itemstep}
346\end{slide}
347}
348
349\overlays{3}{
[116]350\begin{slide}{Intégrer les fichiers dans le paquet}
[100]351\begin{itemstep}
352\item les fichier de configuration ne doivent pas être remplacés
353
354{\scriptsize%
355\%config(noreplace) \%\_sysconfdir/foo
356}
357
358\item les documentation sont intégrées avec \%doc
359{\scriptsize%
360\%doc README \ldots
361}
362
363\item utiliser \%find\_lang pour les traductions
364
365{\scriptsize%
366\%install\\
367\%find\_lang \%name\\
368\ldots\\
369\%files -f \%name.lang\\
370}
371
372\end{itemstep}
373\end{slide}
374}
375
[116]376\begin{slide}{Les dépendences}
[105]377Pour les paquets binaires: rien à faire en général
378
379Pour les sources:
380\begin{itemize}
381\item identiques pour toutes les architectures
382\item suffisants pour builder les paquets
383\item non redondants
384\end{itemize}
385\bigskip
386Exemple:
387\begin{verbatim}
388BuildRequires: libfoo-devel
389\end{verbatim}
390\end{slide}
391
[116]392\begin{slide}{Libidification}
[101]393But:
394\begin{itemize}
[108]395\item avoir plusieur versions de la bibliothèque\\
[101]396Nomage des paquet en utilisant le numéro majeur
397\item avoir plusieur architectures\\
398Nomage en incluant un prefix
399\end{itemize}
400\bigskip
401{\begin{center}
402\scriptsize
403\begin{tabular}{|c|c|c|}
404\hline
405majeur:&0&1\\
406\hline
40732bits&libfoo0&libfoo1\\
408&lib/foo.so.0&lib/foo.so.1\\
409\hline
41064bits&lib64foo0&lib64foo1\\
411&lib64/foo.so.0&lib64/foo.so.1\\
412\hline
413\end{tabular}
414\end{center}
415}
416
417\end{slide}
418
[116]419\begin{slide}{Libidification: dans la pratique}
[101]420
421\begin{verbatim}
422%define major 0
423#similar to %_lib%name%major
424%define libname %name %major
425\end{verbatim}
426\ldots
427\begin{verbatim}
428%package -n %libname
429Provide: lib%name = %version-%release
430\end{verbatim}
431\ldots
432\begin{verbatim}
433%files -n %libname
434%defattr(-, root, root, -)
435%_libdir/*.so.*
436\end{verbatim}
437\end{slide}
438
[117]439\part{Conclusion}
[103]440
441\begin{slide}{rpmlint}
442Outil pour vérifier que les paquets sont conformes à la politique
443\begin{itemize}
444\item maintenu par le merveilleux Michaël Scherer
[104]445\item disponible sur \url{http://rpmlint.zarb.org/}
[103]446\end{itemize}
447\bigskip
448{\tiny
449\begin{verbatim}
450$ rpmlint -i rpm-mandriva-setup-1.24-1mdv2007.0.i586.rpm
451E: rpm-mandriva-setup no-binary
452The package should be of the noarch architecture because it
453doesn't contain any binaries.
454
455E: rpm-mandriva-setup only-non-binary-in-usr-lib
456There are only non binary files in /usr/lib so they should
457be in /usr/share.
458
459\end{verbatim}
460}
461\end{slide}
462
[104]463\begin{slide}{The End}
464Ce document sera là: {\scriptsize\url{http://forge.ipsl.jussieu.fr/docipsl/}}.
465
466Le rpmhowto de mandriva: {\scriptsize\url{http://qa.mandriva.com/twiki/bin/view/Main/RpmHowTo}}.
467
468\bigskip
469Merci:
470\begin{itemize}
471\item Guillaume Rousse
[108]472\item Benoît Audouard
[104]473\item Eric Villard
474\item CNRS/ISPL pour l'hébergement
475\end{itemize}
476
477\bigskip
478Questions ?
479
480\end{slide}
[91]481\end{document}
Note: See TracBrowser for help on using the repository browser.