source: trunk/fairerpms/presentation.tex @ 104

Last change on this file since 104 was 104, checked in by nanardon, 18 years ago
  • rework compil && install
  • Property svn:keywords set to Id
File size: 8.5 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 et installation}
275Compilation du soft:
276
277\begin{itemize}
278\item utiliser les bonne options (\%optflags)
279\item faire attention aux chemins
280\item installer les fichiers dans \%buildroot
281\end{itemize}
282\bigskip
283Cas simple avec autotools
284
285{\scriptsize\begin{verbatim}
286%build
287%configure
288%make
289
290%install
291%makeinstall_std
292\end{verbatim}
293}
294\end{slide}
295
296\begin{slide}{extraits de spec}
297Example d'un cas compliqué:
298
299{\tiny\begin{verbatim}
300export CFLAGS="%optflags"
301./configure \
302    --prefix %_prefix \
303    --bindir %_bindir \
304    --libdir %_libdir
305# parallèle make don't work
306make
307
308%install
309make install DEST=%buildroot
310
311#installation d'un fichier:
312cat > %buildroot%_sysconfdir/%name.cfg <<EOF
313blabla
314EOF
315\end{verbatim}%
316}
317
318\end{slide}
319
320\overlays{3}{
321\begin{slide}{intégrer les fichiers dans le paquet}
322\begin{itemstep}
323\item tout les fichiers doivent être listés
324\item utiliser les macros
325\item les répertoires propres au logiciels doivent être intégrés
326\end{itemstep}
327\end{slide}
328}
329
330\overlays{3}{
331\begin{slide}{intégrer les fichiers dans le paquet}
332\begin{itemstep}
333\item les fichier de configuration ne doivent pas être remplacés
334
335{\scriptsize%
336\%config(noreplace) \%\_sysconfdir/foo
337}
338
339\item les documentation sont intégrées avec \%doc
340{\scriptsize%
341\%doc README \ldots
342}
343
344\item utiliser \%find\_lang pour les traductions
345
346{\scriptsize%
347\%install\\
348\%find\_lang \%name\\
349\ldots\\
350\%files -f \%name.lang\\
351}
352
353\end{itemstep}
354\end{slide}
355}
356
357\begin{slide}{libidification}
358But:
359\begin{itemize}
360\item avoir plusieur versions de la librairie\\
361Nomage des paquet en utilisant le numéro majeur
362\item avoir plusieur architectures\\
363Nomage en incluant un prefix
364\end{itemize}
365\bigskip
366{\begin{center}
367\scriptsize
368\begin{tabular}{|c|c|c|}
369\hline
370majeur:&0&1\\
371\hline
37232bits&libfoo0&libfoo1\\
373&lib/foo.so.0&lib/foo.so.1\\
374\hline
37564bits&lib64foo0&lib64foo1\\
376&lib64/foo.so.0&lib64/foo.so.1\\
377\hline
378\end{tabular}
379\end{center}
380}
381
382\end{slide}
383
384\begin{slide}{libidification: dans la pratique}
385
386\begin{verbatim}
387%define major 0
388#similar to %_lib%name%major
389%define libname %name %major
390\end{verbatim}
391\ldots
392\begin{verbatim}
393%package -n %libname
394Provide: lib%name = %version-%release
395\end{verbatim}
396\ldots
397\begin{verbatim}
398%files -n %libname
399%defattr(-, root, root, -)
400%_libdir/*.so.*
401\end{verbatim}
402\end{slide}
403
404\part{conclusion}
405
406\begin{slide}{rpmlint}
407Outil pour vérifier que les paquets sont conformes à la politique
408\begin{itemize}
409\item maintenu par le merveilleux Michaël Scherer
410\item disponible sur \url{http://rpmlint.zarb.org/}
411\end{itemize}
412\bigskip
413{\tiny
414\begin{verbatim}
415$ rpmlint -i rpm-mandriva-setup-1.24-1mdv2007.0.i586.rpm
416E: rpm-mandriva-setup no-binary
417The package should be of the noarch architecture because it
418doesn't contain any binaries.
419
420E: rpm-mandriva-setup only-non-binary-in-usr-lib
421There are only non binary files in /usr/lib so they should
422be in /usr/share.
423
424\end{verbatim}
425}
426\end{slide}
427
428\begin{slide}{The End}
429Ce document sera là: {\scriptsize\url{http://forge.ipsl.jussieu.fr/docipsl/}}.
430
431Le rpmhowto de mandriva: {\scriptsize\url{http://qa.mandriva.com/twiki/bin/view/Main/RpmHowTo}}.
432
433\bigskip
434Merci:
435\begin{itemize}
436\item Guillaume Rousse
437\item Benoit Audouard
438\item Eric Villard
439\item CNRS/ISPL pour l'hébergement
440\end{itemize}
441
442\bigskip
443Questions ?
444
445\end{slide}
446\end{document}
Note: See TracBrowser for help on using the repository browser.