2011/06/17

全Linux生活:第47天 - Fedora 15真的不錯,但還是輸給Ubuntu 11.04﹍

From Evernote:

全Linux生活:第47天 - Fedora 15真的不錯,但還是輸給Ubuntu 11.04﹍

嗯﹍Fedora 15終於開始有比較像樣的UI了,操作上完全跳脫M$系統的框架,新的操作方式我覺得甚至比Windows7好,耳目一新,很快就可以適應,但很可惜,小細節的精緻度還是遠遠落後Ubuntu 11.04,當然最大的敗筆還是字型,再來就是過大的應用程式圖示,搞到像十元硬幣那麼大是怎樣﹍當我們是蝦子嗎!

結論:如果要當Server,乖乖裝CentOS 5.6吧,如果要當Desktop,目前沒別得選擇就是Ubuntu 11.04了,那Fedora 15可以當Desktop嗎?先把字型的顯示精緻化才有機會,否則很難滿足像我們這種視覺系的使用者,最重要就是要看起來很爽,不然怎麽用得下去?不過從Fedora 15看得出來,要用Fedora當Desktop應該不會等太久,也許Fedora 16有機會,但比較可能是Fedora 17以後。

2011/06/03

全Linux生活:第34天 - BitNami Redmine Stack設定篇

From Evernote:

全Linux生活:第34天 - BitNami Redmine Stack設定篇

BitNami Redmine Stack不是說很簡單,還要設定嗎?其實要看每個人的雞歪程度來決定!一般狀況下的確是不用設定就可以用了,到底多簡單看就知道,首先下載安裝檔:

     http://bitnami.org/files/stacks/redmine/1.2.0-0/bitnami-redmine-1.2.0-0-linux-installer.bin

執行安裝檔:

     $ chmod +x bitnami-redmine-1.2.0-0-linux-installer.bin
     $ ./bitnami-redmine-1.2.0-0-linux-installer.bin

設定基本資訊:
設定安裝目錄
     預設:/opt/redmine-1.2.0-0
設定Redmine管理員使用者代號
     範例:admin
設定Redmine管理員使用者密碼
設定Redmine管理員使用者名稱
     範例:Redmine Administrator
設定Redmine管理員email帳號
     範例:projectname.iisi.com.tw@gmail.com
設定Redmine管理員使用語言
     預設:[4] English
設定Redmine SMTP
設定Redmine SMTP伺服器位址
     範例:smtp.gmail.com
設定Redmine SMTP Domain
     範例:smtp.gmail.com
設定Redmine SMTP埠號
     範例:587
設定Redmine SMTP帳號
     範例:projectname.iisi.com.tw@gmail.com
設定Redmine SMTP密碼

接下來就是等待安裝﹍

Screenshot_redmine_installation

安裝完成後會問我們要不要啟動Redmine,如果你已經迫不期待想知道Redmine到底是圓的還是方的,可以回答Y立即啟動。

瀏覽器開啟網址:http://<redmine_server_ip>/ ,當然,BitNami還是要宣告一下主權,不然我們可能會忘了它的存在!

Screenshot_bitnami_running

主角上場,點上圖中的"Access BitNami Redmine Stack"或是直接開啟網址:http://<redmine_server_ip>/redmine/,登入在右上角,用剛剛設定的管理員帳號與密碼登入﹍好了,這就是傳說中的Redmine!比自己搞半天還裝得五五六六實在快太多了,重點是如果不說也許你還沒發現其實Redmine是用Rudy on Rail寫的,而且還省掉搞那些Rudy和MySQL還有Apache加起來有三卡車的亂七八糟設定了。

Screenshot_redmine_running

咦,結束了嗎?廢話,當然沒有!又不是第一天搞電腦,當然知道事情怎麽可能那麼順利,有這種程度已經是佛心來的了!其實裝到這裡,是真的已經可以用了,但雞歪一點的人會發現幾件事:

     1. 只有HTTP,沒有HTTPS,資料被人看光光,Oh my god!
     2. Email永遠通知不到要通知的人﹍Holy shit!
     3. Subversion根本還沒設定!不過這不能怪BitNami啦,我們又沒跟他說我們要用Subversion!搞不好有人想用Git不行嗎?
     4. Subversion就算照README.txt設定好,媽的!怎麽只支援svn://﹍連source code也被看光光﹍給我https啦!

