51Testing软件测试论坛

标题: 转帖:在 RedHat Linux上安装 CVS 并将其配置为 SCM 资源库 [打印本页]

作者: sincky    时间: 2005-10-20 00:52
标题: 转帖:在 RedHat Linux上安装 CVS 并将其配置为 SCM 资源库
Colin Yu
软件工程师
IBM 多伦多实验室
2002 年 5 月
引言
本文,即关于在 IBM® WebSphere® Studio Application Developer 中进行小组开发的系列文章的第三篇,重点讲解如何在 RedHat Linux 7 上安装 CVS 并将其配置为 SCM 资源库。WebSphere Studio Application Developer(以下称为 Application Developer)可以与 CVS 这种主流的开放源代码的、网络透明的版本控制系统一起无缝地共同工作。CVS 在大多数平台上都可以运行,包括 Windows®、Linux、AIX® 和 UNIX®。将它与 Application Developer 一起安装在 RedHat Linux 上有下列几点好处:

Linux 现在是占垄断地位的开放源代码操作系统。
RedHat 是 Linux 的主要分发商之一。
CVS 包含在 RedHat Linux 7 分发版中。
CVS for Linux 非常稳定、可靠并且可伸缩,对于个人开发者、小规模的小组以及大规模、分布式小组都很有用。
Application Developer 运行在 RedHat Linux 7 上。
在使用 Application Developer 时,您可以使用 CVS 作为本地资源库或者作为整个小组的共享资源库。
然而,安装和配置 CVS for Linux 并非无足轻重,并且相关的好文档极少。下面的一步一步的指导应该能够帮助系统管理员为使用 Application Developer 的开发者配置 CVS for Linux。

在 RedHat Linux 7 上安装 CVS
CVS 版本 1.11.1.3 可能已经缺省安装在您的 RedHat Linux 7 上了。要检查是否已安装了 CVS,请输入命令 rpm -qa|grep 'cvs'。如果返回的是 cvs-1.11.1-3,就意味着已经安装了 CVS。

如果这条命令没返回任何内容,您就需要安装 CVS。CVS rpm 通常位于 RedHat Linux 7 分发版的安装 CD #2 上的 RedHat/RPMS 目录中。将该 CD 安装到 /mnt/cdrom 后,使用 rpm 命令安装 CVS:rpm -i /mnt/cdrom/RedHat/RPMS/cvs-1.11.1p1-3.i386rpm

建立 CVS 用户帐户和组
以 root 用户的身份登录。
创建一个名为 cvs 的用户,让这个用户使用 cvs 作为他的主组。
创建将在 Application Developer 中使用 cvs 的用户。本文使用 cvsdev1 和 cvsdev2。
使用 cvs 的开发者可以使用他们的私有组作为他们的主组。例如,cvsdev1 的主组是 cvsdev1,但要确保他们还属于 cvs 组。
建立文件夹和资源库
以用户 cvs 的身份登录。
在 cvs 自己的主目录(即 /home/cvs/)下创建一个名为 repository 的目录。
设置目录 /home/cvs/repository 的访问级别和访问模式:chmod 770 /home/cvs/repository
设置目录 /home/cvs/repository 的 setgid 位:chmod g+s /home/cvs/repository
说明:在一个目录中创建文件时,该文件缺省情况下属于其所有者的主组。设置了目录的 setgid 位后,新文件将与该目录属于相同的组,而不属于其所有者的主组。例如,如果用户 cvsdev1 在目录 /home/cvs/repository 中创建了一些文件,则这些文件将属于 cvs 组而不是它的主组 cvsdev1。

这一步至关重要,因为它使 CVS 用户能够检出其他用户创建的文件。如果这一步没完成,那么当您检出另一个用户创建的文件时,操作将失败,并发出下面这条消息:

Failed to create lock directory for /home/cvs/repository/...: Permission denied.
Failed to obtain dir lock in repository /home/cvs/repository/...

