CentOS7 环境下yum、源码安装SVN

        虚拟机安装实例走起说明,还是依旧在虚拟机里面测试,该版本如下:

        Linux:CentOS Linux release 7.4.1708 (Core)

        PHP:PHP 7.2.1

        mysql:mysql  Ver 15.1 Distrib 10.2.11-MariaDB

        nginx:nginx/1.10.2

        

        

        SVN在服务器中地址为:/var/svn

        NGINX在服务器中位置为:/usr/local/nginx

        SVN服务器/nginx服务器:192.168.126.158

        

        检查已安装版本

        检查是否安装了低版本的SVN,如果没有其他显示。说明没有安装过。

[root@localhost ~]# rpm -qa subversion

        卸载旧版本SVN:

[root@localhost ~]# yum remove subversion

        安装SVN:

[root@localhost ~]# yum install subversion

        输入rpm -ql subversion查看安装位置

[root@localhost ~]# rpm -ql subversion

        可以看到 svn在bin目录下生成了几个二进制文件。


        验证安装,检验已经安装的SVN版本信息,如果成功会输出版本号

[root@bogon var]# /usr/bin/svnversion --version
svnversion,版本 1.7.14 (r1542130)
   编译于 Aug 23 2017,20:43:38
版权所有 (C) 2013 Apache 软件基金会。
此软件包含了许多人的贡献,请查看文件 NOTICE 以获得更多信息。
Subversion 是开放源代码软件,请参阅 http://subversion.apache.org/ 站点。

[root@localhost ~]# svnserve --version
svnserve,版本 1.7.14 (r1542130)
   编译于 Aug 23 2017,20:43:38

版权所有 (C) 2013 Apache 软件基金会。
此软件包含了许多人的贡献,请查看文件 NOTICE 以获得更多信息。
Subversion 是开放源代码软件,请参阅 http://subversion.apache.org/ 站点。

下列版本库后端(FS) 模块可用: 

* fs_base : 模块只能操作BDB版本库。
* fs_fs : 模块与文本文件(FSFS)版本库一起工作。

Cyrus SASL 认证可用。


        1、建立版本库

        创建svn数据目录(subversion默认是把/var/svn作为数据根目录的,开机启动默认也是从这里)

[root@localhost ~]# mkdir -p /var/svn
[root@localhost ~]# svnadmin create /var/svn/MyFirstSvn
[root@localhost ~]# cd /var/svn/
[root@localhost svn]# ls
MyFirstSvn
[root@localhost svn]# cd MyFirstSvn/
[root@localhost MyFirstSvn]# ls -al
总用量 8
drwxr-xr-x 6 root root  86 1月  22 10:52 .
drwxr-xr-x 3 root root  24 1月  22 10:52 ..
drwxr-xr-x 2 root root  54 1月  22 10:52 conf
drwxr-sr-x 6 root root 233 1月  22 10:52 db
-r--r--r-- 1 root root   2 1月  22 10:52 format
drwxr-xr-x 2 root root 231 1月  22 10:52 hooks
drwxr-xr-x 2 root root  41 1月  22 10:52 locks
-rw-r--r-- 1 root root 229 1月  22 10:52 README.txt


[root@localhost ~]# rm -rf /var/svn/MyFirstSvn               #删除版本库

        执行上面的命令后,自动建立MyFirstSvn 库,查看/var/svn/MyFirstSvn 文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。

冷暖自知一抹茶ck


        2、配置svn配置文件:

        1)、进入上面生成的文件夹conf下,进行配置:

[root@localhost MyFirstSvn]# cd /var/svn/MyFirstSvn/conf
[root@localhost conf]# ls
authz  passwd  svnserve.conf

#authz文件是权限控制文件、passwd是帐号密码文件、svnserve.conf SVN服务配置文件
authz  passwd  svnserve.conf

        2)、用户密码passwd配置:

[root@localhost conf]# vi passwd

##修改passwd为以下内容:#在[users]块中添加用户和密码,格式:帐号=密码

[users]
# harry = harryssecret
# sally = sallyssecret
cuikai = 123456

        3)、权限控制authz配置(目的是设置哪些用户可以访问哪些目录,向authz文件追加以下内容):

        #设置[/]代表根目录下所有的资源

[/]
cuikai = rw






