開發(fā)服務(wù)器環(huán)境搭建
- 目的:在Linux平臺(tái)上搭建一個(gè)協(xié)同開發(fā)工作環(huán)境
- 軟件:Linux 2.6 + Apache2 + PHP4.x + Mysql5.x; subversion1.3.1 + mantis1.0.2
- 基本思路:
- 使用LAMP搭建一個(gè)Web接口,便于管理
- 使用subversion進(jìn)行版本控制
- 使用trac進(jìn)行bug(缺陷)跟蹤(也可選用mantis)。
一、安裝軟件
在linux下常用的安裝方式是使用rpm包,我們選用yum(或者apt-get)工具來(lái)解決包之間的依賴關(guān)系,具體如何用法,這里不再贅述,不懂得問(wèn)一下Mr. Google或者百度先生吧。如果你覺(jué)得自己用tar包,編譯安裝的方式比較爽,你也可以試一下,不過(guò)不推薦喲,別人幫你做好了,干嗎還要費(fèi)那個(gè)勁。我這里給出一個(gè)自動(dòng)化的腳本,可能里面某些軟件在你機(jī)器上的配置找不到,那么需要你到網(wǎng)上查一下,把相應(yīng)倉(cāng)庫(kù)的地址加入到y(tǒng)um的配置文件當(dāng)中。
# install python yum -y install python.i386 python-devel.i386 python-lxml.i386 python-sqlite.i386 python-clearsilver.i386 swig.i386 python-setuptools.noarch
# install subversion yum -y install subversion.i386 subversion-devel.i386 # install clearsilver yum -y install clearsilver.i386 clearsilver-devel.i386
# install sqlite yum -y install clearsilver.i386 clearsilver-devel.i386
# install LAMP yum -y install httpd.i386 mod_auth_mysql.i386 mod_dav_svn.i386 mod_log_sql.i386 mod_authz_ldap.i386 mod_python.i386 mod_ssl.i386
yum -y install MySQL-python.i386 mysql.i386 mysql-devel.i386 mysql-server.i386
yum -y install php-xml.i386 php.i386 mod_suphp.i386 php-devel.i386 php-ldap.i386 p-readline.i386
# install optional yum -y install enscript.i386
# install trac yum -y install trac.noarch
# install mantis yum -y install mantis.noarch
|
上述軟件安裝完成之后,默認(rèn)情況下trac被安裝在/usr/share/trac下,其他應(yīng)該在/bin或者/usr/bin目錄下。
軟件安裝完成之后,下面就開始我們的平臺(tái)搭建。我們要建立兩個(gè)工程projectA和projectB,使用WEB界面進(jìn)行管理。
二、搭建平臺(tái)
- 創(chuàng)建subversion倉(cāng)庫(kù)并配置subversion
假定倉(cāng)庫(kù)的地址為 /work/repos,我們進(jìn)行如下的操作:
#svnadmin create --fs-type fsfs /work/repos/projectA #svnadmin create --fs-type fsfs /work/repos/projectB |
經(jīng)過(guò)上面兩步,我們已經(jīng)創(chuàng)建了兩個(gè)倉(cāng)庫(kù),下面是要對(duì)它進(jìn)行一些設(shè)定了,主要就是訪問(wèn)權(quán)限之類的以及服務(wù)運(yùn)行方式。關(guān)于subversion的用法,可以到其站點(diǎn)或者svn中國(guó)上找本文檔看看。
主要設(shè)置 /work/repos/ProjectA/conf/下面的passwd和authz文件,具體如何設(shè)置請(qǐng)查看svn的幫助。
subversion有三種運(yùn)行方式,本地,svnsever,以及同apache整合,我們要使用的是最后一種方式,后面會(huì)具體介紹如何配置。
- 創(chuàng)建trac環(huán)境并對(duì)其進(jìn)行配置
接下來(lái)我們要?jiǎng)?chuàng)建trac的環(huán)境,假定我們安裝到/work/trac-env/目錄下,使用如下命令:
#trac-admin /work/trac-env/projectA initenv #trac-admin /work/trac-env/projectB initenv |
在執(zhí)行上述命令的時(shí)候會(huì)問(wèn)你svn倉(cāng)庫(kù)的地址,告訴它在/work/repos/projectA,/work/repos/ProjectB下面就是了,如果你弄錯(cuò)了也沒(méi)有關(guān)系,因?yàn)榭梢允謩?dòng)配置的,而且很簡(jiǎn)單哪。配置文件放在了conf/trac.ini下,具體配置選項(xiàng)的意義和用法,這里也不講,參考其主頁(yè)上的說(shuō)明。
我們的主要精力放在了如何把subversion以及trac和apache結(jié)合起來(lái),提供一個(gè)web管理界面上,所以這部分是我們的重頭戲。
如果按照我們上面的腳本的安裝方式,在安裝完成后,在/etc/httpd/conf.d/目錄下面應(yīng)該有subversion.conf和trac.conf兩個(gè)文件,我們分別配置他們就行了,二者沒(méi)有必然的聯(lián)系。
主要是配置 /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so #上面兩行用于家在模塊 <Location /repos> DAV svn # SVNPath /work/repos/projectA #如果只顯示一個(gè)工程,則用這個(gè) SVNParentPath /work/repos #顯示所有工程 # 下面進(jìn)行權(quán)限配置 # # Limit write permission to list of valid users. <LimitExcept GET PROPFIND OPTIONS REPORT> # # Require SSL connection for password protection. # # SSLRequireSSL # AuthType Basic AuthName "subversion repository" AuthUserFile /work/repos/.htpasswd #密碼文件必須用htpasswd生成 AuthzSVNAccessFile /work/repos/.authz #管理組的權(quán)限 Require valid-user </LimitExcept> </Location> |
可以使用命令 #htpasswd -cm /work/repos/.htpasswd lirui來(lái)為用戶lirui添加密碼,建立文件/work/repos/.authz,并按照svn的格式要求配置它。
在配置完成后,重新啟動(dòng)http服務(wù):#apachectl restart
這時(shí)候就可以通過(guò)命令:svn co http://your_site_ip/repos/projectA
把projectA的源碼check到本地了(前提是你有相應(yīng)權(quán)限),如果具有寫權(quán)限,以后可以直接通過(guò)svn commit命令提交修改結(jié)果。
配置/etc/httpd/conf.d/trac.conf,下面是給出的一個(gè)藍(lán)本
#設(shè)定目錄權(quán)限,如果不設(shè)置這個(gè),你會(huì)得到?jīng)]有訪問(wèn)權(quán)限的錯(cuò)誤,很煩人喲 <Directory "/usr/share/trac/htdocs"> Order allow,deny Allow from all </Directory> #以后你就可以輸入 http://your_site/trac來(lái)訪問(wèn),執(zhí)行的就是這個(gè)trac.cgi
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
### Trac need to know where the database is located <Location "/trac"> # SetEnv TRAC_ENV "/work/trac-env/projectA" #如果只顯示一個(gè)工程,用這個(gè) SetEnv TRAC_ENV_PARENT_DIR "/work/trac-env" #顯示多個(gè)工程 </Location> ### You need this to allow users to authenticate <Location "/trac/login"> AuthType Basic AuthName "trac" AuthUserFile /work/trac-env/trac.htpasswd #使用htpasswd生成的密碼文件 Require valid-user </location>
ScriptAlias /trac/projectA /usr/share/trac/cgi-bin/trac.cgi
### Trac need to know where the database is located <Location "/trac/projectA"> SetEnv TRAC_ENV "/work/trac-env/projectA" #如果只顯示一個(gè)工程,用這個(gè) # SetEnv TRAC_ENV_PARENT_DIR "/work/trac-env" #顯示多個(gè)工程 </Location> ### You need this to allow users to authenticate <Location "/trac/project/Alogin"> AuthType Basic AuthName "trac" AuthUserFile /work/trac-env/projectA/trac.htpasswd #使用htpasswd生成的密碼文件 Require valid-user </location>
ScriptAlias /trac/projectB /usr/share/trac/cgi-bin/trac.cgi
### Trac need to know where the database is located <Location "/trac/projectA"> SetEnv TRAC_ENV "/work/trac-env/projectB" #如果只顯示一個(gè)工程,用這個(gè) # SetEnv TRAC_ENV_PARENT_DIR "/work/trac-env" #顯示多個(gè)工程 </Location> ### You need this to allow users to authenticate <Location "/trac/project/Alogin"> AuthType Basic AuthName "trac" AuthUserFile /work/trac-env/projectB/trac.htpasswd #使用htpasswd生成的密碼文件 Require valid-user </location> |
至此,我們已經(jīng)配置完了,現(xiàn)在在瀏覽器輸入 http://your_site_ip/trac/projectA 就能看到一個(gè)web界面的管理系統(tǒng)了,好好體驗(yàn)一把嘍。
還有一點(diǎn)不是很爽,有時(shí)候我們需要只輸入IP就能找到我們需要的網(wǎng)頁(yè),比如我們輸入http://your_site就得到一個(gè)頁(yè)面,而不要http://your_site_ip/trac/projectA才得到。我的做法是建立文件/var/www/html/index.html,并設(shè)置其轉(zhuǎn)到對(duì)應(yīng)頁(yè)。下面是我的一個(gè)設(shè)置:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Redirection</title> <meta http-equiv="refresh" content="0;URL=/trac/projectA"> </head> <body> <h1><center> edirecting to trac bug system ...<br> <a href="/trac/projectA">哈哈,到這來(lái)</a> </h1> </body> </html> |
三、使用簡(jiǎn)介
如果你之前使用過(guò)cvs,那么你肯定也會(huì)用svn,因?yàn)樗鼈兊拿罨疽粯?,而且常用的也就那么幾個(gè)“ update, commit, status, log“等,如果沒(méi)有用過(guò),那么找本svn book來(lái)看,或者直接到 http://subverion. 上面看它的文檔吧
主要講述它的導(dǎo)航欄中每個(gè)項(xiàng)目的用途
- 在wiki上發(fā)布項(xiàng)目的各種文檔,項(xiàng)目信息等;
- souce一欄可以看到工程的源碼,而且可以看到詳細(xì)的更改信息,語(yǔ)法高亮,版本記錄,修改信息等,而且可以以不同顏色區(qū)分兩個(gè)版本的不同,比cvs有更好的界面
- 使用ticket來(lái)匯報(bào)bug,可以對(duì)bug進(jìn)行跟蹤,可以設(shè)置郵件提醒
- 在roadmap一欄,對(duì)工程進(jìn)度進(jìn)行跟蹤
- 可以提供Rss支持,訂閱RSS,隨時(shí)跟蹤網(wǎng)站的變化
l
這里也給出另外一種選擇: svn(cvs)〔版本控制〕 + viewVC〔web界面〕 + mantis〔bug追蹤〕,如果可能的話,我會(huì)給出這種選擇的配置情況。這里有一篇講述如何在windows下安裝viewVC的 http://schnell.blogchina.com/4627119.html , 還有竹筍炒肉的mantis學(xué)習(xí)筆記http://hedong./archives/000263.html
四 viewvc 安裝手記
基本步驟如下
- 下載viewvc-1.0.0.tar.gz和enscript-1.6.4.tar.gz
- 將二者分解解壓縮進(jìn)行安裝
- 拷貝安裝viewvc目錄下 bin/cgi/viewvc.cgi 到 /var/www/cgi-bin/viewvc.cgi
- 配置viewvc,告訴它你的源碼倉(cāng)庫(kù)所在的位置
- 如果需要的話,還可以為apache配置scriptAlias
這里給出一個(gè)自動(dòng)安裝的腳本,它自動(dòng)幫你完成了上面的1,2,3步的工作
#!/bin/bash
wget http://viewvc./files/documents/3330/31766/viewvc-1.0.0.tar.gz
wget http://www./mtr/genscript/enscript-1.6.4.tar.gz
tar -xf enscript-1.6.4.tar.gz
cd enscript-1.6.4
./configure
make && make install
# if success, enscript will install on /usr/local/bin /usr/local/share/enscript
tar xf viewvc-1.0.0.tar.gz
cd viewvc-1.0.0
# just press <enter> for options
read pause
./viewvc-install
# just press <enter> for options
echo ‘install viewvc ok‘
# after that viewvc will be installed in /usr/local/viewvc-1.0.0
cp /usr/local/viewvc-1.0.0/bin/cgi/viewvc.cgi /var/www/cgi-bin
echo ‘++++++++++++++++++++++++++++++++++++++++++++++++++‘
echo ‘| configure /usr/local/viewvc-1.0.0/viewvc.conf |‘
echo ‘++++++++++++++++++++++++++++++++++++++++++++++++++‘
這里再給出一個(gè)viewvc的配置范例,其中主要設(shè)置的地方在 root_parents,default_root 以及有關(guān)enscript用于語(yǔ)法高亮的東西
root_parents = /home/svn-repos: svn,
/home/cvs-repos: cvs
default_root = hypersim
use_rcsparse = 0
address = <div>Administered by: <strong>ASL HyperSim Team</strong> <a href="mailto:lirui@ncic.ac.cn">lirui</a>
forbidden =
kv_files =
languages = en-us
[options]
root_as_url_component = 0
default_file_view = log
checkout_magic = 0
http_expiration_time = 600
generate_etags = 1
sort_by = file
sort_group_dirs = 1
hide_attic = 1
log_sort = date
diff_format = h
hide_cvsroot = 1
hr_breakable = 1
hr_funout = 0
hr_ignore_white = 1
hr_ignore_keyword_subst = 1
hr_intraline = 0
allow_annotate = 1
allow_markup = 1
allow_compress = 1
template_dir = templates
show_subdir_lastmod = 0
show_logs = 1
show_log_in_markup = 1
cross_copies = 1
use_localtime = 0
py2html_path = .
short_log_len = 80
#setting for syntax highlightning
use_enscript = 1
enscript_path = /usr/loca/bin
# should we add line numbers?
highlight_line_numbers = 1
# convert tabs to ## spaces (use 0 for no conversion)
highlight_convert_tabs = 4
use_php = 0
php_exe_path = php
allow_tar = 0
use_cvsgraph = 0
cvsgraph_path =
cvsgraph_conf = cvsgraph.conf
use_re_search = 0
use_pagesize = 0
limit_changes = 100
[cvsdb]
enabled = 0
其中這些都在各自的領(lǐng)域做的都很好,如果有一個(gè)能夠把這些工具集大成者,就很好了,有個(gè)scmbug好像在做這方面的努力。