FreeBSD 預設的 compiler 從 GCC 換成 clang

FreeBSD 預設的 compiler (/usr/bin/cc/usr/bin/c++/usr/bin/cpp) 從 GCC 4.2.1 換成 clang 了:「Revision 242624」。

目前只有 CURRENT 裡的 amd64 與 i386 版本換過去,如此一來,FreeBSD 10.0 會是第一個使用 clang 作為預設編輯器的正式版本 (看起來不像會 back port 回 FreeBSD 9)。接下來是 Ports 大混戰了,應該會有一卡車的 ports 用 USE_GCC=yes 來解?

從 2009 年的努力到現在三年多了 (參考「[ANNOUNCE]: clang/llvm can compile booting FreeBSD kernel on i386/amd64」這封公告信),離拔掉 GCC 4.2.1 又進了一大步...

FreeBSD 引入 OptionsNG 後 ports.conf (portconf) 的轉換

www/apache22 為例子,本來 /usr/local/etc/ports.conf 內是這樣:

www/apache22: WITH_MPM=worker

引入 OptionsNG 後增加了不少檢查。其中因為 WITH_MPM=worker 的關係,需要把 CGID 打開,並且關掉 CGI。以前的寫法是 WITH_CGID=yes + WITHOUT_CGI=yes 就好,現在要改成:

www/apache22: OPTIONS_SET=CGID | OPTIONS_UNSET=CGI | WITH_MPM=worker

這樣就可以繼續用 ports.conf 管了... 不過還是有些地方要解決 (像是 WITHOUT_X11=yes 這種設定要怎麼轉到 OptionsNG 架構),看起來得想辦法讓 portconf 可以吃更多形式?

FreeBSD 將在 10.0 時將預設編譯器從 GCC 換成 clang

FreeBSD 預定在今年十一月將 amd64 與 i386 版本的 C 與 C++ 預設編譯器從 GCC 4.2.1 換成 clang,也就是下一個 major release (10.0) 就會是預設編譯器:「Clang as default compiler November 4th」。

自從 GCC 決定要換成 GPLv3 後整個計畫才活起來,到現在走了三年,看起來明年應該有機會看到預設是使用 clang 的 FreeBSD?

接下來的工作是解決 Ports 裡面一堆用 clang 編不過的軟體,以目前「Ports and Clang」這邊列出來的數量,看起來把幾個大的傢伙解決掉就差不多了?(不過應該是不怎麼好解,不然這種大目標物應該早就解決了...)

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