网上其他用法:
[groups]
admin = admin          #admin为用户组,等号之后的admin为用户
test = fuhd,test

[wangwa:/]              #表示根目录(/var/svn/wangwa),wangwa: 对应前面配置的realm = wangwa
@admin = rw            #表示admin组对根目录有读写权限,r为读,w为写

[wangwa:/test]          #表示test目录(/var/svn/wangwa/test)
@test = rw              #表示test组对test目录有读写权限


版本库目录格式:            [<版本库>:/项目/目录]
            @<用户组名> = <权限>
            <用户名> = <权限>
            其中,方框号内部分可以有多种写法:
            /,表示根目录及以下。根目录是svnserve启动时指定的,我们指定/opt/svndata。这样,/就是表示对全部版本库设置权限。
            repos1:/,表示对版本库1设置权限
            repos2:/abc, ,表示对版本库2中的abc项目设置权限
            repos2:/abc/aaa, ,表示对版本库2中的abc项目的aaa目录设置权限
            权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。

       

        3)、服务svnserve.conf配置:

[root@localhost conf]# vi svnserve.conf

追加以下内容:
[general]
#匿名访问的权限,可以是read,write,none,默认为read
anon-access=none
#使授权用户有写权限
auth-access=write
#密码数据库的路径
password-db=passwd
#访问控制文件
authz-db=authz
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm=MyFirstSvn

        4)、关闭防火墙、或者配置防火墙端口

配置防火墙端口:
首先要明确CentOS7的默认防火墙为firewallD。subversion的默认端口为3690,如果没有打开会报错:
[root@localhost conf]# firewall-cmd --zone=public --add-port=3690/tcp
success
[root@localhost conf]# firewall-cmd --reload
success

        5)、启动,查看和停止SVN服务

        启动SVN

        # -d : 守护进程 -r : svn数据根目录

[root@localhost conf]# svnserve -dr /var/svn

        查看SVN服务:#默认端口为:3690

[root@localhost conf]# ps aux|grep svnserve            
root       5519  0.0  0.1 197628  1032 ?        Ss   13:49   0:00 svnserve -dr /var/svn
root       5521  0.0  0.0 112676   984 pts/1    S+   13:49   0:00 grep --color=auto svnserve
[root@localhost conf]#

        检测SVN 端口

[root@localhost conf]# netstat -ln |grep 3690
tcp        0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN

        停止重启SVN

[root@localhost conf]# killall svnserve                    #停止,杀死SVN服务器
[root@localhost conf]# svnserve -dr /var/svn/MyFirstSvn/           #启动
svnserve: E000098: 不能绑定服务器套接字: 地址已在使用
[root@localhost conf]# ps -aux | grep svnserve
root       4787  0.0  0.1 197132  1024 ?        Ss   22:24   0:00 svnserve -dr /var/svn/MyFirstSvn/
root       4806  0.0  0.0 112660   976 pts/0    S+   22:25   0:00 grep --color=auto svnserve
[root@localhost conf]# kill 4787
[root@localhost conf]# ps -aux | grep svnserve
root       4808  0.0  0.0 112660   976 pts/0    S+   22:26   0:00 grep --color=auto svnserve
[root@localhost conf]# kill 4808
-bash: kill: (4808) - 没有那个进程
[root@localhost conf]# systemctl start svnserve.service
[root@localhost conf]# systemctl status svnserve.service
● svnserve.service - Subversion protocol daemon
   Loaded: loaded (/usr/lib/systemd/system/svnserve.service; enabled; vendor preset: disabled)
   Active: active (running) since 一 2017-07-10 22:26:21 CST; 8s ago
  Process: 4815 ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 4816 (svnserve)
   CGroup: /system.slice/svnserve.service
           └─4816 /usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /var/svn
7月 10 22:26:21 localhost systemd[1]: Starting Subversion protocol daemon...
7月 10 22:26:21 localhost svnserve[4815]: DIGEST-MD5 common mech free
7月 10 22:26:21 localhost systemd[1]: Started Subversion protocol daemon.

[root@localhost conf]# systemctl start svnserve.service        #启动
[root@localhost conf]# systemctl status svnserve.service       #查看状态 
[root@localhost conf]# systemctl stop svnserve.service        #停止
[root@localhost conf]# systemctl restart svnserve.service       #重启
[root@localhost conf]# systemctl enable svnserve.service       #设置开机启动


        6)、怎么自动同步svn的代码到项目目录呢?

        利用SVN的POST-COMMIT钩子自动部署代码 我们在开发的过程将代码提交到SVN后使用SVN的hook,通过post-commit脚本,在目 标文件夹根下执行svn update操作,将更新内容同步到测试环境,这样开发调试非常方便。