初始化资源库:
cvs -d /home/cvs/repository init
注销用户 cvs。
修改 xinetd 服务以启用 pserver 协议
以 root 用户的身份登录。
在目录 /etc/xinetd.d 中创建一个名为 cvspserver 的文件,文件内容如下:
# default: off
# description: An cvs server.
service cvspserver
{
   disable = no
   socket_type = stream
   protocol = tcp
   user = root
   wait = no
   server = /usr/bin/cvs
   server_args = -f --allow-root=/home/cvs/repository pserver
   log_on_success +=USERID
   log_on_failure += USERID
}
打开 /etc/services 并核实存在下面这两行代码。如果不存在,则添加它们:
cvspserver 2401/tcp     # CVS client/server operations
cvspserver 2401/udp     # CVS client/server operations
重新启动 xinetd 服务:
service xinetd restart
建立用户环境
打开文件 /etc/profile。您应该能在该文件中看到下面这些行:
USER='id -un'
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
在环境变量 MAIL 后添加一行内容:
CVSROOT=":pserverUSER@localhost:/home/cvs/repository"
在该文件中,您还应该看到这样一行:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
修改这一行并将 CVSROOT 添加到导出(export)列表中,如下所示:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC CVSROOT
用本地用户测试安装
Developer 1 以 cvsdev1 的身份登录。
通过输入下面的命令来确保环境变量是正确的:
echo $CVSROOT
它应该返回与用户名有关的象下面这样的结果:

:pserver:cvsdev1@localhost:/home/cvs/repository
用下面的命令登录 CVS:
cvs login
您将被提示提供密码。输入您的 Linux 密码。

创建一个名为 project1 的目录:
mkdir project1
在目录 project1 中创建一个名为 Test.java 的文件,文件内容如下:
public class Test{
   public String sayHello(String name){
      return "Hello"+name;
   }
}
使用这些命令将 Test.java 导入到 CVS 资源库中的模块 project1:
cd /home/cvsdev1/project1
cvs  import -m "import Test.java" project1 wsadgroup release1_0
CVS 导入操作完成后,您应该会看到一条这样的消息:

N  project1/Test.java
No conflicts created by this import
备份您的源代码:
cd
mv project1 project1.sav
从 CVS 资源库检出 project1:
cd
cvs checkout project1
您应该会看到在 /home/cvsdev1 下创建了一个名为 project1 的新目录,该目录下有一个文件 Test.java 和一个目录 CVS。

Developer 2 以 cvsdev2 的身份登录。
cvsdev2 登录 CVS:
cvs login
cvsdev2 从 CVS 检出 project1:
cvs checkout project1
您应该会看到这样一条来自 CVS 的消息:

cvs server:Updating project1
U project1/Test.java
向 Test.java(位于目录 project1 中)添加一个新方法:
public String sayBye(String name){
   return "Bye, " + name;
}
把 Test.java 检入到资源库中:
cvs commit -m "checkin Test.java" Test.java
您应该会看到这样一条来自 CVS 的消息:

Checking in Test.java;
/home/cvs/repository/project1/Test.java, v <-- Test.java
new revision: 1.2; previous revision: 1.1
done
用户 cvsdev1 用下面这些命令捕获 cvsdev2 所做的更改:

cd /home/cvsdev1/project1
cvs update Test.java
您应该会看到这样一条来自 CVS 的消息:

U Test.java
您可以用编辑器打开 Test.java 来查看 cvsdev2 所做的更新。

用 Application Developer 测试安装
打开 Team Perspective,选择 Repositories 视图并在工作台(Workbench)中选择 File => New => Other。在 CVS 类别中选择 Repository Location 并单击 Next。完成资源库位置向导。下面简要描述了向导的这个面板上的 CVS 术语:


Connection type
您想用来连接到 CVS 服务器的协议。缺省值是 pserver,它代表密码服务器协议。这是我们刚才在 RedHat Linux 7 中设置的连接类型。
User name
您用来登录到 CVS 服务器中的用户名。例如我们刚才在 RedHat Linux 7 中定义的 cvs 组中的 cvsdev1 或 cvsdev2。
Host name
您想连接到的服务器的机器名。它将是 RedHat Linux 机器的主机名或 IP 地址。
Repository path
服务器上的资源库位置的全限定路径。对于我们的安装和配置,它将是:/home/cvs/repository。
CVS location
Application Developer 用来连接到资源库的完整位置。当您填好前面几个字段时,它将被动态构建。
Validate on finish
它在返回到 IDE 前测试资源库连接。请一直启用它作为第一次连接性测试。
图 1.


单击 Finish。如果 Application Developer 能够连接到 CVS 服务器,您将被提示提供该用户标识的密码。请参见下图 2。
图 2.


一旦用户标识和密码通过验证,您就会返回到 Repositories 视图,并且该视图上多了一个 Application Developer 连接到的新资源库条目。

展开 Streams => HEAD => project1,您就可以看到版本为分发版 1.2 的 Test.java,这与我们在“用本地用户测试安装”这一节的第 13 步中看到的一致。
图 3.


