持續集成之二:搭建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:134.32.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://134.32.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://134.32.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



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM