cvs-freebsd: fully remove it

the cvs-freebsd article was removed from the English version some time
	ago.  Fully remove it from the doc tree now
This commit is contained in:
Eitan Adler 2015-04-05 16:07:22 +00:00
parent 81ad809393
commit 411bbe20b8
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=46476
16 changed files with 1 additions and 3615 deletions
de_DE.ISO8859-1/articles
el_GR.ISO8859-7/articles
es_ES.ISO8859-1/articles
ru_RU.KOI8-R/articles
share/xml
zh_CN.UTF-8/articles/cvs-freebsd
zh_TW.UTF-8/articles

View file

@ -6,7 +6,7 @@
# basiert auf: 1.42
SUBDIR = contributing
SUBDIR+= contributing-ports
gUBDIR+= contributing-ports
SUBDIR+= explaining-bsd
SUBDIR+= freebsd-update-server
SUBDIR+= nanobsd

View file

@ -5,7 +5,6 @@
SUBDIR = bsdl-gpl
SUBDIR+= contributing
SUBDIR+= cvs-freebsd
SUBDIR+= explaining-bsd
SUBDIR+= freebsd-questions
SUBDIR+= gjournal-desktop

View file

@ -1,20 +0,0 @@
# $FreeBSD$
#
# %SOURCE% en_US.ISO8859-1/articles/cvs-freebsd/Makefile
# %SRCID% 1.5
MAINTAINER= keramida@freebsd.org
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.xml
URL_RELPREFIX?= ../../../..
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -1,799 +0,0 @@
<?xml version="1.0" encoding="iso-8859-7"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
FreeBSD Greek Documentation Project
%SOURCE% en_US.ISO8859-1/articles/cvs-freebsd/article.xml
%SRCID% 1.17
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="el">
<info><title>Εγκατάσταση ενός CVS Repository &mdash; ο τρόπος του &os;</title>
<author><personname><firstname>Stijn</firstname><surname>Hoop</surname></personname><affiliation>
<address><email>stijn@win.tue.nl</email></address>
</affiliation></author>
<copyright>
<year>2001</year>
<year>2002</year>
<year>2003</year>
<holder role="mailto:stijn@win.tue.nl">Stijn Hoop</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<abstract>
<para>Το άρθρο αυτό περιγράφει τα βήματα που έκανα για να εγκαταστήσω
ένα CVS repository που χρησιμοποιεί τα ίδια αρχεία δέσμης εντολών
(scripts) με αυτά που χρησιμοποιεί και το &os; project στη δική του
εγκατάσταση. Η συγκεκριμένη προσέγγιση έχει αρκετά πλεονεκτήματα
έναντι μιας τυποποιημένης CVS εγκατάστασης, όπως πιο λεπτομερή έλεγχο
πρόσβασης στο δέντρο του κώδικα καθώς και αυτόματη παραγωγή
ευανάγνωστων email με λεπτομέρειες για κάθε αλλαγή στον πηγαίο κώδικα
(commit).</para>
</abstract>
</info>
<sect1 xml:id="introduction">
<title>Εισαγωγή</title>
<para>Τα περισσότερα projects ελεύθερου λογισμικού (free software) και
ανοιχτού κώδικα (open source) χρησιμοποιούν το
<application>CVS</application> σαν σύστημα ελέγχου του κώδικά τους.
Παρόλο που το <application>CVS</application> είναι πολύ καλό σε αυτόν
τον τομέα έχει κι αυτό το μερίδιό του σε ελαττώματα και αδυναμίες. Μια
από αυτές τις αδυναμίες είναι το ότι η κοινή χρήση κώδικα μπορεί γρήγορα
να οδηγήσει σε έναν διαχειριστικό εφιάλτη, ειδικά αν υπάρχει η επιθυμία
να προστατευτούν ορισμένα κομμάτια του δέντρου του κώδικα από κοινή
πρόσβαση.</para>
<para>Η ομάδα ανάπτυξης του &os; χρησιμοποιεί εκτενώς το
<application>CVS</application>. Διαθέτει επίσης μια μεγάλη βάση από
προγραμματιστές από πολλές διαφορετικές χώρες. Αναπτύχθηκαν λοιπόν
μερικά αρχεία δέσμης εντολών για να κάνουν την διαχείριση του repository
πιο εύκολη. Πρόσφατα τα αρχεία αυτά αναθεωρήθηκαν και κανονικοποιήθηκαν
από τον &a.joe; για να είναι πιο εύκολο να χρησιμοποιηθούν και σε άλλα
έργα. Το άρθρο αυτό περιγράφει μια μέθοδο χρήσης αυτών των νέων αρχείων
δέσμης εντολών.</para>
<para>Για να μπορέσετε να χρησιμοποιήσετε με τον καλύτερο τρόπο τις
πληροφορίες αυτού του άρθρου θα πρέπει να γνωρίζετε τις βασικές μεθόδους
λειτουργίας του <application>CVS</application>.</para>
</sect1>
<sect1 xml:id="first-setup">
<title>Πρώτη Εγκατάσταση</title>
<warning>
<para>Είναι καλή ιδέα να εκτελέσετε για πρώτη φορά αυτή τη διαδικασία
χρησιμοποιώντας ένα κενό δοκιμαστικό repository, για να είναι βέβαιο
ότι θα κατανοήσετε όλες τις συνέπειες. Πριν ξεκινήσετε σιγουρευτείτε
ότι έχετε πρόσφατα backups, τα οποία εγγυημένα δουλεύουν!</para>
</warning>
<sect2>
<title>Αρχικοποίηση του repository</title>
<para>Το πρώτο πράγμα που θα πρέπει να κάνετε όταν στήνετε ένα νέο
repository είναι να πείτε στο <application>CVS</application> να το
αρχικοποιήσει:</para>
<screen>&prompt.user; <userinput>cvs -d path-to-repository init</userinput></screen>
<para>Αυτό λέει στο <application>CVS</application> να δημιουργήσει τον
φάκελο διαχείρισης <filename>CVSROOT</filename>, όπου
συμβαίνουν όλες οι παραμετροποιήσεις.</para>
</sect2>
<sect2>
<title>Η ομάδα του repository</title>
<para>Τώρα θα δημιουργήσουμε την ομάδα στην οποία θα ανήκει το
repository. Όλοι οι committers θα πρέπει να ανήκουν σε αυτή την
ομάδα, ώστε να μπορούν να γράφουν στο repository. Για το σκοπό αυτό
θα χρησιμοποιήσουμε την ίδια ομάδα που χρησιμοποιεί γι' αυτό το σκοπό
και το &os;, την ομάδα <literal>ncvs</literal>.</para>
<screen>&prompt.root; <userinput>pw groupadd ncvs</userinput></screen>
<para>Μετά, θα πρέπει να εκτελέσετε την εντολή &man.chown.8; στον φάκελο
με παράμετρο την ομάδα που μόλις προσθέσατε, θέτοντας έτσι την ομάδα
στην οποία ανήκει ο κατάλογος:</para>
<screen>&prompt.root; <userinput>chown -R :ncvs path-to-your-repository</userinput></screen>
<para>Αυτό εξασφαλίζει ότι κανείς δεν θα μπορεί να γράψει στο repository
αν δεν ανήκει στην σωστή ομάδα.</para>
</sect2>
<sect2>
<title>Παίρνοντας τον πηγαίο κώδικα</title>
<para>Τώρα θα πρέπει να αποκτήσετε τον κατάλογο
<filename>CVSROOT</filename> από το repository του
&os;. Αυτό γίνεται εύκολα, κάνοντας check out από ένα ανοιχτής
πρόσβασης &os; CVS mirror.
Δείτε <link xlink:href="&url.books.handbook;/anoncvs.html">το σχετικό
κεφάλαιο στο εγχειρίδιο</link> για περισσότερες πληροφορίες.
Ας υποθέσουμε ότι ο πηγαίος κώδικας θα αποθηκευτεί στον
κατάλογο <filename>CVSROOT-freebsd</filename> που
βρίσκεται μέσα στον τρέχοντα κατάλογο.</para>
</sect2>
<sect2>
<title>Αντιγράφοντας τα scripts του &os;</title>
<para>Ύστερα, αντιγράφουμε τον πηγαίο κώδικα από τον
<filename>CVSROOT</filename> κατάλογο του &os; στο
δικό μας repository. Αν είστε συνηθισμένος με
το <application>CVS</application>, ίσως να σας περάσει από το μυαλό να
προσπαθήσετε να κάνετε import τα scripts, σε μια προσπάθεια να γίνει
ύστερα ο συγχρονισμός με τις κατοπινές εκδόσεις ευκολότερος. Ωστόσο,
αποδεικνύεται ότι το <application>CVS</application> παρουσιάζει μια
δυσλειτουργία στην περιοχή αυτή: Όταν εισάγετε πηγαίο κώδικα μέσα
στο <filename>CVSROOT</filename> φάκελο, δεν θα
ενημερωθούν τα απαραίτητα αρχεία διαχείρισης. Για να μπορέσετε να το
κάνετε να τα αναγνωρίσει, θα πρέπει να κάνετε checkin ξεχωριστά κάθε
αρχείο αφού έχετε τελειώσει με την εισαγωγή, χάνοντας έτσι την αξία
του <literal>cvs import</literal>. Επομένως, η προτεινόμενη μέθοδος
είναι απλά να αντιγράψετε τα scripts.</para>
<para>Δεν είναι και τόσο σημαντικό το αν η παραπάνω παράγραφος δεν σας
φαίνεται πολύ ξεκάθαρη&mdash;το τελικό αποτέλέσμα είναι το ίδιο. Απλά
ελέγξτε τον <filename>CVSROOT</filename> φάκελο και
αντιγράψτε τα &os; αρχεία πάνω από τα δικά σας τοπικά (απείραχτα)
αντίγραφα:</para>
<screen>&prompt.user; <userinput>cvs -d path-to-your-repository checkout CVSROOT</userinput>
&prompt.user; <userinput>cd CVSROOT</userinput>
&prompt.user; <userinput>cp ../CVSROOT-freebsd/* .</userinput>
&prompt.user; <userinput>cvs add *</userinput></screen>
<para>Σημειώστε ότι πιθανότατα θα πάρετε μερικές προειδοποιήσεις σχετικά
με το ότι μερικοί φάκελοι δεν θα αντιγραφούν. Δεν πειράζει. Δεν τους
χρειάζεστε αυτούς τους καταλόγους.</para>
</sect2>
<sect2>
<title>Tα scripts</title>
<para>Τώρα έχετε στον φάκελο εργασίας σας ένα ακριβές αντίγραφο των
scripts που το ίδιο το &os; project χρησιμοποιεί στο δικό του
repository. Μια περίληψη του σε τι χρησιμεύει το κάθε αρχείο
περιλαμβάνεται παρακάτω.</para>
<itemizedlist>
<listitem>
<para><filename>access</filename> - το αρχείο αυτό δεν
χρησιμοποιείται στις συνηθισμένες εγκαταστάσεις
του <application>CVS</application>. Χρησιμοποιείται μόνο
στην <link linkend="freebsdspecific">ειδική εγκατάσταση του &os;
project</link>, για να ελέγχεται η πρόσβαση στο repository.
Μπορείτε να αφαιρέσετε αυτό το αρχείο αν δεν σας ενδιαφέρει να
χρησιμοποιήσετε κάτι τέτοιο στη δική σας εγκατάσταση.</para>
</listitem>
<listitem>
<para><filename>avail</filename> - το αρχείο αυτό ελέγχει την
πρόσβαση στο repository ανά κατάλογο ή αρχείο. Μέσα σε αυτό,
μπορείτε να καθορίσετε ομάδες χρηστών στους οποίους θέλετε να
δώσετε πρόσβαση στο repository, όπως επίσης και να απαγορέψετε
commits σε επίπεδο καταλόγου ή αρχείου. Θα πρέπει να το
προσαρμόσετε ώστε να περιέχει τις ομάδες χρηστών και τους φακέλους
που θα υπάρχουν στο δικό σας repository.</para>
</listitem>
<listitem>
<para><filename>cfg.pm</filename> - το αρχείο αυτό ερμηνεύει τις
ρυθμίσεις σας και παρέχει τις εξ' ορισμού ρυθμίσεις.
<emphasis>Δεν</emphasis> πρέπει να αλλάξετε αυτό το αρχείο.
Αντίθετα, θα πρέπει να τοποθετήσετε τις δικές σας αλλαγές στις
ρυθμίσεις στο αρχείο <filename>cfg_local.pm</filename>.</para>
</listitem>
<listitem>
<para><filename>cfg_local.pm</filename> - το αρχείο αυτό περιέχει
όλες τις ρυθμιζόμενες παραμέτρους του συστήματος. Θα πρέπει να
κάνετε οποιεσδήποτε ρυθμίσεις σας εδώ, όπως σε ποια διεύθυνση θα
στέλνονται τα email από κάθε commit, σε ποιους hosts θα
επιτρέπεται να γίνονται commit, κλπ. Περισσότερες πληροφορίες
σχετικά με αυτό θα βρείτε παρακάτω.</para>
</listitem>
<listitem>
<para><filename>checkoutlist</filename> - το αρχείο αυτό
περιλαμβάνει όλα τα αρχεία που βρίσκονται κάτω από τον έλεγχο του
<application>CVS</application> στον κατάλογο αυτό&mdash;όλα εκτός
από τα προκαθορισμένα αρχεία που δημιουργεί η εντολή
<command>cvs init</command>. Θα πρέπει να
το αλλάξετε για να αφαιρέσετε μερικά, σχετικά μόνο με το &os;,
αρχεία.</para>
</listitem>
<listitem>
<para><filename>commit_prep.pl</filename> - το script αυτό εκτελεί
διάφορους ελέγχους πριν από κάθε commit, ανάλογα με τις ρυθμίσεις
που έχετε κάνει στο αρχείο <filename>cfg_local.pm</filename>. Δεν
θα χρειαστεί να πειράξετε αυτό το αρχείο.</para>
</listitem>
<listitem>
<para><filename>commitcheck</filename> - το script αυτό καλείται
απευθείας από το <application>CVS</application>. Πρώτα ελέγχει,
χρησιμοποιώντας το πρόγραμμα <filename>cvs_acls.pl</filename>, αν
ο committer έχει πρόσβαση στο συγκεκριμένο μέρος του δέντρου του
κώδικα, και μετά εκτελεί το <filename>commit_prep.pl</filename>
που εκτελεί τους διάφορους pre-commit ελέγχους. Αν δεν υπάρξει
κάποιο πρόβλημα στους ελέγχους αυτούς, τότε το
<application>CVS</application> θα επιτρέψει στο commit να
συνεχίσει. Δεν θα χρειαστεί να πειράξετε αυτό το αρχείο.</para>
</listitem>
<listitem>
<para><filename>commitinfo</filename> - το αρχείο αυτό
χρησιμοποιείται από το <application>CVS</application> στο να
αποφασίσει ποιο script να εκτελέσει πριν από κάθε commit&mdash;στη
δική μας περίπτωση αυτό το ρόλο καλύπτει το
<filename>commitcheck</filename>. Δεν θα
χρειαστεί να πειράξετε αυτό το αρχείο.</para>
</listitem>
<listitem>
<para><filename>config</filename> - το αρχείο ρυθμίσεων γι' αυτό το
repository. Θα πρέπει να κάνετε αλλαγές σ' αυτό το αρχείο ανάλογα
με τις ανάγκες σας, αλλά οι περισσότεροι διαχειριστές μπορούν να
αφήσουν τις εξ' ορισμού ρυθμίσεις. Περισσότερες πληροφορίες για
τις διάφορες δυνατότητες επιλογών που έχετε στο αρχείο αυτό
μπορείτε να βρείτε στο εγχειρίδιο του <application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>cvs_acls.pl</filename> - το script αυτό ελέγχει την
ταυτότητα του committer, και αν επιτρέπεται αυτός να έχει πρόσβαση
στο δέντρο του κώδικα. Αυτό γίνεται με βάση το
αρχείο <filename>avail</filename>. Δεν θα χρειαστεί να πειράξετε
αυτό το αρχείο.</para>
</listitem>
<listitem>
<para><filename>cvsignore</filename> - στο αρχείο αυτό καθορίζονται
τα αρχεία που το <application>CVS</application> δεν θα πρέπει να
επιτρέψει το checkin τους στο repository. Μπορείτε να
επεξεργαστείτε αυτό το αρχείο ανάλογα με τις δικές σας
προτιμήσεις. Περισσότερες πληροφορίες για το αρχείο αυτό θα
βρείτε στο εγχειρίδιο του <application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>cvswrappers</filename> - το αρχείο αυτό
χρησιμοποιείται από το <application>CVS</application> για την
ενεργοποίηση ή απενεργοποίηση του keyword expansion, ή για το αν
κάποιο αρχείο θα πρέπει να αντιμετωπίζεται ως binary. Μπορείτε να
επεξεργαστείτε αυτό το αρχείο ανάλογα με τις επιθυμίες σας.
Περισσότερες πληροφορίες σχετικά με το αρχείο αυτό μπορείτε να
βρείτε στο εγχειρίδιο του <application>CVS</application>.
Σημειώστε πως οι επιλογές <literal>-t</literal> και
<literal>-f</literal> δε δουλεύουν σωστά για client/server χρήση
του <application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>edithook</filename> - το αρχείο αυτό δεν
χρησιμοποιείται πια, αλλά εξακολουθεί να υπάρχει για ιστορικούς
λόγους. Μπορείτε να σβήσετε αυτό το αρχείο.</para>
</listitem>
<listitem>
<para><filename>editinfo</filename> - το
<application>CVS</application> χρησιμοποιεί αυτό το αρχείο για
παράκαμψη των editors. Το &os; δεν χρησιμοποιεί αυτή την
λειτουργικότητα γιατί η ερμηνεία του log μηνύματος γίνεται από τα
<filename>verifymsg</filename> και <filename>logcheck</filename>
αρχεία. Επιλέξαμε να γίνεται έτσι αυτό επειδή η χρήση του
<filename>editinfo</filename> έχει κάποια προβλήματα με τα commits
από μακριά και με τα commits που χρησιμοποιούν τις επιλογές
<literal>-F</literal> ή <literal>-F</literal>. Δεν θα χρειαστεί να
πειράξετε αυτό το αρχείο.</para>
</listitem>
<listitem>
<para><filename>exclude</filename> - το αρχείο αυτό περιέχει κανονικές
εκφράσεις (regular expressions) που χρησιμοποιούνται από το πρόγραμμα
<filename>commit_prep.pl</filename> για να προσδιοριστούν τα
αρχεία που δεν είναι απαραίτητο να περιέχουν επικεφαλίδα
επισκόπησης (revision header). Στην εγκατάσταση του &os;, όλα τα
αρχεία κάτω από έλεγχο επισκόπησης (revision control) είναι
απαραίτητο να περιέχουν μια επικεφαλίδα επισκόπησης (όπως
&dollar;FreeBSD&dollar;). Όλα τα ονόματα αρχείων που ταιριάζουν
με τουλάχιστον μια από τις γραμμές του αρχείου αυτού εξαιρούνται
από τον συγκεκριμένο έλεγχο. Θα πρέπει να προσθέσετε τις ανάλογες
κανονικές εκφράσεις στο αρχείο αυτό όταν κάνετε checkin αρχεία που
δεν είναι απαραίτητο να περιέχουν επικεφαλίδα επισκόπησης. Κατά
τη διάρκεια της εγκατάστασης των νέων scripts ελέγχου, ίσως να
είναι καλύτερα να εξαιρείται ο
κατάλογος <filename>CVSROOT/</filename> από τον
έλεγχο των headers.</para>
</listitem>
<listitem>
<para><filename>log_accum.pl</filename> - πρόκειται για ένα script
που παίρνει το log μήνυμα όπως αυτό δίνεται από το
<filename>logcheck</filename> script, και το προσθέτει στο τέλος
ενός αρχείου log στο repository, έτσι ώστε να υπάρχουν αντίγραφα
ασφαλείας από τα commit logs. Επίσης, αναλαμβάνει να στείλει ένα
mail στην email διεύθυνση που έχετε δηλώσει (στο
<filename>cfg_local.pm</filename>). Συνεργάζεται με το
<application>CVS</application> μέσω του αρχείου
<filename>loginfo</filename>. Δεν θα χρειαστεί να πειράξετε το
αρχείο αυτό.</para>
</listitem>
<listitem>
<para><filename>logcheck</filename> - το αρχείο αυτό ερμηνεύει το
commit log μήνυμα που παρέχουν οι committers, και προσπαθεί κατά
κάποιο τρόπο να το κανονικοποιήσει. Συνεργάζεται με το
<application>CVS</application> μέσω του αρχείου
<filename>verifymsg</filename>. Δεν θα χρειαστεί να πειράξετε το
αρχείο αυτό.</para>
<note>
<para>Το script εξαρτάται από μια τοπική αλλαγή του &os; στο
<application>CVS</application>: Η αλλαγή αυτή ξαναδιαβάζει το
log μήνυμα αφού αυτό έχει τροποποιηθεί από το script. Η
κανονική έκδοση του <application>CVS</application> προφανώς δεν
κάνει κάτι τέτοιο, οπότε το <filename>logcheck</filename> δε
μπορεί να κάνει μικροδιορθώσεις στο log μήνυμα, αλλά μπορεί να
ελέγξει ότι το μήνυμα δεν έχει συντακτικά λάθη. Απο την έκδοση
1.11.2 και μετά το ίδιο το <application>CVS</application> μπορεί
να ρυθμιστεί να έχει την ίδια συμπεριφορά με αυτή που έχει η
έκδοση του &os; με την επιλογή
<literal>RereadLogAfterVerify=always</literal> στο αρχείο
<filename>config</filename>.</para>
</note>
</listitem>
<listitem>
<para><filename>loginfo</filename> - το αρχείο αυτό χρησιμοποιείται
από το <application>CVS</application> για τον έλεγχο του που θα
στέλνονται οι πληροφορίες των logs. Εδώ ενεργοποιείται το
πρόγραμμα <filename>log_accum.pl</filename>. Δεν θα χρειαστεί να
πειράξετε αυτό το αρχείο.</para>
</listitem>
<listitem>
<para><filename>modules</filename> - το αρχείο αυτό διατηρεί την
παραδοσιακή του σημασία στο <application>CVS</application>. Θα
πρέπει να αφαιρέσετε τα &os; modules από την κανονική έκδοση.
Μπορείτε να επεξεργαστείτε αυτό το αρχείο ανάλογα με τις επιθυμίες
σας. Περισσότερες πληροφορίες για το αρχείο αυτό είναι διαθέσιμες
στο εγχειρίδιο του <application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>notify</filename> - το αρχείο αυτό χρησιμοποιείται
από το <application>CVS</application> στην περίπτωση που κάποιος
τοποθετήσει εντολή παρακολούθησης σε κάποιο αρχείο. Δεν
χρησιμοποιείται στο repository του &os;. Μπορείτε να
επεξεργαστείτε αυτό το αρχείο ανάλογα με τις επιθυμίες σας.
Περισσότερες πληροφορίες για το αρχείο αυτό είναι διαθέσιμες στο
εγχειρίδιο του <application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>options</filename> - το αρχείο αυτό σχετίζεται άμεσα
με την &os; έκδοση του <application>CVS</application> και
υποστηρίζεται μόνο από αυτή και την έκδοση του Debian. Περιέχει
το keyword που θα γίνεται expand στα revision headers. Θα πρέπει
να τροποποιήσετε το αρχείο αυτό για να είναι ίδιο με την έκδοση
που έχετε εισάγει στο αρχείο <filename>cfg_local.pm</filename> (αν
αποφασίσετε να χρησιμοποιήσετε αυτή την λειτουργία, που προς το
παρόν δουλεύει σωστά μόνο με την έκδοση του
<application>CVS</application> που έχει το &os;).</para>
</listitem>
<listitem>
<para><filename>rcsinfo</filename> - το αρχείο αυτό αντιστοιχεί
φακέλους του repository σε αρχεία template, όπως π.χ. το
<filename>rcstemplate</filename>. Εξ' ορισμού, το
&os; χρησιμοποιεί ένα template για ολόκληρο το repository.
Μπορείτε να προσθέσετε και άλλα στο αρχείο αυτό αν το
επιθυμείτε.</para>
</listitem>
<listitem>
<para><filename>rcstemplate</filename> - το αρχείο αυτό είναι το
template που θα δούν τελικά οι committers όταν θα κάνουν checkin.
Θα πρέπει να επεξεργαστείτε αυτό το αρχείο ώστε να περιγράφει τις
διάφορες επιπλέον παραμέτρους που ορίσατε στο αρχείο
<filename>cfg_local.pm</filename>.</para>
</listitem>
<listitem>
<para><filename>tagcheck</filename> - το αρχείο αυτό ελέγχει την
πρόσβαση στην χρήση των tags στο repository. Η κανονική έκδοση
του &os; δεν επιτρέπει tags με ονόματα όπως RELENG*, λόγω της
διαδικασίας δημιουργίας των επίσημων εκδόσεων. Θα πρέπει να
επεξεργαστείτε το αρχείο αυτό ανάλογα με τις δικές σας ανάλογες
προτιμήσεις.</para>
</listitem>
<listitem>
<para><filename>taginfo</filename> - το αρχείο αυτό αντιστοιχεί
λειτουργίες των tags σε φακέλους του repository με προγράμματα
ελέγχου, όπως το <filename>tagcheck</filename>. Δεν θα χρειαστεί
να τροποποιήσετε αυτό το αρχείο.</para>
</listitem>
<listitem>
<para><filename>unwrap</filename> - το αρχείο αυτό μπορεί να
χρησιμοποιηθεί για το αυτόματο <quote>unwrap</quote> των binary
αρχείων (δείτε <filename>cvswrappers</filename>) στο checkout.
Δεν χρησιμοποιείται στην τρέχουσα εγκατάσταση του CVS για το &os;
επειδή δεν λειτουργεί σωστά με τα απομακρυσμένα commits. Δεν θα
χρειαστεί να τροποποιήσετε το αρχείο αυτό.</para>
</listitem>
<listitem>
<para><filename>verifymsg</filename> - το αρχείο αυτό αντιστοιχεί
υποκαταλόγους του repository σε προγράμματα επεξεργασίας των
μηνυμάτων του log, όπως π.χ. το <filename>logcheck</filename>.
Δεν θα χρειαστεί να τροποποιήσετε το αρχείο αυτό.</para>
</listitem>
<listitem>
<para><filename>wrap</filename> - το script αυτό χρειάζεται για το
αυτόματο <quote>wrap</quote> των binary αρχείων (δείτε
<filename>cvswrappers</filename>) κατά το checkin. Δεν
χρησιμοποιείται στην τρέχουσα εγκατάσταση του &os; επειδή δεν
λειτουργεί σωστά με τα απομακρυσμένα commits. Δεν θα
χρειαστεί να τροποποιήσετε το αρχείο αυτό.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Τροποποιώντας τα scripts</title>
<para>Το επόμενο βήμα είναι η αλλαγή των scripts ώστε να μπορούν να
χρησιμοποιηθούν στο δικό σας περιβάλλον. Θα πρέπει να ελέγξετε όλα τα
αρχεία μέσα στον φάκελο και να κάνετε τις τροποποιήσεις σας. Πιο
συγκεκριμένα, θα θέλετε κατά πάσα πιθανότητα να τροποποιήσετε τα
παρακάτω αρχεία:</para>
<procedure>
<step>
<para>Αν δεν θέλετε να χρησιμοποιήσετε τις λειτουργίες των scripts
οι οποίες χρησιμοποιούνται
<link linkend="freebsdspecific">αποκλειστικά από το &os;</link>,
μπορείτε να αφαιρέσετε με ασφάλεια το αρχείο
<filename>access</filename>:
<screen>&prompt.user; <userinput>cvs rm -f access</userinput></screen></para>
</step>
<step>
<para>Διορθώστε το αρχείο <filename>avail</filename> ώστε να
περιέχει τους διάφορους φακέλους του repository στους οποίους
θέλετε να ελέγξετε την πρόσβαση. Σιγουρευτείτε ότι θα διατηρήσετε
ανέπαφη την <literal>avail||CVSROOT</literal> γραμμή, ειδάλλως θα
αποκλείσετε ακόμα και τον εαυτό σας με το επόμενο βημα.</para>
<para>Εκτός αυτού στο συγκεκριμένο αρχείο μπορείτε να εισάγετε και
ομάδες από committers. Εξ' ορισμού, το &os; χρησιμοποιεί το
αρχείο <filename>access</filename> για την τοποθέτηση όλων των
committers, αλλά μπορείτε να χρησιμοποιήσετε όποιο άλλο
επιθυμείτε. Μπορείτε επίσης να προσθέσετε και ομάδες αν το
επιθυμείτε (η σύνταξη καθορίζεται στην κορυφή του αρχείου
<filename>cvs_acls.pl</filename>).</para>
</step>
<step>
<para>Διορθώστε το αρχείο <filename>cfg_local.pm</filename> ώστε να
περιέχει τις επιλογές που επιθυμείτε. Πιο συγκεκριμένα, θα πρέπει
να ελέγξετε τις παρακάτω τροποποιήσιμες επιλογές:</para>
<itemizedlist>
<listitem>
<para><literal>%TEMPLATE_HEADERS</literal> - Αυτές οι
επικεφαλίδες επεξεργάζονται από τα log scripts, και
τοποθετούνται κάτω από το mail του κάθε commit αν υπάρχουν και
δεν είναι κενές στο μήνυμα του commit. Γενικά, μπορείτε να
αφαιρέσετε τις καταχωρήσεις <literal>PR</literal> και
<literal>MFC after</literal>&mdash;αφού αυτές σχετίζονται με
το bug tracking σύστημα του &os; και τον τρόπο που
διαχειρίζεται το &os; τα branches του repository του. Και
φυσικά μπορείτε να προσθέσετε τις δικές σας.</para>
</listitem>
<listitem>
<para><literal>$MAIL_BRANCH_HDR</literal> - Αν θέλετε να
προστίθεται αυτόματα μια επικεφαλίδα σε κάθε commit μήνυμα
mail, η οποία θα περιγράφει το branch στο οποίο έγινε το
συγκεκριμένο commit, ορίστε την τιμή αυτή να ταιριάζει με την
δική σας εγκατάσταση. Αφήστε την κενή αν δεν επιθυμείτε να
προστίθεται αυτόματα μια τέτοια επικεφαλίδα.</para>
</listitem>
<listitem>
<para><literal>@COMMIT_HOSTS</literal> - Ορίστε την τιμή αυτή σε
μια λίστα από συστήματα (hosts), από τα οποία επιτρέπεται να
γίνονται commits.</para>
</listitem>
<listitem>
<para><literal>$MAILADDRS</literal> - Ρυθμίστε αυτή την τιμή στο
email του διαχειριστή ή σε μια διεύθυνση λίστας στην οποία
θέλετε να πηγαίνουν τα mail των commit μηνυμάτων.</para>
</listitem>
<listitem>
<para><literal>@LOG_FILE_MAP</literal> - Αλλάξτε αυτό το array
όπως επιθυμείτε. Κάθε regexp αντιστοιχεί στο συγκεκριμένο
φάκελο στον οποίο γίνεται το commit, και το log μήνυμα του
commit αποθηκεύεται κάτω από τον κατάλογο
<filename>CVSROOT</filename>, στον υποκατάλογο
<filename>commitlogs</filename>, στο αρχείο
που αναφέρεται στην αντίστοιχη εγγραφή του
πίνακα <literal>@LOG_FILE_MAP</literal>.</para>
</listitem>
<listitem>
<para><literal>$COMMITCHECK_EXTRA</literal> - Αν δεν θέλετε να
χρησιμοποιήσετε <link linkend="freebsdspecific">τους ίδιους
ελέγχους πρόσβασης με το &os;</link>, θα πρέπει να αφαιρέσετε
τον ορισμό της τιμής <literal>$COMMITCHECK_EXTRA</literal> από
το αρχείο αυτό.</para>
</listitem>
</itemizedlist>
<note>
<para>Η αλλαγή της παραμέτρου <literal>$IDHEADER</literal> είναι
εγγυημένο ότι θα δουλέψει μόνο σε πλατφόρμες &os;.
Εξαρτάται από ειδικές μετατροπές του &os; στο
<application>CVS</application>.</para>
</note>
<para>Μπορείτε να ελέγξετε το αρχείο <filename>cfg.pm</filename> για
να δείτε ποιές άλλες παραμέτρους μπορείτε να αλλάξετε, αλλά οι
παραπάνω είναι οι πιο συνήθεις επιλογές.</para>
</step>
<step>
<para>Επεξεργαστείτε το αρχείο <filename>exclude</filename> για να
αφαιρέσετε τις ειδικές καταχωρήσεις του &os; (όπως όλες τις
γραμμές που ξεκινούν με <literal>^ports/</literal> κτλ.). Εκτός
αυτού, βάλτε σε σχόλια τις γραμμές που ξεκινούν με
<literal>^CVSROOT/</literal>, και προσθέστε μια γραμμή που θα
περιέχει μόνο το <literal>^CVSROOT/</literal>. Αφού εγκατασταθεί
ο wrapper, μπορείτε να προσθέσετε το δικό σας header στα αρχεία
που βρίσκονται μέσα στον κατάλογο
<filename>CVSROOT</filename> και να επαναφέρετε
τις γραμμές αυτές, αλλά προς το παρόν απλά θα σας δημιουργήσουν
προβλήματα όταν θα προσπαθήσετε να κάνετε commit αργότερα.</para>
</step>
<step>
<para>Ανοίξτε το αρχείο <filename>modules</filename>, και αφαιρέστε
όλες τις σχετικές με το &os; καταχωρήσεις. Προσθέστε τα δικά
σας modules αν το επιθυμείτε.</para>
</step>
<step>
<note>
<para>Το βήμα αυτό είναι απαραίτητο μόνο αν έχετε ορίσει
κάποια τιμή στην παράμετρο <literal>$IDHEADER</literal> του
αρχείου <filename>cfg_local.pm</filename> (η οποία δουλεύει μόνο
εφόσον χρησιμοποιείτε την τροποποιημένη έκδοση του
<application>CVS</application> που έχει το &os;).</para>
</note>
<para>Διορθώστε το αρχείο <filename>options</filename> ώστε να
ταιριάζει με το tag που ορίσατε στο αρχείο
<filename>cfg_local.pm</filename>. Μια αναζήτηση και
αντικατάσταση του <literal>FreeBSD</literal> σε όλο το αρχείο
είναι αρκετή.</para>
</step>
<step>
<para>Επεξεργαστείτε το αρχείο <filename>rcstemplate</filename> ώστε
να περιέχει τα ίδια keywords με αυτά που έχετε ορίσει στο
<filename>cfg_local.pm</filename>.</para>
</step>
<step>
<para>Προαιρετικά, αφαιρέστε τους ελέγχους του &os; από το αρχείο
<filename>tagcheck</filename>. Μπορείτε απλά να προσθέσετε
<literal>exit 0</literal> στην αρχή του αρχείου για να
απενεργοποιήσετε όλους τους ελέγχους στο tagging.</para>
</step>
<step>
<para>Το τελευταίο πράγμα που πρέπει να γίνει, είναι να
σιγουρευτείτε ότι τα commitlogs μπορούν να αποθηκευτούν.
Τα <application>CVS</application> scripts του &os;
αποθηκεύουν αυτά τα logs στον υποκατάλογο <filename>commitlogs</filename>
του καταλόγου <filename>CVSROOT</filename>.
Αυτός ο φάκελος πρέπει να
δημιουργηθεί, οπότε κάντε τα ακόλουθα:</para>
<screen>&prompt.user; <userinput>mkdir commitlogs</userinput>
&prompt.user; <userinput>cvs add commitlogs</userinput></screen>
</step>
</procedure>
<para>Τώρα, αφού ελέγξετε τα πάντα προσεκτικά, θα πρέπει να κάνετε
commit τις αλλαγές σας. Φροντίστε να είστε σίγουροι ότι έχετε δώσει
στον εαυτό σας πρόσβαση στον
φάκελο <filename>CVSROOT</filename> μέσα από το
αρχείο <filename>avail</filename> πριν κάνετε οτιδήποτε, εφόσον στην
αντίθετη περίπτωση θα κλειδώσετε τον εαυτό σας έξω. Οπότε, φροντίστε
τα πάντα να είναι όπως επιθυμείτε, και μόνο τότε δώστε τα ακόλουθα:
<screen>&prompt.user; <userinput>cvs commit -m '- Initial FreeBSD scripts commit'</userinput></screen></para>
</sect2>
<sect2>
<title>Δοκιμάζοντας την Εγκατάσταση</title>
<para>Είστε έτοιμοι για την πρώτη σας δοκιμή: Ένα forced commit στο
αρχείο <filename>avail</filename>, για να σιγουρευτείτε ότι όλα
δουλεύουν όπως θα έπρεπε.</para>
<screen>&prompt.user; <userinput>cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' avail</userinput></screen>
<para>Άν όλα πάνε καλά, συγχαρητήρια! Έχετε καταφέρει να στήσετε μια
πλήρως λειτουργική εγκατάσταση των &os; scripts για το repository σας.
Στην περίπτωση που το <application>CVS</application> εξακολουθεί να
παραπονιέται για κάτι, επιστρέψτε στις προηγούμενες ενότητες και
ελέγξτε ξανά ότι έχετε εκτελέσει σωστά όλα τα προηγούμενα
βήματα.</para>
</sect2>
</sect1>
<sect1 xml:id="freebsdspecific">
<title>Ειδική Εγκατάσταση του &os; Project</title>
<para>Το ίδιο το &os; project χρησιμοποιεί μια ελαφρώς διαφορετική
εγκατάσταση, η οποία χρησιμοποιεί επίσης αρχεία από τον υποφάκελο
<filename>freebsd</filename> του
<filename>CVSROOT</filename> που χρησιμοποιείται στο
&os;. Το project χρειάζεται κάτι τέτοιο λόγω του μεγάλου αριθμού των
committers, που διαφορετικά θα έπρεπε να ανήκουν όλοι στο ίδιο group.
Έτσι, δημιουργήθηκε ένας απλός wrapper ο οποίος αφού πρώτα εξασφαλίζει
τα σωστά διαπιστευτήρια των committers, αλλάζει μετέπειτα το group id σε
αυτό του repository.</para>
<para>Αν και το δικό σας repository χρειάζεται κάτι ανάλογο, τα βήματα που
θα πρέπει να ακολουθήσετε ακολουθούν παρακάτω. Αλλά πρώτα ας κάνουμε
μια σύντομη επισκόπηση των σχετικών αρχείων.</para>
<sect2>
<title>Αρχεία που χρησιμοποιούνται στην ειδική εγκατάσταση του
&os;</title>
<para>
<itemizedlist>
<listitem>
<para><filename>access</filename> - το αρχείο αυτό ελέγχει τις
πληροφορίες για τα δικαιώματα πρόσβασης. Θα πρέπει να το
επεξεργαστείτε ανάλογα έτσι ώστε να περιλαμβάνει όλα τα μέλη του
project σας.</para>
</listitem>
<listitem>
<para><filename>freebsd/commitmail.pl</filename> - το αρχείο αυτό
δεν χρησιμοποιείται πια, αλλά παραμένει για ιστορικούς λόγους.
Δεν θα χρειαστεί να επεξεργαστείτε αυτό το αρχείο.</para>
</listitem>
<listitem>
<para><filename>freebsd/cvswrap.c</filename> - πρόκειται για τον
πηγαίο κώδικα του CVS wrapper που θα πρέπει να εγκαταστήσετε για
να μπορέσουν όλοι οι έλεγχοι πρόσβασης τελικά να δουλέψουν.
Περισσότερες πληροφορίες για τη διαδικασία αυτή θα βρείτε
παρακάτω. Θα πρέπει να διορθώσετε τα paths στις
<literal>ACCESS</literal> και <literal>REALCVS</literal>
μακροεντολές ώστε να ταιριάζουν με τη δική σας
εγκατάσταση.</para>
</listitem>
<listitem>
<para><filename>freebsd/mailsend.c</filename> - το αρχείο αυτό
χρειάζεται για την σχετική με τις λίστες ταχυδρομείου
εγκατάσταση του &os;. Δεν θα χρειαστεί να πειράξετε το αρχείο
αυτό.</para>
</listitem>
</itemizedlist>
</para>
</sect2>
<sect2>
<title>Η διαδικασία</title>
<procedure>
<step>
<para>Διορθώστε το αρχείο <filename>access</filename> ώστε να
περιέχει μόνο το δικό σας username.</para>
</step>
<step>
<para>Διορθώστε το αρχείο <filename>cvswrap.c</filename> ώστε να
περιέχει το σωστό path για τη δική σας εγκατάσταση. Αυτό ορίζεται
ως μια μακροεντολή που ονομάζεται <literal>ACCESS</literal>. Θα
πρέπει επίσης να αλλάξετε και το όνομα αρχείου του πραγματικού
<command>cvs</command> binary αν αυτή που υπάρχει δεν είναι η
σωστή για τη δική σας περίπτωση. Το κανονικό
<filename>cvswrap.c</filename> θεωρεί πως θα αντικαταστήσετε την
εντολή cvs σε επίπεδο συστήματος με το cvwrap, κι η αρχική εντολή
cvs θα μεταφερθεί στο
αρχείο <filename>/usr/bin/ncvs</filename>.</para>
<para>Το δικό μου αντίτυπο του αρχείου
<filename>cvswrap.c</filename> έχει τα ακόλουθα:</para>
<programlisting>#define ACCESS "/local/cvsroot/CVSROOT/access"
#define REALCVS "/usr/bin/ncvs"</programlisting>
</step>
<step>
<para>Το επόμενο βήμα είναι να εγκαταστήσουμε τον wrapper για να
είμαστε σίγουροι ότι θα γίνεται η μετατροπή στο σωστό group όταν
γίνεται commit. Ο πηγαίος κώδικας γι' αυτό βρίσκεται στο αρχείο
<filename>cvswrap.c</filename> στον κατάλογο
<filename>CVSROOT</filename>.</para>
<para>Μεταγλωττίστε τον κώδικα που έχετε ήδη διορθώσει ώστε να
περιέχει τα σωστά paths:</para>
<screen>&prompt.user; <userinput>cc -o cvs cvswrap.c</userinput></screen>
<para>Στη συνέχεια εγκαταστήστε το νέο cvs εκτελέσιμο ακολουθώντας
τα ακόλουθα βήματα (θα πρέπει να είστε root για το βήμα
αυτό):</para>
<screen>&prompt.root; <userinput>mv /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>mv cvs /usr/bin/cvs</userinput>
&prompt.root; <userinput>chown root:ncvs /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod o-rx /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod u-w,g+s /usr/bin/cvs</userinput></screen>
<para>Αυτό εγκαθιστά τον wrapper σαν την εξ' ορισμού
<command>cvs</command> εντολή, κάνοντας έτσι σίγουρο ότι
οποιοσδήποτε θελήσει να χρησιμοποιήσει το repository, θα πρέπει να
έχει τα κατάλληλα επίπεδα πρόσβασης.</para>
</step>
<step>
<para>Μπορείτε τώρα να αφαιρέσετε όλους τους χρήστες από το
repository group σας. Όλοι οι έλεγχοι πρόσβασης θα γίνονται από
τον wrapper, και ο ίδιος ο wrapper θα θέτει το ανάλογο group με το
οποίο θα γίνεται και η τελική πρόσβαση.</para>
</step>
</procedure>
</sect2>
<sect2>
<title>Ελέγχοντας την εγκατάσταση</title>
<para>Ο wrapper πρέπει πλέον να είναι έτοιμος. Μπορείτε φυσικά να το
δοκιμάσετε κάνοντας ένα forced commit στο αρχείο
<filename>access</filename>:</para>
<screen>&prompt.user; <userinput>cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' access</userinput></screen>
<para>Ξανά, αν αυτό αποτύχει, ελέγξτε ότι όλα τα παραπάνω βήματα έχουν
εκτελεστεί σωστά.</para>
</sect2>
</sect1>
</article>

View file

@ -4,7 +4,6 @@
SUBDIR =
SUBDIR+= casestudy-argentina.com
SUBDIR+= contributing
SUBDIR+= cvs-freebsd
SUBDIR+= explaining-bsd
SUBDIR+= fdp-es
SUBDIR+= linux-users

View file

@ -1,25 +0,0 @@
# $FreeBSD$
# $FreeBSDes$
# Copiado de la version 1.5
#
# Article: Setting up a CVS repository - the FreeBSD way
#MAINTAINER= stijn@win.tue.nl
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
WITH_ARTICLE_TOC?=YES
SRCS= article.xml
URL_RELPREFIX?= ../../../..
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -1,814 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
The FreeBSD Spanish Documentation Project
$FreeBSD$
$FreeBSDes$
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="es">
<info><title>Configurar un repositorio CVS - a la manera de FreeBSD</title>
<author><personname><firstname>Stijn</firstname><surname>Hoop</surname></personname><affiliation>
<address><email>stijn@win.tue.nl</email></address>
</affiliation></author>
<copyright>
<year>2001</year>
<year>2002</year>
<year>2003</year>
<holder role="mailto:stijn@win.tue.nl">Stijn Hoop</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<abstract>
<para>Este artículo describe los pasos que dí para
configurar un repositorio CVS con los mismos <quote>scripts</quote>
usados por el proyecto &os; en su configuración.
Tienen algunas ventajas frente a las demás
configuraciones de CVS, por ejemplo una gestión más
eficaz de los accesos a los árboles de código y
la creación de mensajes de correo electrónico por
cada commit.</para>
&trans.es.jcamou;
</abstract>
</info>
<sect1>
<title>Introducción</title>
<para>Muchos de los proyectos de software de código
abierto usan <application>CVS</application> como su sistema
de gestión de código. Aunque <application>
CVS</application> es bastante bueno para esto tiene sus
inconvenientes y sus flaquezas. Un ejemplo de esto es el compartir
un árbol de código con otros desarrolladores, lo cual
puede convertirse rápidamente en una pesadilla para la
administración del sistema, especialmente si se desea
proteger del acceso indiscriminado ciertas partes del
árbol.</para>
<para>&os; es uno de los proyectos que usan <application>
CVS</application>. También cuenta con una gran
cantidad de desarrolladores alrededor del mundo. Ellos
mismos desarrollaron algunos <quote>scripts</quote> para hacer
del manejo del repositorio una tarea más fácil.
Recientemente estos <quote>scripts</quote> fueron revisados por
&a.joe; para facilitar su uso en otros proyectos. Este
artículo muestra uno de los métodos para usar estos
nuevos <quote>scripts</quote>.</para>
<para>Si quiere sacar verdadero partido de la información que
se le brinda en este artículo debe tener familiaridad con
métodos básicos para realizar operaciones
<application>CVS</application>.</para>
</sect1>
<sect1>
<title>Comienzo de la configuración</title>
<warning>
<para>Es preferible que realice estos procedimientos
en un repositorio de prueba vacío y podamos asi asegurarnos
de que entiende todas las consecuencias. Como siempre, asegúrese
de tener respaldos recientes.</para>
</warning>
<sect2>
<title>Inicio del repositorio</title>
<para>Lo primero a hacer al configurar un nuevo repositorio
es decirle a <application>CVS</application> que lo inicie:
<screen>&prompt.user; <userinput>cvs -d ruta-al-repositorio
init</userinput></screen>
Esto le indica a <application>CVS</application> que cree
el directorio administrativo <filename>CVSROOT</filename>,
donde se albergarán todas las configuraciones.</para>
</sect2>
<sect2>
<title>El grupo del repositorio</title>
<para>Ahora vamos a crear al grupo dueño del repositorio.
Todos los <quote>committers</quote> necesitan estar en este
grupo, para de esta manera poder escribir en el repositorio.
Asumiremos el grupo <literal>ncvs</literal> por defecto
de &os;.
<screen>&prompt.root; <userinput>pw groupadd ncvs
</userinput></screen>
A continuación, es necesario usar &man.chown.8; en el directorio
para ajustar los permisos al grupo reción agregado:
<screen>&prompt.root; <userinput>chown -R :ncvs
path-a-su-repositorio</userinput></screen>
Esto asegura que nadie podrá escribir en el repositorio
sin los permisos de grupo adecuados.</para>
</sect2>
<sect2>
<title>Obtención del código</title>
<para>Ahora es necesario obtener el directorio <filename>
CVSROOT</filename> del repositorio de &os;. Puede hacerse muy
fácilmente desde una réplica del CVS
anónimo de &os;. Para más información
<!--
consulte <ulink
url="&url.books.handbook;/anoncvs.html">el capítulo
-->
consulte <link xlink:href="http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/anoncvs.html">el
capítulo correspondiente del Handbook</link>.
Asumiremos que el código está en
<filename>CVSROOT-freebsd</filename> en el directorio
actual.</para>
</sect2>
<sect2>
<title>Copia de los <quote>scripts</quote> de &os;</title>
<para>El siguiente paso consiste en copiar el código de &os;
sito en <filename>CVSROOT</filename> a nuestro
repositorio. Si está familiarizado con <application>CVS
</application>, puede pensar que se puede
realizar importando los <quote>scripts</quote>, lo que debería
permitirle sincronizar posteriores versiones muy fácilmente.
No es así, <application>CVS</application> tiene una
deficiencia en este aspecto: al intentar importar
código al directorio
<filename>CVSROOT</filename> no se actualizarán los
ficheros administrativos necesarios. Para hacer que esto
suceda es necesario ejecutar <quote>checkin</quote>
en cada uno de ellos después de importarlos,
perdiendo asi el valor de <literal>cvs import</literal>.
En consecuencia el método recomendado para este
cometido es sencillamente copiar los
<quote>scripts</quote>.</para>
<para>No importa en realidad si no encuentra demasiado sentido al
párrafo anterior, el resultado será el mismo.
Simplemente haga <quote>check out</quote> de su <filename>CVSROOT
</filename> y copie los ficheros de &os; a su copia local:
<screen>&prompt.user; <userinput>cvs -d
ruta-a-su-repositorio checkout CVSROOT</userinput>
&prompt.user; <userinput>cd CVSROOT</userinput>
&prompt.user; <userinput>cp ../CVSROOT-freebsd/* .</userinput>
&prompt.user; <userinput>cvs add *</userinput></screen>
Tenga en cuenta que probablemente recibirá advertencias
acerca de directorios no copiados; es normal que suceda pero no
debe usted preocuparse porque éstos no son
necesarios.</para>
</sect2>
<sect2>
<title>Los <quote>scripts</quote></title>
<para>Ahora ya cuenta con una copia exacta en su directorio de
trabajo de los <quote>scripts</quote> que &os; usa en la
gestión de su repositorio.
He aquí una descripción del cometido de cada uno de
ellos.</para>
<itemizedlist>
<listitem>
<para><filename>access</filename> - este fichero
no se usa en la configuración por defecto.
Se usa en <link linkend="freebsdspecific">la
configuración del proyecto &os;</link>,
el cual controla el acceso al repositorio. Puede
borrar este fichero si no quiere usarlo en su
configuración.</para>
</listitem>
<listitem>
<para><filename>avail</filename> - este fichero
controla el acceso al repositorio. Dentro del mismo
es posible especificar grupos de personas
autorizadas para el acceso al repositorio,
asi como commits no autorizados en uno o más
directorios dados. Deberá
editarlo para que contenga los grupos
y directorios que se usarán en su
repositorio.</para>
</listitem>
<listitem>
<para><filename>cfg.pm</filename> - este fichero
se encarga de analizar su configuración
y provee la configuración por defecto.
<emphasis>No</emphasis> deberá usted
cambiar nada en este fichero. Si va a hacer cambios
su configuración deberán ir en
<filename>cfg_local.pm</filename>.
</para>
</listitem>
<listitem>
<para><filename>cfg_local.pm</filename> -
contiene todos los parámetros configurables del
sistema. Deberá configurar todo tipo de
cosas en este fichero, tales como el envío
por correo electrónico de los mensajes
de commit, desde qué <quote>hosts</quote> pueden
hacer commits los usuarios, etc. Más
información más adelante en el texto.</para>
</listitem>
<listitem>
<para><filename>checkoutlist</filename> - este fichero
lista todos los ficheros bajo control de <application>
CVS</application> en este directorio, aparte de aquellos
estándar creados por <literal>cvs init</literal>.
Deberá editar éste para borrar algunos
ficheros específicos del proyecto &os;.</para>
</listitem>
<listitem>
<para><filename>commit_prep.pl</filename> - este <quote>
script</quote> se encarga de realizar algunas comprobaciones
previas a cada commit según las modificaciones hechas o
o no en su versión de
<filename>cfg_local.pm</filename>.
No debería modificar este <quote>script</quote>.</para>
</listitem>
<listitem>
<para><filename>commitcheck</filename> - este <quote>script</quote>
es invocado directamente por <application>CVS</application>.
En primer lugar comprueba que la <quote>committer</quote> tenga
acceso a una parte específica del árbol usando
<filename>cvs_acls.pl</filename>, para después
ejecutar <filename>commit_prep.pl</filename>, mediante el que
efectuará las comprobaciones de rigor previas a cada
commit. Si todo ha ido bien <application>CVS</application>
permitirá que el commit tenga lugar. No debería
tocar este fichero.</para>
</listitem>
<listitem>
<para><filename>commitinfo</filename> - este fichero es
usado por <application>CVS</application> para determinar
qué <quote>script</quote> se deberá ejecutar
antes de hacer el commit, en este caso
<filename>commitcheck</filename>.
Tampoco debería tener que modificar este fichero.</para>
</listitem>
<listitem>
<para><filename>config</filename> - el fichero de
configuración del repositorio. Debería
editarlo si es necesario aunque la mayoría de
los administradores lo dejan tal y como viene por defecto.
Dispone de más información sobre las opciones
que pueden declararse en él en el manual de
<application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>cvs_acls.pl</filename> - este <quote>script</quote>
determina la identidad de los <quote>committers</quote>, así
como si tiene permitido acceder al árbol.
Está basado en el fichero <filename>avail</filename>.
No debería tener que modificar este fichero.</para>
</listitem>
<listitem>
<para><filename>cvsignore</filename> - este fichero especifica
los ficheros que <application>CVS</application> no debe
incluir en el repositorio. Puede editarlo a su gusto.
Para más información sobre fichero consulte
el manual de <application>CVS</application>.
</para>
</listitem>
<listitem>
<para><filename>cvswrappers</filename> -
<application>CVS</application> usa este fichero para activar
o desactivar la expansión de
la expansión de palabras clave o si el
fichero debe ser considerado binario. Este fichero puede
editarse según necesidades. Para más
información sobre este fichero consulte el manual de
<application>CVS</application>.
Tenga en cuenta que las opciones <literal>-t</literal> y <literal>
-f</literal> no funcionan correctamente con <application>
CVS</application> cliente/servidor.</para>
</listitem>
<listitem>
<para><filename>edithook</filename> - este fichero ya no
se usa, aunque se mantenga por razones históricas.
Este fichero puede borrarse con total tranquilidad sin miedo de
perjudicar la configuración.</para>
</listitem>
<listitem>
<para><filename>editinfo</filename> - <application>CVS
</application> usa este fichero en las sobreescrituras de
edición. &os; no usa esta función ya que el
análisis de mensajes de <quote>log</quote> se hace
mediante <filename>verifymsg</filename> y
<filename>logcheck</filename>. Esto se debe a que
<filename>editinfo</filename> no funciona correctamente con
commits remotos ni con aquellos que usan las opciones
<literal>-m</literal> o <literal>-F</literal>.
No debería tener que modificar este fichero.</para>
</listitem>
<listitem>
<para><filename>exclude</filename> - este fichero lista
expresiones regulares usadas por
<filename>commit_prep.pl</filename> para determinar ficheros
que no puedan contener cabeceras de revisión. En la
configuración que se usa en &os; todos los ficheros
bajo control de revisión necesitan tener lo que se
llama una cabecera de revisión
(&dollar;FreeBSD&dollar;). Todos los ficheros que aparezcan
en alguna de las líneas de
<filename>exclude</filename> no pasan por dicha revisión.
Incluya en este fichero entradas para aquellos ficheros que no
puedan tener una cabecera de revisión. Si va a instalar
los <quote>scripts</quote> <filename>CVSROOT/</filename> es un
firme candidato para figurar en este fichero.</para>
</listitem>
<listitem>
<para><filename>log_accum.pl</filename> - este es el
<quote>script</quote> encargado de obtener el mensaje de
<quote>log</quote> que genera <filename>logcheck</filename> y
añadirlo a un fichero de <quote>log</quote> en el repositorio
para que pueda disponerse de respaldos en caso de necesidad.
También gestiona el envío de un correo electrónico
a la dirección que el administrador declare (en
<filename>cfg_local.pm</filename>). <filename>loginfo
</filename> se encarga de conectar <filename>log_accum.pl
</filename> con <application>CVS</application>. No
debería tener que modificar este fichero.</para>
</listitem>
<listitem>
<para><filename>logcheck</filename> - este fichero revisa el
mensaje de commit proporcionado por el
<quote>committer</quote> e intenta esterilizarlo, valga la
expresión. Este fichero conecta con
<application>CVS</application> via <filename>verifymsg
</filename>. Tampoco debería tener que modificar este
fichero.</para>
<note><para>Este <quote>script</quote> depende de un hack de <application>
CVS</application> propio de &os;: esta versión lee el
mensaje de <quote>log</quote> después de que este
<quote>script</quote> lo haya modificado. La versión
estándar de <application>CVS</application>
no hace esto, lo que hace a <filename>
logcheck</filename> incapaz de limpiar los mensajes de
<quote>log</quote>, aunque es capaz de comprobar que
esté sintácticamente correcto.
<application>CVS</application> 1.11.2 puede configurarse
para tener el mismo comportamiento que la
versión de &os; activando <literal>
RereadLogAfterVerify=always</literal> en el fichero
<filename>config</filename>.</para></note>
</listitem>
<listitem>
<para><filename>loginfo</filename> - este fichero es usado por
<application>CVS</application> para controlar dónde se
envía la información de <quote>log</quote>;
aquí es donde <filename>log_accum.pl</filename>
entra en escena. No debería tener que modificar
este fichero.
</para>
</listitem>
<listitem>
<para><filename>modules</filename> - este fichero mantiene su
significado tradicional en <application>CVS</application>.
Deberá borrar los módulos propios de &os; de la
versión que vaya a usar. Puede editarlo a su
gusto. Tiene más información acerca de este fichero
en el manual de <application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>notify</filename> -
<application>CVS</application> usa este fichero en caso de que
alguien ponga un fichero en modo <quote>watch</quote>. No se usa en el
repositorio de &os; y puede editarse cuanto se desee.
Tiene más información acerca de este fichero
en el manual de <application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>options</filename> - este fichero se usa
específicamente en la versión de <application>CVS
</application>
de &os;, así como en la versión de Debian.
Contiene una palabra clave para expander cabeceras de
revisión. Tendrá que modificar este fichero
y escribir la misma palabra que haya declarado en
<filename>cfg_local.pm</filename> (si es que quiere usar esa
característica, claro está; el valor por defecto
es FreeBSD)</para>
</listitem>
<listitem>
<para><filename>rcsinfo</filename> - este fichero mapea
directorios en el repositorio para aplicar una plantilla
como <filename>rcstemplate</filename>. Por defecto &os;
usa una plantilla para el repositorio. Es posible
añadir otras plantillas si se estima conveniente.</para>
</listitem>
<listitem>
<para><filename>tagcheck</filename> - este fichero controla
el acceso a marcar <quote>tags</quote> (etiquetas) en el
repositorio. La versión por defecto en &os; no admite
etiquetas con nombre RELENG* debido al proceso de ingeniería
de releases. Puede editar este fichero según sus
necesidades.</para>
</listitem>
<listitem>
<para><filename>taginfo</filename> - este fichero mapea operaciones
de etiquetado en los directorios del repositorio, cosa necesaria en
el funcionamiento habitual de <quote>scripts</quote> de control como
<filename>tagcheck</filename>. No debería tener que modificar
este fichero.</para>
</listitem>
<listitem>
<para><filename>unwrap</filename> - este <quote>script</quote> puede ser
usado para alterar el estado de ficheros binarios en una forma opuesta a
como lo hace <filename>cvswrappers</filename>, descrito al principio de esta
lista. No se usa en la configuración que funciona hoy día
en &os; porque no funciona correctamente con commits remotos.
No debería tener que modificar este fichero.</para>
</listitem>
<listitem>
<para><filename>verifymsg</filename> - este fichero mapea
directorios del repositorio con <quote>scripts</quote> encargados del proceso
posterior de mensajes de commit en ficheros de <quote>log</quote>, por
ejemplo <filename>logcheck</filename>.
No debería verse en la necesidad de modificar este fichero.</para>
</listitem>
<listitem>
<para><filename>wrap</filename> - este script puede usarse
para poner ficheros binarios bajo el efecto de
<filename>cvswrappers</filename> (descrito al principio de esta
lista) en cada <quote>checkin</quote>. No se usa en la
configuración que mantiene el proyecto &os; porque no
funciona correctamente con commits remotos. No debería tener
que modificar este fichero.
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Modificación de los <quote>scripts</quote></title>
<para>El siguiente paso es configurar los <quote>scripts</quote> para que
se adapten a sus necesidades. Tendrá que revisar todos y
cada uno de los ficheros en el directorio y hacer sus propios
cambios y configuraciones. Seguramente tendrá que editar los
siguientes ficheros:</para>
<procedure>
<step>
<para>Si no desea usar los <quote>scripts</quote> de la
<link linkend="freebsdspecific">
configuración específica de &os;</link>
puede borrar tranquilamente el fichero <filename>
access</filename>:
<screen>&prompt.user; <userinput>cvs rm -f access</userinput>
</screen></para>
</step>
<step>
<para>Editar <filename>avail</filename> para que contenga los
diferentes directorios del repositorio en los cuales quiera
controlar el acceso. Asegúrese de mantener la línea
<literal>avail||CVSROOT</literal>, si no lo hace no podrí
realizar el siguiente paso.</para>
<para>Otra de las opciones que puede añadir a este fichero
es el grupo de <quote>committers</quote>. Por defecto
&os; usa el fichero <filename>access</filename> para
listar todos sus <quote>committers</quote> pero se puede
usar cualquier fichero que se desee. También es
posible agregar grupos si se desea (la sintaxis está
declarada en la primera parte de <filename>cvs_acls.pl
</filename>).</para>
</step>
<step>
<para>Edite <filename>cfg_local.pm</filename> para que contenga
las opciones deseadas. Seguramente le serán de gran
interés las siguientes configuraciones:
<itemizedlist>
<listitem>
<para><literal>%TEMPLATE_HEADERS</literal> - éstos son
procesados por los <quote>scripts</quote> de <quote>log</quote>
y se insertan bajo el correo de commit si es que existen.
Puede que quiera borrar las entradas <literal>PR</literal>
y <literal>MFC after</literal>; y claro, puede agregar
las suyas.</para>
</listitem>
<listitem>
<para><literal>$MAIL_BRANCH_HDR</literal> - puede añadir
una cabecera en cada correo de commit en la que se detalle la
rama (<quote>branch</quote>) en la que se ha hecho el commit.
Defina la cabecera según su configuración y
necesidades o déjelo vacío si no desea usar dicha
cabecera.</para>
</listitem>
<listitem>
<para><literal>@COMMIT_HOSTS</literal> - defina éste valor
si desea listar los <quote>hosts</quote> desde los que será
posible hacer commits.
</para>
</listitem>
<listitem>
<para><literal>$MAILADDRS</literal> - defina éste como
la dirección del administrador o de alguna lista donde
reciban los correos de commit.</para>
</listitem>
<listitem>
<para><literal>@LOG_FILE_MAP</literal> - cambie este
valor como desee. Cada expresión regular
(regexp) se compara en el directorio del commit, y el
mensaje de log del commit se guarda en el subdirectorio
<filename>commitlogs</filename> en el nombre de fichero
mencionado.</para>
</listitem>
<listitem>
<para><literal>$COMMITCHECK_EXTRA</literal> - si no
desea usar las <link linkend="freebsdspecific">comprobaciones
de acceso específicas de &os;</link> debería
borrar la definición de <literal>
$COMMITCHECK_EXTRA</literal> de este fichero.</para>
</listitem>
</itemizedlist>
<note><para>Cambiar el parámetro <literal>$IDHEADER</literal>
es algo que sólo puede asegurarse que funcionará en
&os;; depende de las modificaciones
específicas de <application>CVS</application> hechas por
&os;.</para></note>
Revise <filename>cfg.pm</filename> y compruebe si alguna de las
opciones puede modificarse, aunque los cambios propuestos en los
párrafos anteriores son bastante razonables.</para>
</step>
<step>
<para>Seguramente quiera borrar las líneas del principio de
<filename>exclude</filename> (las que contienen
<literal>^ports/</literal>, entre otras), puesto que son
específicas de &os;. Además de esto
comente las líneas que empiecen con
<literal>^CVSROOT/</literal> y agregue una línea sólo
con <literal>^CVSROOT/</literal>. Después de que
<quote>wrapper</quote> sea instalado puede añadir
su cabecera a los ficheros en el directorio <filename>
CVSROOT</filename> y restaurar estas líneas; por lo
pronto sólo estarán estorbarán en el momento
que quiera hacer un commit.</para>
</step>
<step>
<para>Edite <filename>modules</filename> y borre todo lo
relacionado con &os;. Añada sus propios módulos
si lo cree necesario.</para>
</step>
<step>
<note><para>Este paso es sólo necesario si usted ha
declarado un valor a <literal>$IDHEADER</literal>
en <filename>cfg_local.pm</filename> (que sólo
funciona usando la versión de <application>CVS
</application> modificada por &os;).</para></note>
<para>Edite <filename>options</filename> y asegúrese
de que la etiqueta declarada sea la misma que en <filename>
cfg_local.pm</filename>. Simplemente cambie la etiqueta
<literal>FreeBSD</literal> por la suya.</para>
</step>
<step>
<para>Edite <filename>rcstemplate</filename> para que
contenga las mismas palabras clave
(o <quote>keywords</quote>) declaradas en
<filename>cfg_local.pm</filename>.</para>
</step>
<step>
<para>Puede borrar (este paso es opcional) las comprobaciones
realizadas por <filename>tagcheck</filename>. Puede
simplemente añadir <literal>exit 0</literal> al principio
del fichero para deshabilitar todas las comprobaciones que
hace sobre las etiquetas.</para>
</step>
<step>
<para>El último paso antes de terminar es
asegurarse de que sea posible guardar de modo seguro los
mensajes de commit. Por defecto se guardan en el propio
repositorio, en el subdirectorio <filename>commitlogs</filename>
del directorio <filename>CVSROOT</filename>. Este
directorio debe crearse del siguiente modo:
<screen>&prompt.user; <userinput>mkdir commitlogs
</userinput>&prompt.user; <userinput>cvs add commitlogs
</userinput></screen></para>
</step>
</procedure>
<para>Después de una revisión cuidadosa
debe hacer los commits necesarios con sus cambios. Asegúrese
de haber activado su acceso al directorio <filename>
CVSROOT</filename> en su <filename>avail</filename> antes
de intentarlo. Una vez haya comprobado que todo es correcto puede
hacer lo siguiente:
<screen>&prompt.user; <userinput>cvs commit -m '- Commit
para iniciar los scripts de FreeBSD'</userinput>
</screen></para>
</sect2>
<sect2>
<title>Prueba de la configuración</title>
<para>Ahora ya está listo para la primera prueba: un commit
forzado al fichero <filename>avail</filename> para asegurarnos
de que todo funciona como se espera.
<screen>&prompt.user; <userinput>cvs commit -f -m'Commit
forzado para probar los nuevos scripts en CVSROOT'
avail</userinput></screen>
Si todo ha funcionado ¡felicidades! Dispone de una
configuración de los <quote>scripts</quote> de &os; en su repositorio.
Si <application>CVS</application> le da algún tipo de error
en algo revise todo de nuevo y asegúrese de que todos
los pasos se hayan hecho correctamente.</para>
</sect2>
</sect1>
<sect1 xml:id="freebsdspecific">
<title>Configuración específica de &os;</title>
<para>El proyecto &os; utliza una configuración
ligeramente diferente de la descrita; se usan los ficheros de
configuración del subdirectorio
<filename>freebsd</filename> en <filename>CVSROOT</filename>.
El proyecto lo hace de esta manera debido al gran número de
committers y a que todos y todas han de estar en el mismo grupo.
Un <quote>wrapper</quote> simple fué escrito para poder
asegurar que los usuarios tengan permisos correctos para poder hacer
hacer commits; este <quote>wrapper</quote> establece el id del grupo al
que el repositorio tiene.</para>
<para>Si su repositorio lo necesita también los
pasos para hacerlo están documentados más adelante. Pero
antes de nada veamos una descripción de los ficheros involucrados.</para>
<sect2>
<title>Ficheros usados en la configuración de &os;</title>
<para>
<itemizedlist>
<listitem>
<para><filename>access</filename> - este fichero controla
la información de acceso. Se debe editar este
fichero e incluir a todos los miembros del proyecto.</para>
</listitem>
<listitem>
<para><filename>freebsd/cvswrap.c</filename> - este es el
código de CVS wrapper que va a ser necesario
instalar para hacer que todos los chequeos de acceso
funcionen. Mas información sobre él más
adelante en el texto. Debería editar las rutas de las
macros <literal>ACCESS</literal> y <literal>REALCVS</literal>
para que se correspondan con su configuración.
</para>
</listitem>
<listitem>
<para><filename>freebsd/mailsend.c</filename> - este fichero
es necesario para la configuración de la lista
de correo de &os;. No deberá tocar este
fichero.</para>
</listitem>
</itemizedlist>
</para>
</sect2>
<sect2>
<title>El procedimiento</title>
<procedure>
<step>
<para>Edite el fichero <filename>access</filename> para que
sólo contenga su nombre de usuario.</para>
</step>
<step>
<para>Edite el fichero <filename>cvswrap.c</filename> para que
contenga la ruta correcta de su configuración. Se
define con una macro llamada <literal>ACCESS</literal>.
Deberá cambiar también el lugar del binario de
<command>cvs</command> si no coincide con el de su
sistema. <filename>cvswrap.c</filename> está pensado
para sustituir al comando cvs del sistema, que pasará a
ser <filename>/usr/bin/ncvs
</filename>.</para>
<para>Mi copia de <filename>cvswrap.c</filename> tiene lo
siguiente:</para>
<programlisting>#define ACCESS "/local/cvsroot/CVSROOT/access"
#define REALCVS "/usr/bin/ncvs"</programlisting>
</step>
<step>
<para>Instalaremos después wrapper para asegurarnos de que
se haya convertido en el grupo correcto al hacer el commit.
Tiene el código fuente en
<filename>cvswrap.c</filename> en su
<filename>CVSROOT</filename>.</para>
<para>Tendrá que compilar el código una vez haya
incluido en el las rutas correctas:
<screen>&prompt.user; <userinput>cc -o cvs cvswrap.c
</userinput></screen>
E instálelos (necesitará ejecutar este paso como root):
<screen>&prompt.root; <userinput>mv /usr/bin/cvs /usr/bin/ncvs
</userinput>
&prompt.root; <userinput>mv cvs /usr/bin/cvs</userinput>
&prompt.root; <userinput>chown root:ncvs
/usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod o-rw /usr/bin/ncvs</userinput>
&prompt.root; <userinput> chmod u-w,g+s /usr/bin/cvs</userinput>
</screen>
Esto instala wrapper como el comando <command>cvs</command>
por defecto; así nos aseguramos de que cualquiera que
quiera usar el repositorio necesita tener los niveles de acceso
correctos.</para>
</step>
<step>
<para>Ahora ya puede eliminar a todos los usuarios del grupo del repositorio.
Todo control de acceso lo hará a partir de ahora wrapper y este wrapper
establecerá el grupo de acceso correcto.</para>
</step>
</procedure>
</sect2>
<sect2>
<title>Prueba de la configuración</title>
<para>Su wrapper debería estar listo. Debería probarlo,
claro está, haciendo un commit forzado al fichero <filename>
access</filename>:
<screen>&prompt.user; <userinput>cvs commit -f -m 'Commit
forzado para probar los nuevos scripts en CVSROOT'
access</userinput></screen>
Si algo falla asegúrese de que todos los pasos arriba
descritos se han realizado correctamente.</para>
</sect2>
</sect1>
</article>

View file

@ -12,7 +12,6 @@ SUBDIR+= committers-guide
SUBDIR+= contributing
#SUBDIR+= contributors
SUBDIR+= cups
SUBDIR+= cvs-freebsd
SUBDIR+= explaining-bsd
#SUBDIR+= filtering-bridges
SUBDIR+= fonts

View file

@ -1,22 +0,0 @@
#
# The FreeBSD Russian Documentation Project
#
# $FreeBSD$
# $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/cvs-freebsd/Makefile,v 1.3 2005/01/03 08:14:37 marck Exp $
#
# Original revision: r39631
#
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.xml
URL_RELPREFIX?= ../../../..
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -1,727 +0,0 @@
<?xml version="1.0" encoding="koi8-r"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
The FreeBSD Russian Documentation Project
$FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/cvs-freebsd/article.xml,v 1.9 2006/02/05 17:43:22 marck Exp $
Original revision: r43184
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="ru">
<info><title>Настройка хранилища CVS - подход FreeBSD</title>
<author><personname><firstname>Stijn</firstname><surname>Hoop</surname></personname><affiliation>
<address><email>stijn@win.tue.nl</email></address>
</affiliation></author>
<copyright>
<year>2001</year>
<year>2002</year>
<year>2003</year>
<holder role="mailto:stijn@win.tue.nl">Stijn Hoop</holder>
</copyright>
<pubdate>$FreeBSD$</pubdate>
<releaseinfo>$FreeBSD$</releaseinfo>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<abstract>
<para>В этой статье описаны шаги, которые я предпринял для настройки
хранилища CVS, использующего те же самые скрипты, что используются в
проекте FreeBSD в их настройке. Это имеет некоторые преимущества перед
стандартной настройкой CVS, в том числе более точный контроль доступа к
дереву исходных текстов и посылку содержательных сообщений электронной
почты при каждом коммите.</para>
</abstract>
</info>
<sect1 xml:id="introduction">
<title>Введение</title>
<para>Большинство программных проектов с открытым кодом используют
<application>CVS</application> в качестве системы управления исходным
кодом. Хотя <application>CVS</application> весьма хороша в этом
качестве, у неё есть свои неудобства и недостатки. Одним из них является
то, что совместное использование дерева исходных текстов с другими
разработчиками может быстро привести к кошмарным проблемам при
администрировании, особенно если кто-то захочет защитить части дерева от
общедоступности.</para>
<para>FreeBSD является одним из проектов, использующим
<application>CVS</application>. Здесь также имеет большое количество
разработчиков, разбросанных по всему миру. Они разработали некоторые
скрипты, облегчающие управление хранилищем. Недавно &a.joe.email;
пересмотрел и привел в порядок эти скрипты
в целях облегчения их использования в других проектах. В этой
статье описан один из методов использования новых скриптов.</para>
<para>Чтобы извлечь максимум информации из этой статьи, вы должны владеть
основными методами работы с <application>CVS</application>.</para>
</sect1>
<sect1 xml:id="first-setup">
<title>Первоначальная настройка</title>
<warning>
<para>Наверное, лучше сначала выполнить эту процедуру с пустым тестовым
хранилищем, чтобы понять все последствия ваших действий. Как обычно в
таких случаях, у вас должны иметься свежие читаемые резервные
копии!</para>
</warning>
<sect2>
<title>Инициализация хранилища</title>
<para>Первым делом при настройке нового хранилища необходимо его
инициализировать, для чего выдать <application>CVS</application>
такую команду:</para>
<screen>&prompt.user; <userinput>cvs -d <replaceable>path-to-repository</replaceable> init</userinput></screen>
<para>Результатом ее выполнения будет созданный
<application>CVS</application> служебный
каталог <filename>CVSROOT</filename>, в котором выполняется вся
настройка.</para>
</sect2>
<sect2>
<title>Группа пользователей хранилища</title>
<para>Теперь мы создадим группу, которая будет владеть хранилищем. В
этой группе должны присутствовать все коммиттеры, для того, чтобы они
могли писать в хранилище. Для этой группы мы примем стандартное для
FreeBSD название <literal>ncvs</literal>.</para>
<screen>&prompt.root; <userinput>pw groupadd <replaceable>ncvs</replaceable></userinput></screen>
<para>Затем вы должны при помощи команды &man.chown.8; сменить владельца и
группу для только что добавленного каталога:</para>
<screen>&prompt.root; <userinput>chown -R :<replaceable>ncvs</replaceable> <replaceable>path-to-your-repository</replaceable></userinput></screen>
<para>Это нужно для того, чтобы никто не мог записывать в хранилище, не
являясь членом группы.</para>
</sect2>
<sect2>
<title>Получение исходных текстов</title>
<para>Теперь вам нужно получить каталог <filename>CVSROOT</filename> из
хранилища FreeBSD. Проще всего это делается извлечением с анонимного
зеркала CVS FreeBSD. Обратитесь к <link xlink:href="&url.books.handbook;/anoncvs.html">соответствующей главе
Руководства</link> для получения дополнительной информации. Мы будем
полагать, что исходные тексты хранятся в подкаталоге
<filename>CVSROOT-freebsd</filename> текущего каталога.</para>
</sect2>
<sect2>
<title>Копирование скриптов FreeBSD</title>
<para>Теперь мы скопируем исходные тексты FreeBSD из
<filename>CVSROOT</filename> в наше хранилище. Если вы знакомы с
<application>CVS</application>, то для вас может иметь смысл попытаться
импортировать скрипты, чтобы облегчить синхронизацию с последующими
версиями. Однако при этом оказывается, что
<application>CVS</application> имеет в этой области недостаток: при
импортировании исходных текстов в каталог <filename>CVSROOT</filename>
она не будет обновлять необходимые административные файлы. Чтобы в
этом убедиться, вам нужно проверить каждый файл после импортирования,
при этом смысл <literal>cvs import</literal> теряется. Поэтому
рекомендуемым методом является простое копирование скриптов.</para>
<para>Не имеет значения, как вы относитесь к предыдущему
параграфу&mdash;результат один и тот же. Просто поместите ваш
<filename>CVSROOT</filename> и скопируйте файлы FreeBSD поверх ваших
локальных (неизмененных) копий:</para>
<screen>&prompt.user; <userinput>cvs -d <replaceable>path-to-your-repository</replaceable> checkout CVSROOT</userinput>
&prompt.user; <userinput>cd CVSROOT</userinput>
&prompt.user; <userinput>cp ../CVSROOT-freebsd/* .</userinput>
&prompt.user; <userinput>cvs add *</userinput></screen>
<para>Заметим, что вы, скорее всего, получите несколько предупреждений о
том, что некоторые каталоги не были скопированы; это нормально, вам они
не нужны.</para>
</sect2>
<sect2>
<title>Скрипты</title>
<para>Теперь у вас есть рабочий каталог и точная копия скриптов, которые
используются в проекте FreeBSD для работы с хранилищем. Далее следует
краткое описание назначения каждого файла.</para>
<itemizedlist>
<listitem>
<para><filename>access</filename> - по умолчанию при стандартной
настройке этот файл не используется. Он применяется в <link linkend="freebsdspecific">специфичных для проекта FreeBSD
настройках</link>, где он управляет доступом к хранилищу. Вы
можете удалить этот файл, если вы не собираетесь использовать такую
настройку.</para>
</listitem>
<listitem>
<para><filename>avail</filename> - этот файл управляет доступом к
хранилищу. В нем вы можете указать группы людей, которым разрешен
доступ к хранилищу, а также запретить коммиты на уровне каталогов.
Вы должны поднастроить его так, чтобы он содержал группы и
каталоги, имеющиеся в вашем хранилище.</para>
</listitem>
<listitem>
<para><filename>cfg.pm</filename> - этот файл анализирует вашу
конфигурацию и содержит настройки по умолчанию. Вы
<emphasis>не</emphasis> должны изменять этот файл. Вместо этого
размещайте ваши изменения в конфигурации в файле
<filename>cfg_local.pm</filename>.</para>
</listitem>
<listitem>
<para><filename>cfg_local.pm</filename> - этот файл содержит все
настраиваемые параметры системы. Вы должны настраивать все
параметры здесь, например, куда посылается почта при коммите, с
каких хостов можно выполнять коммиты, и прочее. Ниже дается более
полная информация об этом.</para>
</listitem>
<listitem>
<para><filename>checkoutlist</filename> - эти файлы перечисляют все
файлы, управляемые <application>CVS</application> в этом каталоге.
Вы должны отредактировать его для удаления некоторых специфичных
для FreeBSD файлов.</para>
</listitem>
<listitem>
<para><filename>commit_prep.pl</filename> - этот скрипт выполняет
различные проверки перед выполнением коммита, в зависимости от
того, включили ли вы их в <filename>cfg_local.pm</filename>. Вам
не нужно его трогать.</para>
</listitem>
<listitem>
<para><filename>commitcheck</filename> - этот скрипт вызывается
непосредственно из <application>CVS</application>. Сначала он
проверяет, с использованием <filename>cvs_acls.pl</filename>,
имеет ли коммитер доступ к указанной части дерева, а
затем запускает <filename>commit_prep.pl</filename> для выполнения
различных проверок перед коммитом. Если они выполнились нормально,
то <application>CVS</application> позволит выполнить коммит. Вам
не нужно трогать этот файл.</para>
</listitem>
<listitem>
<para><filename>commitinfo</filename> - этот файл используется в
<application>CVS</application> для определения того, какой скрипт
запускать перед коммитом&mdash;в данном случае
<filename>commitcheckl</filename>. Вам не нужно трогать
этот файл.</para>
</listitem>
<listitem>
<para><filename>config</filename> - конфигурационный файл для этого
хранилища. Вы должны изменять его при необходимости, но
большинство администраторов могут оставить все настройки по
умолчанию. Дополнительную информацию о параметрах, которые могут
быть здесь заданы, можно найти в руководстве
по <application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>cvs_acls.pl</filename> - этот скрипт идентифицирует
пользователя и то, имеет ли он доступ к дереву. Это делается
на основе информации в файле <filename>avail</filename>. Вам не
нужно трогать этот файл.</para>
</listitem>
<listitem>
<para><filename>cvsignore</filename> - этот файл перечисляет файлы,
которые <application>CVS</application> не должна помещать в
хранилище. Вы можете отредактировать его по своему усмотрению.
Более полная информация об этом файле находится в руководстве по
<application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>cvswrappers</filename> - этот файл используется в
<application>CVS</application> для включения или выключения
расширения ключевых слов, или должен ли файл считаться бинарным.
Вы можете редактировать его по своему усмотрению. Более полная
информация об этом файле находится в руководстве по
<application>CVS</application>. Имейте ввиду, что опции
<application>CVS</application> <literal>-t</literal> и
<literal>-f</literal> некорректно работают в режиме
клиент/сервер.</para>
</listitem>
<listitem>
<para><filename>edithook</filename> - этот файл больше не
используется, но оставлен по историческим причинам. Вы можете
спокойно удалить этот файл.</para>
</listitem>
<listitem>
<para><filename>editinfo</filename> - <application>CVS</application>
использует этот файл для настройки редактора. FreeBSD не
использует эту функциональность, так как обработка сообщений
для журнала выполняется в файлах <filename>verifymsg</filename> и
<filename>logcheck</filename>. Это происходит по той причине,
что <filename>editinfo</filename> некорректно работает в режиме
клиент/сервер, или в случаях когда используются опции
<literal>-m</literal> или <literal>-F</literal>. Вам не нужно
трогать этот файл.</para>
</listitem>
<listitem>
<para><filename>exclude</filename> - в этом файле перечислены
регулярные выражения, используемые
<filename>commit_prepl.pl</filename> для выделения файлов, в которых
могут не содержаться заголовки с номером версии. В настройке
FreeBSD все файлы содержащиеся в хранилище должны иметь
заголовок с версией (типа &dollar;FreeBSD&dollar;). Все файлы
с именами, которые соответствуют одной из строк этого файла,
исключаются из проверки. Вы должны добавить выражения в этот
файл, если вы помещаете в хранилище файлы, которые не могут
иметь заголовки с версиями. Для целей установки скриптов лучшим
решением может оказаться исключение <filename>CVSROOT/</filename>
из проверки заголовков.</para>
</listitem>
<listitem>
<para><filename>log_accum.pl</filename> - это скрипт, который
принимает журнальное сообщение в виде, данном скриптом
<filename>logcheck</filename>, и добавляет его к файлу журнала в
хранилище для хранения резервной копии. Он также отрабатывает
посылку сообщения по электронной почте на адрес, который вы
зададите (в файле <filename>cfg_local.pm</filename>). Он
подключается к <application>CVS</application> через
<filename>loginfo</filename>. Вам не нужно трогать этот
файл.</para>
</listitem>
<listitem>
<para><filename>logcheck</filename> - при коммите этот файл
анализирует сообщение для журнала, которое составляют коммиттеры, и
пытается его некоторым образом улучшить. Он подключается к
<application>CVS</application> через <filename>logcheck</filename>.
Вам не нужно трогать этот файл.</para>
<note>
<para>Этот скрипт зависит от ряда локальных модификаций
<application>CVS</application>, сделанный во FreeBSD: эта версия
читает журнальное сообщение повторно после того, как этот скрипт
его модифицирует. Стандартная версия
<application>CVS</application> этого не делает, что делает этот
скрипт бесполезным, так как он не может модифицировать
журнальное сообщение, хотя может проверить его на предмет
правильности синтаксиса. <application>CVS</application>
версии 1.11.2 и выше может быть настроен, чтоб иметь
поведение подобное FreeBSD, путем установки опции
<literal>RereadLogAfterVerify=always</literal> в
файле <filename>config</filename>.</para>
</note>
</listitem>
<listitem>
<para><filename>loginfo</filename> - этот файл используется
<application>CVS</application> для управления того, куда посылается
протокольная информация. С помощью этого файла подключается
<filename>log_accum.pl</filename>. Вам не нужно трогать этот
файл.</para>
</listitem>
<listitem>
<para><filename>modules</filename> - этот файл сохраняет своё
традиционное назначение в <application>CVS</application>. Вы
должны удалить модули FreeBSD из стандартной версии. Вы можете
редактировать этот файл по своему усмотрению. Более полная
информация об этом файле находится в руководстве по
<application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>notify</filename> - этот файл используется в
<application>CVS</application> в том случае, если кто-то задаст
отслеживание файла. Это не используется в хранилище FreeBSD. Вы
можете редактировать его по своему усмотрению. Более полная
информация об этом файле находится в руководстве по
<application>CVS</application>.</para>
</listitem>
<listitem>
<para><filename>options</filename> - этот файл специфичен для
версии <application>CVS</application> от FreeBSD, но также
поддерживается версией для Debian. Он содержит
ключевое слово для расширения в заголовках версий. Вы должны
заменить это на ключевое слово, которое вы задали в файле
<filename>cfg_local.pm</filename> (если вы используете эту
возможность, которая в настоящее время специфична для
FreeBSD).</para>
</listitem>
<listitem>
<para><filename>rcsinfo</filename> - этот файл отображает каталоги в
хранилище на файлы шаблонов, как например
<filename>rcstemplate</filename>. По умолчанию FreeBSD использует
один шаблон для всего хранилища. Вы можете добавлять другие
к этому файлу по своему усмотрению.</para>
</listitem>
<listitem>
<para><filename>rcstemplate</filename> - этот файл является
актуальным файлом шаблона, который видят коммиттеры, когда помещают
что-то в хранилище. Вы должны отредактировать его для описания
различных дополнительных параметров, которые вы определили в
<filename>cfg_local.pm</filename>.</para>
</listitem>
<listitem>
<para><filename>tagcheck</filename> - эти файлы управляют доступом к
созданию меток в хранилище. Стандартная для FreeBSD версия не
позволяет создавать метки с именами типа RELENG* из-за пересечения
с процессом создания релизов. Вы должны отредактировать этот файл
по вашему усмотрению.</para>
</listitem>
<listitem>
<para><filename>taginfo</filename> - этот файл ставит в соответствие
операции с метками над каталогами хранилища скриптам управления
доступом, например <filename>tagcheck</filename>. Вам не нужно
трогать этот файл.</para>
</listitem>
<listitem>
<para><filename>unwrap</filename> - этот скрипт нужен для
автоматической обратной обработки (<quote>unwrap</quote>) двоичных
файлов (посмотрите <filename>cvswrappers</filename>) при
извлечении. Это не используется в текущей настройке FreeBSD по
причине того, что не работает с конфигурацией клиент/сервер. Вам
не нужно трогать этот файл.</para>
</listitem>
<listitem>
<para><filename>verifymsg</filename> - этот файл ставит в
соответствие каталогам хранилища скрипты вторичной обработки
журнальных сообщений, например <filename>logcheck</filename>.
Вам не нужно трогать этот файл.</para>
</listitem>
<listitem>
<para><filename>wrap</filename> - этот скрипт может быть использован для
автоматической обработки (<quote>wrap</quote>) двоичных файлов
(посмотрите <filename>cvswrappers</filename>) при помещении в
хранилище. Это не используется в текущей настройке FreeBSD, по
причине того, что не работает с конфигурацией клиент/сервер. Вам
не нужно трогать этот файл.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Настройка скриптов</title>
<para>Следующим шагом является настройка скриптов так, чтобы они работали
в ваших условиях. Вы должны просмотреть все файлы в каталоге и
выполнить ваши настройки. В частности, вы может потребоваться
отредактировать следующие файлы:</para>
<procedure>
<step>
<para>Если вы не хотите использовать <link linkend="freebsdspecific">специфичные для FreeBSD
возможности</link> скриптов, то вы можете без последствий удалить
файл <filename>access</filename>:</para>
<screen>&prompt.user; <userinput>cvs rm -f access</userinput></screen>
</step>
<step>
<para>Отредактируйте <filename>avail</filename> так, чтобы он
содержал различные каталоги хранилища, доступом к которым вы хотите
управлять. Обязательно сохраните строчку
<literal>avail||CVSROOT</literal>, иначе вы заблокируете сами себя
на следующем шаге.</para>
<para>Другими параметрами, которые вы можете добавить в этот файл,
являются группы коммиттеров. По умолчанию FreeBSD использует файл
<filename>access</filename> для перечисления всех коммиттеров, но
вы можете использовать любой файл. Вы можете также добавить
группы, если хотите (синтаксис описан в начале файла
<filename>cvs_acls.pl</filename>).</para>
</step>
<step>
<para>Отредактируйте файл <filename>cfg_local.pm</filename> так,
чтобы он содержал параметры, которые вы хотите. В частности, вы
должны взглянуть на такие пункты настройки:</para>
<itemizedlist>
<listitem>
<para><literal>%TEMPLATE_HEADERS</literal> - они обрабатываются
скриптами ведения протокола, и вставляются ниже почтового
сообщения, если они присутствуют и не являются пустыми в
сообщении при коммите. Вы можете, наверное, удалить строки
<literal>PR</literal> и <literal>MFC after</literal>. И,
конечно, вы можете добавить свои собственные.</para>
</listitem>
<listitem>
<para><literal>$MAIL_BRANCH_HDR</literal> - если вы хотите
в каждое сообщение при коммите вставлять заголовок, описывающий
ветку, в которую был выполнен коммит, задайте это в
соответствии с вашим окружением. Или оставьте это пустым, если
не хотите иметь такой заголовок.</para>
</listitem>
<listitem>
<para><literal>@COMMIT_HOSTS</literal> - задайте здесь список
хостов, с которых можно выполнять коммиты.</para>
</listitem>
<listitem>
<para><literal>$MAILADDRS</literal> - задайте здесь адрес
администратора или списка, в который должны направляться
почтовые сообщения при коммите.</para>
</listitem>
<listitem>
<para><literal>@LOG_FILE_MAP</literal> - измените этот массив по
своему усмотрению - каждое регулярное выражение сравнивается с
каталогом коммита, и протокольное сообщение при коммите
сохраняется в подкаталоге <filename>commitlogs</filename>
в указанном файле.</para>
</listitem>
<listitem>
<para><literal>$COMMITCHECK_EXTRA</literal> - если вы не хотите
использовать <link linkend="freebsdspecific">специфичные для
FreeBSD проверки доступа</link>, то вы должны удалить
определения <literal>$COMMITCHECK_EXTRA</literal> из этого
файла.</para>
</listitem>
</itemizedlist>
<note>
<para>Изменение параметра <literal>$IDHEADER</literal>
гарантированно работает только на платформах FreeBSD; это зависит
от специфичных для FreeBSD модификаций в
<application>CVS</application>.</para>
</note>
<para>Вы можете проверить <filename>cfg.pm</filename> на предмет того,
какие другие параметры могут быть изменены, но перечисленное выше
является достаточным подмножеством.</para>
</step>
<step>
<para>Отредактируйте <filename>exclude</filename> для удаления
специфичных для FreeBSD записей (например, всех строк, которые
начинаются с <literal>^ports/</literal> и так далее). Более того,
закомментируйте строки, начинающиеся с
<literal>^CVSROOT/</literal>, и добавьте одну строку только с
<literal>^CVSROOT/</literal>. После установки обработчика
(wrapper) вы можете добавить свои заголовки к файлам в каталоге
<filename>CVSROOT</filename> и восстановить эти строки, но теперь
они будут иметь смысл, только когда вы попытаетесь выполнить коммит
позже.</para>
</step>
<step>
<para>Отредактируйте файл <filename>modules</filename> и удалите всё,
что относится к FreeBSD. Добавьте собственные модули, если
хотите.</para>
</step>
<step>
<note>
<para>Этот шаг необходим, если только вы задали значение для
<literal>$IDHEADER</literal> в <filename>cfg_local.pm</filename>
(что работает только при использовании модифицированной во
FreeBSD версии <application>CVS</application>).</para>
</note>
<para>Отредактируйте файл <filename>options</filename> так, чтобы он
соответствовал метке, которую вы задали в
<filename>cfg_local.pm</filename>. Глобальный поиск и замена
<literal>FreeBSD</literal> на вашу метку должны сработать.</para>
</step>
<step>
<para>Отредактируйте файл <filename>rcstemplate</filename> так, чтобы
он содержал те же самые ключевые слова, что заданы в
<filename>cfg_local.pm</filename>.</para>
</step>
<step>
<para>Опционально удалите проверки FreeBSD из
<filename>tagcheck</filename>. Вы можете просто добавить
<literal>exit 0</literal> в начало файла, чтобы запретить все
проверки при установке метки.</para>
</step>
<step>
<para>Последним действием, которое нужно сделать перед тем, как
закончить работу, является проверка того, что протоколы коммитов
могут сохраняться. По умолчанию они сохраняются в хранилище, в
подкаталоге <filename>commitlogs</filename> каталога
<filename>CVSROOT</filename>. Этот каталог должен быть создан, так
что выполните следующее:</para>
<screen>&prompt.user; <userinput>mkdir commitlogs</userinput>
&prompt.user; <userinput>cvs add commitlogs</userinput></screen>
</step>
</procedure>
<para>А теперь, после тщательной проверки, вы должны выполнить коммит
ваших изменений. Убедитесь, что вы дали сами себе доступ к каталогу
<filename>CVSROOT</filename> в вашем <filename>avail</filename> до
того, как его делать, так как в противном случае вы заблокируете сами
себя. Так что убедитесь, что всё именно так, как вы и предполагали, а
затем выполните следующее:</para>
<screen>&prompt.user; <userinput>cvs commit -m '<replaceable>- Initial FreeBSD scripts commit</replaceable>'</userinput></screen>
</sect2>
<sect2>
<title>Тестирование настройки</title>
<para>Вы готовы к первому тестированию: принудительному коммиту в файл
<filename>avail</filename>, чтобы убедиться, что всё работает так, как
ожидалось.</para>
<screen>&prompt.user; <userinput>cvs commit -f -m '<replaceable>Forced commit to test the new CVSROOT scripts</replaceable>' avail</userinput></screen>
<para>Если всё работает, поздравляем! Теперь у вас имеется работающая
настройка скриптов FreeBSD для вашего хранилища. Если
<application>CVS</application> всё ещё о чём-то сообщает, вернитесь и
проверьте, все ли вышеупомянутые шаги были выполнены правильно.</para>
</sect2>
</sect1>
<sect1 xml:id="freebsdspecific">
<title>Специфичная для FreeBSD настройка</title>
<para>Проект FreeBSD сам по себе использует несколько другую настройку,
в которой также используются файлы из подкаталога
<filename>freebsd</filename> каталога FreeBSD
<filename>CVSROOT</filename>. Проект использует их из-за большого
количества коммиттеров, которые все должны быть в одной и той же группе.
Поэтому был написан простой обработчик, проверяющий, что люди имеют
правильные права на выполнение коммита, а затем устанавливающий
идентификатор группы, соответствующий идентификатору хранилища.</para>
<para>Если вашему хранилищу это тоже нужно, то шаги для выполнения этого
описаны ниже. Но сначала обзор связанных с этим файлов.</para>
<sect2>
<title>Файлы, используемые в настройке FreeBSD</title>
<itemizedlist>
<listitem>
<para><filename>access</filename> - этот файл управляет информацией
о доступе. Вы должны отредактировать этот файл для включения
всех участников вашего проекта.</para>
</listitem>
<listitem>
<para><filename>freebsd/commitmail.pl</filename> - этот файл больше
не используется, но оставлен по историческим причинам. Вам не
нужно трогать этот файл.</para>
</listitem>
<listitem>
<para><filename>freebsd/cvswrap.c</filename> - это исходный текст
обработчика CVS, который вам нужно установить, чтобы проверки
доступа реально заработали. Дополнительная информация об этом
ниже. Вы должны отредактировать маршруты в макросах
<literal>ACCESS</literal> и <literal>REALCVS</literal> так, чтобы
они соответствовали вашей настройке.</para>
</listitem>
<listitem>
<para><filename>freebsd/mailsend.c</filename> - этот файл нужен
в настройке FreeBSD для списков рассылки. Вам не нужно трогать
этот файл.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>Процедура</title>
<procedure>
<step>
<para>Отредактируйте файл <filename>access</filename> так, чтобы
он содержал только ваше имя пользователя.</para>
</step>
<step>
<para>Отредактируйте <filename>cvswrap.c</filename> так, чтобы он
содержал правильный маршрут для вашей настройки. Это определено в
макросе по имени <literal>ACCESS</literal>. Вы должны также
изменить расположение реального выполнимого файла
<command>cvs</command>, если оно не подходит к вашей ситуации.
Для стандартного <filename>cvswrap.c</filename> предполагается, что
он заменит общесистемную команду cvs, которая будет перемещена в
<filename>/usr/bin/ncvs</filename>.</para>
<para>В моём экземпляре <filename>cvswrap.c</filename> помещено
следующее:</para>
<programlisting>#define ACCESS "/local/cvsroot/CVSROOT/access"
#define REALCVS "/usr/bin/ncvs"</programlisting>
</step>
<step>
<para>Следующим шагом является установка обработчика для того, чтобы
проверить правильность установки группы при выполнении коммита.
Исходные тексты для этого размещены в
<filename>cvswrap.c</filename> из вашего
<filename>CVSROOT</filename>.</para>
<para>Откомпилируйте исходные тексты, которые вы редактировали для
включения правильных путей:</para>
<screen>&prompt.user; <userinput>cc -o cvs cvswrap.c</userinput></screen>
<para>А затем установите их (для этого вы должны быть пользователем
root):</para>
<screen>&prompt.root; <userinput>mv /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>mv cvs /usr/bin/cvs</userinput>
&prompt.root; <userinput>chown root:<replaceable>ncvs</replaceable> /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod o-rx /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod u-w,g+s /usr/bin/cvs</userinput></screen>
<para>При этом обработчик будет установлен по умолчанию как команда
<command>cvs</command>, что гарантирует всеми, использующими
хранилище, получение правильных уровней доступа.</para>
</step>
<step>
<para>Теперь вы можете убрать всех из вашей группы хранилища. Всё
управление доступом выполняется вашим обработчиком, и он будет
устанавливать правильную группу для доступа.</para>
</step>
</procedure>
</sect2>
<sect2>
<title>Тестирование настройки</title>
<para>Теперь ваш обработчик должен быть установлен. Конечно, вы можете
протестировать его, выполнив принудительный коммит в файл
<filename>access</filename>:</para>
<screen>&prompt.user; <userinput>cvs commit -f -m '<replaceable>Forced commit to test the new CVSROOT scripts</replaceable>' access</userinput></screen>
<para>И снова, если это не сработает, проверьте, правильно ли были выполнены
все вышеперечисленные шаги.</para>
</sect2>
</sect1>
</article>

View file

@ -60,8 +60,6 @@
<!ENTITY url.articles.contributors.en "&url.doc.langbase.en;/articles/contributors">
<!ENTITY url.articles.cups "&url.doc.langbase;/articles/cups">
<!ENTITY url.articles.cups.en "&url.doc.langbase.en;/articles/cups">
<!ENTITY url.articles.cvs-freebsd "&url.doc.langbase;/articles/cvs-freebsd">
<!ENTITY url.articles.cvs-freebsd.en "&url.doc.langbase.en;/articles/cvs-freebsd">
<!ENTITY url.articles.cvsup-advanced "&url.doc.langbase;/articles/cvsup-advanced">
<!ENTITY url.articles.cvsup-advanced.en "&url.doc.langbase.en;/articles/cvsup-advanced">
<!ENTITY url.articles.explaining-bsd "&url.doc.langbase;/articles/explaining-bsd">

View file

@ -1,22 +0,0 @@
# The FreeBSD Simplified Chinese Project
#
# Original Revision: 1.5
# $FreeBSD$
#
# Article: Setting up a CVS repository - the FreeBSD way
MAINTAINER= stijn@win.tue.nl
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.xml
URL_RELPREFIX?= ../../../..
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -1,588 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!--
The FreeBSD Documentation Project
The FreeBSD Chinese (Simplified) Documentation Project
From FreeBSD: doc/zh_TW.Big5/articles/cvs-freebsd/article.xml,v 1.2 2006/01/31 01:30:59 vanilla
Original Revision: 1.17
-->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_cn">
<info><title>建立 CVS 储存库 (repository) - 以 FreeBSD 的方式</title>
<author><personname><firstname>Stijn</firstname><surname>Hoop</surname></personname><affiliation>
<address><email>stijn@win.tue.nl</email></address>
</affiliation></author>
<pubdate>$FreeBSD$</pubdate>
<copyright>
<year>2001</year>
<year>2002</year>
<year>2003</year>
<holder role="mailto:stijn@win.tue.nl">Stijn Hoop</holder>
</copyright>
<releaseinfo>$FreeBSD$</releaseinfo>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<abstract>
<para>这份文件描述了使用和 FreeBSD 项目相同的命令脚本来建立 CVS 储存库的步骤。
这和标准 CVS 建立的储存库相较之下有许多优点,
它提供了更多对于源代码树的细粒度访问控制,
并能够为每一次的提交生成和发出易读的电子邮件。</para>
</abstract>
</info>
<sect1 xml:id="introduction">
<title>简介</title>
<para>大多数的开放源代码软件项目都使用 <application>CVS</application>
作为它们的源代码控制系统。 尽管 <application>CVS</application> 有许多的优点,
但它也有部份的瑕疵和缺点。
其中之一的原因是和其它的开发者分享源代码树可能会迅速成为系统管理的恶梦,
特别是当有人希望保护部份的源代码树免受于一般的存取时。</para>
<para>FreeBSD 是众多使用 <application>CVS</application> 的项目之一,
因为基于它进行开发的开发人员遍布于全世界。
他们撰写了一些命令脚本使得管理储存库变得更加容易。
最近这些命令脚本由 &a.joe; 重新整理过且更标准化,
使得在其它的项目上再次使用这些命令脚本会更加容易。
本文件将描述使用这些新的命令脚本的方法。</para>
<para>为了使本文件中的信息对您有用, 您需要首先熟悉 <application>CVS</application>
的基本操作方式。</para>
</sect1>
<sect1 xml:id="first-setup">
<title>基本配置</title>
<warning>
<para>最好的方式是在一个全新的储存库中执行这些步骤,
并确定你了解所有的后果。 同时, 请确定你有最新且可读的资料备份!</para>
</warning>
<sect2>
<title>初始化储存库</title>
<para>首先要做的是建立一个新的储存库, 执行下列命令告诉
<application>CVS</application> 建立并初始化:</para>
<screen>&prompt.user; <userinput>cvs -d path-to-repository init</userinput></screen>
<para>这命令告诉 <application>CVS</application> 建立
<filename>CVSROOT</filename> 的目录,
这个目录里放置了所有的配置文件。</para>
</sect2>
<sect2>
<title>配置储存库的用户组</title>
<para>现在我们将建立一个拥有该储存库的用户组,
所有的开发者必须加入这个用户组, 这样他们才能够存取该储存库。
我们假设用户组名称是以 FreeBSD 内部所采用的
<literal>ncvs</literal></para>
<screen>&prompt.root; <userinput>pw groupadd ncvs</userinput></screen>
<para>接着你需要使用 &man.chown.8; 将目录所有者指定给刚刚新增的用户组:</para>
<screen>&prompt.root; <userinput>chown -R :ncvs path-to-your-repository</userinput></screen>
<para>如此一来, 没有适当的用户组许可的用户, 就不再能够写入该储存库。</para>
</sect2>
<sect2>
<title>取回源文件</title>
<para>现在你需要从 FreeBSD 储存库中取回 <filename>CVSROOT</filename> 目录,
从 FreeBSD 匿名的 CVS 镜像站来取回会是最简单的方法。请查阅 <link xlink:href="&url.books.handbook;/anoncvs.html">在 使用手册 中的相关章节</link>
来获得更多信息。 我们假设取回的文件存放在相同目录下的
<filename>CVSROOT-freebsd</filename> 目录中。</para>
</sect2>
<sect2>
<title>复制 FreeBSD 的命令脚本</title>
<para>接下来我们要复制 FreeBSD <filename>CVSROOT</filename>
里的文件到你的储存库中。 如果你熟悉 <application>CVS</application>
你也许会想你可以直接汇入 (import) 这些命令脚本,
从而更容易地在未来有新版时进行版本同步; 不过,事实是
<application>CVS</application> 在这个部份有缺点: 当汇入文件到
<filename>CVSROOT</filename> 时, 它并不会更新配置文件。
为了要认出这些文件, 你还需要在汇入它们后一一重新提交, 这就失去了
<literal>cvs import</literal> 的价值。 因此, 推荐的方法是直接将这些命令脚本复制过去。</para>
<para>如果您不了解这些操作也没有关系 &mdash; 因为最后的结果都是一样的。
首先汇出 (checkout) 你的 <filename>CVSROOT</filename>
然后复制刚刚取回的 FreeBSD 文件到本地的目录中(尚未变动过):</para>
<screen>&prompt.user; <userinput>cvs -d path-to-your-repository checkout CVSROOT</userinput>
&prompt.user; <userinput>cd CVSROOT</userinput>
&prompt.user; <userinput>cp ../CVSROOT-freebsd/* .</userinput>
&prompt.user; <userinput>cvs add *</userinput></screen>
<para>注意: 你很可能会得到一段关于某些目录没有被复制的警告,这是正常的,
你并不需要用到这些目录。</para>
</sect2>
<sect2>
<title>命令脚本说明</title>
<para>现在你的工作目录中有了完整 FreeBSD 项目在他们的储存库中使用的命令脚本的副本,
以下是每个文件简单的介绍。</para>
<itemizedlist>
<listitem>
<para><filename>access</filename> - 此文件在预设的安装中没有被用到。
它是在 <link linkend="freebsdspecific">FreeBSD 的专用配置</link>
中用来控制储存库的存取的。 如果你不希望使用这个配置的话,
则可以删除这个文件。</para>
</listitem>
<listitem>
<para><filename>avail</filename> - 此文件控制储存库的存取。
在此文件中你可以指定允许存取储存库的用户组,
也可以针对目录或文件来拒绝提交。
你应该调整为在你的储存库中将包含的用户组和目录。</para>
</listitem>
<listitem>
<para><filename>cfg.pm</filename> - 此文件说明了配置内容,并提供预设的配置。
<emphasis></emphasis> 应修改此文件, 而应将修改的配置放到
<filename>cfg_local.pm</filename></para>
</listitem>
<listitem>
<para><filename>cfg_local.pm</filename> - 此文件包含所有的系统配置值。
你应该配置所有列在此的配置, 例如提交的邮件要寄到哪、
在哪些主机上的使用者可以提交等等。 更多的相关信息在稍后会提到。</para>
</listitem>
<listitem>
<para><filename>checkoutlist</filename> - 此文件列出所有在
<application>CVS</application> 控制下此目录中的文件, 除了标准在
<literal>cvs init</literal> 建立出的文件。 你可以删除某些不需要的
FreeBSD 专用的文件。</para>
</listitem>
<listitem>
<para><filename>commit_prep.pl</filename> - 此命令脚本执行各种提交前的检查,
这些检查是否启用, 取决于您在 <filename>cfg_local.pm</filename>
中所进行的配置。 你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>commitcheck</filename> - 此命令脚本会直接影响
<application>CVS</application>。 首先它会使用
<filename>cvs_acls.pl</filename> 来检查提交者是否可以存取指定的源代码树,
然后执行 <filename>commit_prep.pl</filename> 来确认各种提交前的检查。
如果一切正常,<application>CVS</application> 将允许此次提交继续执行。
你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>commitinfo</filename> - 此文件是
<application>CVS</application> 用来定义在提交前所要执行的程序 &mdash;
在此例中是 <filename>commitcheck</filename>。你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>config</filename> - 储存库的配置选项。
你可以修改为你想要的, 但大多数的管理者可能会保留默认值。
更多关于可以在此配置的选项信息可以查阅 <application>CVS</application> 手册。</para>
</listitem>
<listitem>
<para><filename>cvs_acls.pl</filename> - 此命令脚本定义提交者的身分,
以及他/她是否允许存取源代码树, 这些判断基于 <filename>avail</filename>
中的配置。 你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>cvsignore</filename> - 此文件列出哪些文件
<application>CVS</application> 不用处理到储存库中,
你可以修改成你想要的。 更多关于可以此文件的说明可以查阅 <application>CVS</application>
手册。</para>
</listitem>
<listitem>
<para><filename>cvswrappers</filename> - 此文件是
<application>CVS</application> 用来启用或停用关键词展开,
或者是否应将文件视为二进制文件。 你可以修改成你想要的。
更多关于可以此文件的说明可以查阅 <application>CVS</application> 手册。
注意 <literal>-t</literal><literal>-f</literal> 选项在
<application>CVS</application> 客户端/服务器 并不能够正确地运作。</para>
</listitem>
<listitem>
<para><filename>edithook</filename> - 此文件已经不再使用了,
仅为历史原因保留。 你可以安全地删除此文件。</para>
</listitem>
<listitem>
<para><filename>editinfo</filename> - <application>CVS</application>
使用这个文件来强迫你使用特定的编辑器。 FreeBSD 没有使用这个功能,
而对输入的日志信息的检查, 则由 <filename>verifymsg</filename>
<filename>logcheck</filename> 来完成。 这是因为
<filename>editinfo</filename> 功能在从远程提交或是使用
<literal>-m</literal><literal>-F</literal> 选项时不会执行。
你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>exclude</filename> - 此文件列出被
<filename>commit_prep.pl</filename> 定义不能包含修正版标头的文件。
在 FreeBSD 版本的配置中, 所有在修正版控制下的文件需有一个修正版标头,
(类似 &dollar;FreeBSD&dollar; 这样)。
此文件逐行列出不应进行检查的文件名字。
你可以在此文件中为不需要修正版标头的文件新增一个正则表达式。
为了安装这些命令脚本, 最好的方法是将
<filename>CVSROOT/</filename> 从标头检查中排除。</para>
</listitem>
<listitem>
<para><filename>log_accum.pl</filename> - 此命令脚本会处理由
<filename>logcheck</filename> 所提供的日志信息,
并且将之为备份目的附加于储存库中的记录文件。
同时也执行要将邮件寄到你提供的信箱中的程序 (在 <filename>cfg_local.pm</filename> 中)。
它和 <application>CVS</application> 之间是由 <filename>loginfo</filename>
负责沟通。 你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>logcheck</filename> - 此文件分析提交者提供的日志信息,
并试图对其作清理动作。 它和 <application>CVS</application>
之间是由 <filename>verifymsg</filename> 负责沟通。 你不应更动此文件。</para>
<note><para>此命令脚本依赖于经过 FreeBSD 修改的 <application>CVS</application>
FreeBSD 版本在此命令脚本修改过后才读取日志信息; 标准的
<application>CVS</application> 版本虽然能够检查语法上是否正确,
但并不会清理日志信息。<application>CVS</application> 1.11.2 可以通过在
<filename>config</filename> 配置 <literal>RereadLogAfterVerify=always</literal>
来和 FreeBSD 版本有相同的作用。</para></note>
</listitem>
<listitem>
<para><filename>loginfo</filename> - 此文件是
<application>CVS</application> 用来控制日志信息要寄到哪里,而
<filename>log_accum.pl</filename> 负责处理。你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>modules</filename> - 此文件保留了
<application>CVS</application> 原始的意义。 你应该删除新增的 FreeBSD
模块, 并修改为你想要的内容。 更多关于可以此文件的说明可以查阅
<application>CVS</application> 手册。</para>
</listitem>
<listitem>
<para><filename>notify</filename> - 此文件为
<application>CVS</application> 用来控制监看某个文件。
在 FreeBSD 的储存库中没有用到此文件,
你可以修改成你想要的。 更多关于可以此文件的说明,
可以查阅 <application>CVS</application> 手册。</para>
</listitem>
<listitem>
<para><filename>options</filename> - 此文件仅限使用于 FreeBSD 和 Debian
<application>CVS</application> 版本。
它包含了需要在修正版标头中展开的关键词。
你可以修改为符合你在 <filename>cfg_local.pm</filename> 中指定的关键词。</para>
</listitem>
<listitem>
<para><filename>rcsinfo</filename> - 此文件定义提交时,
储存库所要使用的日志信息样式模板, 如 <filename>rcstemplate</filename>
FreeBSD 预设为所有的储存库使用同一个样式模板,
你可以加入其它你想要的。</para>
</listitem>
<listitem>
<para><filename>rcstemplate</filename> - 此文件是提交者在提交时会看到的日志信息样式模板,
你应该修改为你在 <filename>cfg_local.pm</filename>
中定义的各种参数。</para>
</listitem>
<listitem>
<para><filename>tagcheck</filename> - 此文件控制在储存库中贴上标签的存取。
标准的 FreeBSD 版本拒绝名为 RELENG* 的标签,因为这是 交付工程组 的工作。
你可以根据需要来修改此文件。</para>
</listitem>
<listitem>
<para><filename>taginfo</filename> - 此文件控制执行在储存库中贴上标签的存取的命令脚本,
<filename>tagcheck</filename>。你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>unwrap</filename> - 此命令脚本可以用来在汇出时自动 <quote>解开</quote>
二进制文件 (请见 <filename>cvswrappers</filename>)。 目前 FreeBSD
并没有使用此配置, 因为此功能在远程提交时执行的并不十分完善。
你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>verifymsg</filename> - 此文件用来执行和日志信息相关的命令脚本,
<filename>logcheck</filename>。你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>wrap</filename> - 此命令脚本可以用来在提交时自动 <quote>包裹</quote>
二进制文件 (请见 <filename>cvswrappers</filename>)。 目前 FreeBSD
并没有使用此配置, 因为此功能在远程提交时执行的并不十分完善。
你不应更动此文件。</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>定制命令脚本</title>
<para>接下来的步骤要配置这些命令脚本使得它们可以在你的环境中运作。
你应该检查所有在目录中的文件, 并修改为符合你的配置。
尤其, 你会想要修改下列的文件:</para>
<procedure>
<step>
<para>如果你不希望使用 <link linkend="freebsdspecific">FreeBSD 的专用配置</link>
你可以安全地删除 <filename>access</filename></para>
<screen>&prompt.user; <userinput>cvs rm -f access</userinput></screen>
</step>
<step>
<para>编辑 <filename>avail</filename> 来包含你想控制存取的各种储存库目录,
请确定你有保留 <literal>avail||CVSROOT</literal> 这一行,
否则你将会在下一步把你自己锁在外面。</para>
<para>另外你可以在此文件中新增开发者的用户组FreeBSD 预设使用
<filename>access</filename> 来列出所有的开发者,
但你可以使用任何你想要用的文件。 如果你想的话也可以新增用户组 (请使用指定在
<filename>cvs_acls.pl</filename> 前面所介绍的语法)。</para>
</step>
<step>
<para>编辑 <filename>cfg_local.pm</filename> 来包含你需要的选项。
你应该特别检视一下下列的配置项目:</para>
<itemizedlist>
<listitem>
<para><literal>%TEMPLATE_HEADERS</literal> - 这是用来取得日志信息内容的程序,
并加入将呈现的邮件项目和提供非空值的信息。
你可以删除 <literal>PR</literal><literal>MFC after</literal>
叙述,当然也可以加入你想要的。</para>
</listitem>
<listitem>
<para><literal>$MAIL_BRANCH_HDR</literal> - 如果你想要在每一封提交的邮件中加入描述是在哪一个分支中提交的标头,
那么请定义为符合你的配置。 如果你不想使用这样的标头, 那么请配置为空值。</para>
</listitem>
<listitem>
<para><literal>@COMMIT_HOSTS</literal> - 定义使用者能够提交的主机。</para>
</listitem>
<listitem>
<para><literal>$MAILADDRS</literal> - 配置应该收到提交邮件的邮件地址。</para>
</listitem>
<listitem>
<para><literal>@LOG_FILE_MAP</literal> - 以你所需要的来修改这个数组,
每个配置值应该符合被提交的目录,而提交的日志信息会以
<filename>commitlogs</filename> 的名称储存在每个被配置的目录下。</para>
</listitem>
<listitem>
<para><literal>$COMMITCHECK_EXTRA</literal> - 如果你不想使用
<link linkend="freebsdspecific">FreeBSD 专用的存取控制</link>
功能, 你可以在此文件中删除对 <literal>$COMMITCHECK_EXTRA</literal>
的定义。</para>
</listitem>
</itemizedlist>
<note><para>修改 <literal>$IDHEADER</literal> 的功能只有在 FreeBSD
平台上可以运作, 它依赖于 FreeBSD 专用的 <application>CVS</application>
配置。</para></note>
<para>你可以检查 <filename>cfg.pm</filename> 是否有其它的参数可以修改,
但是修改最好是有原因的。</para>
</step>
<step>
<para>删除 <filename>exclude</filename> 中关于FreeBSD 的专用配置的叙述
(如以 <literal>^ports/</literal> 为开头的每一行等)。 此外,
注释掉以 <literal>^CVSROOT/</literal> 为开头的行列, 然后新增一行只有
<literal>^CVSROOT/</literal>。 等到关键词展开的命令脚本安装好后,
你可以在 <filename>CVSROOT</filename> 目录中的文件里加上标头,
然后再恢复刚刚注释的行列, 但在你还没有提交前则只保持这样。</para>
</step>
<step>
<para>编辑 <filename>modules</filename> 并删除所有 FreeBSD 的模块。
加入你需要的模块。</para>
</step>
<step>
<note><para>此步骤只有在你于 <filename>cfg_local.pm</filename> 中指定了
<literal>$IDHEADER</literal> 才有必要配置 (只有在 FreeBSD 专用的
<application>CVS</application> 配置上才能够执行)。</para></note>
<para>编辑 <filename>options</filename> 以符合你在
<filename>cfg_local.pm</filename> 中配置的标签名称。
在所有的文件中搜寻 <literal>FreeBSD</literal>
并替换为你配置的标签名称。</para>
</step>
<step>
<para>修改 <filename>rcstemplate</filename> 为和在
<filename>cfg_local.pm</filename> 中相同的配置。</para>
</step>
<step>
<para>选择性的删除在 <filename>tagcheck</filename> 中针对 FreeBSD
检查的配置。你可以仅仅在文件的最上层加上 <literal>exit 0</literal>
来取消所有标签的检查。</para>
</step>
<step>
<para>在你完成前的最后一件事是确认 commitlogs 可以正确储存。
预设会储存在储存库中 <filename>CVSROOT</filename> 里的
<filename>commitlogs</filename> 子目录中,
而这个目录需要事先建立:</para>
<screen>&prompt.user; <userinput>mkdir commitlogs</userinput>
&prompt.user; <userinput>cvs add commitlogs</userinput></screen>
</step>
</procedure>
<para>现在, 在细心的检视过后, 你可以提交你的修改了。 确定你先前有在
<filename>avail</filename> 中允许你自己存取 <filename>CVSROOT</filename>
目录, 因为如果没有这样做的话你会把你自己锁在外面。
完整确认过后请执行下列命令:</para>
<screen>&prompt.user; <userinput>cvs commit -m '- Initial FreeBSD scripts commit'</userinput></screen>
</sect2>
<sect2>
<title>测试配置</title>
<para>你已经准备好做基本的测试了: 强制提交 <filename>avail</filename>
以确认每件事都如预期的运作。</para>
<screen>&prompt.user; <userinput>cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' avail</userinput></screen>
<para>如果一切正常, 那么恭喜了! 你现在已经为你的储存库建立好 FreeBSD
的命令脚本了。 如果 <application>CVS</application> 仍然有警告什么,
回头检视上述的步骤是否有正确的执行。</para>
</sect2>
</sect1>
<sect1 xml:id="freebsdspecific">
<title>FreeBSD 的专用配置</title>
<para>FreeBSD 项目自己使用一个有点不同的配置,那就是同时也使用 FreeBSD
<filename>CVSROOT</filename> 中的 <filename>freebsd</filename> 子目录。
因为大量的 committer 必须在相同的用户组中, 因此项目写了一个简单的 wrapper
来确保 committer 可以正确的提交, 并配置储存库的用户组名称。</para>
<para>如果你的储存库也需要这样的功能,那么下面就会介绍如何建立,
不过首先要先来看一段复杂的概述。</para>
<sect2>
<title>FreeBSD 配置中使用的文件</title>
<itemizedlist>
<listitem>
<para><filename>access</filename> - 此文件用来控制储存库的存取。
你应该编辑并加入所有在项目中的成员。</para>
</listitem>
<listitem>
<para><filename>freebsd/commitmail.pl</filename> -
此文件已经不再使用了,
只是因为历史原因而保留。 你不应更动此文件。</para>
</listitem>
<listitem>
<para><filename>freebsd/cvswrap.c</filename> - 此 CVS wrapper
源代码是用来建立检查所有存取的工作。更多的信息在稍后会提出。
你应该编辑 <literal>ACCESS</literal><literal>REALCVS</literal>
的路径以符合你的配置。</para>
</listitem>
<listitem>
<para><filename>freebsd/mailsend.c</filename> - 此文件是 FreeBSD 设定
mailing lists 需要的, 你不应更动此文件。</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>步骤</title>
<procedure>
<step>
<para>只把你的用户名加到 <filename>access</filename> 中。</para>
</step>
<step>
<para>编辑 <filename>cvswrap.c</filename> 的路径以符合你的配置,
定义在大写的 <literal>ACCESS</literal> 中。
同时如果默认值不符合你的情况的话也应该修改本地实际的 <command>cvs</command>
程序所在位置。 原始的 <filename>cvswrap.c</filename>
希望替代服务器端的 CVS 程序,
例如将其改名为 <filename>/usr/bin/ncvs</filename></para>
<para>我的 <filename>cvswrap.c</filename> 是这样:</para>
<programlisting>#define ACCESS "/local/cvsroot/CVSROOT/access"
#define REALCVS "/usr/bin/ncvs"</programlisting>
</step>
<step>
<para>接下来是建立 wrapper 来确认你在提交时是在正确的用户组中。
在你的 <filename>CVSROOT</filename> 中的
<filename>cvswrap.c</filename> 要能够使用。</para>
<para>在你完成编辑并加入正确的路径后我们要来编译源代码:</para>
<screen>&prompt.user; <userinput>cc -o cvs cvswrap.c</userinput></screen>
<para>然后进行需要配置(此步骤需要 root 权限):</para>
<screen>&prompt.root; <userinput>mv /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>mv cvs /usr/bin/cvs</userinput>
&prompt.root; <userinput>chown root:ncvs /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod o-rx /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod u-w,g+s /usr/bin/cvs</userinput></screen>
<para>这会将 wrapper 安装成预设的 <command>cvs</command> 程序,
请确定任何要使用储存库的人应该有正确的存取权限。</para>
</step>
<step>
<para>现在你可以删除所有在储存库用户组中的使用者,所有的存取控制会经由
wrapper 完成,同时 wrapper 会配置存取的正确用户组。</para>
</step>
</procedure>
</sect2>
<sect2>
<title>测试配置</title>
<para>你的 wrapper 现在应该已经安装好了,你当然也可以强制提交
<filename>access</filename> 来测试是否正常:</para>
<screen>&prompt.user; <userinput>cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' access</userinput></screen>
<para>同样地,如果有错误,检查是否上述所有步骤都有正确的执行。</para>
</sect2>
</sect1>
</article>

View file

@ -2,7 +2,6 @@
SUBDIR =
SUBDIR+= contributing
SUBDIR+= cvs-freebsd
SUBDIR+= freebsd-questions
SUBDIR+= hubs
SUBDIR+= mailing-list-faq

View file

@ -1,21 +0,0 @@
# $FreeBSD$
#
# Article: Setting up a CVS repository - the FreeBSD way
#
# Build the Traditional Chinese Version
MAINTAINER= stijn@win.tue.nl
DOC?= article
FORMATS?= html
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
SRCS= article.xml
URL_RELPREFIX?= ../../../..
DOC_PREFIX?= ${.CURDIR}/../../..
.include "${DOC_PREFIX}/share/mk/doc.project.mk"

View file

@ -1,570 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
"http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
<!-- $FreeBSD$ -->
<!-- The FreeBSD Documentation Project -->
<!-- Setting up a CVS repository - the FreeBSD way -->
<!-- Translate into Chinese by jose@jose.idv.tw -->
<!-- English Version: 1.15 -->
<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="zh_tw">
<info><title>建立 CVS 儲存庫(repository) - 使用 FreeBSD 的方式</title>
<author><personname><firstname>Stijn</firstname><surname>Hoop</surname></personname><affiliation>
<address><email>stijn@win.tue.nl</email></address>
</affiliation></author>
<pubdate>$FreeBSD$</pubdate>
<copyright>
<year>2001</year>
<year>2002</year>
<year>2003</year>
<holder role="mailto:stijn@win.tue.nl">Stijn Hoop</holder>
</copyright>
<releaseinfo>$FreeBSD$</releaseinfo>
<legalnotice xml:id="trademarks" role="trademarks">
&tm-attrib.freebsd;
&tm-attrib.general;
</legalnotice>
<abstract>
<para>這份文件描述了使用和 FreeBSD 專案相同的命令稿來建立 CVS 儲存庫的步驟
。這和標準 CVS 建立的儲存庫相較之下有許多優點,包含了更多對於原始碼樹的
granular access 控制,以及為每一次的提交產生易讀的電子郵件。</para>
</abstract>
</info>
<sect1 xml:id="introduction">
<title>簡介</title>
<para>大多數的開放原始碼軟體專案都使用 <application>CVS</application> 作為
他們的原始碼控制系統。當 <application>CVS</application> 有這樣的優點存在
時,它也有部份的瑕疵和缺點。其中之一的原因是和其他的開發者分享原始碼樹能
夠快速地導致系統管理的惡夢,特別是如果其中一人希望保護部份的原始碼樹免受
於一般的存取。</para>
<para>FreeBSD 是其中一個使用 <application>CVS</application> 的專案,同時也
是基於它的開發者遍佈於全世界。他們撰寫了一些命令稿使得管理儲存庫變得更加
容易。最近這些命令稿由 &a.joe; 重新整理過且更標準化,使得在其他的專案上再
次使用這些命令稿會更加容易。本文件將描述使用這些新的命令稿的方法。</para>
<para>為了使本文件中的訊息有用,你需要熟悉 <application>CVS</application>
基本的操作方式。</para>
</sect1>
<sect1 xml:id="first-setup">
<title>基本設定</title>
<warning>
<para>最好的方式是在一個全新的儲存庫中執行這些步驟,並確定你了解所有的後
果。同時,請確定你有最新且可讀的資料備份!</para>
</warning>
<sect2>
<title>初始化儲存庫</title>
<para>首先要做的是建立一個新的儲存庫,執行下列命令告訴
<application>CVS</application> 建立並初始化:</para>
<screen>&prompt.user; <userinput>cvs -d path-to-repository init</userinput></screen>
<para>這命令告訴 <application>CVS</application> 建立
<filename>CVSROOT</filename> 的目錄,這個目錄裡放置了所有的組態檔。</para>
</sect2>
<sect2>
<title>設定儲存庫的群組</title>
<para>現在我們將建立一個擁有該儲存庫的群組,所有的開發者必須加入這個群組
,這樣他們才能夠存取該儲存庫。我們假設群組名稱是以 FreeBSD 內定的
<literal>ncvs</literal></para>
<screen>&prompt.root; <userinput>pw groupadd ncvs</userinput></screen>
<para>接者你需要使用 &man.chown.8; 將目錄所有者指定給剛剛新增的群組:</para>
<screen>&prompt.root; <userinput>chown -R :ncvs path-to-your-repository</userinput></screen>
<para>如此一來沒有適當的群組許可將沒有其他人可以寫入該儲存庫。</para>
</sect2>
<sect2>
<title>取回原始檔案</title>
<para>現在你需要從 FreeBSD 儲存庫中取回 <filename>CVSROOT</filename> 目錄,
從 FreeBSD 匿名的 CVS 映射站來取回會是最簡單的方法。請查閱 <link xlink:href="&url.books.handbook;/anoncvs.html">在 handbook 中的相關章節</link>
獲得更多資訊。我們假設取回的檔案存放在相同目錄下的
<filename>CVSROOT-freebsd</filename> 目錄中。</para>
</sect2>
<sect2>
<title>複製 FreeBSD 的命令稿</title>
<para>接下來我們要複製 FreeBSD <filename>CVSROOT</filename> 裡的檔案到你
的儲存庫中。如果你是孰悉於 <application>CVS</application>,你也許會想你
可以直接匯入這些命令稿,試圖更容易的同時和更新的版本同步;不過,事實是
<application>CVS</application> 在這個部份有缺點:當匯入檔案到
<filename>CVSROOT</filename> 時,它並不會更新組態檔。為了要認出這些檔案
,你還需要在匯入它們後一一重新提交,這就失去了
<literal>cvs import</literal> 的價值。因此,建議的方法是僅複製這些命令
稿過去。</para>
<para>若上述內容對你沒有意義是不重要的&mdash;因為最後的結果都是一樣的。
首先匯出你的 <filename>CVSROOT</filename>,然後複製剛剛取回的 FreeBSD
檔案到本地的目錄中(尚未變動過):</para>
<screen>&prompt.user; <userinput>cvs -d path-to-your-repository checkout CVSROOT</userinput>
&prompt.user; <userinput>cd CVSROOT</userinput>
&prompt.user; <userinput>cp ../CVSROOT-freebsd/* .</userinput>
&prompt.user; <userinput>cvs add *</userinput></screen>
<para>注意:你很可能會得到一段關於某些目錄沒有被複製的警告,這是正常的,
你並不需要用到這些目錄。</para>
</sect2>
<sect2>
<title>命令稿說明</title>
<para>現在你的工作目錄中有了完整 FreeBSD 專案在它們的儲存庫中使用的命令稿
的複本,以下是每個檔案簡單的介紹。</para>
<itemizedlist>
<listitem>
<para><filename>access</filename> - 此檔案在預設的安裝中沒有被用到。
這是使用在<link linkend="freebsdspecific">FreeBSD 的特殊設定</link>
,用來控制儲存庫的存取。如果你不希望使用這個設定的話你可以刪除這個檔案。</para>
</listitem>
<listitem>
<para><filename>avail</filename> - 此檔案控制儲存庫的存取。在此檔案中
你可以指定允許存取儲存庫的群組,也可以針對目錄或檔案來拒絕提交。你應該
調整為在你的儲存庫中將包含的群組和目錄。</para>
</listitem>
<listitem>
<para><filename>cfg.pm</filename> - 此檔案說明了設定內容,並提供預設的設定。
<emphasis></emphasis>該修改此檔案,而該將修改的設定放到
<filename>cfg_local.pm</filename></para>
</listitem>
<listitem>
<para><filename>cfg_local.pm</filename> - 此檔案包含所有的系統設定值
。你應該設定所有列在此的設定,例如提交的郵件要寄到哪、在哪些主機上
的使用者可以提交等等。更多的相關資訊在稍後會提到。</para>
</listitem>
<listitem>
<para><filename>checkoutlist</filename> - 此檔案列出所有在
<application>CVS</application> 控制下此目錄中的檔案,除了標準在
<literal>cvs init</literal> 建立出的檔案。你可以刪除某些不需要的
FreeBSD 特殊的檔案。</para>
</listitem>
<listitem>
<para><filename>commit_prep.pl</filename> - 此命令稿執行各種提交前的檢查,
基於你是否在 <filename>cfg_local.pm</filename> 中啟用。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>commitcheck</filename> - 此命令稿會直接影響
<application>CVS</application>。首先它會使用
<filename>cvs_acls.pl</filename> 來檢查提交者是否可以存取指定的原始碼樹,
然後執行 <filename>commit_prep.pl</filename> 來確認各種提交前的檢查。
如果一切正常,<application>CVS</application> 將允許此次提交繼續執行。
你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>commitinfo</filename> - 此檔案是
<application>CVS</application> 用來定義在提交前所要執行的程式&mdash;
此例中是 <filename>commitcheck</filename>。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>config</filename> - 儲存庫的設定選項。你可以修改為你
想要的,但大多數的管理者可能會保留預設值。更多關於可以在此設定的選項
資訊可以查閱 <application>CVS</application> 手冊。</para>
</listitem>
<listitem>
<para><filename>cvs_acls.pl</filename> - 此命令稿定義提交者的身分,以
及他/她是否允許存取原始碼樹,它是基於 <filename>avail</filename>
的設定。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>cvsignore</filename> - 此檔案列出哪些檔案
<application>CVS</application> 不用處理到儲存庫中,你可以修改成你想
要的。更多關於可以此檔案的說明可以查閱 <application>CVS</application>
手冊。</para>
</listitem>
<listitem>
<para><filename>cvswrappers</filename> - 此檔案是
<application>CVS</application> 用來啟用或停用關鍵字展開,或者是否檔
案該被視為二進位檔。你可以修改成你想要的。更多關於可以此檔案的說明
可以查閱 <application>CVS</application> 手冊。注意 <literal>-t</literal>
<literal>-f</literal> 選項在 <application>CVS</application>
client/server 並不能夠正確的運作。</para>
</listitem>
<listitem>
<para><filename>edithook</filename> - 此檔案已經沒有在使用了,留著只
是為了某些有意義的原因。你可以安全地刪除此檔案。</para>
</listitem>
<listitem>
<para><filename>editinfo</filename> - <application>CVS</application>
使用這個檔案來強迫你使用特定的編輯器。FreeBSD 沒有使用這個功能,因
為輸入日誌訊息已經由 <filename>verifymsg</filename>
<filename>logcheck</filename> 來完成。這是因為
<filename>editinfo</filename> 功能在從遠端提交或是使用
<literal>-m</literal><literal>-F</literal> 選項時不會執行。你不
該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>exclude</filename> - 此檔案列出被
<filename>commit_prep.pl</filename> 定義不能包含修正版標頭的檔案。
在 FreeBSD 版本的設定中,所有在修正版控制下的檔案需有一個修正版標頭
,(像是 &dollar;FreeBSD&dollar;)。在此檔案中所有符合一行一個的檔
案名稱將不會被檢查。你可以在此檔案中為不需要修正版標頭的檔案新增一
個正規運算式。為了安裝這些命令稿,最好的方法是排除
<filename>CVSROOT/</filename> 會受到標頭的檢查。</para>
</listitem>
<listitem>
<para><filename>log_accum.pl</filename> - 此命令稿會處理由
<filename>logcheck</filename> 所提供的日誌訊息,並且將之為備份目的
附加於儲存庫中的記錄檔案。同時也執行要將郵件寄到你提供的信箱中的程
式(在 <filename>cfg_local.pm</filename> 中)。它和
<application>CVS</application> 之間是由 <filename>loginfo</filename>
負責溝通。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>logcheck</filename> - 此檔案分析提交者提供的日誌訊息
,並試圖對其作清理動作。它和 <application>CVS</application> 之間是
<filename>verifymsg</filename> 負責溝通。你不該更動此檔案。</para>
<note><para>此命令稿依附於本地的 FreeBSD <application>CVS</application>
處理FreeBSD 版本在此命令稿修改過後才讀取日誌訊息;標準的
<application>CVS</application> 版本雖然能夠檢查語法上是否正確,但並
不會清理日誌訊息。<application>CVS</application> 1.11.2 可以透過在
<filename>config</filename> 設定 <literal>RereadLogAfterVerify=always</literal>
來和 FreeBSD 版本有相同的作用。</para></note>
</listitem>
<listitem>
<para><filename>loginfo</filename> - 此檔案是
<application>CVS</application> 用來控制日誌訊息要寄到哪裡,而
<filename>log_accum.pl</filename> 負責處理。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>modules</filename> - 此檔案保留了
<application>CVS</application> 原始的意義。你應該刪除新增的 FreeBSD
模組,並修改為你想要的內容。更多關於可以此檔案的說明可以查閱
<application>CVS</application> 手冊。</para>
</listitem>
<listitem>
<para><filename>notify</filename> - 此檔案為
<application>CVS</application> 用來控制監看某個檔案。在 FreeBSD 的
儲存庫中沒有使用到此檔案,你可以修改成你想要的。更多關於可以此檔案
的說明可以查閱 <application>CVS</application> 手冊。</para>
</listitem>
<listitem>
<para><filename>options</filename> - 此檔案僅限使用於 FreeBSD 和 Debian
<application>CVS</application> 版本。它包含了需要在修正版標頭中
展開的關鍵字。你可以修改為符合你指定在 <filename>cfg_local.pm</filename>
的關鍵字。</para>
</listitem>
<listitem>
<para><filename>rcsinfo</filename> - 此檔案定義提交時儲存庫所要使用的
日誌訊息樣式範本,如 <filename>rcstemplate</filename>。FreeBSD 預設
為所有的儲存庫使用同一個樣式範本,你可以加入其他你想要的。</para>
</listitem>
<listitem>
<para><filename>rcstemplate</filename> - 此檔案是提交者在提交時會看到
的日誌訊息樣式範本,你應該修改為你定義在 <filename>cfg_local.pm</filename>
的各種參數。</para>
</listitem>
<listitem>
<para><filename>tagcheck</filename> - 此檔案控制在儲存庫中貼上標籤的
存取。標準的 FreeBSD 版本拒絕名為 RELENG* 的標籤,因為這是 release
engineering 的工作。你可以根據需要來修改此檔案。</para>
</listitem>
<listitem>
<para><filename>taginfo</filename> - 此檔案控制執行在儲存庫中貼上標籤
的存取的命令稿,如 <filename>tagcheck</filename>。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>unwrap</filename> - 此命令稿可以用來在匯出時自動<quote>解開</quote>
二進位檔(請見 <filename>cvswrappers</filename>)。現在 FreeBSD 並
沒有使用此設定,因為此功能在遠端提交時並不是執行的非常完善。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>verifymsg</filename> - 此檔案用來執行和日誌訊息相關的
命令稿,如 <filename>logcheck</filename>。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>wrap</filename> - 此命令稿可以用來在提交時自動<quote>包裹</quote>
二進位檔(請見 <filename>cvswrappers</filename>)。現在 FreeBSD 並
沒有使用此設定,因為此功能在遠端提交時並不是執行的非常完善。你不該更動此檔案。</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>自訂命令稿</title>
<para>接下來的步驟要設定這些命令稿使得它們可以在你的環境中運作。你應該檢
查所有在目錄中的檔案,並修改為符合你的設定。尤其,你會想要修改下列的檔案:</para>
<procedure>
<step>
<para>如果你不希望使用<link linkend="freebsdspecific">FreeBSD 的特殊設定</link>
你可以安全地刪除 <filename>access</filename></para>
<screen>&prompt.user; <userinput>cvs rm -f access</userinput></screen>
</step>
<step>
<para>編輯 <filename>avail</filename> 來包含你想控制存取的各種儲存庫
目錄,請確定你有保留 <literal>avail||CVSROOT</literal> 這一行,否則
你將會在下一步把你自己鎖在外面。</para>
<para>另外你可以在此檔案中新增開發者的群組FreeBSD 預設使用
<filename>access</filename> 來列出所有的開發者,但你可以使用任何你
想要用的檔案。如果你想的話也可以新增群組(請使用指定在
<filename>cvs_acls.pl</filename> 上層裡的語法)。</para>
</step>
<step>
<para>編輯 <filename>cfg_local.pm</filename> 來包含你需要的選項。尤其
你應該檢視一下下列的設定項目:</para>
<itemizedlist>
<listitem>
<para><literal>%TEMPLATE_HEADERS</literal> - 這是用來取得日誌訊
息內容的程序,並加入將呈現的郵件項目和提供非空值的訊息。你可
以刪除 <literal>PR</literal><literal>MFC after</literal>
敘述,當然也可以加入你想要的。</para>
</listitem>
<listitem>
<para><literal>$MAIL_BRANCH_HDR</literal> - 如果你想要在每一封
提交的郵件中加入描述是在哪一個分支中提交的標頭,那麼請定義為
符合你的設定。如果你不想使用這樣的標頭,那麼請設定為空值。</para>
</listitem>
<listitem>
<para><literal>@COMMIT_HOSTS</literal> - 定義使用者能夠提交的主機。</para>
</listitem>
<listitem>
<para><literal>$MAILADDRS</literal> - 設定應該收到提交郵件的郵
件位址。</para>
</listitem>
<listitem>
<para><literal>@LOG_FILE_MAP</literal> - 以你所需要的來修改這個
陣列,每個設定值應該符合被提交的目錄,而提交的日誌訊息會以
<filename>commitlogs</filename> 的名稱儲存在每個被設定的目錄下。</para>
</listitem>
<listitem>
<para><literal>$COMMITCHECK_EXTRA</literal> - 如果你不想使用
<link linkend="freebsdspecific">FreeBSD 特殊的存取控制</link>
功能,你可以在此檔案中刪除對 <literal>$COMMITCHECK_EXTRA</literal>
的定義。</para>
</listitem>
</itemizedlist>
<note><para>修改 <literal>$IDHEADER</literal> 的功能只有在 FreeBSD
平台上可以運作,它是相依在 FreeBSD 的特殊 <application>CVS</application>
設定上。</para></note>
<para>你可以檢查 <filename>cfg.pm</filename> 是否有其他的參數可以修改
,但是修改最好是有原因的。</para>
</step>
<step>
<para>刪除 <filename>exclude</filename> 中關於FreeBSD 的特殊設定的敘
述(如以 <literal>^ports/</literal> 為開頭的每一行等)。此外,註解
掉以 <literal>^CVSROOT/</literal> 為開頭的行列,然後新增一行只有
<literal>^CVSROOT/</literal>。等到關鍵字展開的命令稿安裝好後,你可
以在 <filename>CVSROOT</filename> 目錄中的檔案裡加上標頭,然後再恢
復剛剛註解的行列,但在你還沒有提交前則只保持這樣。</para>
</step>
<step>
<para>編輯 <filename>modules</filename>,並刪除所有 FreeBSD 的群組。
加入你需要的模組。</para>
</step>
<step>
<note><para>此步驟只有在你於 <filename>cfg_local.pm</filename> 中指定
<literal>$IDHEADER</literal> 才有必要設定(只有在 FreeBSD 的特殊
<application>CVS</application> 設定上才能夠執行)。</para></note>
<para>編輯 <filename>options</filename> 以符合你在
<filename>cfg_local.pm</filename> 中設定的標籤名稱。並在所有的檔案
中搜尋 <literal>FreeBSD</literal> 並替換為你設定的標籤名稱。</para>
</step>
<step>
<para>修改 <filename>rcstemplate</filename> 為和在
<filename>cfg_local.pm</filename> 中相同的設定。</para>
</step>
<step>
<para>選擇性的刪除在 <filename>tagcheck</filename> 中針對 FreeBSD 檢
查的設定。你可以僅僅在檔案的最上層加上 <literal>exit 0</literal>
取消所有標籤的檢查。</para>
</step>
<step>
<para>在你完成前的最後一件事是確認 commitlogs 可以正確儲存。預設會儲
存在儲存庫中的 <filename>commitlogs</filename> 子目錄中,而這個目錄
需要先建立:</para>
<screen>&prompt.user; <userinput>mkdir commitlogs</userinput>
&prompt.user; <userinput>cvs add commitlogs</userinput></screen>
</step>
</procedure>
<para>現在,在細心的檢視過後,你可以提交你的修改了。確定你先前有在
<filename>avail</filename> 中允許你自己存取 <filename>CVSROOT</filename>
目錄,因為如果沒有這樣做的話你會把你自己鎖在外面。完整確認過後請執行下
列命令:</para>
<screen>&prompt.user; <userinput>cvs commit -m '- Initial FreeBSD scripts commit'</userinput></screen>
</sect2>
<sect2>
<title>測試設定</title>
<para>你已經準備好做基本的測試了:強制提交 <filename>avail</filename>
以確認每件事都如預期的運作。</para>
<screen>&prompt.user; <userinput>cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' avail</userinput></screen>
<para>如果一切正常,那麼恭喜了!你現在已經為你的儲存庫建立好 FreeBSD 的命
令稿了。如果 <application>CVS</application> 仍然有警告什麼,回頭檢視上
述的步驟是否有正確的執行。</para>
</sect2>
</sect1>
<sect1 xml:id="freebsdspecific">
<title>FreeBSD 的特殊設定</title>
<para>FreeBSD 專案自己使用一個有點不同的設定,那就是同時也使用 FreeBSD
<filename>CVSROOT</filename> 中的 <filename>freebsd</filename> 子目錄。因
為大量的提交者必須在相同的群組中,因此專案寫了一個簡單的 wrapper 來確認提
交者可以正確的提交,並設定儲存庫的群組名稱。</para>
<para>如果你的儲存庫也需要這樣的功能,那麼下面就會介紹如何建立,不過首先要
先來看一段複雜的概述。</para>
<sect2>
<title>FreeBSD 設定中使用的檔案</title>
<itemizedlist>
<listitem>
<para><filename>access</filename> - 此檔案用來控制儲存庫的存取。你
應該編輯並加入所有在專案中的成員。</para>
</listitem>
<listitem>
<para><filename>freebsd/commitmail.pl</filename> - 此檔案已經沒有在
使用了,留著只是為了某些有意義的原因。你不該更動此檔案。</para>
</listitem>
<listitem>
<para><filename>freebsd/cvswrap.c</filename> - 此 CVS wrapper 原始
碼是用來建立檢查所有存取的工作。更多的訊息在稍後會提出。你應該編
<literal>ACCESS</literal><literal>REALCVS</literal> 的路徑
以符合你的設定。</para>
</listitem>
<listitem>
<para><filename>freebsd/mailsend.c</filename> - 此檔案是 FreeBSD 設
定 mailing lists 需要的,你不該更動此檔案。</para>
</listitem>
</itemizedlist>
</sect2>
<sect2>
<title>步驟</title>
<procedure>
<step>
<para>只有加入你的使用者名稱到 <filename>access</filename> 中。</para>
</step>
<step>
<para>編輯 <filename>cvswrap.c</filename> 的路徑以符合你的設定,定義
在大寫的 <literal>ACCESS</literal> 中。同時如果預設值不符合你的情況
的話也應該修改本地實際的 <command>cvs</command> 程式所在位置。原始
<filename>cvswrap.c</filename> 希望替代伺服端的 CVS 程式,例如可
能會是 <filename>/usr/bin/ncvs</filename></para>
<para>我的 <filename>cvswrap.c</filename> 是這樣:</para>
<programlisting>#define ACCESS "/local/cvsroot/CVSROOT/access"
#define REALCVS "/usr/bin/ncvs"</programlisting>
</step>
<step>
<para>接下來是建立 wrapper 來確認你在提交時是在正確的群組中。
在你的 <filename>CVSROOT</filename> 中的
<filename>cvswrap.c</filename> 要能夠使用。</para>
<para>在你完成編輯並加入正確的路徑後我們要來編譯原始碼:</para>
<screen>&prompt.user; <userinput>cc -o cvs cvswrap.c</userinput></screen>
<para>然後進行需要設定(此步驟需要 root 權限):</para>
<screen>&prompt.root; <userinput>mv /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>mv cvs /usr/bin/cvs</userinput>
&prompt.root; <userinput>chown root:ncvs /usr/bin/cvs /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod o-rx /usr/bin/ncvs</userinput>
&prompt.root; <userinput>chmod u-w,g+s /usr/bin/cvs</userinput></screen>
<para>這會將 wrapper 安裝成預設的 <command>cvs</command> 程式,請確定
任何要使用儲存庫的人應該有正確的存取權限。</para>
</step>
<step>
<para>現在你可以刪除所有在儲存庫群組中的使用者,所有的存取控制會經由
wrapper 完成,同時 wrapper 會設定存取的正確群組。</para>
</step>
</procedure>
</sect2>
<sect2>
<title>測試設定</title>
<para>你的 wrapper 現在應該已經安裝好了,你當然也可以強制提交
<filename>access</filename> 來測試是否正常:</para>
<screen>&prompt.user; <userinput>cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' access</userinput></screen>
<para>同樣地,如果有錯誤,檢查是否上述所有步驟都有正確的執行。</para>
</sect2>
</sect1>
</article>