右键单击 Test.java 并选择 Show in Resource History。在 Resource History 视图中,您可以看到 cvsdev1 何时对 Test.java 进行了第一次修订,在代码发生更改后,cvsdev2 何时把 Test.java 检入到了资源库中。
图 4.


图 5.


5. 最后,右键单击 project1 并选择 Add to Workspace。您们就可以开始对 Application Developer 中的 project1 进行操作了!

图 6.


结束语
本文已经描述了如何在 RedHat Linux 中配置 CVS。我希望这篇文章会对您有所帮助,并欢迎所有的反馈。
作者: sincky    时间: 2005-10-20 00:55
配置CVS server,费了很大的力气才把它搞定,我是菜鸟,希望高手不要那砖头Pai me,我只是不希望其它
菜鸟不再费这么大的气力了,其中引用其他作者的文字我用[/c&v]... [c&v/]指出了

我的系统为Redhat 7.0,运行Apache

1.CVS Server配置

  RHLinux# mount /mnt/cdrom (如果不好用的话,你可以试一下mount -t iso9669 /dev/cdrom /mnt/cdrom)

  RHLinux# cd /mnt/cdrom/Redhat/RPM (不用解释了吧)

  RHLinux# rpm -ivh cvs-1.10.8.8.i386.rpm (安装cvs,你可以用rpm -qpl ...看安装的详细信息)

  RHLinux# vi /etc/service
      (应该有
         cvspserver 2401/tcp # cvs client/server operations  
         cvspserver 2401/udp # cvs client/server operations  
       这两行)
  
  
  ([/c&v]以下具体的作者我找不到了,所以,我不能写出作者的姓名,sorry
   感谢他的辛勤劳动
   要使cvs正常运行还需要对需要使用cvs的用户进行设置,下面是我在
   配置cvs使用的方法。首先建立一个用户组cvs,可以使用groupadd或者
   addgroup命名,也可以直接编辑/etc/group文件添加这个组,然后添加
   一个用户cvsroot, 然后修改/etc/passwd文件使cvsroot用户的缺省组
   是cvs组,而不是cvsroot组。建立/cvsroot目录,然后修改/cvsroot的
   属主及属性[c&v/])  
  RHLinux# groupadd   cvs
  RHLinux# adduser  cvsroot
  RHLinux# passwd   cvsroot
  
  修改/cvsroot的属主及属性  
  RHLinux# chown cvsroot.cvs /cvsroot  
  RHLinux# chmod 755 /cvsroot(原本应该是771,但是我们要配置cvsweb.cgi,下面再谈)。  

   
  RHLinux# cd /etc/xinetd.d
  
  RHLinux# vi cvspserver(创建一个新文件,文件名随意,注释为文件内容)
      /************************************************
        service cvspserver
                           (service后面的名称一定要和你在/etc/service文件中的cvs服务名称
                            一样,但是我不知道/etc/service文件中的cvs服务名称可以改否,rpm
                            方式安装完后,那两行就在那了-----我是菜鸟嘛
        {
        disable = no
        flags = REUSE
        socket_type = stream
        wait = no
        user = root
        server = /usr/bin/cvs
        server_args = --allow-root=/home/cvsroot pserver
        log_on_failure += USERID
        }
       ************************************************/
   
  RHLinux# cvs -d /home/cvsroot init
              (对cvs进行初始化,你会发现/home/cvsroot下多了一个CVSROOT的子目录)

  RHLinux# /etc/init.d/xinetd restart  (重新启动xinetd)  
   cvs -d :pserver:cvsroot@host:/home/cvsroot login
                              (输入cvsroot用户在服务器上的口令,没有出现错误提示就表示成功了.)  
   
                              (如果cvspserver成功起动后,netstat -l | grep tcp应能看到以下行:
                               tcp 0 0 *:cvspserver *:* LISTEN)






2.WinCvs(Windows下客户端的配置):
[/c&v]   启动wincvs在Admin菜单中选择preferences然后在global页中设置CVSROOT,就是  

:pserver:cvsroot@host:/cvsroot。在认证方式中选择passwd file on the cvs server,
在下面的版本号中选择合适的版本,执行Admin菜单中的login,在提示框输入口令,如果
Output窗口出现以下提示:  
*****CVS exited normally with code 0*****  
就表示我们现在可以在Windows下使用cvs服务了。[c&v/]



如何使用wincvs把自己的项目加到cvs中去