[root@bogon MyFirstSvn]# cd hooks/
[root@bogon hooks]# cp -f post-commit.tmpl post-commit
[root@bogon hooks]# vi post-commit
删除除了第一行的#!/bin/sh的代码,编辑,/usr/local/nginx/html/ck2.com  为我的项目目录

#!/bin/sh

/usr/bin/svn update --username cuikai --password 123456  /usr/local/nginx/html/ck2.com

[root@bogon hooks]#  chmod +x post-commit
[root@bogon hooks]#  /usr/bin/svn checkout svn://192.168.216.158/MyFirstSvn  /usr/local/nginx/html/www.ck2.com
认证领域: <svn://192.168.216.158:3690> MyFristSvn
“root”的密码: 
认证领域: <svn://192.168.216.158:3690> MyFristSvn
用户名: cuikai
“cuikai”的密码: 

-----------------------------------------------------------------------
注意!  你的密码,对于认证域:

   <svn://192.168.216.158:3690> MyFristSvn

只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。

你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
A    /usr/local/nginx/html/www.ck2.com/index.php
A    /usr/local/nginx/html/www.ck2.com/1.txt
取出版本 2。

        

        至此,svn已经配置成功!

        怎么测试呢?在虚拟机的本机里面利用已经搭好的lnmp,测试即可,修改本机hostC:Windows\system32\drivers\etc\hosts,添加

192.168.216.158  www.ck2.com

        本机通过客户端TortoriseSVN checkout下来代码,


        在本机编辑代码,index.php

<?php
echo 'My Frist Svn';

        在添加一个1.txt文件,(后续我们可以编辑更改1.txt内容查看,svn是否会自动更新代码到项目目录)

111

2223

        svn提交代码,查看项目目录代码

冷暖自知一抹茶ck


        最后在本机访问虚拟机(注意关闭防火墙),查看代码效果:

        冷暖自知一抹茶ck


        客户端测试:

        客户端可以通过TortoriseSVN测试。

        这时候可能会防火墙问题。如果是防火墙问题,会提示无法连接。

        用systemctl检查服务器的防火墙配置:

[root@localhost conf]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: dhcpv6-client http https ssh telnet
  ports: 3690/tcp
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

可以看到,没有telnet服务和3690端口。增加telnet服务器和3690端口:
[root@localhost conf]# firewall-cmd --permanent --add-service=telnet
[root@localhost conf]# firewall-cmd --permanent --add-port=3690/tcp



       


        经常有新手配置基于svnserve的subversion服务器后,在客户端访问subversion版本库时出现这个错误:

svnserve.conf:12: Option expected

为什么会出现这个错误呢,就是因为subversion读取配置文件svnserve.conf时,无法识别有前置空格的配置文件,如
### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository. (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)

### Visit http://subversion.tigris.org/ for more information.

[general]
### These options control access to the repository for unauthenticated
### and authenticated users.  Valid values are "write", "read",
### and "none".  The sample settings below are the defaults.
anon-access = read

   auth-access = write

像上面的配置文件中,anon-access是顶行的,没问题,而auth-access就存在前置空格,会导致这个错误。
要避免出现这个错误,应该在去掉这些行前的#时,也要顺手去掉前面的空格,这一点,在郑新星老早的文章《Subversion之路--实现精细的目录访问权限控制》就提到过。


注意:
1:/home/svn就是SVN在服务器上绝对路径。
2:防火墙配置    /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Jan 11 05:23:43 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [20:13480]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3690 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Jan 11 05:23:43 2017


以上配置完成后。重启NGINX和防火墙已经SVN

客户端:在window客户端的host文件中配置SVN地址.
C:Windows\system32\drivers\etc\hosts
添加:
192.168.216.158  www.ck2.com




        源码编译安装SVN:

        subversion官网:http://subversion.apache.org/download.cgi?update=201708081800

[root@localhost ~]# wget -O subversion-1.9.7.tar.gz  http://mirrors.tuna.tsinghua.edu.cn/apache/subversion/subversion-1.9.7.tar.gz

