紀錄 FreeBSD ports 的選項

有在玩 ports 的人大概都知道 ports 有一些 knob 可以調整哪些東西要或者不要,而要紀錄這些相當討厭。過去的解法是用 portupgrade 的 MAKE_ARGS 來紀錄,後來 ports 自己有了 OPTIONS 可以幫忙(雖然不是很完美,但是至少有了)。

現實上的問題是,目前的 OPTIONS 還不完全能讓全部的 ports 都來用,於是常常就會需要在 pkgtools.conf 紀錄一堆有的沒的。用 MAKE_ARGS 的方式的缺點是,當更新 A 的時候,他可能裝 B,而 B 我又有調過選項,這時候就大爆炸了。正確的做法式在 make.conf 裡面寫,但是要注意用 .CURDIR 去判斷該加甚麼。這麼做相當麻煩,所以我也就一直懶的去改。

前幾天,ale@ 弄了個 portconf(最早是 flz@ 寫的)。裝了這個之後,他會幫忙改 make.conf,你只需要弄一個 /usr/local/etc/ports.conf 像是:

*: WITH_CJK=yes
devel/subversion*: WITH_APACHE2_APR=yes | WITHOUT_BDB=yes
net/mtr: WITHOUT_X11=yes

就可以快樂的丟掉 MAKE_ARGS。注意到我的例子裡面有用 *,在 portconf 裡面,是用 sh 的 pattern match,所以可以這麼搞 :P 另外還有個問題要特別注意的是,如果你的 /usr/ports 是 link 的話,要去 make.conf 改成真正的路徑,否則會沒有用。

Update: 感謝 b6s 指正錯誤。

SMPng Project 劃下句點

剛剛看到 Kris Kennaway 在 SMP mailing 上的 Concluding the SMPng project,算是替 SMPng Project 劃下一個句點(雖然說算是正式的公告,我覺得應該要丟上 announce@ 才對 :p)。

從 2000 開始 5-CURRENT 一直到之前的 5-STABLE,去年的 6-STABLE,以及前陣子的 6.1-RELEASE,走了這麼久,6.x 終於算是可以取代 4.x 的版本了。另外,4.x 只剩下 4.11 還有 Security Officier 的 support,不過這也只到明年初了。5.4 到今年十月底,5.5 還有兩年左右。老實講,6.1 除了我碰到的 VFS 在 NON-MPSAFE 的 fs 上會有 GIANT leaking 以外(已經修好了,過幾天應該就會進 RELENG_6),其他我沒碰到甚麼問題。

Kris Kennaway 在那篇中提到,再來的計畫是用 profiling 工具,去看哪邊是 bottleneck,然後根據不同情況,決定該怎麼最佳化了。重心也不放在把 GIANT 通通幹光光 :p可能會改的名字再繼續下去吧。

如果計畫沒改而且我沒記錯,應該後年就會看到 7-STABLE 跟 7.0 了,不知道到時後會有些甚麼令人期待的功能(6.0 是 mpsafevfs,5.3 開始是 mpsafe{vm,net})。

jail(8) 裡面 make world

前陣子因為某些因素,不想升級 host 的 world,所以就直接在 jail 裡面 buildworld/installworld,大致上沒有甚麼問題,要注意的地方是在 host 端,要把底下這個 sysctl 打開

security.jail.chflags_allowed

否則在 installworld 的時候,會沒有辦法把一些有 schg flags 的檔案蓋過去。弄好後,就記得關起來。

screen, box drawing, and Unicode

自從換了 UTF-8 環境後,有一個很討厭的問題是 ANSI 的表格線,在 screen 裡面是直接對應到 U+25XX 的 box drawing 字元,而我又改過 screen 跟 locale,把這些字當作雙字寬(ASCII ART 之類的),因此像是 dialog(1) 造出來的對話框(sysinstall 或者 Ports 的 make config),就會亂七八糟。

剛才想了一陣子,好像沒有甚麼兩全其美的辦法,於是只好叫 screen 把表格線用最原始的 +, -, | 來畫,patch 在 http://www.rafan.org/patch/big5/screen/files/patch-poorman-drawing

FreeBSD local ports

前陣子在整理工作站裝的 Ports 跟 patches 的時候,決定自己造造一個 local 的類別,來放這個 patch 過的 ports,好處是很多東西就不用再手動 patch,而且也可以換像是 portsnap(8) 這種好東西。

在做這些東西之前,最好要對 Ports system 有些認識,一些細節的部份我就不多說,可以參考 FreeBSD Porter’s Handbook。首先,要造一個目錄來放 local ports:

