LINUX環境構築/CentOS4.0/subversion

Last-modified: 2007-05-31 (木) 12:47:59

subversionのインストール

yum install subversion

設定

sudo mkdir -p /var/svn/repos/
cd /var/svn
sudo chmod 1777 repos
ls -ld repos
drwxrwxrwt  2 root root 4096  5月 21 10:41 repos/

リポジトリ

作成

svnadmin create /var/svn/repos/hoge

始めのimport

mkdir -p /tmp/sample
mkdir -p /tmp/sample/trunk
mkdir -p /tmp/sample/branches
mkdir -p /tmp/sample/tags
(*)/tmp/sample/trunk下に、sampleプロジェクトのファイル群を配置します。
svn import /tmp/sample file://localhost/home/svn/repos/sample/trunk -m "first import"

チェックアウト

svn co file://localhost/var/svn/repos/tmpmodule/trunk tmpmodule <==trunkの下をtmpmoduleというディレクトリ名の下にチェックアウトする
A    tmpmodule/tmp.c
A    tmpmodule/Makefile
リビジョン 1 をチェックアウトしました。

ステータス

svn status

コミット

svn commit -m "hogehoge "

エキスポート

svn export file://localhost/var/svn/repos/tmpmodule/trunk tmpmodule
<==タグは展開しない。よってコミットできない。

svnserve

起動

svnserve -d -r (ルートに見せるディレクトリ)

svnserve -d -r /var/svn/repos

/etc/*/rc.local もしくは
/etc/init.d/svnserve を作成し
/etc/rc.d/rc[3-5].d/svnserveのリンクにする

設定

genenalの項目内容
anon-access匿名ユーザのアクセス
auth-access認証済ユーザのアクセス
password-dbユーザ名とパスワードのリスト
***-accessの指定値内容
noneいかなるタイプのアクセスも不許可
readそのリポジトリに対するreadアクセスのみ許可
writeリポジトリに対するread/writeアクセス許可

password-db

[users]
hoge = hogehoge <=== ユーザ名 "hoge" のパスワードは"hogehoge"

サーバ

  • 最初にimportで認証したユーザでDB登録されると
    その後、password-dbからそのユーザを外した場合、
    dbを更新できなくなってしまうので注意

スタンドアローン

svnserve 起動/停止スクリプト

svnユーザで起動する場合

始めの3行のコメントはchkconfig用。詳しくはこちら

pukiwiki_cat /etc/init.d/svnserve
#! /bin/sh
# chkconfig: 345 98 20
# description: Subversion server
# processname: svnserve
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/svnserve
DAEMON_OPTS="-d -r /var/svn/repos"
NAME=svnserve
DESC="Subversion server"
USER=nsxi
PIDFILE=/var/run/$NAME.pid
test -x $DAEMON || exit 0
#. /lib/lsb/init-functions
. /etc/rc.d/init.d/functions
start_puppet() {
#       start-stop-daemon --start --quiet --pidfile $PIDFILE \
#               --user $USER --group $USER --exec $DAEMON -- $DAEMON_OPTS
        sudo -u $USER $DAEMON $DAEMON_OPTS 2>/dev/null
        if [ "$?" -eq 0 ]
        then
                pidof $DAEMON > $PIDFILE
               return 0
        fi
       return 1
}
stop_puppet() {
#       start-stop-daemon --stop  --quiet --pidfile $PIDFILE \
#               --user $USER --group $USER --signal 9 --exec $DAEMON
        kill -9 `cat $PIDFILE 2>/dev/null` 2>/dev/null
       [ "$?" -ne 0 ] && return 1
        rm -f $PIDFILE
       return 0
}
status_puppet() {
       killall -0 $DAEMON 2>/dev/null
       return "$?"
}
case "$1" in
    start)
#        log_begin_msg "Starting $DESC"
       echo -n $"Starting ${DESC}: "
        start_puppet
       RETVAL=$?
       [ $RETVAL -eq 0 ] && success || failure
#        log_end_msg 0
       echo
        ;;
    stop)
#        log_begin_msg "Stopping $DESC"
       echo -n $"Shutting down ${DESC}: "
        stop_puppet
       RETVAL=$?
       [ $RETVAL -eq 0 ] && success || failure
#        log_end_msg 0
       echo
        ;;
  restart|force-reload)
#        log_begin_msg "Restarting $DESC"
       echo -n $"Restarting ${DESC}: "
        stop_puppet
       if [ $? -ne 0 ]; then
               failure ; echo ; exit 0
       fi
        sleep 1
        start_puppet
       [ $? -eq 0 ] && success || failure
#        log_end_msg 0
       echo
        ;;
  status)
       status_puppet
       [ $? -eq 0 ] && echo "$DESC is alive" || echo "$DESC is dead"
       echo
       ;;
  *)
        echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2
        exit 1
        ;;
esac
exit 0

xinetd経由

servicesファイル

$ cat /etc/services |grep svn
svnserve        3690/tcp                        # Subversion <== 「svn」を「svnserve」に変える
svnserve        3690/udp                        # Subversion

/etc/xinetd.d/svnserve

$ cat /etc/xinetd.d/svnserve
# default: on
# description: subversion server.
service svnserve
{
       disable         = no
       socket_type     = stream
       protocol        = tcp
       user            = root
       wait            = no
       server          = /usr/bin/svnserve
       server_args     = -i -r /var/svn/repos
       log_on_failure  += HOST USERID
       only_from       = 192.168.0.0/24 127.0.0.1 <== クライアント制限する場合
}

chkconfig

$ chkconfig svnserve off
$ chkconfig --list |grep svn
svnserve        0:off   1:off   2:off   3:off   4:off   5:off   6:off <=== 全部offとなっていること
       svnserve:       on   <==xinetdの方はonになっていること

xinetdのリスタート

$ /etc/init.d/xinetd restart