BBUWOO'S [ LIKE UNIX ] WORLD Home > Lecture > Cvs > Cvs-2  

HOME
WHAT's BBUWOO?
LInux AnNyung
Open Source
    GitHUB
    GitHUB (for PHP)
LECTURE
MINI LECTURE
QnA BOARD
ENGLISH POEM


WARNNING

강좌의 모든 권리는 본인 김정균에게 있으며 이 강좌를 상업적 목적 으로 이용
하거나 다른 곳으로 옮길시에는 본인의 허락이 있어야 한다. 이글의 가장 최신글은
http://oops.org 에서 확인할수 있다.



Project managing with CVS .. part II

이 문서는 CVS를 이용한 project를 관리를 위해 CVS server 를 셋팅하는 법
에 대해서만 다룬다. CVS를 통한 managing 에 대한 방법은 7. project test
에 링크되어 있는 문서들을 참조하도록 한다.

[ 목차 ]
1. 설치
2. CVS 초기화 하기
3. 기본 설정 준비
4. cvs daemon 띄우기
5. project 초기화
6. login user 설정
7. project 테스트
8. FAQ

5. project 초기화

cvs service 를 이용한 project 의 이름을 project 라고 하자. 해당 소스가
들어 있는 디렉토리로 일단 이동을 한다음 해당 소스들을 CVS 에 넣도록 한
다.

[root@bbowoo /home]$ cd project
[root@bbowoo project]$ cvs -d /home/cvs import -m "프로젝트 멘트" \
                              proj_title vender_tag release_tag

명령을 실행한다. "프로젝트 멘트" 뒤의 \ 역시 한줄로 붙여 쓰라는 표시이
다. 두번째 명령의 "프로젝트 멘트"는 말그대로 주석이라고 생각을 하면 될
것이고 proj_title은 CVS에 들어갈 proj_title을 적어 준다. 이 proj_title
로 /home/cvs 에 디렉토리가 생성이 되고 그 안에 해당 소스들이 위치 하게
된다. vender_tag 는 project 관리자의 id정도만 넣어 줘도 되며,
release_tag는 최초로 하는 것이니 start정도를 대입해 주면 된다. 위의 명
령을 실행하면


Hanterm - cvs -d /home/cvs import -m "내 프로젝트" project oops start

 [root@bbuwoo project]$ cvs -d /home/cvs import -m "내 프로젝트" project oops start  
  N project/a.c
  N project/b.c
  N project/c.c
  N project/README
  ...

  No conflicts created by this import
 [root@bbuwoo project]$

와 같은 결과가 나올것이다. 이 명령으로 인하여 /home/cvs/project라는 디
렉토리를 생성하여 project directory 에 있던 소스들을 /home/cvs/project
에 넣는 작업을 보여주게 된다. 제일 앞의 N 은 새로운 파일이 추가 되었음
을 나타낸다.

마지막 No conflicts created by this import 메세지는 저장소에 아무 file
도 없어서 아무런 충돌(comflict) 가 발생하지 않았다는 메세지 이다. 그러
니 잘 된것이라는 말이다.

일단 import로 cvs project 초기화를 한후에는 기존의 project directory에
있는 소스 들은 필요가 없어진다. (/home/cvs/project 를 말하는 것이 아니
다.) 그러므로 project directory 는 삭제를 해도 무방하다.
(/home/cvs/project 를 말하는 것이 아니다.)

다음 /home/cvs 로 이동을 하자. 일단 project 를 import를 하면 import 를
한 유저의 권한으로 등록이 되어 있을것이다. 여기서 약간의 퍼미션 조정을
해 줘야 한다.

일단 cvs 에 로그인을 한후에 cvs에 있는 소스들을 받아 가려면 cvs server
의 cvs group에 속해 있어야지만 이를 받아 갈수가 있다. 여기서 중요한 것
이 file들의 소유권은 누가 가지고 있다고 해도 cvs 그룹에 속해 있는 유저
들은 소유권에 상관없이 변경을 할수가 있다. (이는 cvs group에 속해 있고
쓰기 권한이 있는 유저들에 한한다. cvs의 read-only 권한 설정에 대해서는
아래에 설명을 할 것이다.) 다만 directory 만은 775의 권한과 group이 cvs
로 지정이 되어 있어야 한다는 것을 명심해야 한다.

즉 import 명령을 실행한 다음

