This section concerns what to do if you are having trouble making a connection to a CVS server. If you are running the CVS command line client running on Windows, first upgrade the client to CVS 1.9.12 or later. The error reporting in earlier versions provided much less information about what the problem was. If the client is non-Windows, CVS 1.9 should be fine.
If the error messages are not sufficient to track down the problem, the next steps depend largely on which access method you are using.
Try running the rsh program from the command line. For example: "rsh servername cvs -v" should print CVS version information. If this doesn’t work, you need to fix it before you can worry about CVS problems.
You don’t need a command line rsh program to use this access method, but if you have an rsh program around, it may be useful as a debugging tool. Follow the directions given for :ext:.
Errors along the lines of "connection refused" typically indicate that inetd isn’t even listening for connections on port 2401 whereas errors like "connection reset by peer", "received broken pipe signal", "recv() from server: EOF", or "end of file from server" typically indicate that inetd is listening for connections but is unable to start CVS (this is frequently caused by having an incorrect path in inetd.conf or by firewall software rejecting the connection). "unrecognized auth response" errors are caused by a bad command line in inetd.conf, typically an invalid option or forgetting to put the ‘pserver’ command at the end of the line. Another less common problem is invisible control characters that your editor "helpfully" added without you noticing.
One good debugging tool is to "telnet servername 2401". After connecting, send any text (for example "foo" followed by return). If CVS is working correctly, it will respond with
cvs [pserver aborted]: bad auth protocol start: foo
If instead you get:
Usage: cvs [cvs-options] command [command-options-and-arguments] ...
then you’re missing the ‘pserver’ command at the end of the line in inetd.conf; check to make sure that the entire command is on one line and that it’s complete.
Likewise, if you get something like:
Unknown command: `pserved' CVS commands are: add Add a new file/directory to the repository ...
then you’ve misspelled ‘pserver’ in some way. If it isn’t obvious, check for invisible control characters (particularly carriage returns) in inetd.conf.
If it fails to work at all, then make sure inetd is working right. Change the invocation in inetd.conf to run the echo program instead of cvs. For example:
2401 stream tcp nowait root /bin/echo echo hello
After making that change and instructing inetd to re-read its configuration file, "telnet servername 2401" should show you the text hello and then the server should close the connection. If this doesn’t work, you need to fix it before you can worry about CVS problems.
On AIX systems, the system will often have its own program trying to use port 2401. This is AIX’s problem in the sense that port 2401 is registered for use with CVS. I hear that there is an AIX patch available to address this problem.
Another good debugging tool is the ‘-d’ (debugging) option to inetd. Consult your system documentation for more information.
If you seem to be connecting but get errors like:
cvs server: cannot open /root/.cvsignore: Permission denied cvs [server aborted]: can't chdir(/root): Permission denied
then you probably haven’t specified ‘-f’ in inetd.conf.
(In releases prior to CVS 1.11.1, this problem can be caused by
your system setting the
$HOME environment variable
for programs being run by inetd. In this case, you can either
have inetd run a shell script that unsets
$HOME and then runs
CVS, or you can use
env to run CVS with a pristine
If you can connect successfully for a while but then can’t, you’ve probably hit inetd’s rate limit. (If inetd receives too many requests for the same service in a short period of time, it assumes that something is wrong and temporarily disables the service.) Check your inetd documentation to find out how to adjust the rate limit (some versions of inetd have a single rate limit, others allow you to set the limit for each service separately.)