1) Make sure that all the source files you want to check into CVS are on one directory (or

subdirectories). This directory (folder) should NOT contain anything else! That is, it should not

contain executables, object files (.o), class files (.class), etc. It should only contain the

source files.

1) 确认你想加入的源文件全部在一个目录下。这个目录仅仅应当包含源文件,不应该有其他任何的可执行体、
   *.O,*.class....等类型的文件
2) 在wincvs "Modules"窗口中包含你的源文件的目录被选中
3) 在菜单"Create" ->"Import Module"选择目录,把它导入CVS
4) 重命名你的目录
5) 其他相关的内容请看wincvs文档
  
cvsweb配置

[/c&v]cvsweb是一个perl程序,现在的版本是1.93,记得要用新版,1.8以下有一个小小的漏洞,可以到绿盟查

一查。  
由于是cgi程序,是以nobody用户执行的,所以/cvsroot的属性要设成775。开始我按章照搬,把属性改成  
771,结果项目的目录就是不出来,埋葬了半天的青春:(还有记得把/cvsroot/CVSROOT/history的属性  
改成666。cvsweb.conf里%CVSROOT数组的Configuration设成/cvsroot,就是cvs仓库的路径不要那个长长  
CVSROOT变量。这些其实在它的说明文档和程序注释里都讲到了,只是这个世界是懒人的世界:)  

一切都阳春白雪,可以埋头写程序了?只是cvs还有一个小小的DoS漏洞要跟大家说一下:(  
每个cvs的操作过程会以操作用户的身份在/tmp下临时建一个锁定了的目录cvs_servPID,这时如果有人建  
了大量的同类文件就会使cvs的操作出错,会提示:  
cannot change permissions on temporary directory  
Operation not permitted  
下面是测试的perl程序:  
#!/usr/bin/perl  
#$min和$max的值根据实际情况修改  
$min=400;  
$max=4000;  
for ($x=$min;$x<=$max;$x++) {  
        open CVSTMP, ">>/tmp/cvs-serv$x" or die "/tmp/cvs-serv$x: $!";  
        chmod 0600, "/tmp/cvs-serv$x";  
        close CVSTMP;  
}  

解决方法:  
使用server.c中的mktemp(3)函数或者其它任何可以产生唯一文件名的方法。在/tmp/目录所在的分区使  
用空间配额也能解决部分问题。  主要还是扎紧篱笆,莫让别人闯进来,这毕竟是一个local的问题。  
[c&v/]

    RHLinux# rpm -ivh  cvsweb-1.79-3.noarch.rpm(顾不了那么多了,饥不择食嘛)
   
    RHLinux# cp /home/httpd/cvsweb.cgi /var/www/cgi-bin
  
    RHLinux# cd /etc/httpd/conf
    RHLinux# vi cvsweb.conf
        /************************************************************************
             找到%CVSROOT项
             更改其子项 'Configuration'=>'/home/cvsroot',
        *************************************************************************/
在浏览器中敲入http://RHLinux/cgi-bin/cvsweb.cgi如果出现CVS Repository页面也不要高兴的太早
继续进入下一级页面,如果出错,那么
    RHLinux# rlog  (如果shell提示没有这个命令的话,找这个文件rcs-xx.-xx.i386.rpm)
   
    RHLinux# rpm -ivh rcs.........
作者: cmhuang    时间: 2006-2-9 17:27
非常感谢楼主如此详尽的描述,已经成功配置
作者: mugua    时间: 2006-3-29 13:58
标题: 支持一下!
win - lin
作者: 983221wy    时间: 2006-5-4 15:25
支持一下!
作者: huih    时间: 2006-5-18 23:48
GOOD!
作者: kittyhu    时间: 2006-7-6 13:31
在执行到checkin时报错:
cvs commit: cannot open CVS/Entries for reading: No such file or directory
cvs commit: nothing known about `Test.java'
cvs [commit aborted]: correct above errors first!
是什么原因?
作者: kittyhu    时间: 2006-7-6 14:21
我已经解决了:呵呵,就是没在对应目录下执行,用cd明令找到放此文件的路径即可
作者: cr19800604    时间: 2006-8-27 18:38
受教了,呵呵
作者: 森林一木    时间: 2006-11-8 15:45
正需要这玩意呢!多谢
作者: apron    时间: 2006-12-6 15:17
斑竹大人太尽职了!
非常非常的感谢感激感动!
作者: hyq828    时间: 2007-6-12 22:38
看了上面的详细配置,终于CVS在Linux下终于弄好了




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2