本文記述在LINUX下搭建SVNManager的運行環境的方法。SVNManager是一個用PHP開發的開源工程。其官網是:http://svnmanager.sourceforge.net/ 。該官網上也給出了一個看似很詳細的安裝說明。我在研究初期也是按照該官網上的說明進行安裝的,但遇到了不少問題。所以寫下本文,以便說明這一路上所現問題的解決方法。
搭建環境有兩種策略:策略一,是用安裝包安裝,該法最大的好處是方便,不足的地方法是須要用到root權限;策略二,是用源碼安裝,這種方法很自由,並不依賴root權限,可是複雜度很大,比較考驗人的耐心與抗挫力,成就感也最大。本文先從簡單入手,介紹用安裝包安裝的方法。後面有時間再說說用源碼安裝的方法。
個人宿主機是WIN7,虛擬機爲ubuntu-12.04.2-server-i386,SVNManager爲1.09版本。php
其實如今安裝大多數的LINUX都是很方便的了。即使不去找資料,按提示輸入通常都能把系統安裝好。固然有資料參照會更安心一些,這裏有一名爲《安裝 Ubuntu Server 11.04 以及 LAMP 全過程截圖》的文章,很不錯:http://www.oschina.net/question/12_19477html
安裝過程當中,在選擇安裝包時注意把LAMP項及SSH項選上,如圖1.0-0:
mysql
圖1.0-0linux
安裝上光盤自帶的LAMP,可省去不少手動安裝的麻煩;安裝SSH,主要是爲了方便宿主機與虛擬機之間的文件傳輸。
安裝虛擬機後,就能夠在WIN7上安裝putty及SSHSecureShellClient。其實這兩個都是SSH的客戶端 。裝putty是由於我剛開始用SSH時就是用她了,她的「右鍵粘貼」功能有點像VirtualBox的共享粘貼板的功能。SSHSecureShellClient有一個名爲「SSH Secure File Transfer Client」 的組件.實質上是調用scp等命令完成文件傳輸的工做,但她有圖形化界面,與VirtualBox的「共享文件夾」有幾分類似。固然最後你要設置一下VirtualBox的端口轉發了,如圖1.0-1:web
圖1.0-1sql
一切安裝好並重啓虛擬機後,能夠打開瀏覽器,輸入「localhost:[端口]」。這樣應該能夠看到「IT WORKS」頁面了:數據庫
圖 1.0-2apache
sudo apt-get install subversion libapache2-svnubuntu
subversion是SVN的主程序。libapache2-svn則用來實現Apache與svn的互操做。安裝完成後咱們須要確認下面的信息:瀏覽器
能夠用下面的命令進行確認:
sudo find / -name "mod_dav_svn.so"
sudo find / -name "mod_authz_svn.so"
這須要耐心等待一段時間。若結果是找不到,證實安裝有問題,需重裝。若找到了,請把路徑記下來。
這兩個文件,通常能夠在/etc/apache2/mods-available目錄下找到。打開dav_svn.load會看到相似這樣的語句:
LoadModule dav_svn_module modules/mod_dav_svn.so
請確認 mod_dav_svn.so 的路徑沒有寫錯。
一樣打開 authz_svn.load ,會看下面一類的語句,這也須要確認路徑
LoadModule authz_svn_module modules/mod_authz_svn.so
a2enmod這個命令的的實質做用是向/etc/apache2/mods-enabled加入配置文件的符號連接。若是你看apache2.conf這個配置文件的話就會知道,其中存在着以下兩句:
Include mods-enabled/*.load Include mods-enabled/*.conf
而 apache2.conf 是 Apache 在啓動時載入的配置腳本。因此向 mods-enabled 添加配置文件的稱號連接等因而啓動 Apache 時執行該腳本。因此執行下面兩個命令:
sudo a2enmod dav_svn
sudo a2enmod authz_svn
這就等於把 dav_svn.load 及 authz_svn.load 這兩件文件的符號連接放入了 mods-enabled 目錄中。
注:SVNMamager官網上只提示了執行sudo a2enmod dav_svn。實質上執行sudo a2enmod authz_svn也是必要的。沒有設置authz_svn的自動載入的話在啓動Apache時會有下面這樣的問題:
root@lamp-server:/home/svn_db# sudo service apache2 restart Syntax error on line 75 of /etc/apache2/mods-enabled/dav_svn.conf: Invalid command 'AuthzSVNAccessFile', perhaps misspelled or defined by a module not included in the server configuration Action 'configtest' failed. The Apache error log may have more information. ...fail!
dav_svn.conf文件,libapache2-svn用該設置文件來告訴Apache,一些SVN設置信息。最起碼,要告訴Apache,到底SVN數據庫在那裏。一般在以下路徑中:/etc/apache2/mods-available/
該設置文件中,加入以下腳本:
<location /svn> DAV svn #Repository Folders Location (make sure this folder exists #and keep location in mind) SVNParentPath /home/svn_db AuthType Basic AuthName "Restricted Access" #File will be created by SVNManager, keep location in mind! AuthUserFile /home/svn_db/htpasswd Require valid-user #SSLRequireSSL #File will be created by SVNManager, keep location in mind AuthzSVNAccessFile /home/svn_db/accessfile </location>
看腳本的註釋,基本上能夠知道,各個設置項有什麼用,我下面還會做說明,不過你們最好是找到SVN的官方文檔,當中包含《httpd,Apache的HTTP服務器》這樣的一小節,裏面的說明會更加詳細。下面有一個連接,但不擔保長期有效^0^(仍是把文檔DOWN下來保值一點):
http://www.subversion.org.cn/svnbook/1.4/svnbook.html#svn.serverconfig.httpd
Apache的設置說明則能夠以下URL中找到:
http://httpd.apache.org/docs/2.2/
下面逐句說明腳本的做用:
<location /svn>
上面這句腳本中的「 /svn」 是一個虛路徑,你喜歡的話,把這個虛路徑設置成以下這樣均可以
<location /good/good/study/day/day/up>
只不過用戶在使用時就要把URL寫成以下這樣子:
my.service.org/good/good/study/day/day/up/[ 具體數據庫路徑 ]
怎一個煩字了得!看來儘可能讓URL簡明握要好一點,咱們仍是用「/svn」吧。
DAV svn
DAV 指令主用來開關 WebDAV 服務,其參數能夠是 「 on」 「off」 或 「 [ 服務提供者的名字 ]」 ,默認值爲 off 意爲關閉,上面這句腳本使用服務提供者的名字做爲參數。意爲啓動 svn 提供的 WebDAV 服務。
SVNParentPath /home/svn_db
這個用於告訴 Apache , SVN 數據庫的父目錄在那裏(父目錄下能夠有多個 SVN 數庫)。請確保這個目錄已經存在。
AuthType Basic
AuthType指令用來設置目錄的身份驗證方式。其參數能夠是 「Basic」或「Digest」,即分別「基本驗證」方式(Basic Authentication)與「摘要驗證」方式(Digest Authentication).這裏選擇了「基本驗證」
AuthName "Restricted Access"
AuthName 是你提供給認證域一個任意名稱,大多數瀏覽器會在向用戶詢問名稱和密碼的彈出窗口裏顯示這個名稱,以下圖:
圖2.1-1
注意這個AuthName起的是提示做用,與有對應於密碼的用戶名是兩碼事。
AuthUserFile /home/svn_db/htpasswd
AuthUserFile 指定一個文件,用來記錄用戶名與密碼對應列表。
Require valid-user
Require 用來設置那些經過了身份驗證的用戶中的那一些,可使用本服務的資源。有三用設置方法:
Require valid-user 全部通用份驗證的用戶均可以
Require group [分組名] 只有指定分組的用戶能夠
Require user [用戶名1] [用戶名2] ... [用戶名n] 只有指定的用戶能夠
AuthzSVNAccessFile /home/svn_db/accessfile
AuthzSVNAccessFile 指定保存路徑中的版本庫訪問政策的文件,在某一路徑下某一用戶的讀寫權限的配置文件。
這一步是可選的,不作也能夠,不作的效果,最可能是沒有那麼好看罷了。具體的建立方法能夠參看《virtualbox的ubuntu虛擬機中搭建SVN服務器》。這裏只強調一點,把SVN數據庫放到「SVNParentPath」指到的父目錄下,我測試用的SVN數據庫的名字爲「svn_manager」,因此建立後在SVNParentPath指定的/home/svn_db目錄下,多了一個名爲「svn_manager」的子目錄。
注意,這裏設置的用戶名及密碼,是用於Apache訪問SVN數據庫的,而非登陸SVNManager的密碼。咱們首先,按「AuthUserFile」及「AuthzSVNAccessFile」中指定的那樣建立用戶密碼信息文件及用戶權限設置文件:
touch /home/svn_db/htpasswd
touch /home/svn_db/accessfile
而後咱們用「htpasswd」工具向用戶密碼信息文件加入密碼信息。(是的htpasswd也是一個工具的名字,能夠"which htpasswd"找一下)
htpasswd -c [用戶密碼信息文件路徑] [用戶名]
例如:
htpasswd -c /home/svn_db/htpasswd goodgoodstudy
回車後輸入密碼便可。
接下來是在用戶權限設置文件中文件用戶權限。咱們打開/home/svn_db/accessfile 加入以下內容:
[svn_manager:/] goodgoodstudy = rw
具體的格式爲:
[數據庫名:可訪問的路徑]
用啓名 = 權限
最後咱們須要修改一下文件及目錄的擁有者:
sudo chown -R www-data.www-data /home/svn_db/svn_manager /home/svn_db
sudo chown -R www-data.www-data /home/svn_db/passwdfile /home/svn_db/accessfile
注www-data是apache的默認用戶。好了如今用
sudo service apache2 restart
重啓服務。而後在宿主機的瀏覽器中輸入:
http://localhost[:端口]/svn/svn_manager/
瀏覽器就會彈出圖2.1-1的登陸窗口。輸入你剛設置的用戶名及密碼,就能夠看到下面的內容(假設你已經生成了測試用的SVN)
圖2.3-1
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
看了這麼多內容,你都應該累了吧。這裏先休息一下,說一些花邊的內容:
1 SVNManager官網上的安裝方法是挺詳細的了,但不知道爲何,其說明中漏了或寫錯了一些關鍵內容。
2 不是每一個人都有root權限的。特別是公司的服務器,極可能早已經安裝好在跑其它服務了。爲了原服務的穩定,管理員那會這麼容易讓你隨便修改!因此本文主詣在於讓你們知道怎麼設置。遇到無root權限的狀況,那就須要你用源碼安裝。那將會是短兵白刃的「血戰」。後面我會寫章說明一下,與這種狀況「狹道相逢」時如何才能」多流汗,少流血」。
3 在LINUX上有LAMP,而在WINDOWS上有WAMP。你想入門方便一點的話,那就試一下WAMP吧。
準備好嗎,要不要喝口水?^0^
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
用「sudo mysql -u root -p」登陸後執行以下語句
CREATE DATABASE svnmanager; (回車) GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER on svnmanager.* to svnmanager@localhost identified by '[密碼]'; (回車) FLUSH PRIVILEGES; (回車)
@localhost這部分官網中的腳本沒有給出,請注意,要否則,在鏈接時會出現以下問題:
[2] mysqli_real_connect(): (28000/1045): Access denied for user 'svnmanager'@'localhost' (using password: YES) (@line 86 in file /home/ddu/www/svnmanager-1.09/prado-2.0.3/framework/Data/adodb/drivers/adodb-mysqli.inc.php)
[密碼 ]這是新數據庫的用戶密碼而非MySQL根用戶密碼。因此這裏你能夠從新設置一個密碼。
運行以下命令:
sudo apt-get install php5 php5-mysql php5-sqlite php-pear
sudo pear install -f -o VersionControl_SVN
個人修改方法較爲暴力:在/etc/apache2目錄下,找到包含/var/www的文件,我把出現「/var/www」的地方都換成了個人目標路徑:「/home/ddu/www」而後用下面命令修改權限及擁有者:
sudo chown www-data.www-data /home/ddu/www -R
chmod -R 755 /home/ddu/www
其它資料顯示能夠設置多個「虛目錄」的,這裏就不深究了。咱們把snmanager-1.09解壓到這個新的WWW目錄下。
這是基礎設置中的最後一步了。咱們進入snmanager-1.09目錄,複製config.php.linux並更名爲config.php。而後打開config.php,做以下修改:
//這裏是SVN全局設置信息文件所在的目錄,默認是在「~/.subversion」下的。
$svn_config_dir = "/home/svn_db/svnconfig";
//與 dav_svn.conf文件中的「SVNParentPath」含義相同
$svn_repos_loc = "/home/svn_db";
//與 dav_svn.conf文件中的「AuthUserFile」含義相同
$svn_passwd_file = "/home/svn_db/passwdfile";
//與 dav_svn.conf文件中的「AuthzSVNAccessFile」含義相同
$svn_access_file = "/home/svn_db/accessfile";
$svn_trash_loc = "/home/svn_db/trash";
$dsn = "mysqli://svnmanager:[密碼]@localhost/svnmanager";
[密碼 ]並不是指MySQL根用戶的密碼O ^0^
基本的設置終於完成了。重啓服務:
sudo service apache2 restart
而後在宿主機的瀏覽器上輸入
http://localhost[:端口]/svnmanager-1.09/
這樣就能夠看下面這個界面了:
圖4.0-1
在重啓apache時你可能會遇到這樣的警告:
root@lamp-server:/home/svn_db# sudo service apache2 restart * Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName ...done
這雖然,不會讓重啓失敗,但很煩人,能夠在/etc/apache2/httpd.conf中加入
ServerName localhost
來解決這問題。
關於配置的話題,其實尚未結束。例如這裏就沒有說如何讓SVNManager支持https.另外限於本人水平有限,不免有不當之處,懇請指正^0^