cvs 서버 설정하기

송지석의 이미지

아직 작성중인데 일단 먼저 올리고 추가되는 대로 수정하겠습니다

설치 환경은 Fedora linux core 1이고 서버 설정(no X)으로 설치한 상태입니다.

기본적으로 회사 내의 내부 네트웍에서 쓰기 위해 구축했고, 여러 리포지토리를 쓸 수 있게 했습니다. 프로젝트별로 다른 저장소를 사용하게 말이죠.

viewcvs로 웹으로 소스코드와 로그를 볼 수 있게 하였고 개발자들에게 커밋 로그를 볼 수 있게 메일로 보내도록 해놨습니다. (여긴 추가 안하고 링크만 두었습니다.. pynoos님의 팁 참고했고. 그 글의 글타래에 제 내용을 올려놨습니다.)

cvs 설치

# adduser cvs

# su cvs

-저장소 초기화.(만들기)
$ cvs -d /home/cvs/repository1 init
[cvs@team1cvs cvs]$ ls repository1/
CVSROOT

xinetd에 cvs password server 등록. root 권한으로. 
# vi /etc/xinetd.d/cvspserver
--------------------------------------------------------------------------------
# default: on
# description: The cvspsever serves CVS Passowrd Server sessions; it uses \
#          unencrypted username/password pairs for authentication.
service cvspserver
{
        disable         = no
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = cvs
        server          = /usr/bin/cvs
        server_args     = --allow-root=/home/cvs/repository1 pserver
        log_on_failure  += USERID
}
--------------------------------------------------------------------------------

# service xinetd restart
xinetd 를 정지함:                                          [  확인  ]
xinetd (을)를 시작합니다:                                  [  확인  ]

여러 저장소.
만일 repository를 더 하고 싶다면 --allow-root=/repository2  --allow-root=/repository3 식으로 추가.

파이어월(iptables) 설정.
(cvspserver port)
# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2401 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 2401 -j ACCEPT
추가.
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
web서비스를 위해 추가.

(cvs passwd)
스크립트.
http://www.geocrawler.com/archives/3/382/1999/7/0/2488420/
-------------8-<-------cut here: cryptout.pl---------8-<---------------
#!/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}
";
------------->-8-------------------------------->-8---------------

# su cvs

$ ./cryptout.pl mypass
PuBBMZhzYN81E

또는 openssl passwd를 사용해도 된다. 대신에 default로 생성하면 암호가 8자를 넘지 못한다.
$ openssl passwd
Password:
Verifying - Password:
AZOrHnixS49es
긴 암호로 생성하려면 md5 형식으로 만들면 된다.
openssl passwd -1
Password:
Verifying - Password:
$1$570WvBfD$KgTuHgdZLIzr.5w/4GJcr1
(-apr1 MD5-based password algorithm, Apache variant 형식은 시험결과 지원되지 않는다.)

또, htpasswd를 써도 된다.
$ htpasswd -c passwd rommance
New password:
Re-type new password:
Adding password for user rommance
사용자를 추가하려면 (passwd 파일이 있는 경우) -c 옵션(생성)을 빼준다.

$ cd /home/cvs/repository1/CVSROOT/
$ vi passwd
rommance:PuBBMZhzYN81E:cvs
$ chmod o-r passwd

테스트
unix(또는 cygwin)
$ cvs -d :pserver:rommance@localhost:/home/cvs/repository1 login
Logging in to :pserver:rommance@localhost:2401/home/cvs/repository1
CVS password:
$
여기서 setgid에러가 난다면 passwd에 cvs사용자이름:패스워드코드:실행할사용자 로 구성되었는지 확인해본다.
흔히 그냥 rommancePuBBMZhzYN81E 식으로 뒤에 :cvs를 안쓰는 경우가 있다. 이 때는 cvs 권한으로 사용되지 않고 rommance로 사용되므로 권한 에러가 난다.

