Index: introduction/welcome/changelog.xml
===================================================================
--- introduction/welcome/changelog.xml	(revision b3747795b50994f13da43b19760658e8a518262f)
+++ introduction/welcome/changelog.xml	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
@@ -10,4 +10,7 @@
 
 <itemizedlist>
+
+<listitem><para>August 25th, 2002 [larry]: Server: Added cvs
+server.</para></listitem>
 
 <listitem><para>August 25th, 2002 [larry]: Multimedia: Added
Index: introduction/welcome/credits.xml
===================================================================
--- introduction/welcome/credits.xml	(revision b3747795b50994f13da43b19760658e8a518262f)
+++ introduction/welcome/credits.xml	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
@@ -94,6 +94,5 @@
 Hymers</emphasis></para></listitem>
 
-<listitem><para>bind, emacs, leafnode, libfam, pine, qmail, PostgreSQL, Samba,
-sendmail, slrn, tex and xinetd: <emphasis>Billy O'Connor</emphasis></para></listitem>
+<listitem><para>bind, cvs server, emacs, leafnode, libfam, pine, qmail, PostgreSQL, Samba, sendmail, slrn, tex and xinetd: <emphasis>Billy O'Connor</emphasis></para></listitem>
 
 <listitem><para>fetchmail and wvdial: <emphasis>Paul
Index: server/other/cvsserver.xml
===================================================================
--- server/other/cvsserver.xml	(revision b3747795b50994f13da43b19760658e8a518262f)
+++ server/other/cvsserver.xml	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
@@ -1,7 +1,10 @@
-<sect1 id="server-other-cvsserver">
+<sect1 id="cvsserver" xreflabel="cvsserver">
 <?dbhtml filename="cvsserver.html" dir="server"?>
-<title>Running a cvs server</title>
+<title>Running a CVS server</title>
 
-<para>???</para>
+&cvsserver-intro;
+&cvsserver-inst;
+&cvsserver-exp;
 
 </sect1>
