Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1572014
  • 博文数量: 289
  • 博客积分: 11086
  • 博客等级: 上将
  • 技术积分: 3291
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-22 17:06
个人简介

徐小玉的博客。

文章分类

全部博文(289)

文章存档

2023年(6)

2022年(1)

2021年(2)

2020年(9)

2019年(9)

2018年(6)

2017年(10)

2016年(10)

2014年(3)

2013年(4)

2011年(12)

2010年(16)

2009年(14)

2008年(119)

2007年(48)

2006年(20)

我的朋友

分类: LINUX

2007-04-19 14:19:26

连接 CVS 服务器的问题

本节关注的是连接 cvs 服务器问题的解决方法。如果你在 Windows 上运行 cvs 命令行客户端,首先要更新客户端到 cvs 1.9.12 或之后的版本。较早版本的错误报告只能对问题提供很少的信息。如果客户端是在非 Windows 上,cvs 1.9 就可以。

如果错误信息不足以追踪错误,下一步取决于你使用的访问方式。

:ext: 在命令行上运行 rsh 程序。例如: "rsh servername cvs -v" 会打印 cvs 的版本。 如果不能正常输出,在担忧 cvs 问题之前应先解决它。

:server: 使用这种访问方式不需要使用命令行的 rsh 程序,但如果你有 rsh 程序,它可以用作测试工具。见 :ext: 相关指引。

:pserver: 一般对于 "connection refused" 错误,是因为 inetd 没有监听 2401 端口。而像 "connection reset by peer","received broken pipe signal", "recv() from server: EOF" 或 "end of file from server" 这种典型的问题,是因为 inetd 监听了连接但无法启动 cvs (常常因为 inetd.conf 使用了不正确的路径或防火墙阻止了连接)。"unrecognized auth response" 错误是 inetd.conf 中错误的命令行造成,像无效的选项或忘记将 `pserver' 命令置于行末。另外一种可能的原因是编辑器添加了不可见的控制字符,而没有给出提示。

一个很好用的调试工具是 "telnet servername 2401"。连接以后,发任意一个文本 (例如 "foo" 并回车)。如果 cvs 工作正常,将回显

          cvs [pserver aborted]: bad auth protocol start: foo
     

如果是看到:

          Usage: cvs [cvs-options] command [command-options-and-arguments]
          ...
     

那么应该是忘记在 inetd.conf 行末加上 `pserver' 命令; 检验一下,确保整个命令处于一行并且完整。

同样,如果你得到:

          Unknown command: `pserved'
          
          CVS commands are:
                  add          Add a new file/directory to the repository
          ...
     

也就是在某处拼写错了 `pserver'。如果不那么明显,检查一下 inetd.conf 里面的非显示控制字符(特别是回车)。

如果完全不工作,那么先确保 inetd 可以正常使用。修改 inetd.conf,用 echo 替换里面的 cvs 调用。例如:

          2401  stream  tcp  nowait  root /bin/echo echo hello
     

修改之后让 inetd 重新读取配置文件,"telnet servername 2401" 应该回显 hello,然后服务器关闭连接。如果也不工作,你应该在考虑 cvs 之前先解决这个问题。

在 AIX 系统上,2401 端口会被系统自己的程序使用。这是 AIX 的问题,因为 2401 是 cvs 注册使用的端口。我听说有一个 AIX 补丁可以解决这个问题。

另外一个很好的调试工具是在 inetd 上使用 `-d' (调试) 选项。研究一下系统文件掌握如何使用。

如果好像已经连接,但得到如下的错误:

          cvs server: cannot open /root/.cvsignore: Permission denied
          cvs [server aborted]: can't chdir(/root): Permission denied
     

那么你也许没有在 inetd.conf 里面指定 `-f'。(在 cvs 1.11.1 以前的发行版,这个问题是因为环境变量 $HOME 是由 inetd 运行的程序设置。这种情况下,你可以让 inetd 运行一个脚本,里面先 unset $HOME,再运行 cvs,或者使用 env 在原始环境下运行 cvs。)

如果你开始可以成功连接,然后有不行了,可能是达到了 inetd 的限制。(如果 inetd 短期内同一个服务接收了过多的请求,它会认为出错,并暂时禁止服务。)查看一下 inetd 的文档,找到如果调节限制(有些版本的 inetd 只有一个限制可以调,另外的可以为每个服务单独设置。)

阅读(4111) | 评论(0) | 转发(0) |
0

上一篇:CVS使用手册

下一篇:inetd “超级服务器”

给主人留下些什么吧!~~