博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第 177 章 Subversion
阅读量:6936 次
发布时间:2019-06-27

本文共 11412 字,大约阅读时间需要 38 分钟。

177.1. Invoking the Server

配置开发环境版本控制Subversion

Squid + Subversion 请参考Squid一节

177.1.1. Installing

177.1.1.1. Ubuntu

过程 177.1. subversion

  1. installation

    $ sudo apt-get install subversion
    $ sudo apt-get install subversion
  2. create svn group and svnroot user

    $ sudo groupadd svn$ sudo adduser svnroot --ingroup svn
  3. create repository

    $ svnadmin create /home/svnroot/test
  4. testing

    svnroot@netkiller:~$ svnserve -d --foreground -r /home/svnroot/

    check out

    neo@netkiller:/tmp$ svn list svn://localhost/test

    you may see some file and directory

    neo@netkiller:/tmp$ ls test/.svn/entries  format  prop-base  props  text-base  tmp
  5. configure

    $ vim repositories/conf/svnserve.conf

    [general]anon-access = readauth-access = writepassword-db = passwd# authz-db = authz# realm = My First Repository

    $ vim repositories/conf/passwd

    [users]# harry = harryssecret# sally = sallyssecretneo = chen

    如果不允许匿名用户checkout代码,配置文件这样写anon-access = none

    [general]anon-access = noneauth-access = write
  6. firewall

    $ sudo ufw allow svn

177.1.1.2. CentOS 5

[root@development ~]# yum -y install subversion
177.1.1.2.1. classic Unix-like xinetd daemon
[root@development ~]# vim /etc/xinetd.d/subversionservice subversion{    disable = no    port = 3690    socket_type = stream    protocol = tcp    wait = no    user = svnroot    server = /usr/bin/svnserve    server_args = -i -r /home/svnroot}

firewall

iptables -A INPUT -p tcp -m tcp --sport 3690 -j ACCEPTiptables -A OUTPUT -p tcp -m tcp --dport 3690 -j ACCEPT
177.1.1.2.2. WebDav

install webdav module

[root@development ~]# yum install mod_dav_svn

create directory

mkdir /var/www/repositorysvnadmin create /var/www/repository

subversion.conf

[root@development ~]# vim /etc/httpd/conf.d/subversion.confLoadModule dav_module modules/mod_dav.soLoadModule dav_svn_module modules/mod_dav_svn.soLoadModule authz_svn_module modules/mod_authz_svn.so

vhost.conf

DAV svnSVNPath /var/www/repositoryAuthType BasicAuthName "Subversion Repository"AuthUserFile /etc/subversion/svn-auth-fileRequire valid-user

auth file

[root@development ~]# htpasswd -c /etc/subversion/svn-auth-file my_user_name
177.1.1.2.3. 项目目录结构

–trunk #存放主线

–branches #存放分支,可修改

–tags #存放标记,不可修改

177.1.1.3. CentOS 6

CentOS 6 默认没有安装xinetd

# yum install xinetd# yum install subversion# mkdir -p /opt/svnroot

xinetd 配置

# vim /etc/xinetd.d/svnservice svn{    disable = no    port = 3690    socket_type = stream    protocol = tcp    wait = no    user = svnroot    server = /usr/bin/svnserve    server_args = -i -r /opt/svnroot}# /etc/init.d/xinetd restartStopping xinetd:                                           [FAILED]Starting xinetd:                                           [  OK  ]# tail /var/log/messages | grep xinetdMay  5 18:57:20 SZVM42-C1-02 yum: Installed: 2:xinetd-2.3.14-16.el5.i386May  5 18:59:22 SZVM42-C1-02 xinetd[4558]: Unknown user: svnroot [file=/etc/xinetd.d/svn] [line=8]May  5 18:59:22 SZVM42-C1-02 xinetd[4558]: Error parsing attribute user - DISABLING SERVICE[file=/etc/xinetd.d/svn] [line=8]May  5 18:59:22 SZVM42-C1-02 xinetd[4558]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networkingoptions compiled in.May  5 18:59:22 SZVM42-C1-02 xinetd[4558]: Started working: 0 available services

service 名字必须与 /etc/services中定义的名字相同,否则将不能启动,同时在/var/log/message中会提示如下

May  4 14:33:08 www xinetd[5656]: service/protocol combination not in /etc/services: subversion/tcpMay  4 14:33:08 www xinetd[5656]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.May  4 14:33:08 www xinetd[5656]: Started working: 0 available servicesMay  4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.May  4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.May  4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.May  4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.May  4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.May  4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.May  4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.May  4 14:33:33 www pulseaudio[21913]: sink-input.c: Failed to create sink input: too many inputs per sink.May  4 14:33:41 www xinetd[5656]: Exiting...May  4 14:33:41 www xinetd[5676]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.May  4 14:33:41 www xinetd[5676]: Started working: 1 available service

