노무현 대통령 배너


2006. 3. 22. 13:03

[본문스크랩] CVS Linux 설정과 WinCVS의 원격 버전관리 - SSH

Linux에 CVS의 서버로 사용하여개발 시 버전관리를할 수있다.물론 LINUX가파일 저장소가 되고 WinCVS로Windows의 파일을 관리한다.
1. CVS의 Linux 설치
cvs 다운로드하여 소스를 받는다.
압축을 풀고 파일을 만든다.
[root@srv root]# tar xvzf cvs-1.11.18.tar.gz
[root@srv root]# cd cvs-1.11.18
[root@srv cvs-1.11.18]# ./configure --prefix=/usr/local/cvs --enable-server-flow-control=300M,500M
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
...(중간 생략) ...
config.status: creating zlib/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands

[root@srv cvs-1.11.18]# make
make all-recursive
make[1]: 들어감 `/root/cvs-1.11.18' 디렉토리
Making all in lib
make[2]: 들어감 `/root/cvs-1.11.18/lib' 디렉토리
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../src -I/usr/kerberos/include -g -O2 -MT argmatch.o -MD -MP -MF ".deps/argmatch.Tpo" -c -o argmatch.o argmatch.c;
then mv -f ".deps/argmatch.Tpo" ".deps/argmatch.Po"; else rm -f ".deps/argmatch.Tpo"; exit 1; fi
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -I../src -I/usr/kerberos/include -g -O2 -MT getdate.o -MD -MP -MF ".deps/getdate.Tpo" -c -o getdate.o getdate.c;
then mv -f ".deps/getdate.Tpo" ".deps/getdate.Po"; else rm -f ".deps/getdate.Tpo"; exit 1; fi
...(중간 생략) ...
Making all in vms
make[2]: 들어감 `/root/cvs-1.11.18/vms' 디렉토리
make[2]: Nothing to be done for `all'.
make[2]: 나감 `/root/cvs-1.11.18/vms' 디렉토리
make[2]: 들어감 `/root/cvs-1.11.18' 디렉토리
make[2]: 나감 `/root/cvs-1.11.18' 디렉토리
make[1]: 나감 `/root/cvs-1.11.18' 디렉토리

[root@srv cvs-1.11.18]# make install
Making install in lib
make[1]: 들어감 `/root/cvs-1.11.18/lib' 디렉토리
make[2]: 들어감 `/root/cvs-1.11.18/lib' 디렉토리
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: 나감 `/root/cvs-1.11.18/lib' 디렉토리
make[1]: 나감 `/root/cvs-1.11.18/lib' 디렉토리
...(중간 생략) ...
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: 나감 `/root/cvs-1.11.18' 디렉토리
make[1]: 나감 `/root/cvs-1.11.18' 디렉토리

[root@srv cvs-1.11.18]# cd /usr/local/cvs
[root@srv cvs]# ls
bin info man share
[root@srv cvs]# ls bin
cvs cvsbug rcs2log
[root@srv cvs]# cvs
Usage: cvs [cvs-options] command [command-options-and-arguments]
where cvs-options are -q, -n, etc.
(specify --help-options for a list of options)
where command is add, admin, etc.
(specify --help-commands for a list of commands
or --help-synonyms for a list of command synonyms)
where command-options-and-arguments depend on the specific command
(specify -H followed by a command name for command-specific help)
Specify --help to receive this message
The Concurrent Versions System (CVS) is a tool for version control.
For CVS updates and additional information, see
the CVS home page at http://www.cvshome.org/ or
Pascal Molli's CVS site at http://www.loria.fr/~molli/cvs-index.html
[root@srv cvs]# cd /home
[root@srv home]# mkdir cvs
[root@srv home]# ls
cvs data lost+found rhinstall-stage2.img users
mysql ufile www
[root@srv home]# cd /etc
[root@srv etc]# vi /etc/profile
. . .

export CVSROOT=/home/cvs

