version=pmwiki-2.2.130 ordered=1 urlencoded=1 agent=w3m/0.5.3+git20210102 author=jrmu charset=UTF-8 csum= ctime=1634143265 host=38.87.162.47 name=Cvs.Commit rev=10 targets=Cvs.Anoncvs,Cvs.Cvsweb,Cvs.Intro text=(:redirect cvs.repo:)%0aThis guide explains how to create a CVS repository for committers.%0a%0a!! Create commit group%0a%0aFirst, you may want to create a new group with commit rights:%0a%0a[@%0a$ doas groupadd commit%0a@]%0a%0aFor each user you want to give commit rights to:%0a%0a[@%0a$ doas usermod -G commit $USER%0a@]%0a%0aReplace $USER with the committer's user's name.%0a%0a!! Setting CVSROOT%0a%0aBefore we begin, decide where you want the CVS files to be located. You will want to set CVSROOT.%0a%0aYou can set it for just the current shell:%0a%0a[@%0a$ export CVSROOT=/path/to/CVS%0a@]%0a%0aReplace @@/path/to/CVS@@ with the actual directory. /CVS is recommended:%0a%0a[@%0a$ export CVSROOT=/CVS%0a@]%0a%0aAs a shortcut, you can add this to the bottom of your ~/.profile so you don't have to type it each time:%0a%0a[@%0a$ echo 'CVSROOT="/CVS"' >> ~/.profile%0a@]%0a%0aOnce CVSROOT is set, you can then omit the -d argument when working with cvs.%0a%0a!! Create new repo%0a%0aTo create a new CVS repository, type:%0a%0a[@%0a$ doas mkdir $CVSROOT%0a$ doas chown $USER:commit $CVSROOT%0a$ cvs init%0a@]%0a%0aReplace @@$USER@@ with the maintainer of CVSROOT.%0a%0a!! Import New Module%0a%0aIf you have existing code that you'd like to import to a CVS repository, first change%0ato the folder containing the source code, then type:%0a%0a[@%0a$ cvs import reponame vendortag releasetag%0a@]%0a%0aReplace @@reponame@@, @@vendortag@@, and @@releasetag@@. CVS will put the source files inside a directory named @@reponame@@ inside the CVS root directory. @@vendortag@@ should be replaced with the vendor (the author) of the repository. @@releasetag@@ is the tag for the specific release.%0a%0aFor example:%0a%0a[@%0a$ cd ~/ircnowd/%0a$ cvs import ircnowd ircnow start%0a@]%0a%0a'''Note''': CVS does not automatically transform the imported source code into a working directory. As a result, any changes you make to the original source code directory cannot be committed to the CVS repo.%0a%0aTo fix this, you will need to checkout the source code. Change your directory to somewhere else to place the new working directory, then type:%0a%0a[@%0a$ cd /path/to/new/directory/%0a$ cvs checkout -P reponame%0a@]%0a%0aReplace @@/path/to/new/directory/@@ with the directory you want the working directory to be in. Then, replace @@reponame@@ with the repository name.%0a%0aChange directory to @@reponame@@ to make changes. Afterwards, use cvs to commit them:%0a%0a[@%0a$ cd reponame%0a... work on code ...%0a$ cvs commit%0a@]%0a%0aFor example, suppose you create a new folder for working directories ~/code/ and then checkout the working directory for ircnowd:%0a%0a[@%0a$ mkdir ~/code/%0a$ cd ~/code/%0a$ cvs checkout -P ircnowd%0a$ cd ~/code/ircnowd/%0a... work on code ...%0a$ cvs commit%0a@]%0a%0aNow, ~/code/ircnowd will have the working directory for ircnowd. CVS will track changes so that you can commit changes to the CVS repo.%0a%0aIf checkout works properly, you can safely delete the old source code directory you imported from (since that one is not tracked by CVS).%0a%0a[@%0a$ rm -rf ~/ircnowd/%0a@]%0a%0a!! Granting commit access%0a%0aYou will want to change group ownership and provide group write permissions:%0a%0a[@%0a$ doas chown -R $USER:commit $CVSROOT%0a$ doas chmod -R g+w $CVSROOT%0a@]%0a%0aA sample directory should look like this:%0a%0a[@%0a# ls -lha /CVS%0atotal 28%0adrwxr-xr-x 7 root wheel 512B Oct 9 06:19 .%0adrwxr-xr-x 10 root wheel 512B Oct 9 06:10 ..%0adrwxrwxr-x 3 jrmu commit 1.0K Apr 29 06:48 CVSROOT%0adrwxrwxr-x 9 jrmu commit 512B May 8 11:42 acopm%0adrwxrwxr-x 2 jrmu commit 1.0K Aug 26 04:17 botnow%0adrwxrwxr-x 8 jrmu commit 512B May 27 16:57 brogue-ce%0adrwxrwxr-x 6 jrmu commit 512B May 7 06:46 ircnowd%0a@]%0a%0aSee Also:%0a%0a[[Cvs/Anoncvs|Anoncvs Guide]]%0a[[Cvs/Cvsweb|Cvsweb Guide]]%0a[[Cvs/Intro|CVS Intro]]%0a time=1634443091 author:1634443091=jrmu diff:1634443091:1634189235:=1d0%0a%3c (:redirect cvs.repo:)%0a host:1634443091=38.87.162.47 author:1634189235=jrmu diff:1634189235:1634188046:=91,103d90%0a%3c %0a%3c For example, suppose you create a new folder for working directories ~/code/ and then checkout the working directory for ircnowd:%0a%3c %0a%3c [@%0a%3c $ mkdir ~/code/%0a%3c $ cd ~/code/%0a%3c $ cvs checkout -P ircnowd%0a%3c $ cd ~/code/ircnowd/%0a%3c ... work on code ...%0a%3c $ cvs commit%0a%3c @]%0a%3c %0a%3c Now, ~/code/ircnowd will have the working directory for ircnowd. CVS will track changes so that you can commit changes to the CVS repo.%0a host:1634189235=38.87.162.47 author:1634188046=jrmu diff:1634188046:1634186675:=14c14%0a%3c $ doas usermod -G commit $USER%0a---%0a> $ doas usermod -G commit USERNAME%0a17,18c17,18%0a%3c Replace $USER with the committer's user's name.%0a%3c %0a---%0a> Replace USERNAME with the committer's user's name.%0a> %0a49c49%0a%3c $ doas chown $USER:commit $CVSROOT%0a---%0a> $ doas chown $USERNAME:commit $CVSROOT%0a52,53d51%0a%3c %0a%3c Replace @@$USER@@ with the maintainer of CVSROOT.%0a host:1634188046=38.87.162.47 author:1634186675=jrmu diff:1634186675:1634185528:=117a118,126%0a> %0a> !! Syncing repos with anoncvs%0a> %0a> You'll want%0a> %0a> @daily -s /usr/bin/openrsync -a --delete --rsync-path=/usr/bin/openrsync /CVS/ /var/www/cvs/%0a> @daily -s /usr/bin/openrsync -a --delete --rsync-path=/usr/bin/openrsync /CVS/ /anoncvs/anoncvs/cvs/%0a> @daily -s /usr/bin/openrsync -a --delete --rsync-path=/usr/bin/openrsync /home/username/CVS/mtctl /var/www/cvs/%0a> @daily -s /usr/bin/openrsync -a --delete --rsync-path=/usr/bin/openrsync /home/username/CVS/mtctl /anoncvs/anoncvs/cvs/%0a host:1634186675=38.87.162.47 author:1634185528=jrmu diff:1634185528:1634185234:= host:1634185528=38.87.162.47 author:1634185234=jrmu diff:1634185234:1634184595:=96,99c96,99%0a%3c !! Granting commit access%0a%3c %0a%3c You will want to change group ownership and provide group write permissions:%0a%3c %0a---%0a> !! Checkout code%0a> %0a> In CVS, you '''check out''' a repo to download its files:%0a> %0a101,102c101%0a%3c $ doas chown -R $USER:commit $CVSROOT%0a%3c $ doas chmod -R g+w $CVSROOT%0a---%0a> $ cvs -d anoncvs@example.com:/cvs checkout -P module%0a105,106c104,109%0a%3c A sample directory should look like this:%0a%3c %0a---%0a> You want to replace anoncvs@example.com with the username and hostname for the repo.%0a> %0a> You'll also want to verify the SSH fingerprints. IRCNow publishes a list of known [[ircnow/SSHFingerprints|SSH fingerprints]].%0a> %0a> For example, to check out code for ircnowd from anoncvs@anoncvs.ircnow.org, you'd run:%0a> %0a108,116c111%0a%3c # ls -lha /CVS%0a%3c total 28%0a%3c drwxr-xr-x 7 root wheel 512B Oct 9 06:19 .%0a%3c drwxr-xr-x 10 root wheel 512B Oct 9 06:10 ..%0a%3c drwxrwxr-x 3 jrmu commit 1.0K Apr 29 06:48 CVSROOT%0a%3c drwxrwxr-x 9 jrmu commit 512B May 8 11:42 acopm%0a%3c drwxrwxr-x 2 jrmu commit 1.0K Aug 26 04:17 botnow%0a%3c drwxrwxr-x 8 jrmu commit 512B May 27 16:57 brogue-ce%0a%3c drwxrwxr-x 6 jrmu commit 512B May 7 06:46 ircnowd%0a---%0a> $ cvs -d anoncvs@anoncvs.ircnow.org checkout -P ircnowd%0a119,122c114,362%0a%3c !! Syncing repos with anoncvs%0a%3c %0a%3c You'll want%0a%3c %0a---%0a> The checkout commands produce a copy of the code in the '''working directory'''.%0a> %0a> !! Commit new code%0a> %0a> Once you checkout a CVS repo, you can edit the code and save your changes. Until you commit your code, however, none of the updates will be saved in the CVS repository. '''WARNING''': Any code that is not committed will not be saved in the CVS repo.%0a> %0a> When you are ready to commit your code, type:%0a> %0a> [@%0a> $ cvs commit%0a> @]%0a> %0a> You will be given a text editor (usually vi) to leave a commit message.%0a> %0a> To commit and also write the message in a single command, type:%0a> %0a> [@%0a> $ cvs commit -m "Your commit message goes here"%0a> @]%0a> %0a> !! Update code%0a> %0a> To update your working directory with new code from the repository, type:%0a> %0a> [@%0a> $ cvs update%0a> @]%0a> %0a> !! Add new files%0a> %0a> '''WARNING''': If you create a new file in your working directory, it will '''not''' automatically be added to the CVS repository. You must first run:%0a> %0a> [@%0a> $ cvs add filename%0a> @]%0a> %0a> Replace @@filename@@ with your real filename.%0a> %0a> Then, you must commit your changes with:%0a> %0a> [@%0a> $ cvs commit%0a> @]%0a> %0a> Note: @@cvs add@@ is only used for adding new files to a module that has already been checked out. If you want to add a new project to the repository, use @@cvs import@@ as described in '''Import New Repo'''.%0a> %0a> !! Remove files%0a> %0a> To remove files from the CVS repo, it is not enough to simply delete them%0a> from the working directory. You will also want to remove them from the CVS repository:%0a> %0a> [@%0a> $ cvs remove filename%0a> @]%0a> %0a> Afterwards, you must commit this change to delete it from the repository:%0a> %0a> [@%0a> $ cvs commit%0a> @]%0a> %0a> !! Setting CVSROOT%0a> %0a> When working with CVS, it helps to set the CVSROOT, the path where the cvs folders are located:%0a> %0a> You can set it for just the current shell:%0a> %0a> [@%0a> $ export CVSROOT="anoncvs@example.com:/cvs"%0a> @]%0a> %0a> If CVS is local, you can use a file path:%0a> %0a> [@%0a> $ export CVSROOT="/home/username/CVS"%0a> @]%0a> %0a> As a shortcut, you can add this to the bottom of your ~/.profile so you don't have to type it each time:%0a> %0a> [@%0a> $ echo 'CVSROOT="anoncvs@example.com:/cvs"' >> ~/.profile%0a> @]%0a> %0a> Once CVSROOT is set, you can then omit the -d argument for checking out and committing code.%0a> %0a> So the checkout code above becomes more simple:%0a> %0a> [@%0a> $ cvs checkout -P module%0a> @]%0a> %0a> Any time you check out code, the CVSROOT is automatically provided for the code in the working directory. So, it was not necessary to specify the CVSROOT for the commit command.%0a> %0a> !! Export code%0a> %0a> Eventually, when you are ready to use the code, you want to remove all the CVS-related files. To export code for use:%0a> %0a> [@%0a> $ cvs -d anoncvs@example.com:/cvs export -D YYYYMMDD module%0a> @]%0a> %0a> Replace @@YYYYMMDD@@ with the year, month, and day of the version of the repository you want to export. Replace @@module@@ with the module name.%0a> %0a> !! Troubleshooting%0a> %0a> If you see this error message:%0a> %0a> [@%0a> cvs [commit aborted]: received broken pipe signal%0a> @]%0a> %0a> It may be because CVS was waiting for you to connect but your connection took too long. This can happen if you take too long to send a commit message or you take too long to provide passwords for your ssh keys. If this happens, try to find ways to avoid interactive input. For example, you might consider using the -m argument with cvs commit.%0a> %0a> [@%0a> cvs [server aborted]: cannot make directory /var/cvs/module: Permission denied%0a> @]%0a> %0a> This error message means that /var/cvs either doesn't exist or has the wrong permissions. If you're running cvs inside a chroot, check var/cvs inside the chroot. It needs to exist and be owned by the group commit and set to group writeable.%0a> %0a> %0a> %0a> On OpenBSD 6.9 Stable:%0a> %0a> [@%0a> $ mkdir ~/cvs%0a> $ cd ~/cvs%0a> $ ftp https://www.openbsd.org/anoncvs.shar%0a> $ sh anoncvs.shar%0a> @]%0a> %0a> Edit the first line of ~/Makefile:%0a> %0a> [@%0a> CVSROOT=anoncvs@anoncvs.example.com:/cvs%0a> @]%0a> %0a> Replace anoncvs.example.com with your domain. You want to leave /cvs as-is%0a> because CVS runs inside a chroot jail.%0a> %0a> [@%0a> $ make%0a> $ doas useradd -m -d /open/anoncvs -s /open/anoncvssh anoncvs%0a> $ doas cp anoncvssh /open/anoncvssh%0a> $ doas chmod 4111 /open/anoncvssh%0a> @]%0a> %0a> You will need to set anoncvs so it has no password. Run @@doas vipw@@%0a> and edit the line so it looks like this (except with the uid and gid 1001%0a> perhaps changed to another value):%0a> %0a> [@%0a> anoncvs::1001:1001::0:0::/open/anoncvs:/open/anoncvssh%0a> @]%0a> %0a> Add this to the bottom of /etc/ssh/sshd_config:%0a> %0a> [@%0a> Match User anoncvs%0a> PermitEmptyPasswords yes%0a> AllowTcpForwarding no%0a> AllowAgentForwarding no%0a> X11Forwarding no%0a> PermitTTY no%0a> @]%0a> %0a> Then restart sshd:%0a> %0a> [@%0a> $ doas rcctl restart sshd%0a> @]%0a> %0a> Run as root to create the chroot jail:%0a> %0a> [@%0a> export CVSYNCUSER=USERNAME%0a> mkdir /open/anoncvs/cvs%0a> chown -R $CVSYNCUSER /open/anoncvs/cvs%0a> @]%0a> %0a> The person maintaining the cvs archive is $CVSYNCUSER . Replace USERNAME with the maintainer's username.%0a> %0a> [@%0a> touch /open/anoncvs/.hushlogin%0a> touch /open/anoncvs/.profile%0a> mkdir /open/anoncvs/{bin,dev,tmp,usr,var,etc}%0a> cp /bin/{cat,pwd,rm,sh} /open/anoncvs/bin/%0a> mknod -m 666 /open/anoncvs/dev/null c 2 2%0a> mknod -m 666 /open/anoncvs/dev/zero c 2 12%0a> cp /etc/{hosts,protocols,resolv.conf,services,ttys} /open/anoncvs/etc/%0a> chmod 444 /open/anoncvs/etc/{hosts,protocols,resolv.conf,services,ttys}%0a> ln -s /open/anoncvs/tmp /open/anoncvs/var/tmp%0a> chmod a+rwx /open/anoncvs/tmp%0a> mkdir /open/anoncvs/usr/{bin,lib}%0a> cp /usr/bin/cvs /open/anoncvs/usr/bin/%0a> mkdir /open/anoncvs/usr/libexec%0a> cp /usr/libexec/ld.so /open/anoncvs/usr/libexec/%0a> cp /usr/lib/libz.so.5.0 /open/anoncvs/usr/lib/%0a> cp /usr/lib/libc.so.96.0 /open/anoncvs/usr/lib/%0a> chown -R root:wheel /open/anoncvs%0a> @]%0a> %0a> (:if false:)%0a> This was recommended by the README in the shar file from OpenBSD's anoncvs instructions, but I found it was unnecessary and potentially leaks system information:%0a> %0a> cp /etc/{group,hosts,passwd,protocols} /open/anoncvs/etc/%0a> cp /etc/{pwd.db,resolv.conf,services,ttys} /open/anoncvs/etc/%0a> (:ifend:)%0a> %0a> !! Adding Repos%0a> %0a> To add your repo to anoncvs, copy the folders into /open/anoncvs/cvs.%0a> %0a> You may want to create a new group with commit rights:%0a> %0a> [@%0a> # groupadd commit%0a> @]%0a> %0a> For each user you want to give commit rights to:%0a> %0a> [@%0a> # usermod -G commit USERNAME%0a> @]%0a> %0a> Replace USERNAME with the committer's user's name.%0a> %0a> You will then want to change group ownership and provide group write permissions:%0a> %0a> [@%0a> # chown -R CVSYNCUSER:commit /open/anoncvs/cvs%0a> # chmod -R g+w /open/anoncvs/cvs%0a> @]%0a> %0a> A sample directory should look like this:%0a> %0a> [@%0a> # ls -lha /open/anoncvs/cvs%0a> total 28%0a> drwxr-xr-x 7 root wheel 512B Oct 9 06:19 .%0a> drwxr-xr-x 10 root wheel 512B Oct 9 06:10 ..%0a> drwxrwxr-x 3 jrmu commit 1.0K Apr 29 06:48 CVSROOT%0a> drwxrwxr-x 9 jrmu commit 512B May 8 11:42 acopm%0a> drwxrwxr-x 2 jrmu commit 1.0K Aug 26 04:17 botnow%0a> drwxrwxr-x 8 jrmu commit 512B May 27 16:57 brogue-ce%0a> drwxrwxr-x 6 jrmu commit 512B May 7 06:46 ircnowd%0a> @]%0a> %0a> !! Cronjob%0a> %0a128,132c368,376%0a%3c See Also:%0a%3c %0a%3c [[Cvs/Anoncvs|Anoncvs Guide]]%0a%3c [[Cvs/Cvsweb|Cvsweb Guide]]%0a%3c [[Cvs/Intro|CVS Intro]]%0a---%0a> !! Publish SSH fingerprints%0a> %0a> Make sure to publish your [[https://wiki.ircnow.org/index.php?n=Ssh.Fingerprints|SSH fingerprints]] so users can be certain that the source code was transported securely.%0a> %0a> Recommended Reading:%0a> %0a> https://www.openbsd.org/anoncvs.html%0a> %0a> https://www.openbsd.org/anoncvs.shar%0a host:1634185234=38.87.162.47 author:1634184595=jrmu diff:1634184595:1634177069:=8c8%0a%3c $ doas groupadd commit%0a---%0a> # groupadd commit%0a14c14%0a%3c $ doas usermod -G commit USERNAME%0a---%0a> # usermod -G commit USERNAME%0a19,24c19,22%0a%3c !! Setting CVSROOT%0a%3c %0a%3c Before we begin, decide where you want the CVS files to be located. You will want to set CVSROOT.%0a%3c %0a%3c You can set it for just the current shell:%0a%3c %0a---%0a> !! Create new repo%0a> %0a> To create a new CVS repository, type:%0a> %0a26c24%0a%3c $ export CVSROOT=/path/to/CVS%0a---%0a> $ cvs -d /path/to/CVS/ init%0a29,30c27,28%0a%3c Replace @@/path/to/CVS@@ with the actual directory. /CVS is recommended:%0a%3c %0a---%0a> Replace @@/path/to/CVS/@@ with where you want the CVS repository to be located. For example, you might put it in @@/CVS@@. For example:%0a> %0a32c30,32%0a%3c $ export CVSROOT=/CVS%0a---%0a> $ doas mkdir /CVS%0a> $ doas chown $USERNAME:commit /CVS%0a> $ cvs -d /CVS%0a35,36c35,39%0a%3c As a shortcut, you can add this to the bottom of your ~/.profile so you don't have to type it each time:%0a%3c %0a---%0a> !! Import New Module%0a> %0a> If you have existing code that you'd like to import to a CVS repository, first change%0a> to the folder containing the source code, then type:%0a> %0a38c41%0a%3c $ echo 'CVSROOT="/CVS"' >> ~/.profile%0a---%0a> $ cvs import reponame vendortag releasetag%0a41,46c44,47%0a%3c Once CVSROOT is set, you can then omit the -d argument when working with cvs.%0a%3c %0a%3c !! Create new repo%0a%3c %0a%3c To create a new CVS repository, type:%0a%3c %0a---%0a> Replace @@reponame@@, @@vendortag@@, and @@releasetag@@. CVS will put the source files inside a directory named @@reponame@@ inside the CVS root directory. @@vendortag@@ should be replaced with the vendor (the author) of the repository. @@releasetag@@ is the tag for the specific release.%0a> %0a> For example:%0a> %0a48,50c49,50%0a%3c $ doas mkdir $CVSROOT%0a%3c $ doas chown $USERNAME:commit $CVSROOT%0a%3c $ cvs init%0a---%0a> $ cd ~/ircnowd/%0a> $ cvs import ircnowd ircnow start%0a53,57c53,56%0a%3c !! Import New Module%0a%3c %0a%3c If you have existing code that you'd like to import to a CVS repository, first change%0a%3c to the folder containing the source code, then type:%0a%3c %0a---%0a> '''Note''': CVS does not automatically transform the imported source code into a working directory. As a result, any changes you make to the original source code directory cannot be committed to the CVS repo.%0a> %0a> To fix this, you will need to checkout the source code. Change your directory to somewhere else to place the new working directory, then type:%0a> %0a59c58%0a%3c $ cvs import reponame vendortag releasetag%0a---%0a> $ cvs -d /path/to/CVS/ checkout -P reponame%0a62,94c61,69%0a%3c Replace @@reponame@@, @@vendortag@@, and @@releasetag@@. CVS will put the source files inside a directory named @@reponame@@ inside the CVS root directory. @@vendortag@@ should be replaced with the vendor (the author) of the repository. @@releasetag@@ is the tag for the specific release.%0a%3c %0a%3c For example:%0a%3c %0a%3c [@%0a%3c $ cd ~/ircnowd/%0a%3c $ cvs import ircnowd ircnow start%0a%3c @]%0a%3c %0a%3c '''Note''': CVS does not automatically transform the imported source code into a working directory. As a result, any changes you make to the original source code directory cannot be committed to the CVS repo.%0a%3c %0a%3c To fix this, you will need to checkout the source code. Change your directory to somewhere else to place the new working directory, then type:%0a%3c %0a%3c [@%0a%3c $ cd /path/to/new/directory/%0a%3c $ cvs checkout -P reponame%0a%3c @]%0a%3c %0a%3c Replace @@/path/to/new/directory/@@ with the directory you want the working directory to be in. Then, replace @@reponame@@ with the repository name.%0a%3c %0a%3c Change directory to @@reponame@@ to make changes. Afterwards, use cvs to commit them:%0a%3c %0a%3c [@%0a%3c $ cd reponame%0a%3c ... work on code ...%0a%3c $ cvs commit%0a%3c @]%0a%3c %0a%3c If checkout works properly, you can safely delete the old source code directory you imported from (since that one is not tracked by CVS).%0a%3c %0a%3c [@%0a%3c $ rm -rf ~/ircnowd/%0a%3c @]%0a---%0a> Replace @@reponame@@ with the repository name. Then, change directory to @@reponame@@ to make changes. Afterwards, use cvs to commit them.%0a> %0a> If checkout works properly, you can safely delete the old source code directory you imported from (since that one is not tracked by CVS).%0a> %0a> %0a> !! Checkout code%0a> %0a> In CVS, you '''check out''' a repo to download its files:%0a> %0a host:1634184595=38.87.162.47 author:1634177069=jrmu diff:1634177069:1634176941:=3,6c3,6%0a%3c !! Create commit group%0a%3c %0a%3c First, you may want to create a new group with commit rights:%0a%3c %0a---%0a> !! Create New Repo%0a> %0a> To create a new CVS repository, type:%0a> %0a8c8%0a%3c # groupadd commit%0a---%0a> $ cvs -d /path/to/CVS/ init%0a11,12c11,12%0a%3c For each user you want to give commit rights to:%0a%3c %0a---%0a> Replace @@/path/to/CVS/@@ with where you want the CVS repository to be located. For example, you might put it in @@/CVS@@. For example:%0a> %0a14,31c14,16%0a%3c # usermod -G commit USERNAME%0a%3c @]%0a%3c %0a%3c Replace USERNAME with the committer's user's name.%0a%3c %0a%3c !! Create new repo%0a%3c %0a%3c To create a new CVS repository, type:%0a%3c %0a%3c [@%0a%3c $ cvs -d /path/to/CVS/ init%0a%3c @]%0a%3c %0a%3c Replace @@/path/to/CVS/@@ with where you want the CVS repository to be located. For example, you might put it in @@/CVS@@. For example:%0a%3c %0a%3c [@%0a%3c $ doas mkdir /CVS%0a%3c $ doas chown $USERNAME:commit /CVS%0a---%0a> $ doas mkdir /CVS%0a> $ doas chown %0a> $ cvs -d /CVS%0a host:1634177069=38.87.162.47 author:1634176941=jrmu diff:1634176941:1634143265:=3,6c3,6%0a%3c !! Create New Repo%0a%3c %0a%3c To create a new CVS repository, type:%0a%3c %0a---%0a> !! Checkout code%0a> %0a> In CVS, you '''check out''' a repo to download its files:%0a> %0a8c8%0a%3c $ cvs -d /path/to/CVS/ init%0a---%0a> $ cvs -d anoncvs@example.com:/cvs checkout -P module%0a11,12c11,16%0a%3c Replace @@/path/to/CVS/@@ with where you want the CVS repository to be located. For example, you might put it in @@/CVS@@. For example:%0a%3c %0a---%0a> You want to replace anoncvs@example.com with the username and hostname for the repo.%0a> %0a> You'll also want to verify the SSH fingerprints. IRCNow publishes a list of known [[ircnow/SSHFingerprints|SSH fingerprints]].%0a> %0a> For example, to check out code for ircnowd from anoncvs@anoncvs.ircnow.org, you'd run:%0a> %0a14,16c18%0a%3c $ doas mkdir /CVS%0a%3c $ doas chown %0a%3c $ cvs -d /CVS%0a---%0a> $ cvs -d anoncvs@anoncvs.ircnow.org checkout -P ircnowd%0a19,23c21,28%0a%3c !! Import New Module%0a%3c %0a%3c If you have existing code that you'd like to import to a CVS repository, first change%0a%3c to the folder containing the source code, then type:%0a%3c %0a---%0a> The checkout commands produce a copy of the code in the '''working directory'''.%0a> %0a> !! Commit new code%0a> %0a> Once you checkout a CVS repo, you can edit the code and save your changes. Until you commit your code, however, none of the updates will be saved in the CVS repository. '''WARNING''': Any code that is not committed will not be saved in the CVS repo.%0a> %0a> When you are ready to commit your code, type:%0a> %0a25c30%0a%3c $ cvs import reponame vendortag releasetag%0a---%0a> $ cvs commit%0a28,31c33,36%0a%3c Replace @@reponame@@, @@vendortag@@, and @@releasetag@@. CVS will put the source files inside a directory named @@reponame@@ inside the CVS root directory. @@vendortag@@ should be replaced with the vendor (the author) of the repository. @@releasetag@@ is the tag for the specific release.%0a%3c %0a%3c For example:%0a%3c %0a---%0a> You will be given a text editor (usually vi) to leave a commit message.%0a> %0a> To commit and also write the message in a single command, type:%0a> %0a33,34c38%0a%3c $ cd ~/ircnowd/%0a%3c $ cvs import ircnowd ircnow start%0a---%0a> $ cvs commit -m "Your commit message goes here"%0a37,40c41,44%0a%3c '''Note''': CVS does not automatically transform the imported source code into a working directory. As a result, any changes you make to the original source code directory cannot be committed to the CVS repo.%0a%3c %0a%3c To fix this, you will need to checkout the source code. Change your directory to somewhere else to place the new working directory, then type:%0a%3c %0a---%0a> !! Update code%0a> %0a> To update your working directory with new code from the repository, type:%0a> %0a42c46%0a%3c $ cvs -d /path/to/CVS/ checkout -P reponame%0a---%0a> $ cvs update%0a45,53c49,52%0a%3c Replace @@reponame@@ with the repository name. Then, change directory to @@reponame@@ to make changes. Afterwards, use cvs to commit them.%0a%3c %0a%3c If checkout works properly, you can safely delete the old source code directory you imported from (since that one is not tracked by CVS).%0a%3c %0a%3c %0a%3c !! Checkout code%0a%3c %0a%3c In CVS, you '''check out''' a repo to download its files:%0a%3c %0a---%0a> !! Add new files%0a> %0a> '''WARNING''': If you create a new file in your working directory, it will '''not''' automatically be added to the CVS repository. You must first run:%0a> %0a55c54%0a%3c $ cvs -d anoncvs@example.com:/cvs checkout -P module%0a---%0a> $ cvs add filename%0a58,63c57,60%0a%3c You want to replace anoncvs@example.com with the username and hostname for the repo.%0a%3c %0a%3c You'll also want to verify the SSH fingerprints. IRCNow publishes a list of known [[ircnow/SSHFingerprints|SSH fingerprints]].%0a%3c %0a%3c For example, to check out code for ircnowd from anoncvs@anoncvs.ircnow.org, you'd run:%0a%3c %0a---%0a> Replace @@filename@@ with your real filename.%0a> %0a> Then, you must commit your changes with:%0a> %0a65c62%0a%3c $ cvs -d anoncvs@anoncvs.ircnow.org checkout -P ircnowd%0a---%0a> $ cvs commit%0a68,75c65,71%0a%3c The checkout commands produce a copy of the code in the '''working directory'''.%0a%3c %0a%3c !! Commit new code%0a%3c %0a%3c Once you checkout a CVS repo, you can edit the code and save your changes. Until you commit your code, however, none of the updates will be saved in the CVS repository. '''WARNING''': Any code that is not committed will not be saved in the CVS repo.%0a%3c %0a%3c When you are ready to commit your code, type:%0a%3c %0a---%0a> Note: @@cvs add@@ is only used for adding new files to a module that has already been checked out. If you want to add a new project to the repository, use @@cvs import@@ as described in '''Import New Repo'''.%0a> %0a> !! Remove files%0a> %0a> To remove files from the CVS repo, it is not enough to simply delete them%0a> from the working directory. You will also want to remove them from the CVS repository:%0a> %0a77c73%0a%3c $ cvs commit%0a---%0a> $ cvs remove filename%0a80,83c76,77%0a%3c You will be given a text editor (usually vi) to leave a commit message.%0a%3c %0a%3c To commit and also write the message in a single command, type:%0a%3c %0a---%0a> Afterwards, you must commit this change to delete it from the repository:%0a> %0a85c79%0a%3c $ cvs commit -m "Your commit message goes here"%0a---%0a> $ cvs commit%0a88,91c82,87%0a%3c !! Update code%0a%3c %0a%3c To update your working directory with new code from the repository, type:%0a%3c %0a---%0a> !! Setting CVSROOT%0a> %0a> When working with CVS, it helps to set the CVSROOT, the path where the cvs folders are located:%0a> %0a> You can set it for just the current shell:%0a> %0a93c89%0a%3c $ cvs update%0a---%0a> $ export CVSROOT="anoncvs@example.com:/cvs"%0a96,99c92,93%0a%3c !! Add new files%0a%3c %0a%3c '''WARNING''': If you create a new file in your working directory, it will '''not''' automatically be added to the CVS repository. You must first run:%0a%3c %0a---%0a> If CVS is local, you can use a file path:%0a> %0a101c95%0a%3c $ cvs add filename%0a---%0a> $ export CVSROOT="/home/username/CVS"%0a104,107c98,99%0a%3c Replace @@filename@@ with your real filename.%0a%3c %0a%3c Then, you must commit your changes with:%0a%3c %0a---%0a> As a shortcut, you can add this to the bottom of your ~/.profile so you don't have to type it each time:%0a> %0a109c101%0a%3c $ cvs commit%0a---%0a> $ echo 'CVSROOT="anoncvs@example.com:/cvs"' >> ~/.profile%0a112,118c104,107%0a%3c Note: @@cvs add@@ is only used for adding new files to a module that has already been checked out. If you want to add a new project to the repository, use @@cvs import@@ as described in '''Import New Repo'''.%0a%3c %0a%3c !! Remove files%0a%3c %0a%3c To remove files from the CVS repo, it is not enough to simply delete them%0a%3c from the working directory. You will also want to remove them from the CVS repository:%0a%3c %0a---%0a> Once CVSROOT is set, you can then omit the -d argument for checking out and committing code.%0a> %0a> So the checkout code above becomes more simple:%0a> %0a120c109%0a%3c $ cvs remove filename%0a---%0a> $ cvs checkout -P module%0a123,124c112,117%0a%3c Afterwards, you must commit this change to delete it from the repository:%0a%3c %0a---%0a> Any time you check out code, the CVSROOT is automatically provided for the code in the working directory. So, it was not necessary to specify the CVSROOT for the commit command.%0a> %0a> !! Create New Repo%0a> %0a> To create a new CVS repository, type:%0a> %0a126c119%0a%3c $ cvs commit%0a---%0a> $ cvs -d /path/to/CVS/ init%0a129,134c122,128%0a%3c !! Setting CVSROOT%0a%3c %0a%3c When working with CVS, it helps to set the CVSROOT, the path where the cvs folders are located:%0a%3c %0a%3c You can set it for just the current shell:%0a%3c %0a---%0a> Replace @@/path/to/CVS/@@ with where you want the CVS repository to be located. For example, you might put it in @@~/CVS@@.%0a> %0a> !! Import New Module%0a> %0a> If you have existing code that you'd like to import to a CVS repository, first change%0a> to the folder containing the source code, then type:%0a> %0a136c130%0a%3c $ export CVSROOT="anoncvs@example.com:/cvs"%0a---%0a> $ cvs import reponame vendortag releasetag%0a139,140c133,136%0a%3c If CVS is local, you can use a file path:%0a%3c %0a---%0a> Replace @@reponame@@, @@vendortag@@, and @@releasetag@@. CVS will put the source files inside a directory named @@reponame@@ inside the CVS root directory. @@vendortag@@ should be replaced with the vendor (the author) of the repository. @@releasetag@@ is the tag for the specific release.%0a> %0a> For example:%0a> %0a142c138,139%0a%3c $ export CVSROOT="/home/username/CVS"%0a---%0a> $ cd ~/ircnowd/%0a> $ cvs import ircnowd ircnow start%0a145,146c142,145%0a%3c As a shortcut, you can add this to the bottom of your ~/.profile so you don't have to type it each time:%0a%3c %0a---%0a> '''Note''': CVS does not automatically transform the imported source code into a working directory. As a result, any changes you make to the original source code directory cannot be committed to the CVS repo.%0a> %0a> To fix this, you will need to checkout the source code. Change your directory to somewhere else to place the new working directory, then type:%0a> %0a148c147%0a%3c $ echo 'CVSROOT="anoncvs@example.com:/cvs"' >> ~/.profile%0a---%0a> $ cvs -d /path/to/CVS/ checkout -P reponame%0a151,154c150,157%0a%3c Once CVSROOT is set, you can then omit the -d argument for checking out and committing code.%0a%3c %0a%3c So the checkout code above becomes more simple:%0a%3c %0a---%0a> Replace @@reponame@@ with the repository name. Then, change directory to @@reponame@@ to make changes. Afterwards, use cvs to commit them.%0a> %0a> If checkout works properly, you can safely delete the old source code directory you imported from (since that one is not tracked by CVS).%0a> %0a> !! Export code%0a> %0a> Eventually, when you are ready to use the code, you want to remove all the CVS-related files. To export code for use:%0a> %0a156c159%0a%3c $ cvs checkout -P module%0a---%0a> $ cvs -d anoncvs@example.com:/cvs export -D YYYYMMDD module%0a159,168d161%0a%3c Any time you check out code, the CVSROOT is automatically provided for the code in the working directory. So, it was not necessary to specify the CVSROOT for the commit command.%0a%3c %0a%3c !! Export code%0a%3c %0a%3c Eventually, when you are ready to use the code, you want to remove all the CVS-related files. To export code for use:%0a%3c %0a%3c [@%0a%3c $ cvs -d anoncvs@example.com:/cvs export -D YYYYMMDD module%0a%3c @]%0a%3c %0a186,330d178%0a%3c %0a%3c %0a%3c %0a%3c On OpenBSD 6.9 Stable:%0a%3c %0a%3c [@%0a%3c $ mkdir ~/cvs%0a%3c $ cd ~/cvs%0a%3c $ ftp https://www.openbsd.org/anoncvs.shar%0a%3c $ sh anoncvs.shar%0a%3c @]%0a%3c %0a%3c Edit the first line of ~/Makefile:%0a%3c %0a%3c [@%0a%3c CVSROOT=anoncvs@anoncvs.example.com:/cvs%0a%3c @]%0a%3c %0a%3c Replace anoncvs.example.com with your domain. You want to leave /cvs as-is%0a%3c because CVS runs inside a chroot jail.%0a%3c %0a%3c [@%0a%3c $ make%0a%3c $ doas useradd -m -d /open/anoncvs -s /open/anoncvssh anoncvs%0a%3c $ doas cp anoncvssh /open/anoncvssh%0a%3c $ doas chmod 4111 /open/anoncvssh%0a%3c @]%0a%3c %0a%3c You will need to set anoncvs so it has no password. Run @@doas vipw@@%0a%3c and edit the line so it looks like this (except with the uid and gid 1001%0a%3c perhaps changed to another value):%0a%3c %0a%3c [@%0a%3c anoncvs::1001:1001::0:0::/open/anoncvs:/open/anoncvssh%0a%3c @]%0a%3c %0a%3c Add this to the bottom of /etc/ssh/sshd_config:%0a%3c %0a%3c [@%0a%3c Match User anoncvs%0a%3c PermitEmptyPasswords yes%0a%3c AllowTcpForwarding no%0a%3c AllowAgentForwarding no%0a%3c X11Forwarding no%0a%3c PermitTTY no%0a%3c @]%0a%3c %0a%3c Then restart sshd:%0a%3c %0a%3c [@%0a%3c $ doas rcctl restart sshd%0a%3c @]%0a%3c %0a%3c Run as root to create the chroot jail:%0a%3c %0a%3c [@%0a%3c export CVSYNCUSER=USERNAME%0a%3c mkdir /open/anoncvs/cvs%0a%3c chown -R $CVSYNCUSER /open/anoncvs/cvs%0a%3c @]%0a%3c %0a%3c The person maintaining the cvs archive is $CVSYNCUSER . Replace USERNAME with the maintainer's username.%0a%3c %0a%3c [@%0a%3c touch /open/anoncvs/.hushlogin%0a%3c touch /open/anoncvs/.profile%0a%3c mkdir /open/anoncvs/{bin,dev,tmp,usr,var,etc}%0a%3c cp /bin/{cat,pwd,rm,sh} /open/anoncvs/bin/%0a%3c mknod -m 666 /open/anoncvs/dev/null c 2 2%0a%3c mknod -m 666 /open/anoncvs/dev/zero c 2 12%0a%3c cp /etc/{hosts,protocols,resolv.conf,services,ttys} /open/anoncvs/etc/%0a%3c chmod 444 /open/anoncvs/etc/{hosts,protocols,resolv.conf,services,ttys}%0a%3c ln -s /open/anoncvs/tmp /open/anoncvs/var/tmp%0a%3c chmod a+rwx /open/anoncvs/tmp%0a%3c mkdir /open/anoncvs/usr/{bin,lib}%0a%3c cp /usr/bin/cvs /open/anoncvs/usr/bin/%0a%3c mkdir /open/anoncvs/usr/libexec%0a%3c cp /usr/libexec/ld.so /open/anoncvs/usr/libexec/%0a%3c cp /usr/lib/libz.so.5.0 /open/anoncvs/usr/lib/%0a%3c cp /usr/lib/libc.so.96.0 /open/anoncvs/usr/lib/%0a%3c chown -R root:wheel /open/anoncvs%0a%3c @]%0a%3c %0a%3c (:if false:)%0a%3c This was recommended by the README in the shar file from OpenBSD's anoncvs instructions, but I found it was unnecessary and potentially leaks system information:%0a%3c %0a%3c cp /etc/{group,hosts,passwd,protocols} /open/anoncvs/etc/%0a%3c cp /etc/{pwd.db,resolv.conf,services,ttys} /open/anoncvs/etc/%0a%3c (:ifend:)%0a%3c %0a%3c !! Adding Repos%0a%3c %0a%3c To add your repo to anoncvs, copy the folders into /open/anoncvs/cvs.%0a%3c %0a%3c You may want to create a new group with commit rights:%0a%3c %0a%3c [@%0a%3c # groupadd commit%0a%3c @]%0a%3c %0a%3c For each user you want to give commit rights to:%0a%3c %0a%3c [@%0a%3c # usermod -G commit USERNAME%0a%3c @]%0a%3c %0a%3c Replace USERNAME with the committer's user's name.%0a%3c %0a%3c You will then want to change group ownership and provide group write permissions:%0a%3c %0a%3c [@%0a%3c # chown -R CVSYNCUSER:commit /open/anoncvs/cvs%0a%3c # chmod -R g+w /open/anoncvs/cvs%0a%3c @]%0a%3c %0a%3c A sample directory should look like this:%0a%3c %0a%3c [@%0a%3c # ls -lha /open/anoncvs/cvs%0a%3c total 28%0a%3c drwxr-xr-x 7 root wheel 512B Oct 9 06:19 .%0a%3c drwxr-xr-x 10 root wheel 512B Oct 9 06:10 ..%0a%3c drwxrwxr-x 3 jrmu commit 1.0K Apr 29 06:48 CVSROOT%0a%3c drwxrwxr-x 9 jrmu commit 512B May 8 11:42 acopm%0a%3c drwxrwxr-x 2 jrmu commit 1.0K Aug 26 04:17 botnow%0a%3c drwxrwxr-x 8 jrmu commit 512B May 27 16:57 brogue-ce%0a%3c drwxrwxr-x 6 jrmu commit 512B May 7 06:46 ircnowd%0a%3c @]%0a%3c %0a%3c !! Cronjob%0a%3c %0a%3c @daily -s /usr/bin/openrsync -a --delete --rsync-path=/usr/bin/openrsync /CVS/ /var/www/cvs/%0a%3c @daily -s /usr/bin/openrsync -a --delete --rsync-path=/usr/bin/openrsync /CVS/ /anoncvs/anoncvs/cvs/%0a%3c @daily -s /usr/bin/openrsync -a --delete --rsync-path=/usr/bin/openrsync /home/username/CVS/mtctl /var/www/cvs/%0a%3c @daily -s /usr/bin/openrsync -a --delete --rsync-path=/usr/bin/openrsync /home/username/CVS/mtctl /anoncvs/anoncvs/cvs/%0a%3c %0a%3c !! Publish SSH fingerprints%0a%3c %0a%3c Make sure to publish your [[https://wiki.ircnow.org/index.php?n=Ssh.Fingerprints|SSH fingerprints]] so users can be certain that the source code was transported securely.%0a%3c %0a%3c Recommended Reading:%0a%3c %0a%3c https://www.openbsd.org/anoncvs.html%0a%3c %0a%3c https://www.openbsd.org/anoncvs.shar%0a host:1634176941=38.87.162.47 author:1634143265=jrmu diff:1634143265:1634143265:=1,178d0%0a%3c This guide explains how to create a CVS repository for committers.%0a%3c %0a%3c !! Checkout code%0a%3c %0a%3c In CVS, you '''check out''' a repo to download its files:%0a%3c %0a%3c [@%0a%3c $ cvs -d anoncvs@example.com:/cvs checkout -P module%0a%3c @]%0a%3c %0a%3c You want to replace anoncvs@example.com with the username and hostname for the repo.%0a%3c %0a%3c You'll also want to verify the SSH fingerprints. IRCNow publishes a list of known [[ircnow/SSHFingerprints|SSH fingerprints]].%0a%3c %0a%3c For example, to check out code for ircnowd from anoncvs@anoncvs.ircnow.org, you'd run:%0a%3c %0a%3c [@%0a%3c $ cvs -d anoncvs@anoncvs.ircnow.org checkout -P ircnowd%0a%3c @]%0a%3c %0a%3c The checkout commands produce a copy of the code in the '''working directory'''.%0a%3c %0a%3c !! Commit new code%0a%3c %0a%3c Once you checkout a CVS repo, you can edit the code and save your changes. Until you commit your code, however, none of the updates will be saved in the CVS repository. '''WARNING''': Any code that is not committed will not be saved in the CVS repo.%0a%3c %0a%3c When you are ready to commit your code, type:%0a%3c %0a%3c [@%0a%3c $ cvs commit%0a%3c @]%0a%3c %0a%3c You will be given a text editor (usually vi) to leave a commit message.%0a%3c %0a%3c To commit and also write the message in a single command, type:%0a%3c %0a%3c [@%0a%3c $ cvs commit -m "Your commit message goes here"%0a%3c @]%0a%3c %0a%3c !! Update code%0a%3c %0a%3c To update your working directory with new code from the repository, type:%0a%3c %0a%3c [@%0a%3c $ cvs update%0a%3c @]%0a%3c %0a%3c !! Add new files%0a%3c %0a%3c '''WARNING''': If you create a new file in your working directory, it will '''not''' automatically be added to the CVS repository. You must first run:%0a%3c %0a%3c [@%0a%3c $ cvs add filename%0a%3c @]%0a%3c %0a%3c Replace @@filename@@ with your real filename.%0a%3c %0a%3c Then, you must commit your changes with:%0a%3c %0a%3c [@%0a%3c $ cvs commit%0a%3c @]%0a%3c %0a%3c Note: @@cvs add@@ is only used for adding new files to a module that has already been checked out. If you want to add a new project to the repository, use @@cvs import@@ as described in '''Import New Repo'''.%0a%3c %0a%3c !! Remove files%0a%3c %0a%3c To remove files from the CVS repo, it is not enough to simply delete them%0a%3c from the working directory. You will also want to remove them from the CVS repository:%0a%3c %0a%3c [@%0a%3c $ cvs remove filename%0a%3c @]%0a%3c %0a%3c Afterwards, you must commit this change to delete it from the repository:%0a%3c %0a%3c [@%0a%3c $ cvs commit%0a%3c @]%0a%3c %0a%3c !! Setting CVSROOT%0a%3c %0a%3c When working with CVS, it helps to set the CVSROOT, the path where the cvs folders are located:%0a%3c %0a%3c You can set it for just the current shell:%0a%3c %0a%3c [@%0a%3c $ export CVSROOT="anoncvs@example.com:/cvs"%0a%3c @]%0a%3c %0a%3c If CVS is local, you can use a file path:%0a%3c %0a%3c [@%0a%3c $ export CVSROOT="/home/username/CVS"%0a%3c @]%0a%3c %0a%3c As a shortcut, you can add this to the bottom of your ~/.profile so you don't have to type it each time:%0a%3c %0a%3c [@%0a%3c $ echo 'CVSROOT="anoncvs@example.com:/cvs"' >> ~/.profile%0a%3c @]%0a%3c %0a%3c Once CVSROOT is set, you can then omit the -d argument for checking out and committing code.%0a%3c %0a%3c So the checkout code above becomes more simple:%0a%3c %0a%3c [@%0a%3c $ cvs checkout -P module%0a%3c @]%0a%3c %0a%3c Any time you check out code, the CVSROOT is automatically provided for the code in the working directory. So, it was not necessary to specify the CVSROOT for the commit command.%0a%3c %0a%3c !! Create New Repo%0a%3c %0a%3c To create a new CVS repository, type:%0a%3c %0a%3c [@%0a%3c $ cvs -d /path/to/CVS/ init%0a%3c @]%0a%3c %0a%3c Replace @@/path/to/CVS/@@ with where you want the CVS repository to be located. For example, you might put it in @@~/CVS@@.%0a%3c %0a%3c !! Import New Module%0a%3c %0a%3c If you have existing code that you'd like to import to a CVS repository, first change%0a%3c to the folder containing the source code, then type:%0a%3c %0a%3c [@%0a%3c $ cvs import reponame vendortag releasetag%0a%3c @]%0a%3c %0a%3c Replace @@reponame@@, @@vendortag@@, and @@releasetag@@. CVS will put the source files inside a directory named @@reponame@@ inside the CVS root directory. @@vendortag@@ should be replaced with the vendor (the author) of the repository. @@releasetag@@ is the tag for the specific release.%0a%3c %0a%3c For example:%0a%3c %0a%3c [@%0a%3c $ cd ~/ircnowd/%0a%3c $ cvs import ircnowd ircnow start%0a%3c @]%0a%3c %0a%3c '''Note''': CVS does not automatically transform the imported source code into a working directory. As a result, any changes you make to the original source code directory cannot be committed to the CVS repo.%0a%3c %0a%3c To fix this, you will need to checkout the source code. Change your directory to somewhere else to place the new working directory, then type:%0a%3c %0a%3c [@%0a%3c $ cvs -d /path/to/CVS/ checkout -P reponame%0a%3c @]%0a%3c %0a%3c Replace @@reponame@@ with the repository name. Then, change directory to @@reponame@@ to make changes. Afterwards, use cvs to commit them.%0a%3c %0a%3c If checkout works properly, you can safely delete the old source code directory you imported from (since that one is not tracked by CVS).%0a%3c %0a%3c !! Export code%0a%3c %0a%3c Eventually, when you are ready to use the code, you want to remove all the CVS-related files. To export code for use:%0a%3c %0a%3c [@%0a%3c $ cvs -d anoncvs@example.com:/cvs export -D YYYYMMDD module%0a%3c @]%0a%3c %0a%3c Replace @@YYYYMMDD@@ with the year, month, and day of the version of the repository you want to export. Replace @@module@@ with the module name.%0a%3c %0a%3c !! Troubleshooting%0a%3c %0a%3c If you see this error message:%0a%3c %0a%3c [@%0a%3c cvs [commit aborted]: received broken pipe signal%0a%3c @]%0a%3c %0a%3c It may be because CVS was waiting for you to connect but your connection took too long. This can happen if you take too long to send a commit message or you take too long to provide passwords for your ssh keys. If this happens, try to find ways to avoid interactive input. For example, you might consider using the -m argument with cvs commit.%0a%3c %0a%3c [@%0a%3c cvs [server aborted]: cannot make directory /var/cvs/module: Permission denied%0a%3c @]%0a%3c %0a%3c This error message means that /var/cvs either doesn't exist or has the wrong permissions. If you're running cvs inside a chroot, check var/cvs inside the chroot. It needs to exist and be owned by the group commit and set to group writeable.%0a host:1634143265=38.87.162.47