ubuntu18 安装SVN服务器

2019.03.20

我想在ubuntu下安装一个SVN服务器。同样,没有一个资料没问题的,通过对比,总结,尝试,终于找到对的方法。

老规矩,#顶格或前面没有#的是要执行的命令,#****是要手工操作的步骤,其他是注释

###############################################################################################

#!/bin/bash

    cur_user=${USER}
    temp_file_path=/home/${cur_user}/temp_file
    svn_root=/home/svn

    project1=yf
    project2=sc

    user_1=h 
    user_2=x
    user_3=y
    user_4=l

    groups_1=f1
    groups_2=f2
    groups_3=f3
    groups_4=f4

    mkdir -vp ${temp_file_path}

    # https://www.cnblogs.com/lovechen/p/5716213.html  《SVN服务器在Ubuntu16.04下搭建多版本库详细教程》
    # https://blog.csdn.net/sm_wang/article/details/78656120  《Ubuntu16.04 搭建svn》
    # https://blog.csdn.net/zengsange/article/details/80618301  《Ubuntu 搭建SVN服务器(SVN Server)》

    #1.安装svn,创建svn主目录,要改成当前用户,否则svnadmin执行有问题。
#   sudo apt-get install subversion
    # sudo apt-get remove --purge subversion  # --purge这个参数的意思清除干净,配置文件等都删除掉。
#   sudo mkdir -vp ${svn_root}
#   sudo chown -R ${cur_user}:${cur_user} ${svn_root}
#   svnserve --version  #安装好之后 查看是否安装成功

    #2.创建版本库 注意${project1}和${project2}都是独立的版本库啊。可以用这个方法创建多个,后面重新启动SVN就可以了。
    #创建第一个项目${project1}
#   mkdir -vp ${svn_root}/${project1}
#   svnadmin create ${svn_root}/${project1}

    #创建第一个项目${project2}
#   mkdir -vp ${svn_root}/${project2}
#   svnadmin create ${svn_root}/${project2}

    #3.配置
#   echo "
        # 设置\${svn_root}/\${project1}项目使用哪些权限文件。
        # 打开${svn_root}/${project1}/conf/svnserve.conf,按照下面的方法设置:(去掉前面的#,并且顶格,不然可能会报错)
        # 匿名用户可读
        # anon-access = read(可改成none,即不可读)
        # 权限用户可写
        # auth-access = write
        # 密码文件为passwd
        # password-db = passwd
        # 权限文件为authz
        # authz-db = authz
        # 
        # 还可以这样:password-db = ../../passwd  authz-db = ../../authz  就是说passwd和authz,不是非要在\${svn_root}/\${project1}/conf下,可以在其他位置。上面的方法指定的位置就是在\${svn_root}下。
        # 在vim的命令模式输入:n,进入${svn_root}/${project1}/conf/svnserve.conf文件
    # " > ${temp_file_path}/temp_file.txt  ; vim ${temp_file_path}/temp_file.txt ${svn_root}/${project1}/conf/svnserve.conf

#   echo "
        # 给\${svn_root}/\${project1}项目添加用户和密码
        # 打开${svn_root}/${project1}/conf/passwd,按照下面的方法设置: 记得“=”前后的空格
        # [users]
        # # harry = harryssecret
        # # sally = sallyssecret
        # ${user_1} = 123456            #设定用户${user_1}的密码是123456,是的没错,密码是明文的。  这样就给SVN添加一个用户,同时也设置了密码。
        # ${user_2} = 123456
        # ${user_3} = 123456
        # ${user_4} = 123456
        # 在vim的命令模式输入:n,进入${svn_root}/${project1}/conf/passwd文件
    # " > ${temp_file_path}/temp_file.txt  ; vim ${temp_file_path}/temp_file.txt ${svn_root}/${project1}/conf/passwd