177.1.2. standalone “daemon” process

svn daemon

$ svnserve --daemon --root /home/svnroot

177.1.2.1. starting subversion for debian/ubuntu

/etc/init.d/subversion for debian/ubuntu

debian:/etc/init.d# cat subversion#!/bin/sh### BEGIN INIT INFO# Provides:          subversion# Required-Start:    $remote_fs $network# Required-Stop:     $remote_fs $network# Should-Start:      fam# Should-Stop:       fam# Default-Start:     2 3 4 5# Default-Stop:      0 1 6# Short-Description: Start the subversion subversion server.### END INIT INFO########################## Author: Neo 
#########################PATH=/sbin:/bin:/usr/sbin:/usr/binDAEMON=/usr/bin/svnserveNAME=subversionDESC="subversion server"PIDFILE=/var/run/$NAME.pidSCRIPTNAME=/etc/init.d/$NAMESVNROOT=/srv/svnrootDAEMON_OPTS="-d -T -r $SVNROOT --pid-file $PIDFILE"test -x $DAEMON || exit 0set -e. /lib/lsb/init-functionscase "$1" in start) log_daemon_msg "Starting $DESC" $NAME echo $DAEMON $DAEMON_OPTS echo `pgrep -o $NAME` > $PIDFILE > /dev/null 2> /dev/null ;; stop) log_daemon_msg "Stopping $DESC" $NAME echo killall `basename $DAEMON` > /dev/null 2> /dev/null rm -rf $PIDFILE ;; restart) $0 stop $0 start ;; status) ps ax | grep $NAME ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|status}" >&2 exit 1 ;;esacexit 0

177.1.2.2. starting subversion daemon script for CentOS/Radhat

#!/bin/bash## /etc/rc.d/init.d/subversion## Starts the Subversion Daemon## chkconfig: 345 90 10## description: Subversion Daemon# processname: svnservesource /etc/rc.d/init.d/functions[ -x /usr/bin/svnserve ] || exit 1### Default variablesSYSCONFIG="/etc/sysconfig/subversion"### Read configuration[ -r "$SYSCONFIG" ] && source "$SYSCONFIG"RETVAL=0USER="svnroot"prog="svnserve"desc="Subversion Daemon"start() {   echo -n $"Starting $desc ($prog): "   daemon --user $USER $prog -d $OPTIONS   RETVAL=$?   [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog   echo}stop() {   echo -n $"Shutting down $desc ($prog): "   killproc $prog   RETVAL=$?   [ $RETVAL -eq 0 ] && success || failure   echo   [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog   return $RETVAL}case "$1" in  start)   start   ;;  stop)   stop   ;;  restart)   stop   start   RETVAL=$?   ;;  condrestart)        [ -e /var/lock/subsys/$prog ] && restart   RETVAL=$?   ;;  *)   echo $"Usage: $0 {start|stop|restart|condrestart}"   RETVAL=1esacexit $RETVAL

/etc/sysconfig/subversion

# Configuration file for the Subversion service## To pass additional options (for instace, -r root of directory to server) to# the svnserve binary at startup, set OPTIONS here.##OPTIONS=OPTIONS="--threads --root /srv/svnroot"

177.1.3. classic Unix-like inetd daemon

/etc/inetd.conf

svn stream tcp nowait svn /usr/bin/svnserve svnserve -i -r /home/svnroot/repositories

xinetd.d

/etc/xinetd.d/subversion

$ sudo apt-get install xinetd$ sudo vim /etc/xinetd.d/subversionservice subversion{    disable = no    port = 3690    socket_type = stream    protocol = tcp    wait = no    user = svnroot    server = /usr/bin/svnserve    server_args = -i -r /home/svnroot}

restart xinetd

$ sudo /etc/init.d/xinetd restart

177.1.4. hooks

$ sudo apt-get install subversion-tools

177.1.4.1. post-commit

install SVN::Notify

perl -MCPAN -e 'install SVN::Notify'
$ sudo cp post-commit.tmpl post-commit$ sudo chown svnroot:svn post-commit$ sudo vim post-commitREPOS="$1"REV="$2"#/usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" openunix@163.com/usr/share/subversion/hook-scripts/commit-email.pl "$1" "$2" --from neo@netkiller.8800.org -h localhost  -s "[SVN]" --diff y openunix@163.com openx@163.com

