welcom ! Handel home

顯示具有 java 標籤的文章。 顯示所有文章
顯示具有 java 標籤的文章。 顯示所有文章

2016年4月20日 星期三

RTOS Design software VM 系統架構規劃

** 語言對平台的延續性 慎選語言 要能跨平台 要相容 才能累積成果經驗 減少歸零的挫折
** 軟體技術分析文件 資料結構 演算法 狀態圖 流程圖 才是軟體的靈魂 找對工具軟體 建立標準的文件格式 建立資料
** 建立函數庫 累積資源 提升coding 效率 , 結構化物件化 的規劃 建立 功能導向 需求導向的 函數庫或物件庫 以此 在上層建立 軟體的演算法 資料結構 如此 軟體轉換平台時 只要針對 底層函數庫改寫 或重新編譯
** 軟體系統的分層架構規劃
L00:[HardHDL] 硬體層
L01:[BIOS] 基本io 驅動
L02:[DRIVE1_LOW] 低階驅動 庫
L03:[DRIVE2_HIGH] 高階驅動 庫
L04:[SYS_PUBLIB] 系統公用函數庫
L05:[APP_PUBLIB] 應用公用函數庫
L06:[USER_PUBLIB] 使用及含庫
L07:[APP] 應用程式
各階層的關聯限制 嚴格遵守 提高系統的穩定及高度移植效率
L07 LINK L06,L05,L04
L06 LINK L04,L04
L05 LINK L04,L03
L04 LINK L03,L02
L03 LINK L02,L01
L02 LINK L01,L00
L01 LINK L00
由此理論 應建構一個 理想化的軟體虛擬平台 VM
累積設計資源

2014年7月27日 星期日

SVN簡介和工作原理 [subversion(簡稱svn]

SVN簡介和工作原理
subversion(簡稱svn)是近幾年崛起的版本管理軟體,是cvs的接班人,目前絕大多數開源軟體都使用svn作為代碼版本管理軟體。Subversion支持linuxwindows,但較多安裝在linux下。
svn伺服器有兩種運行方式:獨立伺服器和借助於apache svn://http://
svn
用戶端tortoisesvn
svn
的基本工作原理: 在一台伺服器上建立一個原始程式碼庫,庫裡可以存放許多不同項目的來源程式。有原始程式碼庫管理員統一管理這些來源程式。每個用戶在使用原始程式碼庫之前,首先要把原始程式碼庫裡德專案檔案下載到本地,然後開發人員可以在本地修改,左後用svn命令進行提交,遊原始程式碼庫統一管理修改。
版本控制解決了:
*
代碼管理混亂
*
解決代碼衝突困難
*
在代碼整合期間引發bug
*
無法對代碼的擁有者進行許可權控制
*
專案不同版本的發佈困難
SVN工作原理示意圖:






subversion目錄說明:
*dav
目錄:是提供apachemod_dav_svn使用的目錄,讓他們存儲內部資料
*db
目錄:就是所有版本控制的資料存放檔
*hooks
目錄:放置hook指令檔的目錄
*locks
目錄:用來放置subversion見艱苦鎖定資料的目錄,用來追蹤存取檔庫的用戶端
*format
文件:是一個文字檔,裡面只放了一個整數。表示當前檔庫配置的版本號
*conf
目錄:是這個倉庫的設定檔(倉庫的用戶訪問帳號、許可權等)
SVN Server詳細配置手冊
系統環境
CentOS 5.8
最小化安裝(關閉iptablesselinux) + ssh + yum
一,安裝必須的套裝軟體.
yum install subversion mysql-server httpd mod_dav_svn mod_perl sendmail wget gcc-c++ make unzip perl* ntsysv vim-enhanced
說明:
subversion (SVN
伺服器)
mysql-server (
用於codestriker)
httpd mod_dav_svn mod_perl (
用於支援WEB方式管理SVN伺服器)
sendmail (
用於配置使用者提交代碼後發郵件提醒)
wget gcc-c++ make unzip perl* (
必備套裝軟體)
ntsysv vim-enhanced (
可選)
二,基本的SVN伺服器配置
1
,新建一個目錄用於存儲SVN所有檔
# mkdir /home/svn
2,新建一個版本倉庫
# svnadmin create /home/svn/project
3,初始化版本倉庫中的目錄
# mkdir project project/server project/client project/test (
建立臨時目錄)
# svn import project/ file:///home/svn/project -m “
初始化SVN目錄
# rm -rf project (
刪除臨時建立的目錄)
4,添加用戶
要添加SVN用戶非常簡單,只需在/home/svn/project/conf/passwd檔添加一個形如“username=password”的條目就可以了。為了測試,我添加了如下內容:

