环境
centos 7.9
SVN安装方式一:yum
1.1 http服务
至今还没有搞定网页版,网页版需要搭建apache http服务。遇到如下问题:
centos - svn: Could not open the requested SVN filesystem - Stack Overflow
在试了加777权限,加apache属组无果后,苦战了很久才发现是我的selinux没有关闭。
setenforce 0 #临时关闭
vim /etc/sysconfig/selinux,SELINUX=disabled,然后保存退出。 #永久关闭
1.2 安装subversion服务
使用yum安装:
yum install subversion |
1.3 安装sasl
SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。
SASL是一个胶合库,通过这个库把应用层与形式多样的认证系统整合在一起。这有点类似于PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。在这里Memcached就是上面提到的应用层,具体的认证交给SASL库,SASL会根据相应的认证机制来完成验证功能。用于后续ldap认证。
yum -y install *sasl* |
二、SVN安装方式二:源码编译(用于离线安装)
网上有不少总结:https://www.cnblogs.com/wizzhangquan/p/4564089.html
https://www.cnblogs.com/hiyong/p/15890583.html
2.1 源码编译svn
所用到的包和版本:(一些基础工具也是要的,比如gcc,zlib等)
apr | 1.4.8 | |
apr-util | 1.5.2 | |
sqlite | 3.7.17 | |
subversion | 1.8.0 |
svn,apr,apr-util下载地址:
Index of /dist/subversion
https://archive.apache.org/dist/apr/
1)编译安装apr 1.4.8
wget https://archive.apache.org/dist/apr/apr-1.4.8.tar.gz tar zxf apr-1.4.8.tar.gz cd apr-1.4.8 ./configure --prefix=/tools/misc/svn/apr-1.4.8 make && make install |
如果报错:rm: cannot remove 'libtoolT': No such file or directory
解决方案: configure文件,注释掉 $RM "$cfgfile" ,然后重新编译安装。
2) 编译安装apr-util 1.5.2
wget https://archive.apache.org/dist/apr/apr-util-1.5.2.tar.gz tar zxf apr-util-1.5.2.tar.gz cd apr-util-1.5.2 ./configure --prefix=/tools/misc/svn/apr-util-1.5.2 --with-apr=/tools/misc/svn/apr-1.4.8 make && make install |
3) 编译安装sqlite3.7.17
由于当前centos机器下默认安装的是sqlite3.7.17版本sqlite3,所以在编译subversion需要指定该版本的sqlite3,如果指定了别的版本,运行时会报如下错误:
解决方法就是保持运行svn服务的机器上的sqlite3跟编译时是sqlite3保持一致。
也可以在运行svn的所有机器上都升级sqlite3并添加环境变量
export LD_LIBRARY_PATH=/tools/misc/sqlite3/lib |
由于历史版本sqlite3没有找到源码包,所以到github上下载的源码,然后切到3.7.17版本进行编译安装。
git clone GitHub - sqlite/sqlite: Official Git mirror of the SQLite source tree cd sqlite && git checkout version-3.7.17 ./configure --prefix=/tools/misc/svn/sqlite3.7.17 make && make install |
4) 编译安装subversion 1.8.0
wget https://archive.apache.org/dist/subversion/subversion-1.8.0.tar.gz tar zxf subversion-1.8.0.tar.gz cd subversion-1.8.0 ./configure --prefix=/tools/misc/svn --with-apr=/tools/misc/svn/apr-1.4.8 --with-apr-util=/tools/misc/svn/apr-util-1.5.2 --with-sqlite=/tools/misc/svn/sqlite3.7.17 --with-lz4=internal --with-utf8proc=internal make && make install |
这样svn编译安装完成,将安装好的/tools/misc/svn拷贝到目标机器,并将/tools/misc/svn/bin加到当前path生效。
vi /etc/profile export PATH=/tools/misc/svn/bin:$PATH source /etc/profile |
2.2 源码编译sasl
版本:2.1.26 (Releases · cyrusimap/cyrus-sasl · GitHub )
Cyrus-SASL 安装-CSDN博客
wget https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-2.1.26/cyrus-sasl-2.1.26.tar.gz tar zxf cyrus-sasl-2.1.26.tar.gz cd cyrus-sasl-2.1.26 ./configure --prefix=/tools/misc/cyrus-sasl make && make install |
三、SVN启动及配置
3.1 创建仓库
cd /var/www svnadmin create Demo |
3.2 启动svn服务
svnserve -d -r /var/www/svn --listen-port=3690 --log-file /var/www/svn.log & |
3.3 配置LDAP
- 修改认证方式
vi /etc/sysconfig/saslauthd 将MECH=pam 修改成MECH=ldap |
- 创建/etc/saslauthd.conf 文件,写入以下内容
vi /etc/saslauthd.conf
ldap_servers: ldap://xxx.xxx.xx:389/ ldap_bind_dn: admin@company.com ldap_password: xxxxx ldap_search_base: dc=xxx,dc=com ldap_filter: sAMAccountName=%U |
注意如果用的是微软的Active Directory,应配置ldap_filter: sAMAccountName=%U
如果是openldap,则用:ldap_filter: uid=%U
- 创建/etc/sasl2/svn.conf文件,写入以下内容
vim /etc/sasl2/svn.conf
pwcheck_method: saslauthd mech_list: PLAIN LOGIN |
- 重启saslauthd服务
systemctl restart saslauthd |
- 测试ldap认证是否配置成功
xioali是ldap用户名,123是密码。可以看到ldap配置没有问题
testsaslauthd -uxiaoli -p123 0: OK "Success." |
- 修改SVN svnserve.conf 配置文件
我的SVN仓库地址为/var/www/svn/Demo,所以服务器配置文件路径为/var/www/svn/Demo/conf/svnserve.conf 启用如下配置 vi /var/www/svn/Demo/conf/svnserve.conf use-sasl = true 注意:使用LDAP认证后,passwd就不再生效了。但是账户权限还是需要在authz中设置。LDAP Server只是验证用户在ldap server上是否存在,但不进行权限限制 |
- 修改完svn 配置后需要重启svn
1.杀死svn 进程号 ps -ef|grep svnserve kill -9 进程号 2.启动svn svnserve -d -r /var/www/svn/ --listen-port=3690 --log-file /var/www/svn.log & |
3.4 配置SVN仓库权限
cat /var/www/svn/Demo/conf/authz [groups] repo = li.xinliang,zhao.bb rrepo = li.aa [repo:/] @repo = rw @rrepo = r 上述权限表面 li.xinliang,zhao.bb 拥有 rw 读写权限;li.aa 用户拥有只读 r 权限 版本库目录格式: [<版本库>:/项目/目录] @<用户组> = <权限> <用户名> = <权限> |
svnserve.conf配置
anon-access = read #匿名用户可读 auth-access = write #授权用户可写 password-db = passwd #使用哪个文件作为账号文件 authz-db = authz #使用哪个文件作为权限文件 realm = /var/www/svn #认证空间名,版本库所在目录 |
3.5 linux checkout命令
svn co svn://xx.xx.xx.xx/Demo --username test |