+
Index: server/other/cvsserver/cvsserver-exp.xml
===================================================================
--- server/other/cvsserver/cvsserver-exp.xml	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
+++ server/other/cvsserver/cvsserver-exp.xml	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
@@ -0,0 +1,38 @@
+<sect2>
+<title>Command explanations</title>
+
+<para><userinput>mkdir /cvsroot :</userinput> Create the CVS repository
+directory.</para>
+
+<para><userinput>chmod 1777 /cvsroot :</userinput> Sticky bit
+permissions for CVSROOT.</para>
+
+<para><userinput>export CVSROOT=/cvsroot :</userinput> Specify new
+CVSROOT for all cvs commands.</para>
+
+<para><userinput>cvs init :</userinput> Initialize the new CVS
+repository.</para>
+
+<para><userinput>cvs import -m "repository test" cvstest vendortag
+releasetag :</userinput> All source code modules must be imported
+into the CVS repository before use, with the cvs import command.  the
+-m flags specifies an initial descriptive entry for the new module.
+the "cvstest" parameter is the name used for the module in all
+subsequent cvs commands.  the "vendortag" and "releasetag" parameters
+are used to further identify each CVS module and are mandatory whether
+used or not.</para>
+
+<para><userinput>(grep anonymous /etc/passwd || useradd anonymous -s
+/bin/false) :</userinput>  Check for an existing anonymous user and
+create one if not found.</para>
+
+<para><userinput>echo anonymous: > /cvsroot/CVSROOT/passwd
+:</userinput> Add the anonymous user to the CVS passwd file, which is
+unused for anything else in this configuration.</para>
+
+<para><userinput>echo anonymous > /cvsroot/CVSROOT/readers :
+</userinput> Add the anonymous user to the CVS readers file, a list of
+users who have read only access to the repository.</para>
+
+</sect2>
+
Index: server/other/cvsserver/cvsserver-inst.xml
===================================================================
--- server/other/cvsserver/cvsserver-inst.xml	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
+++ server/other/cvsserver/cvsserver-inst.xml	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
@@ -0,0 +1,115 @@
+<sect2>
+<title>Setting up a CVS server.</title>
+
+<para>We will discuss setting up a CVS server using OpenSSH as the
+remote access method.  Other access methods, including :pserver: and
+:server: will not be used for write access to the CVS repository.  The
+:pserver: method sends clear text passwords over the network and the
+:server: method is not supported in all CVS ports.  Instructions for
+anonymous, read only CVS access using :pserver: can be found at the
+end of this section.</para>
+
+<para>Configuration of our CVS server consists of four steps:</para>
+
+<sect3><title>1. Create a repository.</title>
+<para>Create a new CVS repository with the following commands,
+logged in as root:</para>
+<para><screen><userinput>
+mkdir /cvsroot &amp;&amp;
+chmod 1777 /cvsroot &amp;&amp;
+export CVSROOT=/cvsroot
+cvs init</userinput></screen></para></sect3>
+
+<sect3><title>2. Import source code into the repository.</title>
+<para>Import a source module into the repository with the following
+commands, issued from a user account on the same machine as the CVS
+repository:</para>
+
+<para><screen><userinput>
+export CVSROOT=/cvsroot &amp;&amp;
+cd sourcedir &amp;&amp;
+cvs import -m "repository test" cvstest vendortag releasetag
+</userinput></screen></para></sect3>
+
+<sect3><title>3. Verify local repository access.</title>
+<para>Test access to the CVS repository from the same user account
+with the following command:</para>
+
+<para><screen><userinput>
+cvs co cvstest
+</userinput></screen></para></sect3>
+
+<sect3><title>4. Verify remote repository access.</title>
+<para>Test access to the CVS repository from a remote machine using a
+user account that has ssh access to the CVS server with the following
+commands:
+<note><para>Replace "servername" with the IP address or host name
+ofthe CVS repository machine.  You will be prompted for the user's
+shellaccount password before CVS checkout can
+continue.</para></note></para>
+
+
+<para><screen><userinput>
+export CVS_RSH=/usr/bin/ssh &amp;&amp;
+cvs -d:ext:servername:/cvsroot co cvstest 
+</userinput></screen></para></sect3>
+</sect2>
+<sect2>
+<title>Configuring CVS for anonymous read only access.</title>
+
+<para>CVS can be set up to allow anonymous read only access using the
+:pserver: method by logging on as root and executing the following
+commands:</para> 
+
+<para><screen><userinput>
+(grep anonymous /etc/passwd || useradd anonymous -s /bin/false) &amp;&amp;
+echo anonymous: > /cvsroot/CVSROOT/passwd &amp;&amp;
+echo anonymous > /cvsroot/CVSROOT/readers
+</userinput></screen></para>
+
+<para>If you use inetd, the following command will add the pserver
+entry to /etc/inetd.conf:</para>
+
+<para><screen><userinput>
+echo "2401  stream  tcp  nowait  root  /usr/bin/cvs cvs -f \
+        --allow-root=/cvsroot pserver" &gt;&gt; /etc/inetd.conf
+</userinput></screen></para>
+
+<para>Issue a killall -HUP inetd to reread the changed inetd.conf
+file.</para>
+
+<para>If you use xinetd, the following command will add the pserver
+entry to /etc/xinetd.conf:</para>
+
+<para><screen><userinput>
+cat &gt;&gt; /etc/xinetd.conf &lt;&lt; "EOF"
+     service cvspserver
+     {
+          port        = 2401
+          socket_type = stream
+          protocol    = tcp
+          wait        = no
+          user        = root
+          passenv     = PATH
+          server      = /usr/bin/cvs
+         server_args = -f --allow-root=/cvsroot pserver
+     }
+EOF
+</userinput></screen></para>
+<para>Issue a killall -HUP xinetd to reread the changed xinetd.conf
+file.</para>
+
+<para>Testing anonymous access to the new repository requires an account
+on another machine that can reach the CVS server via network.  No
+account on the CVS repository is needed.  To test anonymous access to
+the CVS repository log in to another machine as an unprivileged user
+and execute the following command:</para>
+
+<para><screen><userinput>
+cvs -d:pserver:anonymous@servername:/cvsroot co cvstest
+</userinput></screen><note><para>Replace "servername" with the IP
+address or hostname of the CVS server</para></note></para>
+
+</sect2>
+
+
Index: server/other/cvsserver/cvsserver-intro.xml
===================================================================
--- server/other/cvsserver/cvsserver-intro.xml	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
+++ server/other/cvsserver/cvsserver-intro.xml	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
@@ -0,0 +1,11 @@
+<sect2>
+<title>Running a CVS server</title>
+
+<para>This section will describe how to set up, administer and secure
+a CVS server.</para>
+
+<screen>In order to install a CVS server You will need: 
+<xref linkend="cvs"/> and <xref linkend="openssh"/>.
+</screen>
+
+</sect2>
Index: server/other/cvsserver/cvsserver.ent
===================================================================
--- server/other/cvsserver/cvsserver.ent	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
+++ server/other/cvsserver/cvsserver.ent	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
@@ -0,0 +1,4 @@
+<!ENTITY cvsserver SYSTEM "../cvsserver.xml">
+<!ENTITY cvsserver-intro SYSTEM "cvsserver-intro.xml">
+<!ENTITY cvsserver-inst SYSTEM "cvsserver-inst.xml">
+<!ENTITY cvsserver-exp SYSTEM "cvsserver-exp.xml">
Index: server/other/other.xml
===================================================================
--- server/other/other.xml	(revision b3747795b50994f13da43b19760658e8a518262f)
+++ server/other/other.xml	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
@@ -4,5 +4,5 @@
 
 &openssh;
-&server-other-cvsserver;
+&cvsserver;
 &bind;
 &dhcp;
Index: server/server.ent
===================================================================
--- server/server.ent	(revision b3747795b50994f13da43b19760658e8a518262f)
+++ server/server.ent	(revision dcc89bf19b86efb2462c5eb31ae5dbc18e9f7fc3)
@@ -18,5 +18,5 @@
 <!-- Other server software -->
 <!ENTITY server-other SYSTEM "other/other.xml">
-<!ENTITY server-other-cvsserver SYSTEM "other/cvsserver.xml">
+<!ENTITY % cvsserver SYSTEM "other/cvsserver/cvsserver.ent">
 <!ENTITY % openssh SYSTEM "other/openssh/openssh.ent">
 <!ENTITY % bind SYSTEM "other/bind/bind.ent">
@@ -27,4 +27,5 @@
 
 %openssh;
+%cvsserver;
 %bind;
 %dhcp;
