source: trunk/fairerpms/presentation.tex @ 114

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

r1207@localhost: olivier | 2006-07-04 14:54:56 +0200

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