[users]
# harry = harryssecret
# sally = sallyssecret
pm = pm_pw
server_group = server_pw
client_group = client_pw
test_group = test_pw

5
,修改用戶訪問策略
/home/svn/project/conf/authz
記錄使用者的訪問策略,以下是參考:

[groups]
project_p = pm
project_s = server1,server2,server3
project_c = client1,client2,client3
project_t = test1,test1,test1
[project:/]
@project_p = rw
* =
[project:/server]
@project_p = rw
@project_s = rw
* =
[project:/client]
@project_p = rw
@project_c = rw
* =
[project:/doc]
@project_p = rw
@project_s = r
@project_c = r
@project_t = r
* =
說明:以上資訊表示,只有project_p使用者組有根目錄的讀寫權。r表示對該目錄有讀許可權,w表示對該目錄有寫許可權,rw表示對該目錄有讀寫許可權。最後一行的* =表示,除了上面設置了許可權的用戶組之外,其他任何人都被禁止訪問本目錄。這個很重要,一定要加上!
6,修改svnserve.conf,讓使用者和策略配置升效.
svnserve.conf
內容如下:

[general]
anon-access = none
auth-access = write
password-db = /home/svn/project/conf/passwd
authz-db = /home/svn/project/conf/authz

7
,啟動伺服器
# svnserve -d -r /home/svn
注意:如果修改了svn配置,需要重啟svn服務,步驟如下:

# ps -aux|grep svnserve
# kill -9 ID

# svnserve -d -r /home/svn

8
,測試伺服器

# svn co svn://192.168.60.10/project
Authentication realm: 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Password for 'root':
Authentication realm: 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Username: server_group
Password for 'server_group':
svn: Authorization failed ( server_group
沒用根目錄的訪問權 )
# svn co svn://192.168.60.10/project
Authentication realm: 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Password for ‘root’:
Authentication realm: 92731041-2dae-4c23-97fd-9e1ed7f0d18d
Username: pm
Password for ‘pm’:
A    project/test
A    project/server
A    project/client
Checked out revision 1.  (
測試提取成功 )
# cd project/server
# vim main.c
# svn add main.c
# svn commit main.c -m “
測試一下我的C程式,看什麼看,不行啊??”
Adding         main.c
Transmitting file data .
Committed revision 2.  (
測試提交成功 )
三,配置SVN伺服器的HTTP支援
1
,轉換SVN伺服器的密碼
由於SVN伺服器的密碼是明文的,HTTP伺服器不與支援,所以需要轉換成HTTP支援的格式。我寫了一個Perl腳本完成這個工作.
腳本內容如下:
# cd /home/svn/project/conf/
# vim PtoWP.pl
#!/usr/bin/perl
# write by huabo, 2009-11-20

use warnings;
use strict;

#open the svn passwd file
open (FILE, "passwd") or die ("Cannot open the passwd file!!!n");

#clear the apache passwd file
open (OUT_FILE, ">webpasswd") or die ("Cannot open the webpasswd file!!!n");
close (OUT_FILE);