[root@srv etc]# source profile
[root@srv etc]# set
CVSROOT=/home/cvs
[root@srv etc]# cd /home/cvs
[root@srv cvs]# ls
[root@srv cvs]# cvs init -> CVSROOT의 환경변수 설정으로 -d로 지정하지 않아도 됨.
[root@srv cvs]# ls
CVSROOT
[root@srv cvs]# ls CVSROOT
Emptydir config editinfo,v modules,v taginfo
checkoutlist config,v history notify taginfo,v
checkoutlist,v cvswrappers loginfo notify,v val-tags
commitinfo cvswrappers,v loginfo,v rcsinfo verifymsg
commitinfo,v editinfo modules rcsinfo,v verifymsg,v

2. WinCVS 사용하기
Windows에서 WinCVS을 실행하여 linux에 원격 버전 관리 한다. 접속 프로토콜은 SSH 이면 다음과 같이 설정 하고 실행 한다.
메뉴 :Admin -> Login
cvs -q -d :ssh;username=root;password=______;hostname=192.168.0.4:/home/cvs login
Logging in to :ssh:root@192.168.0.4:22:/home/cvs
***** CVS exited normally with code 0 *****
=> login이 정상적으로 이루어 졌다.
메뉴 : Remote -> Import modules...
Filtering 'D:testM340'...

cvs -q -d :ssh;username=root;password=_____;hostname=192.168.0.4:/home/cvs import -I ! -I CVS -W "*.obj -k 'b'" -m "no message" M340 avendor arelease (in directory D:testM340)

N M340/CMD.C
N M340/CMD.H
N M340/cmd.obj
N M340/COM.C
N M340/COM.H
N M340/com.obj
N M340/COMMAND.C
N M340/COMMAND.H
. . .
N M340/STDDEF.INC
N M340/STDIO.C
N M340/STDIO.H
N M340/stdio.obj
N M340/USTDDEF.H
No conflicts created by this import

***** CVS exited normally with code 0 *****
이 번에는 root로 login하지 않고 일반 사용자로 설정하면 다음과 같이 문제가 있다. 이것은 /home/cvs의 접근이 root로 한정되어 있어서 파일 write가 불가능하기 때문이다.
메뉴 :Remote -> Import modules...
Filtering 'D:testM340'...
cvs -q -d :ssh;username=dolicom;password=__________;hostname=192.168.0.4:/home/cvs import -I ! -I CVS -W "*.obj -k 'b'" -m "no message" M340/dolicom2 avendor arelease (in directory D:testM340)
cvs server: cannot make path to /home/cvs/M340/dolicom2: Permission denied
N M340/dolicom2/CMD.C
cvs server: ERROR: cannot write file /home/cvs/M340/dolicom2/CMD.C,v: No such file or directory
N M340/dolicom2/CMD.H
cvs server: ERROR: cannot write file /home/cvs/M340/dolicom2/CMD.H,v: No such file or directory
N M340/dolicom2/cmd.obj
cvs server: ERROR: cannot write file /home/cvs/M340/dolicom2/cmd.obj,v: No such file or directory
N M340/dolicom2/COM.C
cvs server: ERROR: cannot write file /home/cvs/M340/dolicom2/COM.C,v: No such file or directory
.. .

N M340/dolicom2/stdio.obj
cvs server: ERROR: cannot write file /home/cvs/M340/dolicom2/stdio.obj,v: No such file or directory
N M340/dolicom2/USTDDEF.H
cvs server: ERROR: cannot write file /home/cvs/M340/dolicom2/USTDDEF.H,v: No such file or directory
No conflicts created by this import
***** CVS exited normally with code 1 *****
다른 사용자도 사용할 수 있도록 다음과 같이 설정한다.
[root@srv etc]# cd /etc
[root@srv etc]# groupadd cvs
[root@srv etc]#cat /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
. . .( 중간 생략) ...
dolicom:x:501:
cvs:x:502:root,dolicom
[root@srv home]# ls -l
합계 52028
drwxr-xr-x 4 root root 4096 12월 14 23:53 cvs
. . .
[root@srv home]# chgrp -R cvs /home/cvs
[root@srv home]# chmod -R g+w /home/cvs
[root@srv home]# ls -l
합계 52028
drwxrwxr-x 4 root cvs 4096 12월 14 23:53 cvs
. . .
다시 import 하면 정상적으로 처리 됨을 확인할 수 있다.
메뉴 :Remote -> Import modules...