[root@bbowoo /home]$ chgrp -R cvs /home/CVS/project

명령을 실행해 줘야 한다. 다시 정리하면 project 의 초기화 작업은 다음의
프로세스를 따른다.

[root@bbowoo /home]$ tar xvfpz project.tar.gz
[root@bbowoo /home]$ cd preject
[root@bbowoo /home]$ cvs -d /home/cvs import -m "내 프로젝트" project oops start
[root@bbowoo /home]$ chgrp -R cvs /home/CVS/project

6. login user 설정하기

cvs의 로그인은 real 계정을 가지고 있는 사람들은 cvs gropu에 속해있기만
하면 누구나 가능하다. 하지만 기본적인 CVS계정을 이용하여 CVS 계정을 따
로 이용을 하는 것이 더욱 낳을 것이다.

CVS 계정을 만들기 위해서는 cvs passwd file을 이용한다. cvs passwd file
은 처음에는 존재하지 않으며 별도로 생성을 해줘야 한다. cvs passwd file
의 포맷은

ID:encrypt_passwd:REAL_ACCOUNT

의 형식을 이루며 암호화 되어진 password 는  apache의 htpasswd 명령을 이
용하여 생성할수 있으며 cvs passwd file의 위치는 $CVSHOME/CVSROOT/passwd
가 된다. (위의 예에서는 /home/cvs/CVSROOT/passwd 이다)

일단 우리는 앞에서 CVS를 관리할 계정 이름을 cvs로 정했던 것을 기억할 것
이다. 이제 여기에 oops 라는 CVS 계정을 만들어 보도록 하겠다. ( 패스워드
파일을 만들지 않고 단순히 출력을 할 경우에는 -n option을 사용한다. )

Hanterm - htpasswd -c passwd oops

 [root@bbuwoo /etc]$ cd /home/cvs/CVSROOT
 [root@bbuwoo CVSROOT]$ htpasswd -n oops
  New password: 
  Re-type new password:
  oops:3YnscZqDZxEA.
 [root@bbuwoo CVSROOT]$

위와 같이 하면 암호화 되어진 passwd 가 생성이 되고 아래와 같이 passwd 
file 의 2번째 field 에 넣어주면 된다.

Hanterm - cat /home/cvs/CVSROOT/passwd

 [root@bbuwoo etc]$ cd /home/cvs/CVSROOT
 [root@bbuwoo CVSROOT]$ cat /home/cvs/CVSROOT/passwd
  test:QDrxN2gWIKsM6:cvs
  oops:3YnscZqDZxEA.:cvs
 [root@bbuwoo CVSROOT]$

다시 한번 요약을 하자면 CVS가 사용할 계정들은 $CVSHOME/CVSROOT/passwd
에서 정의를 하며 passwd file의 format은

CVS_ACCOUNT:CRYPT_PASSWD:REAL_ACCOUNT

을 이루며 제일 처음 CVS_ACCOUNT 는 CVS 에서 로그인 할때 필요한 계정 이
름을 의미하며, 두번째 필드 CRYPT_PASSWD 는 UNIX crypt 암호화 되어진 암
호화된 문자열로 위의 htpasswd -n 명령으로 만들수가 있다. 그리고 마지막
REAL_ACCOUNT 는 처음의 CVS_ACCOUNT 가 시스템의 어떤 USER의 권한으로 작
동을 할지를 지정해 주는 것이다. 제일 마지막을 지정하지 않으면 CVS 로그
인을 성공해도 chechout 을 하지 못하는 경우가 발생을 한다.

다음에는 read-only user를 처리하는 과정을 설명하도록 해 보도록 하겠다.
일단 /home/cvs/CVSROOT/passwd 에 익명 사용자로 사용할 유저를 등록 하도
록 한다. 이미 되어 있다면 아래의 과정은 넘어 가도 상관없겠다.

Hanterm - htpasswd passwd oops

 [root@bbuwoo CVSROOT]$ htpasswd -n cvs
  New password: cvs
  Re-type new password: cvs
  cvs:3YnscZqDZxEA.
 [root@bbuwoo CVSROOT]$ echo "cvs:3YnscZqDZxEA.:cvs" >> /home/cvs/CVSROOT/passwd
 [root@bbuwoo CVSROOT]$