[root@localhost ~]# mv subversion-1.9.7.tar.gz /usr/local/src
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# tar -zxvf subversion-1.9.7.tar.gz

        安装svn需要的依赖软件包:
        APR 1.6.3、APR-util 1.6.1 两个依赖官网地址:http://apr.apache.org/download.cgi 

[root@localhost ~]# wget -O apr-1.6.3.tar.gz  http://mirrors.hust.edu.cn/apache//apr/apr-1.6.3.tar.gz
[root@localhost ~]# wget -O apr-util-1.6.1.tar.gz  http://mirrors.hust.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
[root@localhost ~]# mv apr-1.6.3.tar.gz /usr/local/src/
[root@localhost ~]# mv apr-util-1.6.1.tar.gz /usr/local/src/
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# tar -zxvf apr-1.6.3.tar.gz
[root@localhost src]# tar -zxvf apr-util-1.6.1.tar.gz

[root@localhost src]# cd apr-1.6.3/
[root@localhost apr-1.6.3]# ./configure --prefix=/usr/local/apr
注意:如果 rm: cannot remove 'libtoolT': No such file or directory 报错
         编辑 configure文件,查找 $RM "$cfgfile" 这个地方,用#注释掉,从新编译即可
         [root@localhost apr-1.6.3]# vi configure
[root@localhost apr-1.6.3]# make
[root@localhost apr-1.6.3]# make install


[root@localhost apr-1.6.3]# cd ..
[root@localhost src]# cd apr-util-1.6.1/
[root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
注意:如果 xml/apr_xml.c:35:19: 致命错误:expat.h:没有那个文件或目录  报错
         [root@localhost apr-util-1.6.1]# yum install expat-devel #安装expat库试试
[root@localhost apr-util-1.6.1]# make
[root@localhost apr-util-1.6.1]# make install

[root@localhost apr-util-1.6.1]# cd ..
[root@localhost src]# cd subversion-1.9.7/

[root@localhost subversion-1.9.7]# mkdir sqlite-amalgamation
[root@localhost ~]# wget  http://www.sqlite.org/2018/sqlite-autoconf-3220000.tar.gz
[root@localhost ~]# tar -zxvf sqlite-autoconf-3220000.tar.gz
[root@localhost ~]# mv sqlite-autoconf-3220000 /usr/local/src/sqlite
[root@localhost ~]# cd /usr/local/src/sqlite/
[root@localhost sqlite]# cp sqlite3.c /usr/local/src/subversion-1.9.7/sqlite-amalgamation/
[root@localhost sqlite]# cp sqlite3ext.h /usr/local/src/subversion-1.9.7/sqlite-amalgamation/


[root@localhost subversion-1.9.7]# ./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
[root@localhost subversion-1.9.7]# make
[root@localhost subversion-1.9.7]# make install

[root@localhost subversion-1.9.7]# vi /etc/profile            #添加系统环境变量,添加到最后一行
追加  :/usr/local/svn/bin
[root@localhost subversion-1.9.7]# source /etc/profile    #使配置立刻生效
[root@localhost subversion-1.9.7]# svnserve --version

      

建立版本库
(可建立多个,新建库后以下各项都需重新配置。注意区别安装目录与版本库目录,以下讲的都是版本库目录)
[root@localhost subversion-1.9.7]# mkdir -p /var/svn/MyFristSvn
[root@localhost subversion-1.9.7]# chmod -R 775 /var/svn/MyFristSvn
[root@localhost subversion-1.9.7]# svnadmin create /var/svn/MyFristSvn
[root@localhost subversion-1.9.7]# cd /var/svn/MyFristSvn
[root@localhost conf]# vi authz
[/]
admin=rw
[root@localhost conf]# vi passwd
[users]
# harry = harryssecret
# sally = sallyssecret
admin = 123456
[root@localhost conf]# vi svnserve.conf
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
groups-db = groups
realm = MyFirstSvn

[root@localhost conf]# svnserve -d -r /var/svn/
[root@localhost conf]# ps -aux |grep svn
root      67406  0.0  0.0 146784   864 ?        Ss   12:47   0:00 svnserve -d -r /var/svn/
root      67408  0.0  0.0 112676   980 pts/1    S+   12:47   0:00 grep --color=auto svn


冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论