source: trunk/fairerpms/presentation.tex @ 112

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

r1205@localhost: olivier | 2006-07-04 13:42:32 +0200

  • fix typo
  • 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}{Pourquoi définir une politique}
131\begin{itemize}
132\item homogénéité
133\item factorisation du travail
134\item qualité
135\item faciliter le travail
136\end{itemize}
137\bigskip
138Bref, c'est bien (tm)
139\bigskip
140
141\FromSlide{2}
142Elle doit être:
143\begin{itemize}
144\item justifiée
145\item expliquée
146\item discutée
147\item documentée
148\item approuvée
149\end{itemize}
150\end{slide}
151}
152
153\begin{slide}{Root est méchant}
154On ne construit pas sous root,\\
155On ne construit pas sous root,\\
156Et on ne construit pas sous root.\\
157\bigskip
158
159Risques :
160\begin{itemize}
161\item polluer son système
162\item passer à coté d'erreurs
163\item compromission, corruption du système
164\item c'est impossible sur la machine de compilation finale
165\item ça donne des boutons
166%\item ça rend impuissant
167\end{itemize}
168\end{slide}
169
170\begin{slide}{ne pas changer la config}
171L'environnement de rpm fourni adapte les rpms les uns aux autres.
172
173On trouve notamment:
174\begin{itemize}
175\item les chemins par défaut
176\item la génération des dépendences
177\item post-installation
178\end{itemize}
179\end{slide}
180
181\begin{slide}{Règles de base résumées}
182\begin{itemize}
183\item se documenter
184\item demander aux gens habitués à faire des packages pour leur distribution
185\item comprendre plutôt que contourner
186\item un package bien fait pour une distribution est souvent incompatible
187avec les autres
188\item faire intégrer son paquet dans la distribution
189(ça ne vaut pas que pour rpm)
190\end{itemize}
191\end{slide}
192
193\part{cas concret: Mandriva}
194
195\overlays{2}{
196\begin{slide}{Configuration utilisateur}
197\begin{itemize}
198\item definir son environnement rpm
199\item définir le packager tag
200\end{itemize}
201
202\FromSlide{2}
203.rpmmacros:
204\bigskip
205\begin{small}
206\listinginput[5]{1}{rpmmacros}
207\end{small}
208\end{slide}
209}
210
211\begin{slide}{politique de nommage des paquets}
212\begin{itemize}
213\item nom de paquet en minuscules (il y a quelques exceptions)
214\item le nom du paquet correspond au nom logiciel
215\item les module pour langage sont préfixé par le nom du langage
216\end{itemize}
217
218Exemples:
219\begin{itemize}
220\item perl
221\item rpm
222\item perl-POE
223\end{itemize}
224\end{slide}
225
226\overlays{2}{
227\begin{slide}{mkrel}
228Problématique des backport:
229
230\begin{tabular}{|l|l|c|l|}
231\hline
232&cooker&&stable\\
233\hline
234\hline
235sans&1mdv&==&1mdv\\
236\hline
237avec&1mdk&>&0.1.20060mdk\\
238&1mdv2007.0&>&1mdv2006.0\\
239\hline
240\end{tabular}
241\bigskip
242\FromSlide{2}
243
244Release: 1mdk
245
246devient:
247
248Release: \%mkrel 1
249
250\end{slide}
251}
252
253\begin{slide}{chemin des fichiers}
254\begin{itemize}
255\item Prefix a une signification particulière, ne pas l'utiliser
256\item respecter les emplacements standards
257\item préférer les macros
258\item /usr/local est réservé aux logiciels installé sans rpm
259\end{itemize}
260\end{slide}
261
262\begin{slide}{chemin standard}
263\bigskip
264\begin{small}
265\begin{tabular}{|l|l|l|}
266\hline
267chemin&macro&usage\\
268\hline
269\hline
270/usr&\%\_prefix&chemin général\\
271\hline
272/etc&\%\_sysconfdir&configuration\\
273\hline
274/usr/bin&\%\_bindir&application\\
275\hline
276/usr/sbin&\%\_sbindir&app. pour root\\
277\hline
278/usr/lib&\%\_libdir&bibliothèques\\
279/usr/lib64&&\\
280\hline
281/usr/share&\%\_datadir&données\\
282\hline
283/usr/share/man&\%\_mandir&pages de man\\
284\hline
285\end{tabular}
286\end{small}
287\end{slide}
288
289\begin{slide}{compilation et installation}
290Compilation du soft:
291
292\begin{itemize}
293\item utiliser les bonne options (\%optflags)
294\item faire attention aux chemins
295\item installer les fichiers dans \%buildroot
296\end{itemize}
297\bigskip
298Cas simple avec autotools
299
300{\scriptsize\begin{verbatim}
301%build
302%configure
303%make
304
305%install
306%makeinstall_std
307\end{verbatim}
308}
309\end{slide}
310
311\begin{slide}{extraits de spec}
312Example d'un cas compliqué:
313
314{\tiny\begin{verbatim}
315export CFLAGS="%optflags"
316./configure \
317    --prefix %_prefix \
318    --bindir %_bindir \
319    --libdir %_libdir
320# parallèle make don't work
321make
322
323%install
324make install DEST=%buildroot
325
326#installation d'un fichier:
327cat > %buildroot%_sysconfdir/%name.cfg <<EOF
328blabla
329EOF
330\end{verbatim}%
331}
332
333\end{slide}
334
335\overlays{3}{
336\begin{slide}{intégrer les fichiers dans le paquet}
337\begin{itemstep}
338\item tout les fichiers doivent être listés
339\item utiliser les macros
340\item les répertoires propres au logiciels doivent être intégrés
341\end{itemstep}
342\end{slide}
343}
344
345\overlays{3}{
346\begin{slide}{intégrer les fichiers dans le paquet}
347\begin{itemstep}
348\item les fichier de configuration ne doivent pas être remplacés
349
350{\scriptsize%
351\%config(noreplace) \%\_sysconfdir/foo
352}
353
354\item les documentation sont intégrées avec \%doc
355{\scriptsize%
356\%doc README \ldots
357}
358
359\item utiliser \%find\_lang pour les traductions
360
361{\scriptsize%
362\%install\\
363\%find\_lang \%name\\
364\ldots\\
365\%files -f \%name.lang\\
366}
367
368\end{itemstep}
369\end{slide}
370}
371
372\begin{slide}{les dépendences}
373Pour les paquets binaires: rien à faire en général
374
375Pour les sources:
376\begin{itemize}
377\item identiques pour toutes les architectures
378\item suffisants pour builder les paquets
379\item non redondants
380\end{itemize}
381\bigskip
382Exemple:
383\begin{verbatim}
384BuildRequires: libfoo-devel
385\end{verbatim}
386\end{slide}
387
388\begin{slide}{libidification}
389But:
390\begin{itemize}
391\item avoir plusieur versions de la bibliothèque\\
392Nomage des paquet en utilisant le numéro majeur
393\item avoir plusieur architectures\\
394Nomage en incluant un prefix
395\end{itemize}
396\bigskip
397{\begin{center}
398\scriptsize
399\begin{tabular}{|c|c|c|}
400\hline
401majeur:&0&1\\
402\hline
40332bits&libfoo0&libfoo1\\
404&lib/foo.so.0&lib/foo.so.1\\
405\hline
40664bits&lib64foo0&lib64foo1\\
407&lib64/foo.so.0&lib64/foo.so.1\\
408\hline
409\end{tabular}
410\end{center}
411}
412
413\end{slide}
414
415\begin{slide}{libidification: dans la pratique}
416
417\begin{verbatim}
418%define major 0
419#similar to %_lib%name%major
420%define libname %name %major
421\end{verbatim}
422\ldots
423\begin{verbatim}
424%package -n %libname
425Provide: lib%name = %version-%release
426\end{verbatim}
427\ldots
428\begin{verbatim}
429%files -n %libname
430%defattr(-, root, root, -)
431%_libdir/*.so.*
432\end{verbatim}
433\end{slide}
434
435\part{conclusion}
436
437\begin{slide}{rpmlint}
438Outil pour vérifier que les paquets sont conformes à la politique
439\begin{itemize}
440\item maintenu par le merveilleux Michaël Scherer
441\item disponible sur \url{http://rpmlint.zarb.org/}
442\end{itemize}
443\bigskip
444{\tiny
445\begin{verbatim}
446$ rpmlint -i rpm-mandriva-setup-1.24-1mdv2007.0.i586.rpm
447E: rpm-mandriva-setup no-binary
448The package should be of the noarch architecture because it
449doesn't contain any binaries.
450
451E: rpm-mandriva-setup only-non-binary-in-usr-lib
452There are only non binary files in /usr/lib so they should
453be in /usr/share.
454
455\end{verbatim}
456}
457\end{slide}
458
459\begin{slide}{The End}
460Ce document sera là: {\scriptsize\url{http://forge.ipsl.jussieu.fr/docipsl/}}.
461
462Le rpmhowto de mandriva: {\scriptsize\url{http://qa.mandriva.com/twiki/bin/view/Main/RpmHowTo}}.
463
464\bigskip
465Merci:
466\begin{itemize}
467\item Guillaume Rousse
468\item Benoît Audouard
469\item Eric Villard
470\item CNRS/ISPL pour l'hébergement
471\end{itemize}
472
473\bigskip
474Questions ?
475
476\end{slide}
477\end{document}
Note: See TracBrowser for help on using the repository browser.