Filtering 'D:testM340'...
cvs -q -d :ssh;username=dolicom;password=__________;hostname=192.168.0.4:/home/cvs import -I ! -I CVS -W "*.obj -k 'b'" -m "no message" M340/dolicom2 avendor arelease (in directory D:testM340)

N M340/dolicom2/CMD.C
N M340/dolicom2/CMD.H
N M340/dolicom2/cmd.obj
N M340/dolicom2/COM.C
N M340/dolicom2/COM.H
N M340/dolicom2/com.obj
N M340/dolicom2/COMMAND.C
N M340/dolicom2/COMMAND.H
N M340/dolicom2/command.obj
. . .
N M340/dolicom2/STDDEF.INC
N M340/dolicom2/STDIO.C
N M340/dolicom2/STDIO.H
N M340/dolicom2/stdio.obj
N M340/dolicom2/USTDDEF.H
No conflicts created by this import

***** CVS exited normally with code 0 *****
Linux에서 확인 하면 다음과 같다.
[root@srv etc]# cd /home/cvs/M340
[root@srv M340]# ls
CMD.C,v INTR340.C,v RSTART.SRC.TXT,v com.obj,v m340.map,v
CMD.H,v KeyPad.c,v RSTARTUP.C,v command.obj,v main.c,v
COM.C,v KeyPad.h,v RTLIB.H,v dolicom main.obj,v
COM.H,v Lcd.c,v RTLIB1.C,v dolicom2 putc.c,v
COMMAND.C,v Lcd.h,v RTLSTR.C,v funrsvd.obj,v putc.obj,v
COMMAND.H,v M68340.H,v SCONFIG.H,v hw.h,v rstart.obj,v
C_OUT.SRC,v M68340.INC,v STARTUP.C,v init.obj,v rtlib1.obj,v
DEBUG.H,v M68K.H,v STDDEF.INC,v init340.obj,v rtlstr.obj,v
FUNRSVD.C,v M68K.INC,v STDIO.C,v intr340.obj,v startup.obj,v
INIT.C,v Makefile,v STDIO.H,v keypad.obj,v stdio.obj,v
INIT.H,v Makefile.bak,v USTDDEF.H,v lcd.obj,v
INIT340.C,v Makefile.step1,v c_out.obj,v m340.abs,v
INIT340.H,v RSTART.SRC,v cmd.obj,v m340.cmd,v
3.pserver로 login하여사용하기
이 프로토콜은 사용을 해보지 않아 정리만 한다. 틀린 수도 있으나 참고 자료이다.
:pserver:username@serveraddr.com:/home/cvs
/etc/services 파일을 열어 없다면 다음과 같이 등록을 해준다.
cvspserver 2401/tcp # CVS client/server operations
cvspserver 2401/udp # CVS client/server operations
그다음 /etc/xinetd.d/pserver 파일을 하나 열고 아래를 등록한다.
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/local/cvs/bin/cvs -> 설치 프로그램 위치에 맞추어지정
server_args = -f --allow-root=/home/cvs--allow-root=/home/user_cvsroot pserver
log_on_failure += USERID
}
xinetd을 실행하여 pserver을 실행 한다.
/etc/rc.d/init.d/xinetd restart
Client에서 실행 한다.
1. cvs -d :pserver:username@serveraddr.com:/home/cvs login을 해서 인증
2. cvs import, checkout, ...
3. cvs logout