Unix/Solaris10

CVS 서버 돌리기

ForceCore 2006. 7. 2. 00:11

유닉스 환경에서 CVS 서버 설정을 하기는 처음이다...;
그동안 윈도우에서는 많이 해봤지만.

sunfreeware.com에 CVS패키지가 있다 (-_-!) 그래서 그것을 받았다.
설치...
# gunzip -d cvs-1.11.20-sol10-sparc-local.gz
# pkgadd -d cvs-1.11.20-sol10-sparc-local

충돌이라고 하는데 매뉴얼 페이지가 조금 충돌이 있는거 같다.
그래도 설치하면 되겠지?;; 매뉴얼 따위야.. -_-;;
이제 cvs명령이 듣게 되었다. cvs add 이런 작업은 할 수 있게 됨.

하지만 서버는 -_-?
http://www.pointless.nl/~peter/stuff/cvs-server.html
이 글을 컨닝한 바에 의하면,
유닉스에서는 SSHD가 있기 때문에,
CVS이용자만을 이용한 디렉토리를 만들어서
그 안에 가두면 된다는 듯 싶다. 하지만,
솔라리스에는 저 글에 나오는 충분한 도구가 없다 :(

http://ch.tudelft.nl/~arthur/cvsd/
CVS를 PServer모드로 돌리면서, chroot감옥에
이용자를 가두는 방법을 써보자.

소스코드를 받았다. wget나이스 -_-ㅋ;;
압축해제,
./configure
make
make install

 

* 단, cvs command line도구가 설치되어야 함! 패키지를 받아 설치하면 될 것이다.

컴파일은 잘 된다. 설정과 실행이 문제.
tcp wrapper는 실험적이라고 하니 좀 버리고.
시스템 Startup 스크립트에서 제어해야 하나보다.
그건 좀 뒤에 다룰 일이고 지금은,...

설정파일은
/usr/local/etc/cvsd/cvsd.conf
에 있다. 설명이 매우 자세하게 되어있다.

RootJail : 감옥 path. 잘 설정하자. /export/cvs로 했음.

Uid: CVSD가 실행될 user ID, 혹은 숫자로 된 UID. 기본값인 cvsd로 놔두었다.
에... cvsd.conf를 수정하기 전에 좀 뭔가 해줘야 할 것 같군.
README를 컨닝해서 anonymous cvs를 일단은 만들어보자..;

# groupadd cvsd
을 했다. 매뉴얼에는 groupadd에 --system태그를 붙여 놓았는데(시스템 그룹이라는 표시라고 한다.)  solaris의 groupadd에는 그런 명령옵션은 없는 듯.

음;; 데스크탑용 리눅스를 만들 때는 데몬쪽은(시스템 서비스) 전혀 보지 않았는데.
데몬쪽은 소유권/데몬의 사용자ID/그룹ID를 잘 설정해야 하는구나.

# useradd -g cvsd -d /export/cvs -s /bin/false -c "cvs pserver daemon" cvsd
유저도 넣었다. 그룹은 cvsd, 홈은 CVS의 루트감옥, 셸은 false (-_-..;;) 코멘트도 넣고, ID는 cvsd다.

이제 CVSROOT로 쓸만하게 /export/cvs를 개조하라고 하자.
# cvsd-buildroot /export/cvs

편하게 cvs 디렉토리 생성이 되었다. 들어가보면 usr bin 이런 것이 생성되어 있을 것이다.

CVS repository를 생성한다. (경로는 반드시 절대경로로 입력해야만 한다.)
# cvs -d /export/cvs/public init

그리고 이 repository에 대한 설정을 건드려주자.
# cvsd-passwd /export/cvs/public +anonymous
암호를 묻는데 엔터를 그냥 두번 쳐서 암호 없음이라고 해준다.
# touch /export/cvs/public/CVSROOT/writers
# vi /export/cvs/public/CVSROOT/config
- SystemAuth=no를 살려준다.
- LockDir을 살리고, /tmp/public으로 했다.
# mkdir /export/cvs/tmp/public
으로 LockDir은 만들어준다.
# chown cvsd:cvsd /export/cvs/tmp/public

이제 config에서 조금 건드려주면..
# vi /usr/local/etc/cvsd/cvsd.conf
Repos 를 /public으로 설정해준다.
note: vi에서 검색은 /키를 누른 뒤 검색어를 치면 된다. 여태 이걸 몰라서 -_-..;
물론 lockdir도 잘 설정해줘야 하고. 위에서 하긴했다.

repository를 여러 개 만든다면 Repos /xxx 라는 줄을 여러 개 만들면 된다.

configuration파일도 보니까 바꿔줄만한게 그다지 있어보이지 않는다 -0-;;;
위에서 anonymous CVS만들었을 때처럼 비슷하게 하다가,
사용자 적절히 추가해주고 하면 될듯.

데몬 시작은 음..; init.d스크립트는
/usr/local/etc/init.d/cvsd에 제공되어 있다. 이를 /etc/init.d로 복사한다.

그리고 실행을 시켜본다...
# /etc/init.d/cvsd start

음... 집 컴퓨터에서
cvs커맨드라인 클라이언트로 로그인 성공!

cvs ls를 하니까 server does not support ls라고 한다;;
chroot감옥에 ls를 깔아야 할듯.
/export/cvs/bin에 들어가서 /bin/ls를 복사하고,
cvsd-buildroot /export/cvs를 다시 했다.

아.. cvs ls명령은 CVSNT에만 듣는다고 한다.
cvs co -c
라고 해야 하는군 -_-!
(라고 하지만 그래도 안 된다;;)

-------------------------------------------------
더 테스트 해보니 import하는게 안 된다...
왜냐: 쓰기까지 가능한 디렉토리의 소유권은 cvsd:cvsd로 해줘야 하니까.
그리고 CVSROOT디렉토리에 writers에다가 쓰기 가능한 ID목록을 적어준다.
readers에는 읽기전용 id를 적어주고.

------------------
재부팅 시키면 CVS가 안 돌 것이다. 재부팅시 자동으로 돌게 하려면
# /etc/rc2.d에 cvsd 스크립트를 링크시키도록 한다.
그러면 svcs에 legacy run 유형으로 보일 것이다.