source: trunk/www/fr/portfileHOWTO.php @ 1668

Last change on this file since 1668 was 1636, checked in by matt, 18 years ago

2 occurences changed

  • Property svn:eol-style set to native
File size: 15.2 KB
Line 
1<?
2
3//
4// File     : portfileHOWTO.php
5// Version  : $Id: portfileHOWTO.php,v 1.4 2003/01/12 00:24:22 matt Exp $
6// Location : /projects/darwinports/portfileHOWTO.php
7//
8
9        include_once("$DOCUMENT_ROOT/includes/od_lib.inc.php");
10        od_print_header("Comment écrire un Portfile pour DarwinPorts", "fr", "iso-8859-1", "", 0);
11?>
12
13<h2>
14Comment écrire un Portfile pour DarwinPorts
15</h2>
16<pre><tt>
17Kevin Van Vechten | <a href="mailto:kevin@opendarwin.org">kevin@opendarwin.org</a>
188-Oct-2002
19</tt></pre>
20<h3>
21Divers
22</h3>
23<p>
24DarwinPorts automatise les tâches usuelles requises pour le portage de logiciel sur Darwin. Les Portfiles contiennent les informations nécessaires pour que la compilation et l'installation de logiciels particuliers soient faites correctement sous Darwin. Le but de DarwinPorts est de pouvoir garder la syntaxe des Portfiles aussi simple que possible, tout en supportant les cas spéciaux requis par la compilation et l'installation de beaucoup de logiciel afin que tout se passe avec succès.
25</p>
26<p>
27Cet article décrit la constitution d'un simple Portfile, et explore les fonctions les plus communes à DarwinPorts.
28</p>
29<h3>
30Commencer
31</h3>
32<p>
33Pour pouvoir travailler avec DarwinPorts, vous devrez le télécharger et l'installer sur votre système. La <a href="http://opendarwin.org/projects/darwinports/fr/">page d'accueil</a> du projet DarwinPorts décrit comment se le procurer et l'installer.
34</p>
35<p>
36Comme vous vous intéressez à l'écriture d'un Portfile, changeons quelques options de configuration qui vous aideront au déboguage. Éditez le fichier <tt>/etc/ports/ports.conf</tt> afin que les changements suivants y soient incorporés (vous devrez passer par <tt>sudo</tt> pour pouvoir éditer ce fichier) :
37</p>
38<pre><tt>
39ports_debug     yes
40ports_verbose   yes
41</tt></pre>
42<p>
43Cela affichera des messages utiles pour le déboguage qui sont normalement omis lors de l'utilisation de DarwinPorts.
44</p>
45<p>
46DarwinPorts effectuera plusieurs tâches basiques prédéfinies, qui sont :
47</p>
48<a name="basictoc"></a><h4>Sujets basiques</h4>
49<ul>
50<li><a href="#fetch">Récupération des sources</a></li>
51<li><a href="#checksum">Vérification du fichier téléchargé</a></li>
52<li><a href="#extract">Extraction des sources dans un répertoire de travail</a></li>
53<li><a href="#configure">Exécution d'un script Configure</a></li>
54<li><a href="#build">Compilation des sources</a></li>
55<li><a href="#install">Installation du programme dans le système</a></li>
56</ul>
57<a name="advancedtoc"></a><h4>Sujets avancés</h4>
58<ul>
59<li><a href="#targets">Modifier des cibles</a></li>
60<li><a href="#variants">Variantes du Portfile</a></li>
61</ul>
62<a name="appendixtoc"></a><h4>Annexe</h4>
63<ul>
64<li><a href="#portfilelist">Aperçu d'un Portfile</a></li>
65<li><a href="#contentslist">Liste de contents</a></li>
66</ul>
67
68<h3>
69<a name="fetch"></a>Récupération des sources
70</h3>
71<p>
72La première chose à faire est de choisir un logiciel à porter. Pour cet exemple, nous allons utiliser ircII, un client IRC populaire. Nous commencerons avec un Portfile simple, décrivant les attributs basiques d'ircII comme son nom, sa version et le site où nous pouvons télécharger les sources. Créez un répertoire de travail nommé <tt>ircii</tt> et créez à l'intérieur un fichier nommé <tt>Portfile</tt> ayant le contenu suivant :
73</p>
74<pre><tt>
75PortSystem 1.0
76name            ircii
77version         20020912
78categories      irc
79maintainers     kevin@opendarwin.org
80master_sites    ftp://ircftp.au.eterna.com.au/pub/ircII/
81</tt></pre>
82<p>
83Un Portfile consiste en une suite de paires de type clé/valeur. Les clés <tt>name</tt> et <tt>version</tt> décrivent le nom et la version du logiciel. La clé <tt>categories</tt> est une liste des catégories auquel le logiciel peut appartenir de façon logique; c'est utilisé dans un but d'organisation. La première entrée dans <tt>categories</tt> devrait correspondre au nom du répertoire où doit résider le répertoire du port. La clé <tt>maintainers</tt> devrait, elle, contenir votre adresse email et la clé <tt>master_sites</tt> devrait quant à elle contenir une liste des sites où télécharger les sources. DarwinPorts utilise les termes "clés" et "options" indifféremment comme la plupart des clés sont utilisées comme des options d'une tâche particulière dans le processus du portage.
84</p>
85<p>
86Arrivé à ce point, le Portfile est assez complet pour permettre le téléchargement d'ircII. Par défaut, DarwinPorts ajoutera <tt>version</tt> à <tt>name</tt> et considérera que les sources sont au format <tt>.tar.gz</tt>. Depuis votre répertoire de travail, exécutez la commande suivante :
87</p>
88<pre><tt>
89% port checksum
90</tt></pre>
91<p>
92La commande <tt>port</tt> opère directement sur le <tt>Portfile</tt> du répertoire de travail actuel. Vous devriez voir la même chose que ce qui suit :
93</p>
94<!--
95.........|.........|.........|.........|.........|.........|.........|.........|
96-->
97<pre><tt>
98DEBUG: Executing com.apple.main (ircii)
99DEBUG: Executing com.apple.fetch (ircii)
100--->  ircii-20020912.tar.gz doesn't seem to exist in /opt/local/var/db/dports/
101distfiles
102--->  Attempting to fetch ircii-20020912.tar.gz from ftp://
103ircftp.au.eterna.com.au/pub/ircII/
104DEBUG: Executing com.apple.checksum (ircii)
105Error: No checksums statement in Portfile.  File checksums are:
106ircii-20020912.tar.gz md5 2ae68c015698f58763a113e9bc6852cc
107Error: Target error: com.apple.checksum returned: No checksums statement in
108Portfile.
109</tt></pre>
110
111<h3>
112<a name="checksum"></a>Vérification du fichier téléchargé
113</h3>
114<p>
115Remarquez que DarwinPorts vérifiera dans un premier temps s'il existe une copie locale d'<tt>ircii-20020912.tar.gz</tt> mais il ne la trouvera pas, donc il la téléchargera depuis le site distant. La commande port ne se termine correctement car l'erreur : "No checksums statement in Portfile" est arrivée. Les Portfiles doivent contenir une somme de contrôle md5 de tous les fichiers distribués -- cela permet à DarwinPorts de vérifier l'exactitude et l'authenticité des sources. Pour plus de souplesse, une somme de contrôle md5 pour les fichiers téléchargés est affichée lorsque l'argument <tt>checksums</tt> n'est pas spécifié. Revenez en arrière et ajoutez ce qui suit à votre Portfile :
116</p>
117<pre><tt>
118checksums       md5 2ae68c015698f58763a113e9bc6852cc
119</tt></pre>
120
121<h3>
122<a name="extract"></a>Extraction des sources dans un répertoire de travail
123</h3>
124<p>
125Maintenant que nous avons une somme de contrôle, nous pouvons vérifier nos sources. Procédons à l'extraction des sources dans notre répertoire de travail. Exécutez la commande suivante :
126</p>
127<pre><tt>
128% port extract
129</tt></pre>
130<p>
131Qui devrait afficher ce qui suit :
132</p>
133<!--
134.........|.........|.........|.........|.........|.........|.........|.........|
135-->
136<pre><tt>
137DEBUG: Skipping completed com.apple.main (ircii)
138DEBUG: Skipping completed com.apple.fetch (ircii)
139DEBUG: Executing com.apple.checksum (ircii)
140--->  Checksum OK for ircii-20020912.tar.gz
141DEBUG: Executing com.apple.extract (ircii)
142--->  Extracting for ircii-20020912
143--->  Extracting ircii-20020912.tar.gz ... DEBUG: Assembled command: 'cd /Users/
144kevin/opendarwin/proj/darwinports/dports/irc/ircii/work &amp;&amp; gzip -dc /opt/local/
145var/db/dports/distfiles/ircii-20020912.tar.gz | tar -xf -'
146Done
147</tt></pre>
148<h3>
149<a name="configure"></a>Exécution d'un script Configure
150</h3>
151<p>
152Maintenant que les sources ont été extraites dans un répertoire nommé <tt>work</tt> placé dans le répertoire de travail actuel, nous pouvons configurer les sources afin de les compiler avec les options désirées. Par défaut, DarwinPorts assume que le logiciel que vous portez utilise un script configure autoconf, et toujours par défaut, DarwinPorts passera l'argument <tt>--prefix=${prefix}</tt> au script configure, spécifiant que ce logiciel devra s'installer dans la hiérarchie utilisée par DarwinPorts.
153</p>
154<p>
155Les options standards d'ircII semblent correctes pour une installation de base sur Darwin, donc nous passerons directement à la phase de compilation. 
156</p>
157
158<h3>
159<a name="build"></a>Compilation des sources
160</h3>
161<p>
162Pour compiler, tapez ce qui suit :
163</p>
164<pre><tt>
165% port build
166</tt></pre>
167<p>
168Par défaut, la phase de compilation exécute l'utilitaire système make(1). (Cela peut être changé avec l'option <tt>build.type</tt> qui accepte les arguments tel que <tt>bsd</tt>, <tt>gnu</tt> ou <tt>pbx</tt>. Alternativement, l'option <tt>build.cmd</tt> peut être utilisée pour spécifier une commande de compilation arbitraire.) L'étape ci-dessus a commencé la compilation des sources, lorsqu'elle sera terminée, nous serons fin prêt pour installer le logiciel. 
169</p>
170
171<h3>
172<a name="install"></a>Installation du programme dans le système
173</h3>
174<p>
175Les Portfiles doivent contenir une option <tt>contents</tt> qui spécifie quels sont les fichiers installés. DarwinPorts utilise cette information pour cataloguer quel fichier appartient à quel logiciel, car ensuite il peut être désinstaller ultérieurement. Chaque paramètre de <tt>contents</tt> est un chemin vers un fichier. Tous les chemins sont relatifs à la variable <tt>${prefix}</tt>. Comme moyen simple de déterminer exactement quels fichiers font partie d'ircII, utilisons la commande "find" pour composer un manifeste des fichiers dans la hiérarchie <tt>${prefix}</tt>. Après l'installation, nous allons réutiliser la commande "find" et utiliser les différences pour générer notre liste.
176</p>
177<p>
178En utilisant le format unidiff, nous allons comparer la liste des fichiers existants avec la nouvelle liste de fichiers, en prenant en compte juste les nouvelles lignes ajoutées. Comme les chemins sont supposés être relatifs à <tt>${prefix}</tt>, nous allons passer via <tt>sed</tt> et effacer le prefix (/opt/local/), et stocker le résultat dans un fichier nommé <tt>contents</tt> placé dans notre dossier hébergeant notre port. Nous pouvons faire tout cela via les commandes suivantes :
179</p>
180<!--
181.........|.........|.........|.........|.........|.........|.........|.........|
182-->
183<pre><tt>
184% find /opt/local > /tmp/existing.files
185% sudo port install
186% find /opt/local > /tmp/more.files
187% diff -u /tmp/existing.files /tmp/more.files | grep ^\+\/ | \
188  sed -e 's|^\+/opt/local/*||g' > contents
189</tt></pre>
190<p>
191Maintenant que nous avons un fichier contents dans notre répertoire hébergeant notre port, nous devrons l'éditer afin de débuter avec <tt>contents {</tt> et de terminer avec un <tt>}</tt>. (C'est important de noter que tout autre processus utilisant la hiérarchie <tt>${prefix}</tt> peut interférer avec l'efficacité de la commande <tt>find</tt>. Vous devriez vérifier le fichier <tt>contents</tt> résultant afin de voir si tout les fichiers apparaissent à leur place, spécialement les fichiers temporaires de DarwinPorts comme <tt>/var/db/receipts/ircii-20020912.tmp</tt>.)
192Il est également important de s'assurer que dans le fichier contents les répertoires soient listés <i>après</i> les fichiers qui les contiennent afin que le processus de désinstallation fonctionne correctement.
193Ensuite nous devrons éditer le Portfile afin d'inclure notre fichier contents :
194</p>
195<pre><tt>
196include contents
197</tt></pre>
198<p>
199Si la liste des fichiers installés par le port ne s'étend pas au-delà d'une page de terminal de 80x24, l'option <tt>contents</tt> devrait être incluse dans le Portfile. Au lieu de <tt>include contents</tt>, nous utiliserons :
200</p>
201<pre><tt>
202contents    bin/irc \
203            bin/irc-20020912 \
204            man/man1/irc.1 \
205            man/man1/ircbug.1 \
206            man/man1/ircII.1 \
207            man/man1
208</pre></tt>
209<p>
210À présent nous avons un portfile complet. Relancez l'étape d'installation pour ajouter ce port à votre propre registre :
211</p>
212<pre><tt>
213% sudo port install
214</tt></pre>
215Qui devrait afficher :
216<pre><tt>
217DEBUG: Skipping completed com.apple.main (ircii)
218DEBUG: Skipping completed com.apple.fetch (ircii)
219DEBUG: Skipping completed com.apple.checksum (ircii)
220DEBUG: Skipping completed com.apple.extract (ircii)
221DEBUG: Skipping completed com.apple.patch (ircii)
222DEBUG: Skipping completed com.apple.configure (ircii)
223DEBUG: Skipping completed com.apple.build (ircii)
224DEBUG: Skipping completed com.apple.install (ircii)
225DEBUG: Executing com.apple.registry (ircii)
226--->  Adding ircii to registry, this may take a moment...
227</tt></pre>
228
229<h2>
230Sujets avancés
231</h2>
232
233<h3>
234<a name="targets"></a>Modifier des cibles
235</h3>
236<p>
237Il est possible de modifier la fonctionnalité d'une cible de compilation avec le code Tcl. Un exemple commun est le suivant, qui peut être utile pour un script sans script configure autoconf :
238</p>
239<pre><tt>
240configure {}
241</tt></pre>
242<p>
243Dans le Portfile, cela remplacera la fonctionnalité de la cible de configure, aussi nous sauterons cette étape. Il est également possible d'exécuter du code Tcl immédiatement avant ou après une cible standard. Cela peut être accompli de la manière suivante :
244</p>
245<!--
246.........|.........|.........|.........|.........|.........|.........|.........|
247-->
248<pre><tt>
249post-configure {
250    reinplace "s|change.this.to.a.server|irc.openprojects.net|g" \
251        "${workdir}/${worksrcdir}/config.h"
252}
253</tt></pre>
254<p>
255Cet exemple remplace l'occurrence de <tt>change.this.to.a.server</tt> avec <tt>irc.openprojects.net</tt> dans le fichier config.h qui a été généré pendant la phase précédant <tt>configure</tt>. Notez que c'est en quelque sorte un exemple inventé et voulu, car la même chose aurait pu être faite en spécifiant <tt>--with-default-server=irc.openprojects.net</tt> dans <tt>configure.args</tt>, mais l'approche est généralement utile lorsque de tels arguments ne sont pas présents.
256</p>
257
258<h3>
259<a name="variants"></a>Variantes du Portfile
260</h3>
261<p>
262Comme Darwin 6.0 gère ipv6, il est possible de configurer le port avec l'option <tt>--with-ipv6</tt>. Cela peut être effectué en ajoutant l'option suivante dans le Portfile :
263</p>
264<pre><tt>
265configure.args      --disable-ipv6
266
267variant ipv6 {
268    configure.args-append  --enable-ipv6
269}
270</tt></pre>
271<p>
272Maintenant la compilation par défaut n'inclura pas le support d'ipv6, mais si la variante ipv6 est voulue, ircII l'aura. Les options par elles-même devraient être considérées comme un facteur d'assignation. Comme les variantes peuvent être utilisées en combinaison avec d'autre, il est conseillé de les ajouter uniquement aux options au lieu de les écraser. Toutes les options peuvent avoir un suffixe avec <tt>-append</tt> ou <tt>-delete</tt> pour ajouter ou effacer un terme de la liste. Vous pouvez spécifier la compilation avec la variante ipv6 de la manière suivante :
273</p>
274<pre><tt>
275% port build +ipv6
276</tt></pre>
277
278<h2>
279Annexe
280</h2>
281
282<h3>
283<a name="portfilelist"></a>Aperçu d'un Portfile
284</h3>
285<p>
286Ce qui suit est le listage complet du Portfile d'ircII :
287</p>
288<pre><tt>
289PortSystem 1.0
290name            ircii
291version         20020912
292categories      irc
293maintainers     kevin@opendarwin.org
294master_sites    ftp://ircftp.au.eterna.com.au/pub/ircII/
295checksums       md5 2ae68c015698f58763a113e9bc6852cc
296configure.args  --disable-ipv6
297include         contents
298
299post-configure {
300        reinplace "s|change.this.to.a.server|irc.openprojects.net|g" \
301                  "${workdir}/${worksrcdir}/config.h"
302}
303
304variant ipv6 {
305        configure.args-append --enable-ipv6
306}
307</tt></pre>
308
309<h3>
310<a name="contentslist"></a>Liste de contents
311</h3>
312<p>
313Ce qui suit est un listage partiel du fichier contents d'ircII :
314</p>
315<pre><tt>
316contents {
317bin/irc
318bin/irc-20020912
319... omitted ...
320man/man1/irc.1
321man/man1/ircbug.1
322man/man1/ircII.1
323man/man1
324man
325... omitted ...
326}
327</tt></pre>
328
329
330<? 
331        od_print_footer("fr"); 
332?>
Note: See TracBrowser for help on using the repository browser.