這幾天又再弄 jail,遇到一些瑣事,想到就順便記下來。像是 jail 弄好之後發現沒有帳號可以登入,在 jail host 上:
cd /jail_path/etc
vim master.passwd
pwd_mkdb -d . master.passwd
其實也可以這樣:
vipw -d /jail_path/etc
不知道現在的書還會不會教這些...
幹壞事是進步最大的原動力
這幾天又再弄 jail,遇到一些瑣事,想到就順便記下來。像是 jail 弄好之後發現沒有帳號可以登入,在 jail host 上:
cd /jail_path/etc
vim master.passwd
pwd_mkdb -d . master.passwd
其實也可以這樣:
vipw -d /jail_path/etc
不知道現在的書還會不會教這些...
本來是放在 Gea-Suan Lin's BLOG for Work 的,想了一下還是這邊也放一份好了,如果有什麼意見的話麻煩提供一下 :p
以前在計中弄二三十台 FreeBSD 的時候就是用 screen + portupgrade 一次把幾十台機器升級,升級完整個重開機就好了,不用管什麼東西升級完要重跑。安裝新軟體如果需要指定 WITH_BLAH=yes
或是其他的東西,記得到每台上面的 /usr/local/etc/pkgtools.conf
改一下。(以前的 ports 還沒有 OPTIONS
這個功能)
這個模式在我一個人管的時候很好,但是當要傳承的時候就糟糕了:要瞭解這種方法的人大概都需要玩過一陣子 FreeBSD,知道只靠系統基本的套件管理是不夠的,才會有感覺。D2 上面是到了 ronnywang 才接下去。現在在交大資工當系計中助教也遇到同樣的問題。
一種想法是利用 package 更新 (這個在將 ccbsd*.csie.nctu.edu.tw 重灌成 FreeBSD 6 已經實行一段時間了),但目前最大的問題在於使用 package 會:
另外,有時候會發生套件安裝好,但是無法產生 package 的慘劇。這個方法其實問題還蠻多的。
我昨天又想到了另外一個作法,我不知道可不可行,不過看起來會比原來的方法好,但是重新安裝機器時的速度一定會比 package 的方法慢:
sysutils/screen
這種字串,一行一個),排序後塞入 svn repository。另外將 /usr/local/etc/pkgtools.conf
也塞進去。/usr/local/etc/pkgtools.conf
抓回來,再用 cat ports-list.txt | xargs portinstall
把軟體安裝進去。也許 ccbsd8 可以試看看這種方式。
在 FreeBSD 6.0 與 jail 這篇裡面我提到了安裝的方法,另外也提到如何跟 host 共用 ports 的方法。但是如果你想要使用 portupgrade 升級軟體,你會發現因為沒有辦法寫入 /usr/ports
(要更新 INDEX.db) 而失敗。(ericlin 跑來跟我幹剿 XD)
我發現這個問題可以想辦法避開寫入 /usr/ports
就可以了,在 portupgrade 的 manpage 裡面有提到 PORTS_DBDIR 這個變數:
PORTS_DBDIR Alternative location for the ports database files. Default is ``$PORTSDIR''.
於是只要在 /usr/local/etc/pkgtools.conf
裡面設定:
ENV['PORTS_DBDIR'] ||= '/tmp'
指到 /tmp
就可以解決了。
因為要惡搞一些東西,不方便在現有的系統上跑,於是就跑去弄個 jail 出來用。比起 FreeBSD 4.x 需要自己寫一些 shell script 丟到 /usr/local/etc/rc.d/
下,6.0 下的 jail 已經整合到系統內了,所以不太需要在自己寫 shell script。
而且 6.x 的 jail 也修掉不少 bug,像是 dmesg 偶而會出不來 (喂喂),reboot 不會理你 (喂喂)... 另外 df 也只會看到 /,不會看到其他的 slice 了。
要生出 jail 的環境,先是:
make buildworld make installworld DESTDIR=/da1/jail0 make distribution DESTDIR=/da1/jail0
然後改 /da1/jail0/etc/master.passwd
,把自己加進去,用 pwd_mkdb -d /da1/jail0/etc /da1/jail0/etc/master.passwd
重新編過一次,記得把家目錄開好 :p
然後是 /etc/rc.conf
:
ifconfig_fxp1_alias0="inet 192.168.113.10/24" jail_enable="YES" jail_list="testbase" jail_testbase_devfs_enable="YES" jail_testbase_devfs_ruleset="devfsrules_jail" jail_testbase_exec="/bin/sh /etc/rc" jail_testbase_hostname="testbase" jail_testbase_ip="192.168.113.10" jail_testbase_rootdir="/da1/jail0" pf_enable="YES"
接下來弄 pf 的設定,所以去改 /etc/pf.conf
:
nat on fxp0 from 192.168.113.0/24 to any -> (fxp0) nat on fxp1 from 192.168.113.0/24 to any -> (fxp0)
接下來把 jail 裡面的東西設一設,像是 resolv.conf
。
最後用系統給的 jail 就可以啟動了:
/etc/rc.d/jail start
第一次跑起來應該會卡在 ssh 產生金鑰的地方,所以就去喝個飲料之類的 :p (也可以自己先在 host 產生好,不過我這邊懶得講了,請自己去 /etc/rc.d/sshd
翻,需要三組金鑰)
弄完以後就可以 ssh 進去玩了,如果要跟 host 共用 ports directory,可以用 mount_nullfs 以 read-only 掛上來 (security issue),然後修改 /etc/make.conf
,把本來會寫入的部分都改到 /tmp
下:
DISTDIR= /tmp/distfiles WRKDIRPREFIX= /tmp/WRKDIR
這樣應該就沒什麼大問題了 :D
I use databases/mysql50-{client,server}
and use benchmarks/super-smack
to test. There are 3*2*2*2 = 24 cases:
WITH_PROC_SCOPE_PTH=yes
, WITH_LINUXTHREADS=yes
/etc/libmap.conf
: none (libpthread
), libthr
kern.timecounter.choice
: ACPI-fast
, TSC
ULE
+PREEMPTION
, ULE
These benchmarking were tested on my laptop (IBM x31 2672-IQV, Pentium-M 1.5G with 512MB RAM), and powerd
was disabled. Detail informations (dmesg, sysctl, and kernel config file) will post later.
The commands are:
for i in 1 2 3 4 5; do super-smack select-key.smack 10 1000 | grep select_index; done
for i in 1 2 3 4 5; do super-smack update-select.smack 10 1000 | grep select_index; done
select_index 20000 0 0 14097.47 select_index 20000 0 0 13741.43 select_index 20000 1 0 13704.01 select_index 20000 0 0 13626.05 select_index 20000 0 0 13769.32 select_index 10000 2 0 1891.63 select_index 10000 2 0 1758.65 select_index 10000 2 0 1836.00 select_index 10000 4 0 2058.71 select_index 10000 14 0 2050.05
想要測試 MySQL Performance 的時候發現 Ports 裡面居然沒有 super-smack,於是就順手做進去了:[NEW PORT] benchmarks/super-smack: A benchmarking, stress testing, and load generation tool for Databases。
一方面是測試 porttools 要怎麼用,另外一方面也是熟悉一下怎麼做新的 Port (好久沒做過了)。
這是 FreeBSD-performance 目前的討論:new benchmarks. WAS: FreeBSD MySQL still WAY slower than Linux。
測試的環境是在本機上跑,主要的測試對象是 Thread Library,包括了:
這幾個測試結果沒有什麼意外,速度最快的是 libthr (即 1:1 Threading)。
另外因為上面的測試環境是打開 HTT 的情況下測出來的,所以有人建議關掉 HTT,而作者也再跑了一次,發現除了 libthr 快了一點點 (大約 2%) 以外,其他的都沒差。
再來是有人提出 FreeBSD 上的 gettimeofday()
非常花資源 (這點在 David Xu 提供的 mysql ktrace log 裡面有說到),所以有人有建議修改 kern.timecounter.hardware
(從 ACPI-fast
改成 TSC
),不過作者好像還沒看到 :p
再來是 kernel config file 裡面好像沒有用 SCHED_ULE
?
這個討論串還在跑,所以還可以看一看長輩們到底有什麼花樣可以玩...
Update:開新的討論串在討論了:mysql benchmarks。另外 super-smack 這個程式是 Sasha Pachev 發展的,後來 Jeremy Zawodny 接手 (MySQL Super Smack),現在是 Tony Bourke 在維護 (Super Smack)。
這幾天把 Laptop (IBM X31 2672-IQV) 換成 FreeBSD 6.0,一方面當然是為了 SA 作業的需要,另外一方面是想要知道在 X-Window 下中文的部份到底可以出現多少東西 :p
這幾天這樣玩下來發現很多東西結果比我料想中的好很多,在不太看 Document 的情況下 (這是壞習慣,請不要學了以後還一直跑到 386BSD 或是 #bsdchat 上面幹勦說某某東西不能用,結果只因為你沒看文件 XD) 到 /usr/ports/chinese/ 下猛裝 (尤其是字型,幾乎全裝上去了),然後把 locale 設定好,幾乎就都能用了 :p
icewm 與 xcin2.5 + rxvt-devel (我知道會有人推薦 gcin,不過我還沒測試過) 一開始有些問題,後來找了一下發現 色兔子 早就寫過了:xcin root mode with icewm,照著兔子講的設定方式設定後幾乎沒什麼問題 (其實好幾年前就蠻穩定的了),用 kc15f 與 kc8x15 也沒有像以前會有殘影 (15 != 16 的關係),所以也不太需要 gugod-clean 了 :p
再來是前幾天剛出的 Firefox 1.5,在 locale 正確的情況下裝起來就可以看中文、打中文 (輸入法的部份使用標準的 XIM),比起很久以前的 Mozilla Suite,呃... 我記得當初好多 hack 在跑 :p 另外預設的字型很棒,直接吃 Firefly 版文鼎字。
其他的東西,大致上都是在系計中討論解決 (感謝長輩一、長輩二),或是在我的 BBS 看板上問,都會有長輩 (長輩三、長輩四) 伸出援手,所以一切順暢無比 :p
在 Digg 看到的消息:LinkSys courts Linux hackers with WRT54G"L"。
LinkSys 的 WRT54G (Wikipedia 對 WRT54G 的介紹) 因為以 USD$60 提供了 4MB RAM + 16MB Flash,而常常被一些 Linux 玩家買回去重新塞自己做的 Flash :p
在最新版的 LinkSys WRT54G (5.0) 因為改進到只需要 2MB + 8MB Flash,於是市場上就開始有收購的熱潮 :p 結果 LinkSys 跳出來說 LinkSys 還是會繼續提供 WRT54G (4.0) 給 Linux 玩家惡搞 :p
在 digg 看到的:BSD wallpaper。站台在 daemonisch.be - Wallpaper für FreeBSD, NetBSD & OpenBSD 這裡,有提供 jpeg 與 png 的桌布可以下載,FreeBSD 還是以前那隻好看 :p