1. Httpd yum安裝:linux
[root@www_01 ~]# yum -y install httpdweb
[root@www_01 ~]# yum -y install mod_dav_svn #安裝svn模塊以及subversion服務端
sql
#subversion在這會被做爲mod_dav_svn模塊的相關依賴進行安裝
shell
[root@www_01 ~]# rpm -qa subversion數據庫
subversion-1.6.11-15.el6_7.x86_64apache
2. 建立版本庫:緩存
[root@www_01 ~]# mkdir /svn/test1 -p安全
[root@www_01 ~]# svnadmin create /svn/test1服務器
3. 建立svn帳戶與密碼:app
[root@www_01 ~]# htpasswd -c /svn/test1/conf/passwd zkq
Adding password for user zkq
4. 分配svn賬號權限:
[root@www_01 ~]# vi /svn/test1/conf/authz #在最下面加入如下內容,保存退出。
[test1:/] #指定版本庫根目錄下的權限
zkq = rw #zkq組用戶權限爲讀寫
* = r #其餘用戶只有讀權限
5. 配置svn版本庫文件系統權限:
[root@www_01~]# chown -R apache.apache /svn/test1
[root@www_01~]# chcon -R -t httpd_sys_content_t /svn/test1 #selinux權限
6. Apache與svn整合:
[root@www_01 ~]# vi /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so #加載dav_svn模塊
LoadModule authz_svn_module modules/mod_authz_svn.so #加載權限設置模塊
#
# Example configuration to enable HTTP access for a directory
#除了這兩個模塊,還要確保/etc/httpd/conf/httpd.conf文件中的dav_module模塊也會被加載
# must be both:
#
# a) readable and writableby the 'apache' user, and
#默認Apache的啓動用戶爲apache,因此須要apache用戶對版本庫有讀寫權限
#
# b) labelled with the'httpd_sys_content_t' context
if using
# SELinux
#selinux相關的安全上下文標籤,若是開啓了selinux,則版本庫目錄須要有httpd_sys_content_t安全上下文標籤
# this configuration, run as root:
#如下內容是配置文件提供的操做步驟模版
# # cd /var/www/svn
# # svnadmin create stuff
# # chown -R apache.apachestuff
# # chcon -R -thttpd_sys_content_t stuff
#在最下面加入如下內容,保存退出!
<Location /svn>
DAV svn
SVNParentPath /svn #SVNParentPath路徑必須爲svnadmincreate生成版本庫路徑的「父目錄」,如上面創建數據倉庫的命令爲svnadmin create /svn/test1,則SVNParentPath爲/svn。
AuthType Basic
AuthName "Welcome tosvn"
AuthUserFile/svn/test1/conf/passwd
AuthzSVNAccessFile/svn/test1/conf/authz
Require valid-user
</Location>
[root@www_01 ~]# grep "dav_module"/etc/httpd/conf/httpd.conf
LoadModule dav_module modules/mod_dav.so
[root@www_01 ~]# /etc/init.d/svnserve start
[root@www_01 ~]# /etc/init.d/httpd start
7. 客戶端訪問:
出錯以下:
-<D:error><C:error/><m:human-readableerrcode="2"> Could not open the requested SVN filesystem
</m:human-readable></D:error>
解決方法:
SVNParentPath /svn #SVNParentPath路徑必須爲svnadmin create生成版本庫路徑的「父目錄」,如上面創建數據倉庫的命令爲svnadmin create /svn/test1,則SVNParentPath爲/svn。
源碼編譯安裝錯誤:
[root@www_01 tools]# cd subversion-1.8.15
[root@www_01 subversion-1.8.15]# ./configure --prefix=/application/svn --with-apxs=/application/apache/bin/apxs--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-ssl --with-zlib --enable-maintainer-mode
出現錯誤:
checking sqlite library version (via pkg-config)... no
An appropriate version of sqlite could not be found. We recommmend
3.7.15.1, but require at least 3.7.12.
Please either install a newer sqlite on this system
or
get the sqlite 3.7.15.1 amalgamation from:
http://www.sqlite.org/sqlite-amalgamation-3071501.zip
unpack the archive using unzip and rename the resulting
directory to:
/server/tools/subversion-1.8.15/sqlite-amalgamation
解決辦法:
[root@www_01tools]# wget http://www.sqlite.org/sqlite-amalgamation-3071501.zip
[root@www_01tools]# unzip sqlite-amalgamation-3071501.zip -d /server/tools/subversion-1.8.15/sqlite-amalgamation
[root@www_01subversion-1.8.15]# ls
aclocal.m4 config.nice Makefile.in
autogen.sh configure NOTICE
BUGS configure.ac README
build doc sqlite-amalgamation
build.conf gen-make.opts subversion
build-outputs.mk gen-make.py tools
CHANGES get-deps.sh win-tests.py
COMMITTERS INSTALL
config.log LICENSE
[root@www_01subversion-1.8.15]# ./configure --prefix=/application/svn --with-apxs=/application/apache/bin/apxs--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-zlib--enable-mod-activation --with-ssl
………………………………….
configure:WARNING: unrecognized options: --with-ssl
[root@www_01subversion-1.8.15]# make && make install
檢查安裝是否成功:
[root@www_01subversion-1.8.15]# /application/svn/bin/svnserve --version
svnserve,version 1.8.15 (r1718365)
compiled Mar 11 2016, 22:37:40 onx86_64-unknown-linux-gnu
Copyright (C)2015 The Apache Software Foundation.
This softwareconsists of contributions made by many people;
see the NOTICEfile for more information.
Subversion isopen source software, see http://subversion.apache.org/
The followingrepository back-end (FS) modules are available:
* fs_fs : Modulefor working with a plain file (FSFS) repository.
svnserve.conf文件內容的註解以下:
[general]
#匿名訪問的權限,能夠是read,write,none,默認爲read
anon-access = none
#使受權用戶有寫權限
auth-access = write
#密碼數據庫的路徑
password-db = /server/svn/repositories/conf/passwd
#訪問控制文件
authz-db = /server/svn/repositories/conf/authz
#認證命名空間,subversion會在認證提示裏顯示,而且做爲憑證緩存的關鍵字
realm = repositories
查看SVN監聽的端口:
[root@www_01 conf]# netstat -tunlp|grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 94596/svnserve
加入系統環境變量(此步爲源碼安裝時必需要作的):
[root@www_01 ~]# echo "export PATH=/application/svn/bin:$PATH" >>/etc/profile
[root@www_01 ~]# echo "export PATH" >>/etc/profile
[root@www_01 ~]# source /etc/profile
[root@www_01 ~]# svnserve --version
svnserve, version 1.8.15 (r1718365)
compiled Mar 11 2016, 22:37:40 on x86_64-unknown-linux-gnu
Copyright (C) 2015 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/
The following repository back-end (FS) modules are available:
* fs_fs : Module for working with a plain file (FSFS) repository.
中止啓動SVN:
killall svnserve #中止
/application/svn/bin/svnserve -d -r /server/svn/repositories #單版本庫啓動
/application/svn/bin/svnserve -d -r /server/svn #多版本庫啓動
查看Apache加載的模塊及語法:
# /application/apache/bin/apachectl -t -D DUMP_MODULES
Loaded Modules:
core_module (static)
authn_file_module (static)
authn_dbm_module (static)
substitute_module (static)
deflate_module (static)
。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。
so_module (static)
dav_svn_module (shared)
authz_svn_module (shared)
Syntax OK
檢查svn是否與apache兼容:
[root@www_01 ~]# grep "dav_svn_module" /application/apache/conf/httpd.conf
LoadModule dav_svn_module /application/svn/libexec/mod_dav_svn.so
[root@www_01 ~]# grep "authz_svn_module" /application/apache/conf/httpd.conf
LoadModule authz_svn_module /application/svn/libexec/mod_authz_svn.so
兩行信息,而且查看/usr/local/apache/modules 下是否有mod_dav_svn.so, 和mod_authz_svn.so 文件
若是http.conf 中沒有增長代碼。modules 下有mod_dav_svn.so,
和mod_authz_svn.so 文件,再http.conf中增長那兩行代碼。
若是沒有mod_dav_svn.so,
和mod_authz_svn.so,svn安裝的錯誤。按照步驟重裝。
使用post-commit 鉤子文件實現自動部署:
搭建svn都不是僅僅爲了把代碼存到倉庫,而是同步部署到對應的項目。
在 svn目錄的 /hooks裏面有一堆tmpl,這些tmpl能夠作不少事情,不過今天咱們就說一下自動部署post-commit.tmpl。
位置在svn 版本庫hooks 文件下 帶tmpl 的文件全是模板文件
功能介紹:
start-commit: 提交前觸發事務
post-commit: 提交完成觸發事務
post-lock: 對文件進行加鎖操做以後執行該腳本
post-revprop-change: 版本屬性修改後觸發事務
post-unlock: 對文件進行解鎖以後執行該腳本
pre-commit: 提交完成前執行
pre-lock: 對文件進行加鎖操做以前執行該腳本
pre-revprop-change: 在修改版本屬性以前,執行此腳本
pre-unlock: 對文件進行解鎖操做以前執行該腳本
咱們要用post-commit須要手動複製對應tmpl裏面的內容到新的post-commit裏面
cppost-commit.tmpl post-commit
step.1:
而後打開文件清空內容,修改成如下代碼:
#!/bin/sh
export LANG=zh_CN.UTF-8
/usr/bin/svn update --username **** --password ****/var/www/test
其中第一行意思是:用sh來解析這個腳本,由於各類shell的語法有細微的差異
第二行是編碼格式:這裏我使用的是UTF-8
最後一行/usr/bin/svn 是svn的路徑,不是項目路徑,應該都是同樣的,後半句分別是用戶名、密碼、和項目路徑。--username這個比較坑了,網上搜出來的不少都搞錯了,前面實際上是兩個減號,英文輸入法下的。
step.2:
修改post-commit的可執行權限
chmod 755 post-commit
step.3:
在服務器進入項目目錄/var/www/test checkout 整個項目。
注意此處不要checkout文件夾,正確代碼應該是這樣:
svn checkout svn://{您的服務器地址}:{端口號}/test. #注意目錄後面還有一個點
注意:此處的/test 可不須要添加:( 添加的目的是爲了實現多個項目。 )
svn checkout svn://{您的服務器地址}:3690 . #注意目錄後面還有一個點
至此,若是按照此步驟搞下來,應該已經沒有問題了,你能夠本地commit代碼,自動同步到項目了。
常見錯誤,我遇到的
255錯誤:post-commit沒有給執行權限 或者 頭部沒有執行用sh執行,就是沒有#!/bin/sh
提示跳過目錄:服務器目錄沒有checkout代碼,記得必定要先checkout一次,才能同步(!,每次新建項目都須要)
什麼提示也沒有:這種狀況出如今用工具commit的時候,成功了,可是就是沒有同步,建議你到linux下,使用./post-commit手動執行看報什麼錯誤。若是亂碼,請將文件內編碼格式修改成GBK
提示**** is a direcitory:/usr/bin/svn你把這個搞錯了,他不是一個目錄,是svn的路徑
一、svn checkout(svn檢出)時錯誤一:
The URI does not contain the name of a repository. [403, #190001]
解答:這是因爲subversion.conf文件中SVNParentPath路徑設置不正確引發的,SVNParentPath路徑必須爲 svnadmin create生成數據倉庫路勁的父目錄,如上面創建數據倉庫的命令爲svnadmin create /storage/svn/aiezu,則SVNParentPath爲/storage/svn。
二、svn checkout時錯誤二:
Unable to connect to a repository at URL 'http://www.aiezu.com/svn'
Access to 'http://www.aiezu.com/svn' forbidden
解答:svn數據倉庫的SVN URL地址不正確,當subversion.conf中設置SVNListParentPath on時,SVN URL地址爲SVNParentPath下的具體數據倉庫,而不是SVNParentPath指定的目錄。
三、svn checkout時錯誤三:
Unable to connect to a repository at URL http://www.aiezu.com/svn/test'
Could not open the requested SVN filesystem
解答:svn數據倉庫的SVN URL地址不正確,在SVNParentPath下找不到SVN URL指定的數據倉庫。
四、svn提交(svn commit)時出現以下錯誤:
post-commit hook failed (exit code 1) with output:
svn: Can't open file '/storage/web/aiezu/.svn/lock': Permission denied
解答:這是svn提交調用的post-commit鉤子沒有權限寫/storage/web/aiezu/.svn目錄引發的。apache集成的svn是使用apache用戶調用post-commit鉤子的,因此必須保證apache用戶對.svn有寫權限, 執行chown -Rapache.apache /storage/web/aiezu就能夠了。