BitNami會將所有的東西放在安裝目錄中,也就是/opt/redmine-1.2.0-0目錄下,啟動與停止系統可以這樣做:

     啟動所有servers
     $ sudo ./ctlscript.sh start

     只啟動特定server
     $ sudo ./ctlscript.sh start apache
     $ sudo ./ctlscript.sh start mysql
     $ sudo ./ctlscript.sh start subversion
     $ sudo ./ctlscript.sh start redmine

     停止所有servers
     $ sudo ./ctlscript.sh stop

     只停止特定server
     $ sudo ./ctlscript.sh stop apache
     $ sudo ./ctlscript.sh stop mysql
     $ sudo ./ctlscript.sh stop subversion
     $ sudo ./ctlscript.sh stop redmine


如何啟用HTTPS

1. 修改/opt/redmine-1.2.0-0/apache2/conf/httpd.conf

     $ sudo vi /opt/redmine-1.2.0-0/apache2/conf/httpd.conf

     載入SSL設定檔,找出這行:
     #Include conf/extra/httpd-ssl.conf
     註解拿掉:
     Include conf/extra/httpd-ssl.conf

     避免Redmine的資料被HTTP存取,找到這行:
     Include "/opt/redmine-1.1.3-1/apps/redmine/conf/redmine.conf"
     加上註解:
     #Include "/opt/redmine-1.1.3-1/apps/redmine/conf/redmine.conf"

2. 產生SSL憑證

     $ sudo /opt/redmine-1.2.0-0/common/bin/openssl genrsa -des3 -passout pass:密碼 -out /opt/redmine-1.2.0-0/apache2/conf/privatekey.pem 1024
     $ sudo /opt/redmine-1.2.0-0/common/bin/openssl req -new -key /opt/redmine-1.2.0-0/apache2/conf/privatekey.pem -out /opt/redmine-1.2.0-0/apache2/conf/cert.csr
     設定憑證資訊,這些資訊知道的話就輸入,但大部分如果不知道要打什麼就直接按Enter留白,但記得輪到Common Name(CN)時一定要回答,不可以空白。
     $ sudo /opt/redmine-1.2.0-0/common/bin/openssl rsa -in /opt/redmine-1.2.0-0/apache2/conf/privatekey.pem -out /opt/redmine-1.2.0-0/apache2/conf/server.key
     $ sudo /opt/redmine-1.2.0-0/common/bin/openssl x509 -in /opt/redmine-1.2.0-0/apache2/conf/cert.csr -out /opt/redmine-1.2.0-0/apache2/conf/server.crt -req -signkey /opt/redmine-1.2.0-0/apache/conf/server.key -days 36500
     36500指憑證有效期100年,夠久了吧。

3. 修改/opt/redmine-1.2.0-0/apache2/conf/extra/httpd-ssl.conf

     $ sudo vi /opt/redmine-1.2.0-0/apache2/conf/extra/httpd-ssl.conf

     確保所有Request都會使用HTTPS。找出以下區段:
     #   General setup for the virtual host
     DocumentRoot "/opt/redmine-1.2.0-0/apache2/htdocs"
     ServerName www.example.com:443
     ServerAdmin you@example.com
     ErrorLog "/opt/redmine-1.2.0-0/apache2/logs/error_log"
     TransferLog "/opt/redmine-1.2.0-0/apache2/logs/access_log"
     後面加上一行設定如下:
     #   General setup for the virtual host
     DocumentRoot "/opt/redmine-1.2.0-0/apache2/htdocs"
     ServerName you@example.com:443
     ServerAdmin you@example.com
     ErrorLog "/opt/redmine-1.2.0-0/apache2/logs/error_log"
     TransferLog "/opt/redmine-1.2.0-0/apache2/logs/access_log"
     RequestHeader set X_FORWARDED_PROTO 'https'

     設定server.csr與server.key,不過剛好我們產生憑證時已故意將憑證與金鑰產生在與設定檔裡的設定相同,所以就不用再改了。

     加上Redmine相關設定,讓Redmine的網頁可以使用HTTPS連入。找出以下區段:
     CustomLog "/opt/redmine-1.2.0-0/apache2/logs/ssl_request_log" \
               "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

     </VirtualHost>
     加上一行如下:
     CustomLog "/opt/redmine-1.2.0-0/apache2/logs/ssl_request_log" \
               "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
     Include "/opt/redmine-1.2.0-0/apps/redmine/conf/redmine.conf"
     </VirtualHost>

