source: trunk/fairerpms/presentation.tex @ 117

Last change on this file since 117 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
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\overlays{2}{
155\begin{slide}{Règles générales: Root est méchant}
156On ne construit pas sous root,\\
157On ne construit pas sous root,\\
158Et on ne construit pas sous root.\\
159\FromSlide{2}
160\bigskip
161
162Risques :
163\begin{itemize}
164\item polluer son système
165\item passer à coté d'erreurs
166\item compromission, corruption du système
167\item c'est impossible sur la machine de compilation finale
168\item ça donne des boutons
169%\item ça rend impuissant
170\end{itemize}
171\end{slide}
172}
173
174\begin{slide}{Règles générales: ne pas changer la config}
175L'environnement de rpm fourni adapte les rpms les uns aux autres.
176
177On trouve notamment:
178\begin{itemize}
179\item les chemins par défaut
180\item la génération des dépendences
181\item post-installation
182\end{itemize}
183\end{slide}
184
185\begin{slide}{Règles de base résumées}
186\begin{itemize}
187\item se documenter
188\item demander aux gens habitués à faire des packages pour leur distribution
189\item comprendre plutôt que contourner
190\item un package bien fait pour une distribution est souvent incompatible
191avec les autres
192\item faire intégrer son paquet dans la distribution
193(ça ne vaut pas que pour rpm)
194\end{itemize}
195\end{slide}
196
197\part{cas concret: Mandriva}
198
199\overlays{2}{
200\begin{slide}{Configuration utilisateur}
201\begin{itemize}
202\item definir son environnement rpm
203\item définir le packager tag
204\end{itemize}
205
206\FromSlide{2}
207.rpmmacros:
208\bigskip
209\begin{small}
210\listinginput[5]{1}{rpmmacros}
211\end{small}
212\end{slide}
213}
214
215\begin{slide}{Politique de nommage des paquets}
216\begin{itemize}
217\item nom de paquet en minuscules (il y a quelques exceptions)
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
222Exemples:
223\begin{itemize}
224\item perl
225\item rpm
226\item perl-POE
227\end{itemize}
228\end{slide}
229
230\overlays{2}{
231\begin{slide}{\%mkrel}
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
257\begin{slide}{Chemin des fichiers}
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
266\begin{slide}{Chemin standard}
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
282/usr/lib&\%\_libdir&bibliothèques\\
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
293\begin{slide}{Compilation et installation}
294Compilation du soft:
295
296\begin{itemize}
297\item utiliser les bonne options (\%optflags)
298\item faire attention aux chemins
299\item installer les fichiers dans \%buildroot
300\end{itemize}
301\bigskip
302Cas simple avec autotools
303
304{\scriptsize\begin{verbatim}
305%build
306%configure
307%make
308
309%install
310%makeinstall_std
311\end{verbatim}
312}
313\end{slide}
314
315\begin{slide}{Extraits de spec}
316Example d'un cas compliqué:
317
318{\tiny\begin{verbatim}
319export CFLAGS="%optflags"
320./configure \
321    --prefix %_prefix \
322    --bindir %_bindir \
323    --libdir %_libdir
324# parallèle make don't work
325make
326
327%install
328make install DEST=%buildroot
329
330#installation d'un fichier:
331cat > %buildroot%_sysconfdir/%name.cfg <<EOF
332blabla
333EOF
334\end{verbatim}%
335}
336
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}{Les dépendences}
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
392\begin{slide}{Libidification}
393But:
394\begin{itemize}
395\item avoir plusieur versions de la bibliothèque\\
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
419\begin{slide}{Libidification: dans la pratique}
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
439\part{Conclusion}
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
445\item disponible sur \url{http://rpmlint.zarb.org/}
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
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
472\item Benoît Audouard
473\item Eric Villard
474\item CNRS/ISPL pour l'hébergement
475\end{itemize}
476
477\bigskip
478Questions ?
479
480\end{slide}
481\end{document}
Note: See TracBrowser for help on using the repository browser.