test]$ cvs -d :pserver:rommance@localhost:/home/cvs/repository1 import -m "test" t1 wooritg v0
(t1 = 이름(repository name). wooritg = vendor-tag v0 = release-tag

tortoise cvs 사용. (윈도우즈)
탐색기로 개발하던 디렉토리 안에 가서, 마우스 오른쪽 버튼 -> CVS -> Make new module
후에 나타난 창에서 CVSROOT를 리포지토리 디렉토리로 정해줌.
pserver를 사용할 것이기 때문에 다음과 같이 됨.
:pserver:rommance@192.168.169.55:/home/cvs/repository1
 ~~~~~~~ ~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
 프로토콜  아이디     서버 IP           리포지토리의 절대경로.
(직접 창에 쳐넣는 것은 아니고 Server, Repository folder, User name 필드를 채워넣으면 됨 )
Module : 모듈 이름 default로 현재 디렉토리(폴더)의 이름임.
OK를 누르면 다음 단계로 넘어가서 끝남.

그러면 아래에 CVS라는 숨김 디렉토리가 생기고 탐색기에서 폴더의 색깔이 변함.
하지만 디렉토리만 더해진 것임. 파일들을 따로 더해야 함.
CVS 디렉토리 빼고 나머지파일들을 전부 선택한 후 마우스 오른쪽 클릭 -> CVS Add
또는 프로젝트 디렉토리를 오른쪽 클릭하고 CVS Add contents
그러면 cvs에 넣을 파일 목록이 나오고 바이너리,텍스트 포맷이 표시됨. 바꿀수 있음.

viewcvs 설치
fedora에서는 useradd시 홈디렉토리의 권한이 타인에게 실행권한이 없게 만들어진다. 오류가 날 수 있으니 주의할 것.
viewcvs가 리포지토리에 접근하기 위해서는 실행권한이 디렉토리가 있어야 한다.
http://viewcvs.sourceforge.net download viewcvs0.9.2
압축 풀고, 루트 권한으로 ./viewcvs-install 실행
기본 디렉토리로 하면 됨.
viewcvs.conf 설정.
-----------8<----------------------8<--------
cvs_roots =
    Prj1 : /home/cvs/repository1,
    Prj2 : /home/cvs/prj2,
    test : /home/cvs/test

# this is the name of the default CVS root.
default_root = Prj2

mime_types_file = /etc/mime.types

address = <a href="mailto:you@some.com">Your name</a>

main_title = Some name

languages = ko, en-us
----------->8---------------------->8--------
httpd.conf 수정.
# vi /etc/httpd/conf/httpd.conf (fedora core1의 경우)
-----------8<----------------------8<--------
ScriptAlias /viewcvs/ "/usr/local/viewcvs-0.9.2/cgi"
<Directory "/usr/local/viewcvs-0.9.2/cgi">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>
----------->8----------------------->8---------
추가.
한글 로그 메시지 잘 보이게. Fedora의 기본 로케일이 UTF8이라 EucKR로 수정.
# vi /etc/httpd/conf/httpd.conf
-----------8<----------------------8<--------
AddDefaultCharset EUC-KR
----------->8---------------------->8--------
httpd restart.
/etc/init.d/httpd restart

enscript 설치.
# apt-get install  enscript
#vi viewcvs.conf
use_enscript = 1

cvsgraph 설치.
http://www.akhphd.au.dk/~bertho/cvsgraph/
# wget http://www.akhphd.au.dk/~bertho/cvsgraph/release/cvsgraph-1.4.0-1.i386.rpm
# rpm -ivh cvsgraph-1.4.0-1.i386.rpm
오류: Failed dependencies:
        libgd.so.1.8 is needed by cvsgraph-1.4.0-1
        libpng.so.2 is needed by cvsgraph-1.4.0-1
->그래서 아직 설치하지 못했음.
libpng와 gd는 깔려있음. 컴파일 해야 할 듯. 그러나 그러기 싫어서 놔둠.

password를 통한 접근제한을 위해.
4) Optional: adding access control:

   In your httpd.conf you can control access to certain modules by adding 
   directives like this:

   <Location "<url to viewcvs.cgi>/<modname_you_wish_to_access_ctl>">
     AllowOverride None
     AuthUserFile /path/to/passwd/file
     AuthName "Client Access"
     AuthType Basic
     require valid-user
   </Location>

   This idea is courtesy to Nick Bauman from http://www.cortexity.com/
   Unfortunately some additional tweaking is necessary to avoid that
   people "sneak in" with URLs like
   	http://<server_name>/viewcvs/*checkout*/<module_name>
   	http://<server_name>/viewcvs/~checkout~/<module_name>
   and get access to seeing the file contents. :-(  At the moment
   the only solution seems to be to create two additional duplicates 
   of the location directives abvoce with paths modified to 
   <Location "<url to viewcvs.cgi>/*checkout*/<modname_you_wish_to_access_ctl>">
   and
   <Location "<url to viewcvs.cgi>/~checkout~/<modname_you_wish_to_access_ctl>">

여기 참고.

http://bbs.kldp.org/viewtopic.php?t=24058
CVS Log Report

http://wiki.kldp.org/wiki.php/KLDPNetCVS-HOWTO
CVS 커밋 메시지 포스팅 스크립트.
Forums: 
youngminny의 이미지

많은 도움이 되었습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.