#   echo "
        # 定义权限组,并且给每个文件夹分配权限组。
        # 打开${svn_root}/${project1}/conf/authz,按照下面的方法设置:
        # [groups]
    # ${groups_1} = ${user_1}                 ##(1)定义一个权限组,同时指定在passwd定义的哪些用户属于这个组。如果指定多个用户,用','隔开。
        # ${groups_2} = ${user_1},${user_2}
        # ${groups_3} = ${user_3},${user_4}
        # ${groups_4} = ${user_1},${user_2},${user_3},${user_4}

        ##[svnroot:/]                              ##(2)下面sudo svnserve -d -r ${svn_root}命令,指定了svnroot的位置。             这里有一个疑问:svnroot的路径是${svn_root},库在${svn_root}/${project1},即${svn_root}下面,而authz和passwd都在${svn_root}/${project1}/conf,确定passwd的用户能访问在${svn_root}/${project1}上面的${svn_root}目录吗?  应该不行,最多访问到${svn_root}/${project1}  所以这部分设置是不能要的,除非authz和passwd在${svn_root}下面
    ##${groups_1} = rw                       ##(3)admin_groups这个组在svnroot文件夹下组拥有哪些权限。这里指定admin_groups权限组在svnroot文件夹下拥有的权限是读和写
        ##${groups_2} = r                        ##manage_group只有读权限。
        ##${groups_3} = r
        # 
        # [${project1}:/]
        # @${groups_1} = rw                        ##manage_group权限组拥有读写权限。 (4)指定组前面必须加上@,如果是单个用户则不需要@
        # * = r                                    ##(5)意思是所有权限组,包括admin_groups,manage_group,都有拥有这个文件夹的读权限。

        # [${project1}:/product1]                  ##(6)可以给任意一个文件夹重新分配权限。权限有继承性,子文件夹能够继承权限,如果不重新设置文件夹的权限,那么继承主文件夹的权限。
        # @${groups_2} = rw
        # * =                                      ##(7)意思是其他所有权限组都没有这个文件夹的读写权限。

        ##[${project2}:/]                          ##这里有一个疑问:${svn_root}/${project1}/conf下的authz和passwd设置的用户确定能访问另一个库吗?应该不行吧?  所以${project2}相关的设置是不能要的
        ##@${groups_3} = rw
        ##* = r
        ##
        ##[${project2}:/product2]
        ##@${groups_4} = rw
        ##* =

        # 在vim的命令模式输入:n,进入${svn_root}/${project1}/conf/authz文件
    # " > ${temp_file_path}/temp_file.txt  ; vim ${temp_file_path}/temp_file.txt ${svn_root}/${project1}/conf/authz

补充说明:[repos:/file1/file2]

repos:svnadmin create创建的库名。

/file1/file2:在这个库下面的任何路径。注意不能有空格字符,否则会出问题。

    # 设置db的权限
#   sudo chmod -R 777 ${svn_root}/${project1}/db

    #4.启动SVN服务器
#   sudo svnserve -d -r ${svn_root}
    # -d:表示在后台运行
    # -r:指定服务器的根目录
    # sudo killall svnserve  #停止svn服务

    #5.查看svnserve是否已经运行
#   ps aux | grep svnserve  #(1)好像安装完,执行这条命令就会有显示。 这条有显示,SVN服务器不一定行
#   sudo netstat -antp |grep svnserve  #(2)只有执行了sudo svnserve -d -r ${svn_root},服务正常启动,执行这条命令才会有输出,这有这条命令有输入,SVN服务器才能用。

    #6.打开SVN
    #**** 点击右键-->TortoiSVN-->Repo-browser-->URL:svn://10.10.60.92/${project1}

    #(3)如果电脑已经打开过其他服务器的SVN,那么先退出原来的账号,才能登陆上面启动的SVN。退出原来的账号的方法是:
    #**** 点击右键-->TortoiSVN-->Settings-->Saved Data-->Authentication data-->Clear all。
    # 由于SVN允许任何人看,所以客户端没有登陆也能打开,能下载文件。没有账户,那么Authentication data后面的Clear all是灰色。
    #(4)由于SVN允许任何人看,上面anon-access = read,所以客户端没有登陆也能打开,能下载文件。但是上传(就是写权限),就要求输入账号和密码,并记录账号和密码,下次就不用输了,除非用上面的方法删除账号和密码。

    #6.SVN自动启动
#   echo "#!/bin/bash
#   svnserve -d -r ${svn_root}
#   " > ${temp_file_path}/startsvn.sh
#   sudo cp -vf ${temp_file_path}/startsvn.sh /etc/init.d/
#   sudo chmod a+x /etc/init.d/startsvn.sh
#   cd /etc/init.d && sudo update-rc.d startsvn.sh defaults


    #7.http服务器安装
    #https://blog.csdn.net/stickmangod/article/details/85315971  《ubuntu搭建SVN服务器+Apache 实现http访问》
    #https://blog.csdn.net/hjq842382134/article/details/47752225  《SVN服务器搭建01---Apache2搭建(Ubuntu14.04)》
    # 能装的都装上,不管有没有用。