#begin
foreach () {
if($_ =~ m/^[^#].*=/) {
$_ =~ s/=//;
`htpasswd -b webpasswd $_`;
}
}
# chmod +x PtoWP.pl
# ./PtoWP.pl
Adding password for user pm
Adding password for user server_group
Adding password for user client_group
Adding password for user test_group
現在目錄下會多一個webpasswd檔。
2,修改httpd.conf,添加關於SVN伺服器的內容
編輯/etc/httpd/conf/httpd.conf,在最後添加如下資訊:


DAV svn
SVNPath /home/svn/project/
AuthType Basic
AuthName "svn for project"
AuthUserFile /home/svn/project/conf/webpasswd
AuthzSVNAccessFile /home/svn/project/conf/authz
Satisfy all
Require valid-user
3,修改svn目錄的屬主為apache帳號:chown -R apache.apache /home/svn/project/
注意:原文少了這一步,會出許可權問題。
4
,重啟Web伺服器:
# /etc/init.d/httpd restart
Stopping httpd: [FAILED]
Starting httpd: [ OK ]
5,用流覽器訪問http://192.168.60.10/project/server/測試
測試結果如下圖所示:


(
測試成功 )
四,配置郵件提醒支援
1
,安裝Perl模組Module::Build

# wget http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/Module-Build-0.36_11.tar.gz
# tar xvf Module-Build-0.36_11.tar.gz
# cd Module-Build-0.36_11
# perl Build.PL
# ./Build
# ./Build test
# ./Build install
# cd ..

2
,安裝Perl模組Authen::SASL

# wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/Authen-SASL-2.15.tar.gz
# tar xvf Authen-SASL-2.15.tar.gz
# cd Authen-SASL-2.15
# perl Makefile.PL
# make test
# make install
# cd ..

3
,安裝Perl模組Net::SMTP_auth

# wget http://search.cpan.org/CPAN/authors/id/A/AP/APLEINER/Net-SMTP_auth-0.08.tar.gz
# tar xvf Net-SMTP_auth-0.08.tar.gz
# cd Net-SMTP_auth-0.08
# perl Makefile.PL
# make test
# make install
# cd ..

4
,安裝Perl模組SVN::Notify

# wget http://search.cpan.org/CPAN/authors/id/D/DW/DWHEELER/SVN-Notify-2.80.tar.gz
# tar xvf SVN-Notify-2.80.tar.gz
# cd SVN-Notify-2.80
# perl Build.PL
# ./Build
# ./Build test
# ./Build install
# cd ..

5
,啟動郵件伺服器
# service sendmail restart
Shutting down sendmail:                                    [FAILED]
Starting sendmail:                                         [  OK  ]
Starting sm-client:                                        [  OK  ]
6,配置自動發郵件腳本
修改post-commit腳本,以支援郵件通知功能.
# cd /home/svn/project/hooks/
# vim post-commit
內容如下:

#!/bin/sh
REPOS="$1"
REV="$2"
/usr/bin/svnnotify –repos-path “$1 –revision “$2 –to caodaijun@pica.com –from caodaijun@feinno.com –handler “HTML::ColorDiff”  –with-diff –smtp localhost –smtp-user root –smtp-pass 5201314318 -c “UTF-8 -g zh_CN -o raw –svnlook /usr/bin/svnlook –subject-prefix ‘[SVN Update]‘
(to參數代表接收郵件的位址,可以有多個,當你有多個老大的時候,這就很重要了,:)。from參數是虛擬的,代表你的發送位址,一般情況下,這個參數 不重要,但如果接收者的郵件伺服器有反垃圾郵件的功能,需要判定源位址的話,這個參數是否合法就顯得很重要了)
再給該腳本添加可執行許可權
# chmod +x post-commit
7,再次提交時,就會給指定郵寄地址發信了。
如下圖所示:


五,其它常用配置
1
,強制寫log腳本
配置pre-commit檔,要求使用者每次更新檔都必須寫log.
# cd /home/svn/project/hooks/
# vim pre-commit
檔內容如下:

#!/bin/sh
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`
if [ "$LOGMSG" -lt 5(
要求的log長度,依實際需要修改) ];
then
echo -e "nEmpty log message not allowed. Commit aborted!" 1>&2
exit 1
fi

配置完成後,給本件加上可執行許可權。再提交代碼時,就必須按要求寫注釋了,:)
2,可修改log腳本
配置pre-revprop-change檔,此檔在show log中修改log時會運行,得到修改的許可權,否則會報錯:DAV request failed; it’s possible that the repository’s pre-revprop-change hook either failed or is non-existent. At least one property change failed; repository is unchanged
# cd /home/svn/project/hooks/
# vim pre-revprop-change
檔內容如下:

REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
if ["$PROPNAME" = "svn:log"];then exit 0;fi
exit 1

配置完後加可執行許可權升效。
六,備份管理
svn
伺服器的定期備份是很重要的,最簡單的方式是定時備份倉庫目錄。
1
,新建備份目錄
# mkdir /opt/project_backup
2,編寫備份腳本
# cd /home/svn/
# vim project_backup.sh
內容如下:

#!/bin/bash
#write by huabo, 2009-11-20
cd /home/svn
now=`/bin/date +%Y%m%d`
/bin/tar czvf “project_backup_$now.tar.gz” project/ && rm -rf /opt/project_backup/* && /bin/mv project_backup_*.tar.gz /opt/project_backup/
if [ $? == 0 ]
then
result=”OK!!”
else
result=”False!!”
fi
#send mail to administrator
/bin/mail caodaijun@pica.com -s “project_backup_$now” < Result: `/bin/echo $result`
MESSAGE
給該腳本添加可執行許可權。
3,設定每天定時執行該腳本.
# crontab -e
輸入如下內容:
0 23 * * * /home/svn/project_backup.sh
表示每天晚上23點運行此腳本。
經過以上三步操作,就可以自動備份SVN資料了,且不論備份是否成功,都會給使用者發送郵件資訊。
七,用svnstat分析SVN資料.
1
,安裝JAVA
svnstat
JAVA應用程式,需要先安裝JAVA環境。
下載jreURL: http://javadl.sun.com/webapps/download/AutoDL?BundleId=39484
安裝:
# chmod +x jre-6u20-linux-i586-rpm.bin
# ./jre-6u20-linux-i586-rpm.bin
2,下載svnstat
# wget http://downloads.sourceforge.net/project/svnstat/svnstat/Release-1.0/SvnStat-1.0.zip?use_mirror=jaist
# unzip SvnStat-1.0.zip
3,更新代碼
# pwd
/root
# svn co svn://192.168.60.10/project
A    project/test
A    project/server
A    project/server/main.c
A    project/client
Checked out revision 5.
4,生成svnstat資料
# svn log project -v –xml –non-interactive > project.log
# cd SvnStat-1.0
# java -classpath SvnStat-all.jar de.agentlab.svnstat.SvnStat -jar SvnStat-all.jar -r /root/project.log -d /var/www/html/
5,用流覽器登錄即可看到許多統計出來的圖表。大致如下圖所示:


八,用statsvn分析SVN資料
1
,下載statsvn
# wget http://downloads.sourceforge.net/project/statsvn/statsvn/0.7.0/statsvn-0.7.0.zip?use_mirror=jaist
# unzip statsvn-0.7.0.zip
# cd statsvn-0.7.0
2,生成statsvn資料
# mkdir /var/www/html/statsvn
# java -jar statsvn.jar -verbose -output-dir /var/www/html/statsvn/ /root/project.log /root/project
3,用流覽器測測試效果如下圖:


九,配置codestriker.
1.
安裝codestriker依賴的perl.
# perl -MCPAN -e ‘install “Template”‘
2.下載codestriker
# wget http://downloads.sourceforge.net/project/codestriker/codestriker/1.9.10/codestriker-1.9.10.tar.gz?use_mirror=jaist&ts=1279246587
# mkdir /var/www/codestriker
# cd /var/www/codestriker
# tar xvf /path/codestriker-1.9.10.tar.gz
# chown -R apache.apache codestriker-1.9.10
3.配置資料庫
# service mysqld restart
# mysql -uroot mysql
執行:
CREATE DATABASE codestrikerdb CHARACTER SET utf8;
GRANT SELECT,INSERT,UPDATE,DELETE,INDEX,ALTER,CREATE,DROP,REFERENCES ON codestrikerdb.* TO codestriker@localhost IDENTIFIED BY ‘cspasswd’;
FLUSH PRIVILEGES;
quit
4.配置codestriker
# cd codestriker-1.9.10/
# vim codestriker.conf
注意以下幾點(詳細可查看codestriker的安裝文檔)
a.
資料庫的用戶名密碼要配對
b.svn
的資料倉庫要配對,我的如下:
@valid_repositories =
(
‘svn:file:///home/svn/project’,
)
5.執行codestriker的安裝腳本
# cd bin/
# ./install.pl
6.配置http支援
# vim /etc/httpd/conf/httpd.conf
在最後面加上如下內容:
Alias /codestriker/  /var/www/codestriker/codestriker-1.9.10/cgi-bin/
Alias /codestrikerhtml/  /var/www/codestriker/codestriker-1.9.10/html/

SetHandler perl-script
PerlHandler ModPerl::Registry
Options +ExecCGI

AllowOverride None
Allow from all


7.
重啟Web服務
# service httpd restart
8.在流覽器中輸入http://192.168.60.10/codestriker/codestriker.pl即可訪問,如下圖:

參考:http://wiki.centos.org/HowTos/Subversion