4. 重新啟動Apache

     $ sudo /opt/redmine-1.2.0-0/ctlscript.sh restart apache

5. 以後改用https://<redmine_server_ip>/redmine/取代http://<redmine_server_ip>/redmine/,而且HTTP不能再用來連Redmine了。

如何設定真的可以用的EMAIL通知

安裝時候可以設定SMTP參數,但那僅限走不加密的SMTP Server可以在設定好直接使用,而且一般是走25埠。因為我們這次打算使用gmail來送信, Gmail使用TLS加密,埠號是587,不幸的是,BitNami安裝Redmine時並沒有把TLS相關的程式加進來,所以有些事還是要自己來。

1. 安裝TLS Plugin

     $ cd /opt/redmine-1.2.0-0
     $ sudo ./use_redmine
     # cd apps/redmine
     # ruby script/plugin install git://github.com/collectiveidea/action_mailer_optional_tls.git
     Initialized empty Git repository in /opt/redmine-1.2.0-0/apps/redmine/vendor/plugins/action_mailer_optional_tls/.git/
     remote: Counting objects: 14, done.
     remote: Compressing objects: 100% (10/10), done.
     remote: Total 14 (delta 2), reused 10 (delta 2)
     Unpacking objects: 100% (14/14), done.
     From git://github.com/collectiveidea/action_mailer_optional_tls
      * branch            HEAD       -> FETCH_HEAD

2. 編輯/opt/redmine-1.2.0-0/apps/redmine/config/email.yml,修改如下:

     production:
       delivery_method: :smtp
       smtp_settings:
         tls: true
         address: "smtp.gmail.com"
         port: '587'
         domain: "smtp.gmail.com"
         authentication: :plain
         user_name: "projectname.iisi.com.tw@gmail.com"
         password: "密碼"

     development:
       delivery_method: :smtp
       smtp_settings:
         tls: true
         address: "smtp.gmail.com"
         port: '587'
         domain: "smtp.gmail.com"
         authentication: :plain
         user_name: "projectname.iisi.com.tw@gmail.com"
         password: "密碼"

3. 重新啟動

     $ sudo /opt/redmine-1.2.0-0/ctlscript.sh stop
     $ sudo /opt/redmine-1.2.0-0/ctlscript.sh start

如何設定Subversion

Subversion支援四種Protocols: http://,https://,svn://,svn+ssh://,因為我們只要用https://所以其他類型就先省略了。

1. 編輯/opt/redmine-1.2.0-0/apache2/conf/httpd.conf,加入Subversion模組

     $ sudo vi /opt/redmine-1.2.0-0/apache2/conf/httpd.conf
     跟apache說要載入svn相關模組,找出這兩行:
     #LoadModule dav_svn_module     modules/mod_dav_svn.so
     #LoadModule authz_svn_module   modules/mod_authz_svn.so
     把註解拿掉
     LoadModule dav_svn_module     modules/mod_dav_svn.so
     LoadModule authz_svn_module   modules/mod_authz_svn.so

2. 建立Subversion Repository

因為BitNami使用的Subversion Apache Module需要特定版本的SQLite檔案,但安裝時沒有放進去,會造成新版的Subversion資料庫檔案寫入失敗,因此建立儲存庫時必須註明相容1.6以前的版本:

     $ sudo /opt/redmine-1.2.0-0/subversion/bin/svnadmin create --fs-type fsfs --pre-1.6-compatible /var/svn/repos/儲存庫名稱

由於BitNami啟動Apache時使用daemon使用者,所以必須把儲存庫下所有檔案與目錄的擁有者改為daemon,否則會有無法開啟或寫入檔案的問題:

     $ sudo chown -R daemon.daemon /var/svn/repos/儲存庫名稱
     $ sudo chown -R g+w /var/svn/repos/儲存庫名稱/db

備註:如果想要從舊得儲存庫把資料搬過來,還是要先以上面的步驟建立一個相容1.6版以前的新儲存庫,接著進行匯出跟匯入:

     於舊得儲存庫執行匯出:
     $ sudo svnadmin dump 舊儲存庫路徑 > repo.backup

     在新的儲存庫進行匯入:
     $ sudo svnadmin load /var/svn/repos/儲存庫名稱 < repo.backup

