root/traduc/branches/bv747/manuel/cvs.sgml

Revision 13, 28.0 kB (checked in by gleu, 3 years ago)

Suite de l'import pour le passage CVS à SVN.

Line 
1 <!--
2 $Header: /var/lib/cvs/pgsql-fr/sgml/cvs.sgml,v 1.5.2.1 2005/04/02 06:45:54 guillaume Exp $
3 CVS code repository
4 Thomas Lockhart
5 -->
6
7 <appendix id="cvs">
8  <docinfo>
9   <authorgroup>
10    <author>
11     <firstname>Marc</firstname>
12     <surname>Fournier</surname>
13    </author>
14    <author>
15     <firstname>Tom</firstname>
16     <surname>Lane</surname>
17    </author>
18    <author>
19     <firstname>Thomas</firstname>
20     <surname>Lockhart</surname>
21    </author>
22   </authorgroup>
23   <date>1999-05-20</date>
24  </docinfo>
25
26  <title>Dépôt <productname>CVS</productname></title>
27
28  <para>
29   Le code source de <productname>PostgreSQL</productname> est stocké et géré en
30   utilisant le système de gestion de codes <productname>CVS</productname>.
31  </para>
32
33  <para>
34   Au moins deux méthodes,
35   CVS anonyme et <productname>CVSup</productname>,
36   permettent d'extraire de <productname>CVS</productname> l'arborescence du
37   code source du serveur <productname>PostgreSQL</productname> vers votre
38   serveur local.
39  </para>
40
41  <sect1 id="anoncvs">
42   <title>Obtenir les sources via <productname>CVS</productname> anonyme</title>
43
44   <para>
45     Si vous voulez mettre régulièrement à jour vos sources, vous pouvez les
46     prendre de notre serveur <productname>CVS</productname>, puis utiliser
47     <productname>CVS</productname> pour récupérer les mises à jour de temps
48     en temps.
49   </para>
50
51   <procedure>
52    <title>CVS anonyme</title>
53
54    <step>
55     <para>
56      Vous aurez besoin d'une copie locale de <productname>CVS</productname>
57      (Concurrent Version Control System), que vous pouvez obtenir depuis
58      <ulink url="http://www.cyclic.com/">http://www.cyclic.com/</ulink> ou
59      depuis n'importe quel site d'archive GNU.
60      Nous utilisons actuellement la version 1.10 (la plus récente au moment
61      de l'écriture de cet article). Beaucoup de systèmes ont une version
62      récente de <application>cvs</application> installé par défaut.
63     </para>
64    </step>
65
66    <step>
67     <para>
68      Connectez-vous une première fois au serveur
69      <productname>CVS</productname>&nbsp;:
70
71      <programlisting>
72 cvs -d :pserver:anoncvs@anoncvs.postgresql.org:/projects/cvsroot login
73      </programlisting>
74
75      Un mot de passe vous est demandé. Vous pouvez entrer ce que vous voulez,
76      sauf une chaîne vide.
77     </para>
78
79     <para>
80      Vous n'avez besoin de faire ceci qu'une seule fois car le mot de passe
81      est sauvegardé dans le fichier <literal>.cvspass</literal> de votre répertoire
82      personnel.
83     </para>
84    </step>
85
86    <step>
87     <para>
88      Récupérez les sources de <productname>PostgreSQL</productname>&nbsp;:
89      <programlisting>
90 cvs -z3 -d :pserver:anoncvs@anoncvs.postgresql.org:/projects/cvsroot co -P pgsql
91      </programlisting>
92
93      Ceci installe les sources de <productname>PostgreSQL</productname> dans un
94      sous-répertoire <filename>pgsql</filename> de votre répertoire courant.
95
96      <note>
97       <para>
98        Si vous avez une connexion rapide à Internet, vous n'avez peut-être pas
99        besoin de l'option <option>-z3</option>, qui demande à
100        <productname>CVS</productname> de compresser les données à transférer avec gzip.
101        À la vitesse d'un modem, cela permet un gain de temps substantiel.
102       </para>
103      </note>
104     </para>
105
106     <para>
107      Cette extraction initiale est un peu plus lente que de simplement télécharger
108      un fichier <filename>tar.gz</filename>; attendez vous à ce qu'elle prenne
109      40 minutes environ si vous avez un modem à 28,8&nbsp;Kbps. L'avantage de
110      <productname>CVS</productname> n'apparaîtra que plus tard, lorsque vous voudrez
111      mettre à jour les fichiers.
112     </para>
113    </step>
114
115    <step>
116     <para>
117      Lorsque vous voulez mettre à jour vos sources <productname>CVS</productname>
118      avec la dernière version, faites <command>cd</command> dans le sous-répertoire
119     <filename>pgsql</filename> et lancez la commande
120      <programlisting>
121 $ cvs -z3 update -d -P
122      </programlisting>
123
124      Ceci ne récupère que les modifications qui ont eu lieu depuis la dernière
125      fois que vous avez fait une mise à jour. La mise à jour ne dure généralement
126      que quelques minutes, même avec un simple modem.
127     </para>
128    </step>
129
130    <step>
131     <para>
132      Vous pouvez économiser quelques saisies en vous faisant un fichier
133      <filename>.cvsrc</filename> dans votre répertoire personnel ($HOME) en lui
134      ajoutant&nbsp;:
135      <programlisting>
136 cvs -z3
137 update -d -P
138      </programlisting>
139
140      Ceci ajoute l'option <option>-z3</option> à toutes les commandes cvs, et les options
141      <option>-d</option> et <option>-P</option> aux mises à jour par cvs. Vous n'avez plus
142      qu'à lancer
143      <programlisting>
144 $ cvs update
145      </programlisting>
146
147      pour mettre à jour vos fichiers.
148     </para>
149    </step>
150   </procedure>
151
152   <caution>
153    <para>
154     Certaines versions anciennes de <productname>CVS</productname> ont un
155     problème qui fait que tous les fichiers extraits ont des droits en
156     écriture pour tout le monde. Si vous vous apercevez que cela vous
157     arrive, vous pouvez faire quelque chose comme&nbsp;:
158     <programlisting>
159 $ chmod -R go-w pgsql
160     </programlisting>
161     pour remettre les droits d'aplomb.
162     Ce problème a été corrigé dans la version 1.9.28 de
163     <productname>CVS</productname>.
164    </para>
165   </caution>
166
167   <para>
168    <productname>CVS</productname> peut faire de nombreuses autres
169    choses, comme retrouver des versions antérieures des sources de
170    <productname>PostgreSQL</productname> plutôt que les dernières
171    versions de développement.
172    Pour plus d'informations, consultez le manuel de
173    <productname>CVS</productname> ou bien lisez la documentation en
174    ligne à
175    <ulink url="http://www.cyclic.com/">http://www.cyclic.com/</ulink>.
176   </para>
177  </sect1>
178
179  <sect1 id="cvs-tree">
180   <title>Organisation de l'arbre <productname>CVS</productname></title>
181
182   <para>
183    <note>
184     <title>Auteur</title>
185     <para>
186      Écrit par Marc G. Fournier (<email>scrappy@hub.org</email>)
187      le 05/11/1998.
188     </para>
189    </note>
190   </para>
191
192   <para>
193    La commande <command>cvs checkout</command> a un paramètre, <option>-r</option>,
194    qui permet d'obtenir une révision particulière d'un module. Ce
195    paramètre permet par exemple de retrouver les fichiers source de la
196    version 6_4 du module 'tc' à tout moment dans le futur.
197
198    <programlisting>
199 $ cvs checkout -r REL6_4 tc
200    </programlisting>
201    C'est en particulier utile si quelqu'un pense qu'il y a un problème
202    dans cette version, mais que vous ne trouvez pas d'erreur dans
203    la version courante.
204
205    <tip>
206     <para>
207      Vous pouvez aussi extraire un module tel qu'il était à une date
208      donnée en utilisant l'option <option>-D</option>.
209     </para>
210    </tip>
211   </para>
212
213   <para>
214    Lorsque vous marquez plus d'un fichier avec une marque
215    particulière, vous pouvez vous représenter la marque comme
216    <quote>une courbe tracée dans la matrice des noms de fichiers et
217    des numéros de révision</quote>. Supposons que nous ayons 5 fichiers avec
218    les révisions suivantes&nbsp;:
219
220    <programlisting>
221              fichier1 fichier2 fichier3 fichier4 fichier5
222
223              1.1      1.1      1.1      1.1  /---1.1*    &lt;-*-  MARQUE
224              1.2*-    1.2      1.2    --1.2*-
225              1.3  \-- 1.3*-    1.3   /  1.3
226              1.4           \   1.4  /   1.4
227                             \--1.5*-    1.5
228                                1.6
229    </programlisting>
230
231    alors la marque <literal>MARQUE</literal> référence
232    fichier1-1.2, fichier2-1.3, etc.
233
234    <note>
235     <para>
236      Pour créer une branche de version, à part l'option -b ajoutée sur
237      la ligne de commande, c'est la même chose.</para>
238     </note>
239   </para>
240
241   <para>
242    Ainsi, pour créer la version 6.4, j'ai fait&nbsp;:
243
244    <programlisting>
245 $ cd pgsql
246 $ cvs tag -b REL6_4
247    </programlisting>
248    ce qui créera la marque et la branche pour l'arbre de la version.
249   </para>
250
251   <para>
252    Pour ceux qui ont un accès <productname>CVS</productname>, il est
253    simple de créer des répertoires séparés pour chaque version.
254    D'abord, créez deux répertoires, VERSION et COURANT, afin de ne
255    pas les mélanger. Puis&nbsp;:
256
257    <programlisting>
258 cd RELEASE
259 cvs checkout -P -r REL6_4 pgsql
260 cd ../CURRENT
261 cvs checkout -P pgsql
262    </programlisting>
263
264    Cela crée deux arbres de répertoires, <filename>VERSION/pgsql</filename> et
265    <filename>COURANT/pgsql</filename>. À partir de ce moment,
266    <productname>CVS</productname> gardera trace de quel arbre de
267    référence est dans quel répertoire, et permettra des mises à jour
268    indépendantes de chaque arbre.
269   </para>
270
271   <para>
272    Si vous ne travaillez <emphasis>que</emphasis> sur l'arbre
273    <literal>CURRENT</literal>, faites tout ce qui est indiqué jusqu'à
274    ce que nous ayons commencé à marquer les branches de versions.
275   </para>
276
277   <para>
278    Après avoir fait l'extraction initiale d'une branche
279
280    <programlisting>
281 $ cvs checkout -r REL6_4
282    </programlisting>
283
284    tout ce que vous faites dans ce répertoire est limité à cette branche.
285    Si vous appliquez une correction à cette structure de répertoires
286    et faites un
287
288    <programlisting>
289 cvs commit
290    </programlisting>
291
292    dans ce répertoire, la correction est appliquée à cette branche et
293    <emphasis>seulement</emphasis> à cette branche.
294   </para>
295  </sect1>
296
297  <sect1 id="cvsup">
298   <title>Obtenir les sources via <productname>CVSup</productname></title>
299
300   <para>
301    Une alternative au CVS anonyme pour obtenir l'arbre source de
302    <productname>PostgreSQL</productname> est
303    <productname>CVSup</productname>.
304    <productname>CVSup</productname> a été développé par John Polstra
305    (<email>jdp@polstra.com</email>) pour distribuer des arbres de
306    référence CVS et d'autres arborescences de fichiers pour le
307    <ulink url="http://www.freebsd.org">projet FreeBSD</ulink>.
308   </para>
309
310   <para>
311    Un des avantages majeurs de <productname>CVSup</productname> est
312    qu'il peut répliquer fiablement la <emphasis>totalité</emphasis>
313    du référentiel CVS sur votre système local, ce qui permet un accès
314    rapide aux opérations CVS comme <option>log</option> ou
315    <option>diff</option>.
316    Autre avantage, la synchronisation efficace avec le serveur
317    <productname>PostgreSQL</productname> grâce à un protocole de flux
318    de transfert qui ne transmet que les différences depuis la
319    dernière mise à jour.
320   </para>
321
322   <sect2>
323    <title>Préparer un système client <productname>CVSup</productname></title>
324
325    <para>
326     Deux groupes de répertoires sont nécessaires à
327     <productname>CVSup</productname>&nbsp;: un répertoire contenant le
328     référentiel <productname>CVS</productname> local (ou simplement
329     un groupe de répertoires si vous ne récupérez qu'un extrait plutôt
330     que le référentiel complet&nbsp;; voir plus loin) et une zone dans
331     laquelle <productname>CVSup</productname> enregistre ses propres
332     données. Ces deux groupes de répertoires peuvent coexister dans la
333     même arborescence.
334    </para>
335
336    <para>
337     Décidez où vous souhaitez garder votre copie locale du référentiel
338     <productname>CVS</productname>. Sur un de nos systèmes, nous
339     avons récemment créé un référentiel dans
340     <filename>/home/cvs/</filename>, mais nous avions jusque là utilisé
341     <filename>/opt/postgres/cvs/</filename> comme arbre de développement
342     pour <productname>PostgreSQL</productname>. Si vous souhaitez
343     placer votre référentiel dans <filename>/home/cvs/</filename>,
344     alors ajoutez
345
346     <programlisting>
347 setenv CVSROOT /home/cvs
348     </programlisting>
349
350     dans votre fichier <filename>.cshrc</filename>, ou une ligne
351     similaire dans votre <filename>.bashrc</filename> ou dans votre
352     <filename>.profile</filename>, en fonction de votre interpréteur
353     de commandes (shell).
354    </para>
355
356    <para>
357     La zone de référentiel de <application>cvs</application> doit
358     être initialisée. Une fois que <envar>CVSROOT</envar> est
359     initialisée, il suffit de faire&nbsp;:
360
361     <programlisting>
362 $ cvs init
363     </programlisting>
364
365     après quoi vous devriez au moins voir un répertoire
366     <filename>CVSROOT</filename> en listant le répertoire
367     <envar>CVSROOT</envar>&nbsp;:
368
369     <programlisting>
370 $ ls $CVSROOT
371 CVSROOT/
372     </programlisting>
373    </para>
374   </sect2>
375
376   <sect2>
377    <title>Utiliser un client <productname>CVSup</productname></title>
378
379    <para>
380     Vérifiez que <application>cvsup</application> est dans votre
381     chemin. Sur la plupart des systèmes, cela se fait en tapant
382
383     <programlisting>
384 which cvsup
385     </programlisting>
386
387     Puis, lancez simplement
388     <application>cvsup</application> en faisant&nbsp;:
389
390     <programlisting>
391 $ cvsup -L 2 <replaceable class="parameter">postgres.cvsup</replaceable>
392     </programlisting>
393
394     où <option>-L 2</option> active certains messages de statut pour
395     vous permettre de suivre le progrès pour la mise à jour et
396     <replaceable class="parameter">postgres.cvsup</replaceable> est
397     la chemin et le nom que vous avez donné à votre fichier de
398     configuration <productname>CVSup</productname>.
399    </para>
400
401    <para>
402     Voici un fichier de configuration <productname>CVSup</productname>
403     modifié pour une installation spécifique, et maintient un
404     référentiel <productname>CVS</productname> local complet.
405
406     <programlisting>
407 # Ce fichier représente le fichier de distribution CVSup standard
408 # pour le projet de SGBDRO <productname>PostgreSQL</>
409 # Modifié par lockart@fourpalms.org 1997-08-28
410 # - Pointe vers mon arborescence de référence locale
411 # - Extrait le référentiel CVS complet, pas seulement la
412 #   dernière version
413 #
414 #Valeurs par défaut qui s'appliquent à toutes les collections
415 *default host=cvsup.postgresql.org
416 *default compress
417 *default release=cvs
418 *default delete use-rel-suffix
419 # Activez la ligne suivante pour récupérer la dernière version
420 #*default tag=.
421 # Activez la ligne suivante récupérer ce qui est précisé en dessus ou
422 # par défaut à la date précisée en dessous
423 #*default date=97.08.29.00.00.00
424
425 # répertoire de base où CVSup stocke ses fichiers 'marque page'
426 # créera un sous répertoire sup/
427 #*default base=/opt/postgres # /usr/local/pgsql
428 *default base=/home/cvs
429
430 # répertoire préfixe où CVSup stocke les distributions.
431 *default prefix=/home/cvs
432
433 # Distribution complète, avec tout ce qui est en dessous
434 pgsql
435
436 # distributions partielles
437 # pgsql-doc
438 # pgsql-perl5
439 # pgsql-src
440
441    </programlisting>
442    </para>
443
444    <para>
445     Ce qui suit est une suggestion de fichier de configuration
446     <productname>CVSup</productname> issu du
447     <ulink url="ftp://ftp.postgresql.org/pub/CVSup/README.cvsup">
448     site ftp de <productname>PostgreSQL</></ulink>, qui
449     ne récupère que la version courante&nbsp;:
450
451     <programlisting>
452 # Ce fichier représente la distribution CVSup standard pour le
453 # projet de SGBDRO <productname>PostgreSQL</>.
454 #
455 # Valeurs par défaut qui d'appliquent à toutes les collections.
456 *default host=cvsup.postgresql.org
457 *default compress
458 *default release=cvs
459 *default delete use-rel-suffix
460 *default tag=.
461
462 # répertoire de base où CVSup stocke ses fichiers 'marque page'
463 *default base=<replaceable class="parameter">/usr/local/pgsql</replaceable>
464
465 # répertoire préfixe où CVSup stocke les distributions.
466 *default prefix=<replaceable class="parameter">/usr/local/pgsql</replaceable>
467
468 # Distribution complète, avec tout ce qui est en dessous
469 pgsql
470
471 # distributions partielles
472 # pgsql-doc
473 # pgsql-perl5
474 # pgsql-src
475
476     </programlisting>
477    </para>
478   </sect2>
479
480   <sect2>
481    <title>Installer <productname>CVSup</productname></title>
482
483    <para>
484     <productname>CVSup</productname> est disponible sous forme de
485     fichiers source, de binaires pré-compilés ou de RPM Linux.
486     Il est beaucoup plus simple d'utiliser les binaires plutôt que de
487     compiler les sources, principalement parce que cela nécessite
488     le compilateur Modula-3, qui est très puissant mais volumineux.
489    </para>
490
491    <procedure>
492     <title>Installation de <productname>CVSup</productname> à partir des fichier binaires</title>
493
494     <para>
495      Vous pouvez utiliser les binaires pré-compilés si vous avez une
496      plate-forme pour laquelle les binaires sont postés sur le
497      <ulink url="ftp://ftp.postgresql.org/pub">site ftp de <productname>PostgreSQL</productname></ulink>,
498      vous pouvez ou si avez FreeBSD, pour lequel
499      <productname>CVSup</productname> est disponible comme
500      <quote>portage</quote>.
501
502      <note>
503       <para>
504        <productname>CVSup</productname> a été initialement développé
505        pour distribuer l'arbre des sources de
506        <productname>FreeBSD</productname>. Il est disponible comme
507        <quote>portage</quote>, et pour ceux qui ont FreeBSD, si cela
508        n'explique pas suffisamment comment obtenir et installer CVSup,
509        merci d'ajouter une procédure ici.
510        </para>
511      </note>
512     </para>
513
514     <para>
515      Au moment de l'écriture de ce chapitre, des binaires sont
516      disponibles pour&nbsp;:
517      Alpha/Tru64, ix86/xBSD,
518      HPPA/HP-UX 10.20, MIPS/IRIX,
519      ix86/linux-libc5, ix86/linux-glibc,
520      Sparc/Solaris et Sparc/SunOS.
521     </para>
522
523     <step>
524      <para>
525       Récupérez l'archive tar des binaires
526       <application>cvsup</application>
527       (<application>cvsupd</application> n'est pas nécessaire pour
528        être un client) approprié pour votre plate-forme.
529      </para>
530
531      <substeps>
532       <step performance="optional">
533        <para>
534         Si vous avez FreeBSD, installez le portage
535         <productname>CVSup</productname>.
536        </para>
537       </step>
538
539       <step performance="optional">
540        <para>
541         Si vous avez une autre plate-forme, vérifiez et télécharger le
542         binaire approprié
543         <ulink url="ftp://ftp.postgresql.org/pub">du site ftp <productname>PostgreSQL</productname></ulink>.
544        </para>
545       </step>
546      </substeps>
547     </step>
548
549     <step>
550      <para>
551       Vérifiez dans l'archive tar les contenus et la structure
552       de répertoires. Pour le tar Linux au moins, le binaire statique
553       et la page de manuel sont inclues sans répertoires.
554     </para>
555
556      <substeps>
557       <step>
558        <para>
559         Si le binaire est au plus haut niveau du fichier tar, alors
560         il suffit d'extraire le fichier tar dans le répertoire cible&nbsp;:
561
562         <programlisting>
563 $ cd /usr/local/bin
564 $ tar zxvf /usr/local/src/cvsup-16.0-linux-i386.tar.gz
565 $ mv cvsup.1 ../doc/man/man1/
566         </programlisting>
567        </para>
568       </step>
569
570       <step>
571        <para>
572         S'il y a une structure de répertoires dans le fichier tar,
573         alors extrayez le dans /usr/local/src et déplacez les binaires
574         dans le répertoire approprié, comme indiqué ci-dessus.
575       </para>
576       </step>
577      </substeps>
578     </step>
579
580     <step>
581      <para>
582       Assurez-vous que les nouveaux binaires sont dans votre chemin.
583
584       <programlisting>
585 $ rehash
586 $ which cvsup
587 $ set path=(<replaceable>chemin de cvsup</replaceable> $path)
588 $ which cvsup
589 /usr/local/bin/cvsup
590       </programlisting>
591      </para>
592     </step>
593    </procedure>
594   </sect2>
595
596   <sect2>
597    <title>Installation à partir des sources</title>
598
599    <para>
600     Installer <productname>CVSup</productname> n'est pas entièrement
601     trivial, principalement parce que la plupart des systèmes auront
602     besoin du compilateur Modula-3.
603
604     Ce compilateur est disponible sous forme de
605     <productname>RPM</productname> Linux, de paquetage FreeBSD ou de
606     code source.
607
608     <note>
609      <para>
610       Une installation de Modula-3 avec les sources prend environ
611       200&nbsp;Mo d'espace disque, qui redescendent ensuite à environ 50&nbsp;Mo
612       lorsque les sources sont supprimées.</para>
613     </note>
614    </para>
615
616    <procedure>
617     <title>Installation sur Linux</title>
618
619     <step>
620      <para>
621       Installer Modula-3.
622      </para>
623
624      <substeps>
625       <step>
626        <para>
627         Récupérer la distribution de <productname>Modula-3</productname>
628         à <ulink url="http://m3.polymtl.ca/m3">Polytechnique Montréal</ulink>,
629         qui maintient activement le code initialement développé par le
630         <ulink
631             url="http://www.research.digital.com/SRC/modula-3/html/home.html">centre
632             de recherches système de DEC</ulink>.
633             La distribution <productname>PM3</productname> sous forme de
634             <productname>RPM</productname> fait environ 30&nbsp;Mo compressée.
635             Au moment de l'écriture de ce document, la version 1.1.10-1
636             s'installe sans problème sur RH-5.2, alors que la version
637             1.1.11-1 est apparemment prévue pour une autre version
638             (RH-6.0?) et ne fonctionne pas sous RH-5.2.
639
640         <tip>
641          <para>
642           Cette distribution rpm spécifique a de <emphasis>nombreux</emphasis>
643           fichiers <productname>RPM</productname>, si bien que vous
644           voudrez sans doute les mettre dans un répertoire séparé.
645          </para>
646         </tip>
647        </para>
648       </step>
649
650       <step>
651        <para>
652         Installer les rpms Modula-3&nbsp;:
653
654         <programlisting>
655 # rpm -Uvh pm3*.rpm
656         </programlisting>
657        </para>
658       </step>
659      </substeps>
660     </step>
661
662     <step>
663      <para>
664      Décompresser la distribution CVSup&nbsp;:
665
666       <programlisting>
667 # cd /usr/local/src
668 # tar zxf cvsup-16.0.tar.gz
669       </programlisting>
670      </para>
671     </step>
672
673     <step>
674      <para>
675       Compiler la distribution cvsup, en supprimant l'interface
676       graphique pour éviter d'utiliser les bibliothèques X11.
677  
678       <programlisting>
679 # make M3FLAGS="-DNOGUI"
680       </programlisting>
681
682       et si vous voulez construire un binaire statique pour l'utiliser
683       sur des systèmes qui n'ont pas Modula-3 installé, essayez&nbsp;:
684
685       <programlisting>
686 # make M3FLAGS="-DNOGUI -DSTATIC"
687       </programlisting>
688      </para>
689     </step>
690
691     <step>
692      <para>
693       Installer la librairie construite précédemment&nbsp;:
694
695       <programlisting>
696 # make M3FLAGS="-DNOGUI -DSTATIC" install
697       </programlisting>
698      </para>
699     </step>
700    </procedure>
701   </sect2>
702  </sect1>
703 </appendix>
704
705 <!--
706 > It became clear that I had a problem with my m3 installation; some
707 > X11 libraries were not being found correctly.
708
709 By the way, you can build the client without the GUI by doing this
710 in the "client" subdirectory:
711
712     m3build -DNOGUI
713
714 If you build it that way, then it doesn't need the X11 libraries and
715 it's quite a bit smaller.  The GUI is fun to watch, but it's not
716 very useful.  I originally implemented it because it made debogueging
717 the multi-threaded client program much easier.
718
719 To build a statically-linked client, edit <filename>client/src/m3makefile</filename>
720 to add <literal>build_standalone()</literal>
721  just before the <literal>program()</literal> entry near
722 the end of the file:
723
724 <programlisting>
725 build_standalone()
726 program(cvsup)
727 </programlisting>
728
729 Then, if cvsup has already been built, remove the machine-specific build directory
730 (e.g. <filename>LINUXELF/</filename>) and rebuild:
731
732 <programlisting>
733 rm -rf LINUXELF
734 m3build -DNOGUI -v
735 cp -p LINUXELF/cvsup /usr/local/bin
736 </programlisting>
737
738 > Anyway, with the reinstall and the two-line patch above (and that
739 > one include-file _POSIX_SOURCE workaround from the previous try),
740 > things built cleanly.
741
742 Good!
743
744 > Now I just need a server somewhere to test.
745
746 If you want to try it out, there are public servers for the FreeBSD
747 source repository at cvsup.freebsd.org and cvsup2.freebsd.org.
748 Here's a suggested supfile:
749
750 *default host=cvsup.freebsd.org compress
751 *default release=cvs
752 *default base=/home/jdp/cvsup-test      # FIX THIS
753 *default delete use-rel-suffix
754 # *default tag=.
755 src-bin
756
757 This will fetch you the source repository for the programs that get
758 installed into "/bin".  I chose it because it's one of the smaller
759 pieces of the system.  Make an empty directory someplace for
760 testing, and change the "FIX THIS" line to specify that directory
761 after the "base=".
762
763 If you are on a T1 or better, you should probably delete the
764 "compress" keyword in the first line.
765
766 As shown, it will get the repository (RCS) files.  If you uncomment
767 the line containing "tag=." then it will instead check out the
768 latest version of each file.  There's a bunch more information about
769 what you can do in
770 <ulink url="http://www.freebsd.org/handbook/cvsup.html">the CVSup Handbook</ulink>.
771
772 There is one other thing I want to send you, but not tonight.  I
773 discovered the hard way that you need a malloc package that is
774 thread-safe with respect to the Modula-3 threads package.  The
775 Modula-3 runtime takes care to do the proper mutual exclusion around
776 all calls it makes to malloc.  But if you call certain functions in
777 the native C library which in turn call malloc, then the mutual
778 exclusion gets bypassed.  This can lead to rare but baffling core
779 dumps.
780
781 For FreeBSD, I solved this by adding a thread-safe malloc package
782 into the Modula-3 runtime.  The package is quite portable, and I'm
783 sure it will work well for Linux with very few changes (probably
784 none at all).  I want to send it to you along with instructions
785 for making it a part of the "libm3core" library.  It's very simple,
786 but I've run out of steam for tonight. :-)  Once you have this
787 malloc in place, the CVSup system should be rock solid.  We have
788 servers that have been up for weeks and have served many thousands
789 of clients without any observed problems.
790
791 > We hope to have the PostgreSQL tree using CVSup within a month or
792 > so, and hope to retire sup in September...
793
794 Great!  I'll do my best to help make sure you don't regret it.
795
796 John
797
798 Tom,
799
800 I'm appending the sources for the thread safe version of malloc that
801 I told you about.  I believe that it will simply compile and work
802 under Linux, but I've never had an opportunity to test it there.
803 I urge you to put it into your Modula-3 system; otherwise, you
804 are guaranteed to get occasional mysterious core dumps from cvsupd.
805
806 As a first step, I'd suggest simply trying to compile it under
807 Linux, like this:
808
809     cc -O -c malloc.c
810
811 You shouldn't get any errors or warnings.  If you do, contact me
812 before you waste any more time on it.
813
814 Assuming it compiles OK, copy malloc.c into this directory of your
815 Modula-3 source tree:
816
817     m3/m3core/src/runtime/LINUXELF
818
819 In that same directory, edit "m3makefile" and add this line to the
820 end of the file:
821
822     c_source       ("malloc")
823
824 Then chdir up into "m3/m3core" of the Modula-3 tree and type
825 "m3build".  (I'm assuming you already have a working Modula-3
826 installation.)  After that finishes, become root and type "m3ship"
827 to install it.
828
829 That's all there is to it.  If you built cvsup and cvsupd to use
830 shared libraries, you don't even need to re-link them.  They'll pick
831 up the change automatically from the updated shared library.
832
833 Let me know if you run into any problems with it.
834
835 By the way, this is a very good malloc in its own right.  It's worth
836 using even aside from the thread safety of it.
837
838 Regards,
839 John
840
841 I've deposited a statically built cvsup client executable (and man pages
842 and test configuration) in
843
844   /pub/incoming/cvsup-15.1-client-linux.tar.gz
845
846 This was built and linked on Linux/v2.0.30, RH/v4.2, gnulib/v5.3.12 and
847 includes the thread-safe malloc provided by John Polstra. I'll forward
848 to you the malloc code and an additional installation e-mail from John.
849
850 The Modula-3 installation takes a good bit of room (~50MB?) and the
851 build environment is unique to Modula-3, but suprisingly enough it
852 pretty much works.
853
854 The cvsup Makefiles do not work on my machine (they are not portable
855 yet) but each major package (there are 4) can be built without needing
856 the makefiles with two commands each. Not difficult at all. John gives
857 some hints in his e-mail on how to build a static executable, and on how
858 to shrink the size of the executable by leaving out the GUI support.
859 Again, easy to do.
860
861 My client test case, picking up a sub-tree of the FreeBSD distribution,
862 worked flawlessly. I haven't tried running a server.
863
864 Thanks to John for getting me going.
865
866                         - Tom
867
868
869 For the thread-safe malloc, do the following:
870 1) install Modula-3
871 2) add the enclosed file "malloc.c" to m3/m3core/src/runtime/LINUXELF
872 3) edit the last line of m3makefile in the same directory to add
873      c_source       ("malloc")
874 4) do an "m3build" and an m3ship from the appropriate directory.
875
876 >From what John said, the malloc problem can be noticable for the
877 server-side running cvsupd. Clients may not need it.
878
879 Unfortunately I seem to have lost John's original good instructions for
880 this, so am doing this from memory. May need to ask John to give
881 instructions again...
882
883                         - Tom
884
885 -->
886
887
888 <!-- Keep this comment at the end of the file
889 Local variables:
890 mode:sgml
891 sgml-omittag:nil
892 sgml-shorttag:t
893 sgml-minimize-attributes:nil
894 sgml-always-quote-attributes:t
895 sgml-indent-step:1
896 sgml-indent-data:t
897 sgml-parent-document:nil
898 sgml-default-dtd-file:"./reference.ced"
899 sgml-exposed-tags:nil
900 sgml-local-catalogs:("/usr/lib/sgml/catalog")
901 sgml-local-ecat-files:nil
902 End:
903 -->
Note: See TracBrowser for help on using the browser.