另一种方法

#!/bin/shREPOS="$1"REV="$2"/usr/local/bin/svnnotify                    \    --repos-path    "$REPOS"                \    --revision      "$REV"                  \    --subject-cx                            \    --with-diff                             \    --handler       HTML::ColorDiff         \    --to            
\ --from
/usr/bin/svnnotify --repos-path "$REPOS" --revision "$REV" \--from neo@netkiller.8800.org --to openunix@163.com --smtp localhost \--handler "HTML::ColorDiff"  --with-diff --charset zh_CN:GB2312  -g zh_CN --svnlook /usr/bin/svnlook --subject-prefix '[SVN]'

如果你没有安装邮件服务器,你可以使用服务商的SMTP如163.com

/usr/bin/svnnotify --repos-path "$REPOS" --revision "$REV" \--from openx@163.com --to openunix@163.com --smtp smtp.163.com  --smtp-user openunix --smtp-pass ****** \--handler "HTML::ColorDiff"  --with-diff --charset UTF-8 --language zh_CN --svnlook /usr/bin/svnlook --subject-prefix '[SVN]'

Charset

REPOS="$1"REV="$2"svnnotify --repos-path "$REPOS" --revision "$REV" \        --subject-cx \        --from neo.chen@example.com \        --to group@example.com,manager@example.com \        --with-diff \        --svnlook /usr/bin/svnlook \        --subject-prefix '[SVN]' \        --charset UTF-8  --language zh_CN

177.1.5. WebDav

Apache SVN

$ sudo apt-get install libapache2-svn
netkiller@neo:/etc/apache2$ sudo apt-get install libapache2-svn

vhost

ServerName svn.netkiller.8800.org DocumentRoot /var/svn
DAV svn SVNPath /var/svn AuthType Basic AuthName "Subversion Repository" AuthUserFile /etc/apache2/svn.passwd
Require valid-user

建立密码文件

建立第一个用户需要加-c参数

netkiller@neo:/etc/apache2$ sudo htpasswd2 -c /etc/apache2/svn.passwd svnNew password:Re-type new password:Adding password for user svn

输入两次密码

建立其他用户

sudo htpasswd2 /etc/apache2/svn.passwd otheruser

177.1.5.1. davfs2 - mount a WebDAV resource as a regular file system

install

$ sudo apt-get install davfs2

mount a webdav to directory

$ sudo mount.davfs https://opensvn.csie.org/netkiller /mnt/davfs/Please enter the username to authenticate with serverhttps://opensvn.csie.org/netkiller or hit enter for none.Username: svnPlease enter the password to authenticate user svn with serverhttps://opensvn.csie.org/netkiller or hit enter for none.Password:mount.davfs: the server certificate is not trusted  issuer:      CSIE.org, CSIE.org, Taipei, Taiwan, TW  subject:     CSIE.org, CSIE.org, Taipei, TW  identity:    *.csie.org  fingerprint: e6:05:eb:fb:69:5d:25:4e:11:3c:83:e8:7c:44:ee:bf:a9:85:a3:64You only should accept this certificate, if you canverify the fingerprint! The server might be fakedor there might be a man-in-the-middle-attack.Accept certificate for this session? [y,N] y

test

$ ls davfs/branches  lost+found  tags  trunk

原文出处:Netkiller 系列 手札

本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

你可能感兴趣的文章
视频直播关键技术:流畅、拥塞和延时追赶
查看>>
OC面向对象—封装
查看>>
NGUI的anchors属性的使用
查看>>
从扩展方法到匿名方法再到LINQ
查看>>
Widows2003开机取消按CTRL+ALT+DEL
查看>>
小程序请求豆瓣API报403解决方法
查看>>
异或运算、与运算、或运算 运用在 多项选择题
查看>>
SQLITE3 使用总结(3~5)(转)
查看>>
WTL学习笔记——树形控件与XML结合
查看>>
An endpoint configuration section for contract "serviceReferenc.service" could not be loaded
查看>>
渗透测试专题二之msf(kali)的攻击教程将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统...
查看>>
IIS应用池"启用32位应用程序"导致Service Unavailable
查看>>
关于linq to sql类线程同步问题
查看>>
DXT纹理压缩
查看>>
POJ 2289(多重匹配+二分)
查看>>
hihocoder1258(水)(2015ACM/ICPC北京站)
查看>>
设计模式之【适配器--Adapter】
查看>>
iOS开发常用输入校验
查看>>
UML类图及依赖,泛化,关联,聚合,组合,实现
查看>>
13. Spring Boot 拦截器
查看>>