2. 編輯/opt/redmine-1.2.0-0/apache2/conf/extra/httpd-ssl.conf

     $ sudo vi /opt/redmine-1.2.0-0/apache2/conf/extra/httpd-ssl.conf

     在<VirtualHost>的最後 部份再加上一行,如下:
     Include "/opt/redmine-1.2.0-0/apps/redmine/conf/redmine.conf"
     Include "conf/extra/httpd-svn.conf"
     </VirtualHost>

3. 建立新檔/opt/redmine-1.2.0-0/apache2/conf/extra/httpd-svn.conf

     $ sudo vi /opt/redmine-1.2.0-0/apache2/conf/extra/httpd-svn.conf

     新增內容如下:
        <Location "/svn">
                DAV svn
                AuthType Basic
                SVNParentPath /var/svn/repos
                AuthName "Subversion Repository"
                AuthUserFile /var/svn/repos/auth.conf
                AuthzSVNAccessFile /var/svn/repos/access.conf
                require valid-user
        </Location>

4. 建立/var/svn/repos/auth.conf

為每一位使用者建立密碼檔:

     $ sudo /opt/redmine-1.2.0-0/apache2/bin/htpasswd -m -n 使用者名稱 >> /var/svn/repos/auth.conf
     $ sudo chown -R daemon.daemon /var/svn/repos/auth.conf

5. 建立/var/svn/repos/access.conf

     $ sudo vi /var/svn/repos/access.conf
     新增如下內容:
     [儲存庫名稱:/]
     使用者名稱 = rw
     ﹍﹍

     $ sudo chown -R daemon.daemon /var/svn/repos/access.conf

6. 重新啟動Apache

     $ sudo /opt/redmine-1.2.0-0/ctlscript.sh restart apache

好了,就醬!

2011/06/01

全Linux生活:第31天 - Redmine﹍不,是BitNami Redmine Stack啦!

From Evernote:

全Linux生活:第31天 - Redmine﹍不,是BitNami Redmine Stack啦!

最近一個案子準備進入開發階段,剛好可以利用這個機會把塵封已久的Redmine拿出來玩一玩。剛剛看了一下,我那個PMS VM裡面的Redmine是1.0.3版,上次搞這個東西已經是去年(2010)的事了,雖然記憶已經很模糊了,但一直有個很深刻的印象是這鬼東西還要裝起來還真麻煩!這個PMS VM自從裝好之後,一直陪我走到現在,也歷經了幾個案子,很可惜的是後來Redmine並沒有真正派上用場,倒是裡面的Subversion變成了主角!

記得那時候裝這個PMS VM時,刻意採用全手動安裝,裡面有Apache2+SSL,Subversion,Trac,Redmine,花了不少時間跟精力,後來想起來,會發現其實這些東西都是協助我們管理開發程式的工具,誰是主角?答案其實很清楚,我們要開發的程式才是主角,工具從頭到尾就是工具而已,它的用途其實是讓我們更有條理的把程式做好,而不應該讓我們花太多精力去搞這些工具,特別是很多時候我們花時間研究工具其實就只為了把這些鬼東西跑起來,到底是我們在搞它,還是它在搞我們?所以這次為了不想被工具搞,其實有一個更好的選擇,那就是宛如佛祖下凡的BitNami Stacks!

BitNami Stacks其實更早以前就有試過了,說實話還不錯,可是當時對一個血氣方剛的GY工程師來說,一開始就用這招實在有點遜,講出去搞不好還會被笑,不過隨著經驗與年紀漸漸累積了之後才發現,很遜﹍沒關係,被笑﹍又怎樣,工具好用最重要,它用什麼寫得,它要怎麽安裝才漂亮一點都不重要,BitNami Stacks簡單說就是一堆讓生活變得更快樂的東西,吃下去,雖然上不了天堂,但至少可以讓你準時下班回家陪陪老婆小孩享享天倫之樂!更重要的是,除非是一個很閒很雞歪又很龜毛的工程師,否則自己裝一個Redmine很難會比BitNami裝的好用跟好維護。

所以今天的主角就是:BitNami Redmine Stack,這是什麼鬼﹍簡單講就是菩薩利用空閒時間幫我們包好的Redmine+Subversion+MysQL+Apache2的懶人包,而且既然菩薩做的,所以一定是Windows/Linux/MacOSX全部照顧到,這時候,菩薩當然也有想到,如果你連滑鼠點兩下安裝檔都懶得點,甚至連整套系統含OS都裝好的VM都給你下載,不過如果是連下載都懶的人,唉,那連菩薩也救不了了。