Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

第 121 章 cvs - Concurrent Versions System

目录

121.1. installation
121.1.1. chroot
121.2. cvs login | logout
121.3. cvs import
121.4. cvs checkout
121.5. cvs update
121.6. cvs add
121.7. cvs status
121.8. cvs commit
121.9. cvs remove
121.10. cvs log
121.11. cvs annotate
121.12. cvs diff
121.13. rename file
121.14. revision
121.15. cvs export
121.16. cvs release
121.17. branch
121.17.1. milestone
121.17.2. patch branch
121.18. keywords

121.1. installation

过程 121.1. install cvs

  1. install

    $ sudo apt-get install xinetd
    $ sudo apt-get install cvs
    			

    show the cvs version

    $ cvs -v
    
    Concurrent Versions System (CVS) 1.12.13 (client/server)
    			
  2. create cvs group and cvsroot user

    $ sudo groupadd cvs
    $ sudo adduser cvsroot --ingroup cvs
    			

    change user become cvsroot

    $ su - cvsroot
    			
  3. initialization 'CVSROOT'

    $ cvs -d /home/cvsroot init
    			

    if you have successed, you can see CVSROOT directory in the '/home/cvsroot'

    $ ls /home/cvsroot/
    CVSROOT
    			
  4. authentication

    default SystemAuth=yes, you can use system user to login cvs.

    but usually, we don't used system user because it isn't security.

    SystemAuth = no

    edit '/home/cvsroot/CVSROOT/config' make sure SystemAuth = no

    $ vim /home/cvsroot/CVSROOT/config
    SystemAuth = no
    			

    create passwd file

    the format is user:password:cvsroot

    you need to using htpasswd command, if you don't have, please install it as the following

    $ sudo apt-get install apache2-utils
    			

    or

    $ perl -e 'print("userPassword: ".crypt("secret","salt")."\n");'
    			

    or

    $ cat passwd
    #!/usr/bin/perl
    srand (time());
    my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
    my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
    my $plaintext = shift; my $crypttext = crypt ($plaintext, $salt);
    print "${crypttext}\n";
    
    $ ./passwd "mypasswd"
    atfodI2Y/dcdc
    			

    let's using htpasswd to create a passwd

    $ htpasswd -n neo
    New password:
    Re-type new password:
    neo:yA50LI1BkXysY
    			

    copy 'neo:yA50LI1BkXysY' and add ':cvsroot' to the end

    $ vim /home/cvsroot/CVSROOT/passwd
    neo:yA50LI1BkXysY:cvsroot
    nchen:GXaAkSKaQ/Hpk:cvsroot
    			
  5. Go into directory '/etc/xinetd.d/', and then create a cvspserver file as the following.

    $ sudo vim /etc/xinetd.d/cvspserver
    
    service cvspserver
    {
       disable = no
       flags = REUSE
       socket_type = stream
       wait = no
       user = cvsroot
       server = /usr/bin/cvs
       server_args = -f --allow-root=/home/cvsroot pserver
       log_on_failure += USERID
    }
    			
  6. check cvspserver in the '/etc/services'

    $ grep cvspserver /etc/services
    cvspserver      2401/tcp                        # CVS client/server operations
    cvspserver      2401/udp
    			
  7. restart xinetd

    $ /etc/init.d/xinetd
    Usage: /etc/init.d/xinetd {start|stop|reload|force-reload|restart}
    			
  8. port

    $ nmap localhost -p cvspserver
    
    Starting Nmap 4.53 ( http://insecure.org ) at 2008-11-14 16:21 HKT
    Interesting ports on localhost (127.0.0.1):
    PORT     STATE SERVICE
    2401/tcp open  cvspserver
    
    Nmap done: 1 IP address (1 host up) scanned in 0.080 seconds
    			
  9. firewall

    $ sudo ufw allow cvspserver
    			

environment variable

CVSROOT=:pserver:username@ip:/home/cvsroot

vim .bashrc

export CVS_RSH=ssh
export CVSROOT=:pserver:neo@localhost:/home/cvsroot
	

test

$ cvs login
Logging in to :pserver:neo@localhost:2401/home/cvsroot
CVS password:
neo@netkiller:/tmp/test$ cvs co test
cvs checkout: Updating test
U test/.project
U test/NewFile.xml
U test/newfile.php
neo@netkiller:/tmp/test$
	

121.1.1. chroot

$ sudo apt-get install cvsd
		

environment variable

neo@netkiller:~/workspace/cvs$ export CVSROOT=:pserver:neo@localhost:/home/cvsroot
		

ssh

export CVS_RSH=ssh
export CVSROOT=:ext:$USER@localhost:/home/cvsroot