mkdir /usr/ports/local

然後,造一個 local/Makefile:

COMMENT = Local ports
SUBDIR += your_port
.include <bsd.port.subdir.mk>

跟 local/Makefile.inc:

PKGNAMEPREFIX?= local-
PKGCATEGORY= local

然後在 ports/Makefile.local 寫:

SUBDIR += local

在 /etc/make.conf 加上:

VALID_CATEGORIES+= local

再來就是你要自己製造你想要的 ports 了,這邊就不多說了。還有一個問題要處理的是 INDEX。如果有用 portupgrade(1) 的話,每次更新過 ports tree 之後,用 portsdb -Uu 來更新一次 INDEX 跟 INDEX.db,這樣子才不會出意外。我知道這個很慢(在 P4-2.8G 的機器大概是 13 分鐘),不高興的話,可以試試看 sysutils/p5-FreeBSD-PortIndex 或者想辦法用 portsanp(8) 的 make_index 弄,這部份可以參考前陣子 -ports@ mailing 上面有過一些討論。

nfs mount 不要用 intr (-i)

前陣子在研究為什麼單純的 dd 寫到 nfs 上面 ^C 會 panic,在半天之內 post 三次到 stable@,不過都沒人理我 XD 後來翻 open PRs,看到 PR/79700,裡面說到 intr (-i) 這個選項會讓很多行為變得很怪,不太建議使用。後來仔細一看,我真的用了這個,拿掉之後,一切快樂無比…。

另外,我懷疑 217 很多卡在 nfsaio 的也是這個原因,不過要等下次重開機才能拿掉這選項了。

FreeBSD tcsh, Big5 字消不乾淨

之前裝了兩台某長輩的機器後,就被抱怨說 tcsh 如果用 zh_TW.Big5 locale 的話,消 Big5 的字會消不乾淨,後來解決方式是把 LC_CTYPE 設成英文 locale。

今天早上,我在看 src 的 commit log 的時候,看到 ume@ 加了 SWIDTH 的定義到 ko 的 locale 去,才想起來他幾星期前也加了類似的東西去 jp locale(他應該是日本人)。我就突然想到,zh_TW.Big5 locale 應該沒有 SWIDTH 的定義,結果一看,果然是這樣子,就嘗試生了一個 patch 出來,找某長輩測了測,發下都可以。於是我就跑去看 NetBSD 的 locale,發現他們一開始就有 SWIDTH 的定義…(FreeBSD 是故意拿掉嗎?)

本來想說先在 blog 跟我板上找人測測看的,結果發現我的 patch 跟 NetBSD 的一樣,因此信心大增,直接 send-pr: conf/93844,本來這個 pr 就有 CC 給 ume@,想說他應該有興趣,沒想到 delphij@ 幾分鐘後就 commit 進 -HEAD 了!

我現在是希望這幾個 SWIDTH 的東西,能進 5.5/6.1 RELEASE 啦,來去推看看 :D

Windows XP SP2 的防火牆

在裝 SP2 之後,他預設會把東西都擋光光,當有不在名單上的程式要 LISTEN 的話,他會問你要封鎖還是開放還是等等再說,而根據跳出來那個窗的說明是 Windows「現在已經封鎖」。

我之前在寫某門課作業的時候,才發現當他跳出來那個窗的時候,根本就還沒做動作,我的程式還是跑的很快樂.. !@#$%

IBM 的變壓器

今天早上,跑去 ThinkPad 維修中心送修 X31 的變壓器,理由是電流聲(就是滋滋聲)。十一點拿過去,中午吃飯吃到一半就跟我說可以去拿了 :D

最後結果是,換了一個變壓器。不過呢,這次的變壓器,上面少了製造時間,然後原本的 “Manufactured for IBM Corporation” 變成了 “Manufactured for Lenovo”…。

配合 firewall 擋亂掃 ssh 的方法

之前我知道 ports 裡面有一個 security/bruteforceblocker 可以用,可是他用 pf,而我不會用…。剛剛找了一下,發現一個叫做 sshit 的東西,是用 ipfw 做的,而且還可以設定多久後拿掉 firewall rule。剛剛用了一下,感覺也不錯。

UPDATE: 結果他不知道為什麼會生出一大堆(70~80 隻)perl 在那邊 idle,看了相當不爽。

UPDATE: 這個問題後來 (2006 or 2007) 已經修正了,現在用起來沒什麼問題。