Centos7 安装配置svn https访问
1、安装 svn 及 依赖 
Java代码  
- yum  install  mod_dav_svn subversion  
2、创建版本库 
Java代码  
- svnadmin  create  /data/svndata/rd  
不出意外,此时,可以用 svn://协议访问了 
3、安装apache 
Java代码  
- yum -y install httpd  
4、修改第二步创建的版本库配置文件 
Java代码  
- [general]  
- anon-access = none  
- auth-access = write  
- password-db = /data/svndata/passwd.conf  #httpd鉴权使用  
- authz-db = /data/svndata/authz.conf            #svn版本库权限文件  
- realm = rd                                                     #版本库  
- 
force-username-case = none
- 
- [sasl]  
- 
use-sasl = true
- 
min-encryption = 0
- 
max-encryption = 256
5、创建第四步提到的鉴权文件并添加一个用户 
Java代码  
- touch /data/svndata/passwd.conf  
- htpasswd -c /data/svndata/passwd.conf unclecode #添加第二个用户的时候,不要-c,否则会被覆盖  
 /usr/local/apache/bin/htpasswd /usr/local/svn/conf/svn_passwdfile username
 sh脚本实现添加用户
 #!/bin/sh
 if [ ! -n "$1" ];then
 read -p "Enter create user' name:" name
 /usr/local/apache/bin/htpasswd /usr/local/svn/conf/svn_passwdfile $name
 else
 /usr/local/apache/bin/htpasswd /usr/local/svn/conf/svn_passwdfile $1
 fi
6、创建第四步提到的svn版本库权限文件 
Java代码  
- vi /data/svndata/authz.conf   
- [groups]  
- rd= unclecode  
- 
- [rd:/]  
- @rd=rw  
7、http 方式 
Java代码  
- vi /etc/httpd/conf/httpd.conf  
- Listen 8088  
- 
- vi /etc/httpd/conf.d/subversion.conf  或者直接将内容写在httpd.conf中,不新建本文件。
- <Location /svn>  
- DAV svn  
- SVNListParentPath on  
- SVNParentPath /data/svndata  
- AuthType Basic  
- AuthName "Authorization"  
- AuthUserFile /data/svndata/passwd.conf        
- AuthzSVNAccessFile /data/svndata/authz.conf  
- Require valid-user  
- </Location>  
- 
- 启动 apache: systemctl restart httpd.service
 cat /etc/selinux/config      SELINUX=enforcing  to disabled
- 启动svn :e -d -r /data/svndata/  
8、http方式看效果 
Java代码  
- http://127.0.0.1:8088/svn  
- 输入第五步创建的用户名和密码即可  
9、https 方式 
9.1、安装openssl 
Java代码  
- yum  install mod_ssl openssl  
9.2、生成证书 
Java代码  
- cd  /etc/pki/tls/private   
- openssl  genrsa  -out  svn_server.key  1024  
- openssl  req  -new  -key svn_server.key  -out svn_server.csr    
- 在建证书的时候 commonName必须输入,而且在apache的配置文件里要一致,否则同步时报错。
- Httpd.conf 里ServerName svn.ht.com:9091
- 
- cd  /etc/pki/tls/certs    
- openssl  x509  -req  -days  365  -in  /etc/pki/tls/private/svn_server.csr  -signkey  /etc/pki/tls/private/svn_server.key  -out  svn_server.crt  
9.3、配置apache ssl 
Java代码  
- vi /etc/httpd/conf.d/ssl.conf  
- SSLCertificateFile /etc/pki/tls/certs/svn_server.crt  
- SSLCertificateKeyFile /etc/pki/tls/private/svn_server.key  
 如果改443端口呈,记得两处。
- vi /etc/httpd/conf.d/subversion.conf  //没有就新建 或者直接将内容写在httpd.conf中
- <Location /svn>  
- SSLRequireSSL  
- DAV svn  
- SVNListParentPath on  
- SVNParentPath /data/svndata  
- AuthType Basic  
- AuthName "Authorization"  
- AuthUserFile /data/svndata/passwd.conf        
- AuthzSVNAccessFile /data/svndata/authz.conf  
- Require valid-user  
- </Location>  
- 
- 在</Location> 前添加一行   SSLRequireSSL  
Java代码  
- vi /etc/httpd/conf/httpd.conf  
- 最下面加2行  
- LoadModule dav_svn_module modules/mod_dav_svn.so  
- LoadModule authz_svn_module modules/mod_authz_svn.so  
- LoadModule ssl_module  modules/mod_ssl.so  //安装mod_ssl后自动导入的。
- 
10、重启apache 
Java代码  
- systemctl restart httpd.service  
11、https方式看效果 
Java代码  
- https://127.0.0.1:8088/svn  
- 输入第五步创建的用户名和密码即可
 https 访问:将如下三行取消注释即可。
 #Include conf/extra/httpd-ssl.conf
 #SSLRequireSSL
 #LoadModule ssl_module  modules/mod_ssl.so
 安装apache时没有安装mod_ssl的解决办法
 为了使Apache支持https访问,系统需要安有apache、openssl、mod_ssl.so
 1、安装openssl:
 基本上系统都已经安装了,在/usr/bin/openssl下,直接使用openssl命令即可;如果系统未安装,则下载openssl进行安装。
 2、安装mod_ssl.so:
 现在Apache都自带了这个模块,默认是不安装的。安装方式有两种:静态编译和动态加载。
 使用 whereis openssl 命令获取lib和include的路径,
 cd  apache源码路径/modules/ssl
 使用命令(apache_home/bin)apxs  -i -a  -D HAVE_OPENSSL=1 -I/usr/include/openssl/ -L/usr/lib64/openssl/ -c *.c -lcrypto -lssl –ldl
 如果更改过svn端口,在访问时要使用默认的443端口。
 即使指定端口Listen 9091 https访问也不能带端口。没有搞明白为什么。
其它常用脚本
vim pre-commit
#!/bin/sh
REPOS="$1"
TXN="$2"
Make sure that the log message contains some text.
SVNLOOK=/usr/local/svn/bin/svnlook
#$SVNLOOK log -t "$TXN" "$REPOS" | \
grep "[a-zA-Z0-9]" > /dev/null || exit 1
#
Check that the author of this commit has the rights to perform
the commit on the files and directories being modified.
commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1
LOGMSG=$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c
if [ "$LOGMSG" -lt 5 ];#........5.........
then
echo -e "Svn Log Message can 't be empty! you must input at least 5 chars for your commit!." 1>&2
exit 1
fi
All checks passed, so allow the commit.
exit 0
vim post-commit
#!/bin/sh
export LC_CTYPE=en_US.UTF-8
export PATH=$PATH:/usr/local/svn/bin:/home/svn/Net-DAP/hooks:
REPOS="$1"
REV="$2"
#SENDTO="wangyanfu@huatusoft.com"
Send it to these people, calling the script we created above
#/usr/local/svn/script/svnemail_commit.sh "$REPOS" "$REV" "$SENDTO" 
vim pre-revprop-change
#!/bin/sh
exit 0
svn 客户端
配置环境变量 /etc/profile
unset i
unset -f pathmunge
export SVN_HOME=/opt/CollabNet_Subversion/
export PATH=$PATH:$SVN_HOME/bin