• DevOps之二:搭建SVN服务器(整合Apache+Subversion)


    安装环境
      Red Hat Enterprise Linux Server release 7.3 (Maipo)
      jdk1.7.0_80
      rhel-server-7.3-x86_64-dvd.iso 作为本地镜像yum源

      apr-1.6.5.tar.gz、apr-util-1.6.1.tar.gz、apr-iconv-1.2.2.tar.gz(http://apr.apache.org/download.cgi)
      pcre-8.42.tar.gz(https://sourceforge.net/projects/pcre/files/pcre/)
      zlib-1.2.11.tar.gz(http://linux.softpedia.com/get/Programming/Libraries/zlib-159.shtml)
      expat-2.1.0.tar.gz(https://sourceforge.net/projects/expat/files/expat/)
      或者 expat-devel-2.1.0-8.el7.x86_64.rpm (http://rpm.pbone.net/index.php3?stat=3&search=expat-devel&srodzaj=3)
      openssl-1.1.1.tar.gz(https://www.openssl.org/source/)
      sqlite-amalgamation-3250200.zip、sqlite-autoconf-3250200.tar.gz(https://www.sqlite.org/download.html)
      serf-1.3.9.tar.bz2(http://serf.apache.org/download)
      scons-3.0.0.tar.gz(https://scons.org/pages/download.html)
      httpd-2.4.35.tar.gz (http://httpd.apache.org/download.cgi)
      subversion-1.10.3.tar.gz(http://subversion.apache.org/download.cgi)
      
    IP:192.168.123.103 用户:root

    由于Subversion需要版本化的控制,因此标准的HTTP协议不能满足需求。要让Apache与Subversion协同工作,就要使用WebDAV(Web-based Distributed Authoring and Versiong)Web分布式创作和版本控制协议。mod_dav_san模块就是作为Subversion与Apache之间的接口,通过它,Apache就可以访问版本库,并且可以让客户端也使用HTTP的扩展协议WebDAV/DeltaV进行访问。

    1.安装基础库
    1.1 gcc、gcc-c++
    参考:Linux 安装gcc、gcc-c++编译器

    2.安装依赖库

    [root@PCS103 src]# ls
    apache-tomcat-7.0.90.tar.gz apr-util-1.6.1.tar.gz jdk-7u80-linux-x64.tar.gz sqlite-autoconf-3250200.tar.gz
    apr-1.6.5.tar.gz expat-2.1.0.tar.gz openssl-1.1.1.tar.gz subversion-1.10.3.tar.gz
    apr-iconv-1.2.2.tar.gz httpd-2.4.35.tar.gz pcre-8.42.tar.gz zlib-1.2.11.tar.xz
    sqlite-amalgamation-3250200.zip

    2.1 安装apr-1.6.5.tar.gz、apr-util-1.6.1.tar.gz、apr-iconv-1.2.2.tar.gz

    #解压apr
    [root@PCS103 src]# tar -zxvf apr-1.6.5.tar.gz
    #配置
    [root@PCS103 src]# cd apr-1.6.5/
    [root@PCS103 src]# ./configure --prefix=/usr/local/apr
    #编译 安装
    [root@PCS103 apr-1.6.5]# make && make install
    
    #解压apr-iconv
    [root@PCS103 src]# tar -zxvf apr-iconv-1.2.2.tar.gz
    #配置
    [root@PCS103 src]# cd apr-iconv-1.2.2/
    [root@PCS103 apr-iconv-1.2.2]# ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
    #编译安装
    [root@PCS103 apr-iconv-1.2.2]# make && make install
    
    #解压apr-util
    [root@PCS103 src]# tar -zxvf apr-util-1.6.1.tar.gz
    #配置
    [root@PCS103 src]# cd apr-util-1.6.1/
    [root@PCS103 apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
    #编译安装
    [root@PCS103 apr-util-1.6.1]# make && make install

    2.2 pcre、zlib、sqllite安装

    #安装pcre
    #解压
    [root@PCS103 src]# tar -zxvf pcre-8.42.tar.gz
    #配置
    [root@PCS103 src]# cd pcre-8.42 && ./configure --prefix=/usr/local/pcre
    #编译 安装
    [root@PCS103 pcre-8.42]# make && make install
    
    #安装zlib
    [root@PCS103 src]# xz -d zlib-1.2.11.tar.xz && tar -xvf zlib-1.2.11.tar 
    #配置
    [root@PCS103 src]# cd zlib-1.2.11 && ./configure --prefix=/usr/local/zlib
    #编译 安装
    [root@PCS103 zlib-1.2.11]# make && make install
    
    #安装sqllite
    [root@PCS103 src]# tar -zxvf sqlite-autoconf-3250200.tar.gz
    #配置 编译 安装    
    [root@PCS103 src]# cd sqlite-autoconf-3250200 && ./configure --prefix=/usr/local/sqlite --enable-libtool-lock && make && make install 
    #解压 改名sqlite-amalgamation
    [root@PCS103 src]# unzip sqlite-amalgamation-3250200.zip && mv sqlite-amalgamation-3250200 sqlite-amalgamation

    2.3 安装openssl、scons、serf

    #安装openssl(使用https访问svn,需要安装openssl,否则仅支持http访问)
    [root@PCS103 src]# tar -zxvf openssl-1.1.1.tar.gz && make clean && make distclean
    #配置 -fPIC no-gost enable-shared要加 编译成共享动态库 否则后面编译http会报错
    [root@PCS103 src]# cd openssl-1.1.1 && ./config --prefix=/usr/local/openssl -fPIC enable-shared
    #编译 安装
    [root@PCS103 openssl-1.1.1]# make depend && make && make install
    #创建软连接
    [root@PCS103 openssl-1.1.1]# ln -s /usr/local/openssl/lib/*.so.* /usr/lib64
    [root@PCS103 openssl-1.1.1]# ln -s /usr/local/openssl/lib/*.so.* /usr/lib
    #scons是一种软件构建工具,这里用来安装serf的。
    [root@PCS103 src]# tar -zxvf scons-3.0.0.tar.gz
    #编译 安装
    [root@PCS103 src]# cd scons-3.0.0 && python setup.py install
    
    #serf svn1.8以上需要安装serf,1.8以下安装neon 使svn可以访问https协议
    serf库是基于APR库构建的基于C的高性能HTTP客户端库,Serf是Subversion的默认客户端库,所以必需安装。
    #解压
    [root@PCS103 src]# tar -jxvf serf-1.3.9.tar.bz2
    [root@PCS103 src]# cd serf-1.3.9
    #配置
    [root@PCS103 serf-1.3.9]# scons PREFIX=/usr/local/serlf APR=/usr/local/apr/bin/apr-1-config APU=/usr/local/apr-util/bin/apu-1-config OPENSSL=/usr/local/openssl
    报错:
    scons: Reading SConscript files ...
      File "/usr/local/src/serf-1.3.9/SConstruct", line 186
        print 'Warning: Used unknown variables:', ', '.join(unknown.keys())
    
                                               ^
    SyntaxError: invalid syntax
    解决:把serf-1.3.9/SConstruct内的185,186行注释掉,然后在安装
    185 #if unknown:
    186 #  print 'Warning: Used unknown variables:', ', '.join(unknown.keys())
    #安装
    [root@PCS103 serf-1.3.9]# scons install
    #安装完成后,将serf的lib库追加到动态链接库
    echo "/usr/local/serf/lib" >> /etc/ld.so.conf
    #验证
    [root@PCS103 serf-1.3.9]# ldconfig -v

    2.4安装apache

    #解压
    [root@PCS103 src]# tar -zxvf httpd-2.4.35.tar.gz
    #配置
    [root@PCS103 src]# cd httpd-2.4.35 && make clean && make distclean
    [root@PCS103 httpd-2.4.35]# ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr-util/bin/apu-1-config --enable-so --enable-dav --enable-maintainer-mode --enable-rewrite --enable-ssl --with-ssl=/usr/local/openssl --with-pcre=/usr/local/pcre
    #编译 安装
    [root@PCS103 src]# make && make install
    #配置
    [root@PCS103 conf]# vim /usr/local/apache/conf/httpd.conf
    添加一行配置:ServerName localhost:80
    
    #apache 启停
    版本验证:
    [root@PCS103 bin] /usr/local/apache/bin/apachectl -v
    Server version: Apache/2.4.35 (Unix)
    Server built: Oct 12 2018 15:04:40
    apache启停 
    #启动
    /usr/local/apache/bin/apachectl start
    #停止
    /usr/local/apache/bin/apachectl stop
    #重启
    /usr/local/apache/bin/apachectl restart
    #要在重启 Apache 服务器时不中断当前的连接,则应运行
    /usr/local/apache/bin/apachectl graceful
    
    #将apache作为服务启停    
    第一步
    [root@PCS103 init.d]# cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
    第二步
    vi /etc/init.d/httpd
    第二行开始加入:
    # Startup script for the Apache Web Server 
    # chkconfig: 35 61 61 
    # description: Apache is a World Wide Web server. 
    备注;第一行的3个参数意义分别为:在哪些运行级别启动httpd(35);启动序号(S61);关闭序号(K61)。
    注意:第二行的描述必须要写!
    第三步
    chmod 755 /etc/init.d/httpd
    chkconfig --add httpd
    chkconfig httpd on
    
    然后就可以使用服务启停apache
    service httpd start 启动
    service httpd restart 重新启动
    service httpd stop 停止服务

    启动报错:httpd: Syntax error on line 134 of /usr/local/apache/conf/httpd.conf: Cannot load modules/mod_ssl.so into server: libssl.so.1.1: cannot open shared object file: No such file or directory
    原因:httpd安装中指定了--enable-ssl和--with-ssl=/usr/local/openssl/还是无法生效,httpd只在/usr/lib64查找libssl.so.1.0.0,因此安装完openssl之后需要做个软连接处理
    解决方法:
    ln -s /usr/local/openssl/lib/*.so.* /usr/lib64
    ln -s /usr/local/openssl/lib/*.so.* /usr/lib


    2.5安装Subversion

    #解压
    [root@PCS103 src]# tar -zxvf subversion-1.10.3.tar.gz
    #拷贝sqlite-amalgamation
    [root@PCS103 src]# mv sqlite-amalgamation ./subversion-1.10.3/
    #配置
    [root@PCS103 src]# cd subversion-1.10.3
    [root@PCS103 subversion-1.10.3]# LDFLAGS="-Wl,-rpath,/usr/local/serlf/lib" ./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-zlib=/usr/local/zlib --enable-maintainer-mode --with-serf=/usr/local/serlf --with-apache-libexecdir --with-sqlite=/usr/local/sqlite --with-lz4=internal --with-utf8proc=internal
    #编译 安装
    [root@PCS103 subversion-1.10.3]# make && make install
    #添加环境变量
    [root@PCS103 local]# vim /etc/profile
    export JAVA_HOME=/usr/local/jdk1.7.0_80
    export SVN_HOME=/usr/local/svn
    export PATH=$JAVA_HOME/bin:$SVN_HOME/bin:$PATH
    [root@PCS103 subversion-1.10.3]# source /etc/profile
    #查看版本
    [root@PCS103 subversion-1.10.3]# svn --version

    报错:
    svn: error while loading shared libraries: libserf-1.so.1: cannot open shared object file: No such file or directory
    原因:找不到/usr/local/serlf/lib库 不是系统默认依赖库位置 所以编译的时候在前面加上LDFLAGS="-Wl,-rpath,/usr/local/serlf/lib"来指定


    2.6配置http与SVN
    2.6.1 配置SVN

    (1)创建SVN根目录
    [root@PCS103 /]# mkdir /data
    #配置daemon用户的访问权限 apache默认用户是daemon
    [root@PCS103 /]# chown -R daemon /data
    [root@PCS103 /]# chown -R 755 /data 
    #创建SVN权限配置文件
    [root@PCS103 data]# touch /data/authz.conf
    #创建svn用户名密码配置文件 注意第一次加参数 -c 以后不需要加   不能手工创建passwd.conf文件
    [root@PCS103 data]# /usr/local/apache/bin/htpasswd -c /data/passwd.conf admin
    New password: 
    Re-type new password: 
    Adding password for user admin
    
    #配置权限和密码
    [root@PCS103 data]# vim authz.conf
    [groups]
    admin=admin
    
    [/]
    @admin = rw
    
    [test:/test1]
    admin = rw
    test = rw
    

    2.6.2 配置apache

    (1)apache开启mod_dav_svn模块
    apache安装成功后,拷贝mod_dav_svn.so和mod_authz_svn.so
    [root@PCS103 local]# cp /usr/local/src/subversion-1.10.3/subversion/mod_authz_svn/.libs/mod_authz_svn.so /usr/local/apache/modules
    [root@PCS103 local]# cp /usr/local/src/subversion-1.10.3/subversion/mod_dav_svn/.libs/mod_dav_svn.so /usr/local/apache/modules
    [root@PCS103 conf]# vim /usr/local/apache/conf/httpd.conf
    添加如下两行
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    
    (2)在httpd.conf末尾添加
    #设置对应的location,路径为/,
    #设置SVNParentPath设置为svn的仓库总根目录,此处为/data,配合location /,可以直接浏览器中输入http:/IP/直接
    访问至/data下的svn仓库目录
    #AuthzSVNAccessFile设置SVN权限配置文件路径
    #AuthUserFile设置svn用户名密码配置文件路径
    <Location />
    DAV svn
    SVNParentPath /data
    SVNListParentPath on
    SVNAutoversioning on
    SVNReposName "svn"
    AuthzSVNAccessFile /data/authz.conf
    AuthType Basic
    AuthName "svn repo auth"
    AuthUserFile /data/passwd.conf
    Require valid-user
    </Location>

    做完以上配置之后 启动apache和svn,可以在浏览器直接使用http://192.168.123.103/ 访问

    #启动svn
    [root@PCS103 data]# svnserve -d -r /data
    #启动apache
    [root@PCS103 data]# /usr/local/apache/bin/apachectl start

    ----------------------------------------------------------------------------
    (3)配置私钥证书

    openssl genrsa 2048 > /data/server.key
    openssl req -new -key /data/server.key > /data/server.csr
    Country Name=CN
    State or Province Name=shandong
    Locality Name=jinan
    Organization Name=unicom
    Common Name=svnserver
    Email Address=<可省略>
    A challenge password=<空,填写后启动httpd需输入密码>
    An optionnal company name=可选公司名,不填
    openssl req -x509 -days 36500 -key /data/server.key -in /data/server.csr > /data/server.crt
    [root@PCS103 data]# cp /data/server.key /usr/local/apache/conf
    [root@PCS103 data]# cp /data/server.crt /usr/local/apache/conf

    (4)设置http的支持ssl

    [root@PCS103 data]# vim /usr/local/apache/conf/httpd.conf
    #去掉Include conf/extra/httpd-ssl.conf前的#号
    #确定httpd-ssl.conf配置中的证书与私钥指定正确
    [root@PCS103 data]# vim /usr/local/apache/conf/extra/httpd-ssl.conf
    #存在以下两行:
    SSLCertificateFile "/usr/local/apache/conf/server.crt"
    SSLCertificateKeyFile "/usr/local/apache/conf/server.key"
    #修改svn对应的location
    vim /usr/local/apache/conf/httpd.conf
    #添加"SSLRequireSSL"至DAV svn的下一行
    
    <Location />
    DAV svn
    SSLRequireSSL
    SVNParentPath /data
    SVNListParentPath on
    SVNAutoversioning on
    SVNReposName "svn"
    AuthzSVNAccessFile /data/authz.conf
    AuthType Basic
    AuthName "svn repo auth"
    AuthUserFile /data/passwd.conf
    Require valid-user
    </Location>

    #重启http服务器和svn

    #重启apache
    [root@PCS103 data]# /usr/local/apache/bin/apachectl restart
    #重启SVN
    [root@PCS103 data]# pkill svnserve && svnserve -d -r /data


    访问:https://192.168.123.103/

     

    资源地址:https://download.csdn.net/download/cac2020/10721966

    参考:
    https://www.cnblogs.com/qingfengfumian/p/7986907.html
    https://blog.csdn.net/Jonnter/article/details/60877766
    https://www.linuxidc.com/Linux/2015-02/113177.htm
    https://blog.csdn.net/birdwood/article/details/51043021
    https://blog.csdn.net/zouqingfang/article/details/51484357


  • 相关阅读:
    JavaScript设计模式与开发实践 适配器模式
    JavaScript设计模式与开发实践 状态模式
    JavaScript设计模式与开发实践 装饰者模式
    JavaScript设计模式与开发实践 中介者模式
    JavaScript设计模式与开发实践 职责链模式
    meta标签属性
    在制作网站之前,前端程序员应该考虑哪些技术细节?
    JavaScript设计模式与开发实践 享元模式
    JavaScript设计模式与开发实践 模板方法模式
    梯度下降法
  • 原文地址:https://www.cnblogs.com/cac2020/p/9791803.html
Copyright © 2020-2023  润新知