12 8月 2009

Spring3 Maven Repository

Spring repositories
由於Spring3還是在測試階段,所以並沒有把library放到多數公開的repository上,所以要取用的話必需加些repository到maven裡

<repositories>
    <repository>
        <id>SpringSource Enterprise Bundle Repository - External Bundle Milestones</id>
        <url>http://repository.springsource.com/maven/bundles/milestone</url>
    </repository>
    <repository>
        <id>SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases</id>
        <url>http://repository.springsource.com/maven/bundles/release</url>
    </repository>
    <repository>
        <id>SpringSource Enterprise Bundle Repository - External Bundle Releases</id>
        <url>http://repository.springsource.com/maven/bundles/external</url>
    </repository>
</repositories>

如果不知道有哪些library可以用,那可以透過下面這url確認一下

http://s3browse.com/explore/repository.springsource.com/maven/bundles/milestone/org/springframework/

06 8月 2009

為什麼VCS要能透過HTTP存取對我很重要

有朋友問著,Subversion用svn protocol,Git就用git protocol,設定起來不是比較容易嗎?

當然,在Intranet裡,通常你要怎麼用都沒問題,問題是當你離開辦公室後,或是特別的因素開發人員必需分隔兩地時,能不能透過HTTP來存取VCS就很重要了。

從公司內部來看,很少MIS會願意特別幫我在防火牆上去開svn, git要用的port,要不然也要經過相當麻煩的申請手續,除非我就是那個網路管理者。

從身在他地的人來看,如果是在自己家中還好,不會特別去關svn, git用到的port,但是如果是身在其他公司內會有網路使用限制的人,恐怕連pop3/smtp, ftp都不能連了,更不用提這些svn, git所用的port。

所以能透過最不容易被擋的HTTP存取VCS的重要性就在這囉。

Apache2 + SSL on Ubuntu 8.10

主要是參照SSL on Ubuntu 8.10 Apache2

(1)Open Apache SSL Module
sudo a2enmod ssl
(2)Create server's private key and certificate
cd /etc/apache2
sudo openssl genrsa -des3 -out server.key 1024
sudo openssl req -new -key server.key -out server.csr
sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
這時會問些國家、公司之類的問題,照著回答就OK了,回答的資料會顥示在Browser的憑證清單裡
(3)Install the key and certificate:
sudo cp server.crt /etc/ssl/certs/
sudo cp server.key /etc/ssl/private/
(4)Edit default-ssl configuration
sudo vim /etc/apache2/sites-available/default-ssl
add
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
(5)Enable default-ssl and restart apache2
sudo a2ensite default-ssl
sudo /etc/init.d/apache2 restart

05 8月 2009

GIT + Apache2 on Ubuntu 8.10 (1)

前言
很早前就聽過GIT這個分散式的VCS,但是因為Subversion對我而言實在相當夠用,一直沒有想要更換的念頭,直到最近開始用了JRuby 才有了用用看的念頭,花了點時間確認GIT可以透過Apache走HTTP/HTTPS來checkin/checkout,而且Maven的SCM也支援GIT, 就開始了跟GIT奮戰的過程,我想至少花了4小時才確認這個GIT的Service是可用的。主要是因為不熟GIT的command,無法確認是否正 常。

安裝
(0)由於我已經有安裝了Apache2與Subversion,所以略過Apache2及DAV module的安裝,並且採用Subversion的帳號密碼檔

(1)安裝git-core curl

$>sudo apt-get install git-core curl

這時執行

$>git --version

應該會出現下到訊息,代表git應該可以用了
git version 1.5.6.3

再來是建立curl會用到帳密

$>touch ~/.netrc
然後在.netrc中加入下列資料

machine localhost
login youraccount #same with subversion
password yourpassword #same with subversion

(2)建立GIT repository

$>sudo mkdir /var/lib/git #先建一個git root,再將其他repository放在其下
$>sudo mkdir /var/lib/git/repo1
$>cd /var/lib/git/repo1
$>sudo git --bare init
$>sudo git-update-server-info
$>sudo chmod +x hooks/post-update #在透過http commit後會自動執行git-update-server-info
你會看到下列這樣的訊息,代表init成功
Initialized empty Git repository in /var/lib/git/repo1/
再設定權限,讓Apache2可以存取
$>sudo chown www-data:www-data -R /var/lib/git

(3)enable apache2 dav_fs, dav module
$>sudo a2enmod dav_fs
$>sudo a2enmod dav
因為我已經有裝Subversion,想說應該不用設定才是,後來發現只有起用dav這個module,而dav_fs沒起用,就是不行
所以還是記得要確認一下

(4)config git dav
建立Apache2用的GIT DAV設定
$>sudo touch /etc/apache2/mods-available/dav_git.conf
$>sudo ln -s /etc/apache2/mods-available/dav_git.conf /etc/apache2/mods-enabled/dav_git.conf
然後修改/etc/apache2/mods-available/dav_git.conf,將在第2個Step中加入的GIT Repository設為DAV,並指定
HTTP連結路徑為/git/repo1

Alias /git "/var/lib/git"
<Location /git/repo1>
	DAV on
	AuthType Basic
	AuthName "Git Repository"
	AuthUserFile "/etc/apache2/dav_svn.passwd"
	Require valid-user
</Location>

(5)restart apache2

$>sudo /etc/init.d/apache2 restart
這時再用Browser連結http://localhost:8080/git/repo1/HEAD,輸入帳密後應該可以看見下列訊息
ref: refs/heads/master

(6)clone repo1
在任一空目錄下執行git clone

$>git clone http://localhost/git/repo1
應該可以看到
Initialized empty Git repository in /yourpath/repo1/.git/
warning: You appear to have cloned an empty repository.

(7)test commit

$>touch readme
$>git add readme
$>git commit -m "first"
[master (root-commit) 29db40b] first
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 readme
$>git push origin master
Fetching remote heads...
refs/
refs/heads/
refs/tags/
updating 'refs/heads/master'
from 0000000000000000000000000000000000000000
to 29db40b949a69400ea4377c28703b6073c91d785
sending 3 objects
done
Updating remote server info