FreeBSD ports 將從 CVS 轉移到 Subversion 上...

有陣子的新聞了:「[FreeBSD-Ports-Announce] [HEADS UP] Ports tree migration to Subversion」。

預定是 7/14 要轉換,轉換完成後仍然會有程式把 Subversion repository 的變更同步到 CVS 上,所以本來用 csupcvsup 的人仍然可以取得更新。

當初選 Subversion 的原因是什麼啊?又是 GPL license issue 嗎?

AWS USD$50 的優惠...

Colin PercivalTwitter 上看到的:

Looks like Amazon Web Services is giving away $50 credits which can be used for running FreeBSD on EC2: http://aws.amazon.com/solutions/global-solution-providers/microsoft/aprilcredit/

活動的網址在「$50 AWS Service Credit for Microsoft Windows Server Instances Running on Amazon EC2」這裡。照說明是用在 AWS EC2 的 Microsoft Windows Server 上,不過把 code 輸入進去後寫了一堆 product:

有打算用 FreeBSD 的人應該是不會有問題 (參考「FreeBSD on EC2」這個頁面的說明),其他的服務不知道會不會也能用到,下個月就知道了 XD

在 FreeBSD 上練習 Objective C...

一樣用 gcc 就可以練習了,首先要先裝 lang/gnustep-base:

cd /usr/ports/lang/gnustep-base; sudo make install clean

裝好後 compile 的兩個階段要對 gcc 加上不同的參數:

-I/usr/local/GNUstep/System/Library/Headers

以及:

-L/usr/local/GNUstep/System/Library/Libraries -lgnustep-base -lobjc

把這些參數整合到 Makefile 裡面就可以練習了。

同時用 mod_deflate 與 mod_fastcgi 所產生的問題...

今天花了不少時間找到的問題...

問題是使用 mod_fastcgi 以及 mod_deflate 時,Content-Encoding 會是 gzip,但 Content-Length 會是未壓縮的長度。

也就是說,伺服器端在 header 提供的 Content-Length 可能寫 8KB,但實際上只丟出 2KB (壓縮後的大小),於是瀏覽器讀完這 2KB 後會停下來一直等,等到 Keep-Alive timeout 斷線 (在我機器上預設是 5 秒)。

在 timeout 斷線後 browser 會就抓到的資料直接解開執行 (因為這 2KB 都有抓到,於是都正確執行)。如果用瀏覽器這邊的 debugger 觀察,就會發現從 first byte 後 5.00 秒才 document ready。

解法有人在 2008 年給過:「Content-Length header should be set using ap_set_content_length」,不過因為 mod_fastcgi 一直沒出新的正式版,所以大家都還是拿到舊的版本。

所以,與之前修正 multi-threading 的問題一樣,往 ports 本身丟 patch:「Update www/mod_fastcgi to fix mod_deflate issue.」,修正後再測試就正常了。

FreeBSD 64bits 在 AWS 上的情況

剛剛在 Twitter 上看到 Colin Percival 的 tweet,提到他用「抽換」把 Windows 開機換成 FreeBSD 開機,所以現在可以在 AWS East 上看到 FreeBSD 64bits EBS image 了:「FreeBSD on EC2 via defenestration」。

缺點是因為這是利用 Windows image 換掉,所以計費會以 Windows 的費用計算。(也就是 Windows tax)

不愧是 Depenguniator 的作者,總是會想到這種奇怪的方式 XDDD

EC2 上的 FreeBSD 8.2-RC1...

Colin Percival 前陣子公佈了 EC2 上跑 FreeBSD 9.0-CURRENT 的 ami,當時測試覺得太慢了:「在 AWS EC2 上跑 FreeBSD」,昨天他在 Twitter 上提到把 FreeBSD 8.2-RC1 也 porting 上去了

FreeBSD 8.2-RC1 is now available on EC2 as ami-d29b6abb. http://www.daemonology.net/freebsd-on-ec2/ #merrychristmas

實際測試以後發現 8.2-RC1 還是很慢,跑 portsnap fetch 要等半個小時,跑 portsnap extract 也要再等半個小時,看起來是因為 EBS 的速度太慢?如果是這樣的話就得等非 t1.micro 的版本了 (因為 t1.micro 只能用 EBS 跑)。

以目前進度來看,8.2-RELEASE 會是第一個支援 EC2 的 production 版本?

在 AWS EC2 上跑 FreeBSD

Amazon Web Services 的官方網誌上提到了 Colin PercivalFreeBSD 9-CURRENT 放到 AWS EC2 上跑:「FreeBSD on Amazon EC2」。他的網誌也提到這件事情了:「Announcing FreeBSD on EC2」,計畫的頁面在:「FreeBSD on EC2 status」。

花了幾個小時玩,發現用 t1.micro 跑 9-CURRENT 的速度真是太慢了。就算考慮到 9-CURRENT 裡面有很多 debugging code,不過這個速度實在沒辦法測什麼東西... 在乾淨的系統裡編 mtr (WITHOUT_X11=yes) 編一個小時編不完啊 XD

等 backport 回 8-STABLE 後再來玩一次看看吧...

FreeBSD 使用 FastCGI + PHP 5.3 提供的 php-fpm

這篇還是講 mod_fastcgi,而非目前歸到 Apache 下管的 mod_fcgid

PHP 5.3 已經內建 php-fpm,不過 ports 預設是不會裝上去的,所以首先先把 lang/php5 加上 php-fpm 支援。方法是 make config 後選擇 FPM。如果有裝 portconf 的人可以直接在 /usr/local/etc/ports.conf 裡加上:

lang/php5*: WITH_FPM=yes

這樣就會強制蓋過系統設定,強制把 php-fpm 裝進去。

接下來是設定的部份,首先是 php-fpm 的設定,這篇的文章只教預設值,會跑在 127.0.0.1:9000。所以只要在 /etc/rc.conf.local 內設定 php_fpm_enable="YES",然後跑 /usr/local/etc/rc.d/php-fpm start 就把 php-fpm 跑起來了。

然後是 apache 的設定,有好幾條要設:

LoadModule fastcgi_module libexec/apache22/mod_fastcgi.so
FastCgiConfig -maxClassProcesses 1
AddHandler php-fastcgi .php
Action php-fastcgi /php-fpm-handler.fcgi
FastCGIExternalServer /php-fpm-handler -host 127.0.0.1:9000
ScriptAlias /php-fpm-handler.fcgi /php-fpm-handler

我是跑 apache22-worker,上面的設定就可以了...