Apache+svn

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

wKioL1bms0HgRUGrAAA27_U9lWE996.png


源碼編譯安裝錯誤:

[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代碼,自動同步到項目了。


常見錯誤,我遇到的

  1. 255錯誤:post-commit沒有給執行權限 或者 頭部沒有執行用sh執行,就是沒有#!/bin/sh

  2. 提示跳過目錄:服務器目錄沒有checkout代碼,記得必定要先checkout一次,才能同步(!,每次新建項目都須要)

  3. 什麼提示也沒有:這種狀況出如今用工具commit的時候,成功了,可是就是沒有同步,建議你到linux下,使用./post-commit手動執行看報什麼錯誤。若是亂碼,請將文件內編碼格式修改成GBK

  4. 提示**** is a     direcitory:/usr/bin/svn你把這個搞錯了,他不是一個目錄,是svn的路徑

常見錯誤及其解答:

一、svn checkout(svn檢出)時錯誤一:

  1. 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時錯誤二:

  1. Unable to connect to a repository     at URL 'http://www.aiezu.com/svn'

  2. Access to     'http://www.aiezu.com/svn' forbidden

解答:svn數據倉庫的SVN URL地址不正確,當subversion.conf中設置SVNListParentPath on時,SVN URL地址爲SVNParentPath下的具體數據倉庫,而不是SVNParentPath指定的目錄。

三、svn checkout時錯誤三:

  1. Unable to connect to a repository     at URL http://www.aiezu.com/svn/test'

  2. Could not open the requested SVN     filesystem

解答:svn數據倉庫的SVN URL地址不正確,在SVNParentPath下找不到SVN URL指定的數據倉庫。

四、svn提交(svn commit)時出現以下錯誤:

  1. post-commit hook failed (exit code     1) with output:

  2. 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就能夠了。

相關文章
相關標籤/搜索