#   sudo apt-get install apache2-dev apache2 apache2-utils

    # 重启apache2 
    # sudo /etc/init.d/apache2 restart

    # 卸载Apache2
    # sudo apt-get --purge remove apache-common
    # sudo apt-get --purge remove apache
    # 找到没有删除掉的配置文件,一并删除
    # sudo find /etc -name “apache” |xargs rm -rf
    # sudo rm -rf /var/www
    # sudo apt-get autoremove
    # ps:这样会删的很干净

    # 打开浏览器,输入网址:
    #**** http://localhost

    #8.建立起apache与svn之间的连接,并授予了相关权限
    #下载svn服务,以及 apache2-svn链接库
#   sudo apt-get install subversion libapache2-svn

    #为apache用到的www-data添加权限,可以http访问。改了账户也没关系,原来的账户还是可以访问的。svn://10.10.60.92/${project1}也能用
#   sudo chown -R www-data:www-data ${svn_root}

    #9.实现http访问
#   echo "
        # 修改apache2配置文件
        # 打开/etc/apache2/mods-available/dav_svn.conf,添加下面的内容:
        #
        # <Location /svn>
        #    DAV svn
        #    SVNParentPath ${svn_root}
        #    AuthzSVNAccessFile ${svn_root}/${project1}/conf/authz
        #    AuthType Basic
        #    AuthName \"Subversion Repository\"
        #    AuthUserFile ${svn_root}/${project1}/conf/http_passwd
        #    Require valid-user
        # </Location>
        # 
        # 这里有几点需要注意:
        # 1./svn 意思是你可以通过http://localhost/svn来访问该资源
        # 2.SVNParentPath 代表这该资源的实际位置,这个名字不要错啊,有些网站资料是错的。
        # 3.AuthzSVNAccessFile 代表着访问权限的设置文件
        # 4.AuthUserFile 代表着用户和密码的配置文件
        # 5.\"Subversion Repository\"名字可以随便定义,没错吧?实际是不需要斜杠的,有双引号就行了,因为现在是通过echo写入文件,所以加斜杠。
        # 
        # 在vim的命令模式输入:n,进入/etc/apache2/mods-available/dav_svn.conf文件
    # " > ${temp_file_path}/temp_file.txt ; sudo vim ${temp_file_path}/temp_file.txt /etc/apache2/mods-available/dav_svn.conf

    # 创建http下的svn账户和密码。 注意的是:
    # (1)不要听网上有的人说的那样,手工创建http_passwd配置文件,那样是不行的,必须通过htpasswd命令
    # (2)其实和上面的passwd和authz一样,http_passwd放哪里都行,通过/etc/apache2/mods-available/dav_svn.conf文件的AuthUserFile指定http_passwd的位置。
    # (3)http_passwd的用户名和密码跟${svn_root}/${project1}/conf/passwd文件的用户名和密码完全没有关系,完全可以新建,用网页打开svn时,输入http_passwd配置的用户名和密码。
    # (4)不过和${svn_root}/${project1}/conf/passwd一样,可以创建多个,每一个用户都要使用htpasswd创建,账号和密码最好和SVN的passwd文件件里面的账号和密码一样
    # sudo rm -vf ${svn_root}/${project1}/conf/http_passwd  #加-c参数,就重新创建文件,所以不用删除
#   cd ${svn_root}/${project1}/conf && sudo htpasswd -c http_passwd ${user_1}  #首个用户必须指定 -c 用于新建文件http_passwd。
#   cd ${svn_root}/${project1}/conf && sudo htpasswd    http_passwd ${user_2}  #后续用户必须不要指定 -c, 否则文件会被新建;-m 表示以 md5 加密密码
#   cd ${svn_root}/${project1}/conf && sudo htpasswd    http_passwd ${user_3}  #每创建一个用户,执行一次htpasswd命令
#   cd ${svn_root}/${project1}/conf && sudo htpasswd    http_passwd ${user_4}
    # 终端里面输入密码:
    # New password:
    # Re-type new password:
    # Adding password for user ${user_1}
#   sudo chown -R www-data:www-data ${svn_root}  #把刚才创建的${svn_root}/${project1}/conf/http_passwd文件,改成www-data用户。

    #10.访问
#   sudo /etc/init.d/apache2 restart  #会失败,难道我打开了浏览器,我没有关闭?原来是http_passwd有问题,才会重启失败
    # 打开浏览器,输入:
    #**** http://10.10.60.92/svn/${project1}
    # 对话框:
    # Authentication Required
    # A username and password are being requested by http://localhost. The site says: "Subversion Repository"
    #**** User Name:(sudo htpasswd http_passwd ${user_1}这条命令设置的用户名)
    #**** Password:(上面那条命令设置的密码)


 

###############################################################################################

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值