source: trunk/fairerpms/presentation.tex @ 115

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

r2159@localhost: olivier | 2006-07-06 23:52:33 +0200

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