패스워드 역시 모두 cvs로 주었다. 다음 /home/cvs/CVSROOT/readers라는 파
일을 생성하도록 한다. 그리고 여기에 cvs를 넣어 주도록 한다. 주의 할 것
은 마지막 라인이 공백라인이면 절대 안된다. 물론 유저이름 뒤에 공백문자
가 존재 해도 안된다. 이런 식으로 /home/cvs/CVSROOT/readers 라는 파일에
등록된 유저는 read-only mode로만 접근이 가능하다.

7. project 테스트

local machine 에서는 아래와 같이 명령을 실행해 본다.

[root@bbuwoo CVSROOT]$ cvs -d /home/cvs checkout project

그러면 현재 디렉토리 안에 project 라는 디렉토리가 생성 되면서 안에 CVS
의 소스들이 다운로드 되어 질것이다. 이렇게 되면 셋팅이 잘 된것이다.

원격에서 pserver로 접근하는 것을 테스르 하려면 아래와 같이 해 본다.

Hanterm - cvs -d :pserver:ID@servername.com:/home/cvs login

 [root@other oops]$ cvs -d :pserver:ID@servername.com:/home/cvs login
  CVS passwd : input password

  cvs -d :pserver:ID@servername.com:/home/cvs checkout project
  ...
  ...
 [root@other oops]$
를 하여 현재 디렉토리에 project 가 생성이 된다면 제대로 설정이 된것이다.
이후의 cvs를 이용한 작업에 대해서는 다음의 문서들을 참조하도록 한다.

http://webdox.co.kr/docs/application/cvs.jsp 김민식
http://network.uos.ac.kr/~blhole/linux/cvs.html 김영민 
http://kldp.org/KoreanDoc/html/CVS-KLDP/ 장우현

8. FAQ

[ Question ]
로그인 후에 checkout을 하려 하는데 다음과 같은 메세지가 나옵니다.
[oops@work CVS]$ cvs -d :pserver:cvs@servername.com:/home/cvs checkout project
Sorry, you don't have read/write access to the history file
/home/cvs/CVSROOT/history Permission denied


위의 에러 메세지는 $CVSHOME/CVSROOT 디렉토리와 그 이하의 디렉토리및 파
일들의 권한 문제이다. 

[root@bbuwoo cvs]$ chgrp -R cvs /home/cvs/CVSROOT
[root@bbuwoo cvs]$ chmod -R g+w /home/cvs/CVSROOT

명령을 실행해 주면 된다.


[ Question ]
로그인까지는 잘 되었는데 checkout을 할때 다음의 에러 메세지가 나옵니다.
[oops@work CVS]$ cvs -d :pserver:cvs@servername.com:/home/cvs checkout project
cvs server: Updating project
cvs server: failed to create lock directory in repository
            `/home/cvs/project': Permission denied
cvs server: failed to obtain dir lock in repository `/home/cvs/project
cvs [server aborted]: read lock failed - giving up


이 에러 메세지는 5. project 초기화에서 설명한 부분을 제대로 설정하지 않아서 발생한
문제이다. 보통 project를 초기화 하면 CVS 저장소에 초기화를 한 유저의 소유권으로 디
렉토리가 생성이 된다. 그런데 cvs에서 file의 소유권은 상관을 안하지만 directory의
그룹 소유권은 cvs group이 가지고 있어야 한다. 그리고 또한 cvs group에 대한 쓰기 권
한이 존재해야 한다. 그러므로 이는

[root@bbuwoo cvs]$ chgrp -R cvs /home/cvs/project

명령으로 해결이 가능하다. 다시 말하면 project directory 이하의 모든 directory들은

drwxrwxr-x   user   cvs     directoryname

의 퍼미션과 소유권을 가져야 한다는 말이 된다.


[ Question ]
저장소(Reposity) 를 여러개 만들어 각각의 유저로 관리하고 싶습니다.


저장소는 각각 cvs -d $PATH init 로 만드시면 됩니다. 그리고 inetd 나 xinetd 에서
CVS 의 명령줄에 --allow-root 옵션으로 각각의 저장소 위치를 지정해 주시면 됩니다.

cvspserver   stream tcp nowait.400 root /usr/bin/tcpd /usr/bin/cvs -f \
       --allow-root=/home/cvs/test --allow-root=/home/cvs/test1 pserver

정도로 하시면 됩니다.


>> 이전 : Project managing with CVS part1


    



 Home > Lecture > Cvs > Cvs-2

Copyright 1997-2024 JoungKyun Kim 
LAST MODIFIED: 2017/01/19