source: trunk/fairerpms/presentation.tex @ 103

Last change on this file since 103 was 103, checked in by nanardon, 18 years ago
  • rpmlint
  • Property svn:keywords set to Id
File size: 8.4 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 rpm à 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\overlays{2}{
212\begin{slide}{mkrel}
213Problématique des backport:
214
215\begin{tabular}{|l|l|c|l|}
216\hline
217&cooker&&stable\\
218\hline
219\hline
220sans&1mdv&==&1mdv\\
221\hline
222avec&1mdk&>&0.1.20060mdk\\
223&1mdv2007.0&>&1mdv2006.0\\
224\hline
225\end{tabular}
226\bigskip
227\FromSlide{2}
228
229Release: 1mdk
230
231devient:
232
233Release: \%mkrel 1
234
235\end{slide}
236}
237
238\begin{slide}{chemin des fichiers}
239\begin{itemize}
240\item Prefix a une signification particulière, ne pas l'utiliser
241\item respecter les emplacements standards
242\item préférer les macros
243\item /usr/local est réservé aux logiciels installé sans rpm
244\end{itemize}
245\end{slide}
246
247\begin{slide}{chemin standard}
248\bigskip
249\begin{small}
250\begin{tabular}{|l|l|l|}
251\hline
252chemin&macro&usage\\
253\hline
254\hline
255/usr&\%\_prefix&chemin général\\
256\hline
257/etc&\%\_sysconfdir&configuration\\
258\hline
259/usr/bin&\%\_bindir&application\\
260\hline
261/usr/sbin&\%\_sbindir&app. pour root\\
262\hline
263/usr/lib&\%\_libdir&librairies\\
264/usr/lib64&&\\
265\hline
266/usr/share&\%\_datadir&données\\
267\hline
268/usr/share/man&\%\_mandir&pages de man\\
269\hline
270\end{tabular}
271\end{small}
272\end{slide}
273
274\begin{slide}{compilation}
275Section \%build:
276
277\begin{itemize}
278\item utiliser les bonne options (\%optflags)
279\item faire attention aux chemins
280\end{itemize}
281
282\bigskip
283Cas simple: autotools
284
285\begin{verbatim}
286%configure
287%make
288\end{verbatim}
289\end{slide}
290
291\begin{slide}{compilation (suite)}
292Example d'un cas compliqué:
293
294{\begin{verbatim}
295export CFLAGS="%optflags"
296./configure \
297    --prefix %_prefix \
298    --bindir %_bindir \
299    --libdir %_libdir \
300
301# parallèle make don't work
302make
303\end{verbatim}%
304}
305
306\end{slide}
307
308\begin{slide}{installation}
309Section: \%install
310
311\begin{itemize}
312\item installer les fichiers dans \%buildroot
313\end{itemize}
314\bigskip
315Cas simple: Autotools
316
317\begin{verbatim}
318%makeinstall_std
319\end{verbatim}
320
321ou
322
323\begin{verbatim}
324%makeinstall
325\end{verbatim}
326
327\begin{small}
328\begin{verbatim}
329make install DEST=%buildroot
330
331#installation d'un fichier:
332cat > %buildroot%_sysconfdir/%name.cfg <<EOF
333blabla
334EOF
335\end{verbatim}
336\end{small}
337\end{slide}
338
339\overlays{3}{
340\begin{slide}{intégrer les fichiers dans le paquet}
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}{
350\begin{slide}{intégrer les fichiers dans le paquet}
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
376\begin{slide}{libidification}
377But:
378\begin{itemize}
379\item avoir plusieur versions de la librairie\\
380Nomage des paquet en utilisant le numéro majeur
381\item avoir plusieur architectures\\
382Nomage en incluant un prefix
383\end{itemize}
384\bigskip
385{\begin{center}
386\scriptsize
387\begin{tabular}{|c|c|c|}
388\hline
389majeur:&0&1\\
390\hline
39132bits&libfoo0&libfoo1\\
392&lib/foo.so.0&lib/foo.so.1\\
393\hline
39464bits&lib64foo0&lib64foo1\\
395&lib64/foo.so.0&lib64/foo.so.1\\
396\hline
397\end{tabular}
398\end{center}
399}
400
401\end{slide}
402
403\begin{slide}{libidification: dans la pratique}
404
405\begin{verbatim}
406%define major 0
407#similar to %_lib%name%major
408%define libname %name %major
409\end{verbatim}
410\ldots
411\begin{verbatim}
412%package -n %libname
413Provide: lib%name = %version-%release
414\end{verbatim}
415\ldots
416\begin{verbatim}
417%files -n %libname
418%defattr(-, root, root, -)
419%_libdir/*.so.*
420\end{verbatim}
421\end{slide}
422
423\part{conclusion}
424
425\begin{slide}{rpmlint}
426Outil pour vérifier que les paquets sont conformes à la politique
427\begin{itemize}
428\item maintenu par le merveilleux Michaël Scherer
429\item disponible sur rpmlint.zarb.org
430\end{itemize}
431\bigskip
432{\tiny
433\begin{verbatim}
434$ rpmlint -i rpm-mandriva-setup-1.24-1mdv2007.0.i586.rpm
435E: rpm-mandriva-setup no-binary
436The package should be of the noarch architecture because it
437doesn't contain any binaries.
438
439E: rpm-mandriva-setup only-non-binary-in-usr-lib
440There are only non binary files in /usr/lib so they should
441be in /usr/share.
442
443\end{verbatim}
444}
445\end{slide}
446
447\end{document}
Note: See TracBrowser for help on using the repository browser.