網頁

顯示具有 Computer 標籤的文章。 顯示所有文章
顯示具有 Computer 標籤的文章。 顯示所有文章

2010年5月5日 星期三

用 ramdisk 加速 freebsd 編譯 ports 的速度

剛剛在很苦命的編譯 ports , 機八鴨提供了一個很有用的方式,就是把編譯過程中會產出的 object file 全都塞到 RAMDISK 中(反正現在 RAM 都很大也不知道拿來做什麼),加上 FreeBSD 8 的 ports 開始支援多核心的 make jobs 編譯,速度可說真是飛快。

作法很簡單:

先蓋一個 RAMDISK (這裡是開 512M, 可以自己調整)
/sbin/mdmfs -M -S -o async -s 512m md0 /tmp/portsobj

然後讓他能寫入
/bin/chmod 777 /tmp/portsobj

接下來去 /etc/make.conf 把 obj 會產生的目錄指過去
WRKDIRPREFIX=/tmp/portsobj

然後去編看看,就會發現速度差很多。
然後懶人大法當然是要 shell script 一下:
#!/bin/sh

case "$1" in
create)
/sbin/mdmfs -M -S -o async -s 512m md0 /tmp/portsobj
/bin/chmod 777 /tmp/portsobj
echo "512M ramdisk created on md0 and mounted on /tmp/portsobj"
exit 0
;;
destory)
/sbin/umount /tmp/portsobj
/sbin/mdconfig -d -u 0
echo "ramdisk umounted from /tmp/portsobj and destory from md0"
;;
*)
echo "Usage: `basename $0` {create|destory}" >&2
exit 64
;;
esac

然後機八鴨還好心建議不要直接打 make install clean 而是用先用 pkg_add 把 package 裝完,然後再用 portmaster -bDGtw -m FORCE_PKG_REGISTER=yes 來升級,那他每次在編完每一個 ports 後都會自動清掉 obj 而不是像原本的 ports system 會全部裝完成功後才 clean。

2009年11月7日 星期六

APTOS Design LAB 的 ADA-U21W

這幾天鴨子在物色他的喇叭,恰巧在 crazymike 看到APTOS Design LAB 的 ADA-U21W 在放送,於是就手滑不小心跟進了。

當中的小插曲是:最近勸拜成功,林大哥看到我幫家弟買得小黑 T400 PU9 品像不錯價格誘人,就也叫我幫他處理一台來。並且連自取也不用了,直接貨到付款寄到指定地點。然後又很剛好得我在 crazymike 填的送貨地點是同一個,又非常碰巧的,crazymike 跟 T400 賣家都是用相同的宅配,所以到貨的那天早上,先是接了宅配的電話

宅配:「請問是林先生嗎,這裡未您送貨到付款,款項為 XXXXX ,請問您在指定的送貨地點嗎?」
我:「(睡臉惺忪)哦,有,送過去就好了。」

然後起身打給林大哥,請他去收貨,轉頭繼續睡。過沒多久,林大哥打回來:「喂,黑咧頭家美賣捏~瓦嘎咩電鬧歌頌哇冷ㄟ啦吧~金夙昔捏~(那個老闆不錯哦,跟他買電腦還寄了兩組喇吧來哦,很不錯哦)」。瞬時之間從床上笑到床下,因為那是我等了好幾天的 ADA-U21W 阿。

這組東西其實很有趣,他是走 USB 介面直接吃 USB Audio Device 然後把聲音播放到喇叭上,然後由主要的機身扮演著 USB DAC + Amplifier ,推動兩個被動式音箱且「不需外接電源」。會引起我興趣的地方其實是因為現在我的位置上只有耳機,但我不太喜歡耳機聽過久,雖然有 5021 掛在牆上,但是一般時間又不好意思開泰大聲,需要一組用來放音樂用的。尤其是,最好是能獨力只播音樂,其他的系統、城市音效都可以不要播放。這樣看來,獨立的USB Audio Device 剛好符合規格呢!

當一切就緒的時候,將 usb 插上電腦,看到他跳出偵測裝置,成功安裝標準驅動,一切安好。但是打開音樂播放器卻無法播放,臉綠了一半。最近不會運氣這麼好吧,連這都中大獎阿?還好我有兩組,在拿另一個來試,還是一樣。不會吧,又是 Windows 7 64bit 的錯嗎?還好我還有 32 bit版,測了,還是不會動,都可以看到裝置卻沒聲音。所幸在把旁邊的 windows xp 拿來測,咦,一切正常?生氣了,在拿出 ubuntu 測,也一切 OK?

真是奇怪, USB Audio Device 是走標準的東西沒道理其他會動獨缺 Win7 壞事吧。於是搞了一個下午,也換了 ASIO driver ,硬上有的沒的驅動,都不會動,但是看著 XP 卻播的虎虎生風。搞到最後發現解法了。

如果你也是 ADA-U21W ,或是 Biforst 的 Bu20360 的產品,在 Windows 7 下遇到有裝置沒聲音的話可以試試看這個解法:

sound-1
到控制台開啟「聲音」

sound-1

在 USB Audio Device 選內容,切到增強功能,勾選「停用所有增強」

然後就過著幸福快樂的生活吧。

Related Info Here.

2008年11月26日 星期三

莫名其妙被婊

在 FreeBSD 7.1 PRELEASE 底下做比較複雜的網路環境,結果要讓 rsync + ssh 從其他網路跑進來撈備份的時候遇見很奇怪的問題:

明明就是通的,但是卻是慢到非常的誇張,比原先的線路還離譜。本來以為是 pf 擋到不該擋的,叫出 tcpdump 來看半天發現沒錯;又想說是不是走錯路,交叉測了很久也看不出啥端倪。最後比對正常跟有問題的 tcpdump 也看不出啥鬼。結果在對照[正常]組時發現:

02:52:39.274108 IP bad-len 0
02:52:39.304782 IP bad-len 0
02:52:39.334036 IP bad-len 0
02:52:39.335331 IP bad-len 0

這種東西,好奇 google 一下發現這篇,結果發現我也中大獎 -_-||

sysctl net.inet.tcp.tso=0

從此過著幸福快樂的日子......!@#$%^& .......

2008年6月30日 星期一

*NEVER* remove coreutils

不小心為了解決 gentoo 下的 block 問題而 remove 了 coreutils 浪費很多時間 -_-像這種東西應該要提示使用者萬萬不能 remove 的阿…倒數完了就 remove 沒啥太大作用吧 (翻桌)
所以稍微 note 一下, 別再不小心幹掉 coreutils 了 :~

NOTE: 如果不小心發生一樣的慘狀,就去 package server 撈 binary 回來救吧

  1. wget coreutil-X.XX-rN.tbz2 from http://tinderbox.dev.gentoo.org/default-linux/

  2. cp coreutil-X.XX-rN.tbz2 /usr/portage/packages/All
    (HINT: 如果沒這目錄的話應該可以用 $PKGDIR 來指定)

  3. emerge -K coreutils

  4. emerge --unmerge mktemp

  5. emerge system


UPDATE: 剛看到 *這裡* 也有一樣的討論串...

2007年5月9日 星期三

could not listen on UDP socket: permission denied



自從家裡的老 server 爆炸,然後應爹娘要求儘速處理,於是展開移山倒海 shift 大法,把比較省電且輕巧的小白 (AM2 X2 3800+) 給帶回去暫時先把網路搶通後就沒空理他,今天上去一看發現 message 一直出現:
May 9 04:19:11 soul named[960]: could not listen on UDP socket: permission denied
May 9 04:19:11 soul named[960]: creating IPv4 interface tun0 failed; interface ignored
May 9 05:19:11 soul named[960]: could not listen on UDP socket: permission denied
May 9 05:19:11 soul named[960]: creating IPv4 interface tun0 failed; interface ignored
May 9 06:19:11 soul named[960]: could not listen on UDP socket: permission denied
May 9 06:19:11 soul named[960]: creating IPv4 interface tun0 failed; interface ignored
May 9 07:19:11 soul named[960]: could not listen on UDP socket: permission denied
May 9 07:19:11 soul named[960]: creating IPv4 interface tun0 failed; interface ignored
May 9 08:19:11 soul named[960]: could not listen on UDP socket: permission denied
May 9 08:19:11 soul named[960]: creating IPv4 interface tun0 failed; interface ignored
May 9 09:19:11 soul named[960]: could not listen on UDP socket: permission denied

詢問了 google 大神之後發現大概是 這麼一回事 ,所以就乖乖的照著 mac_portacl(4) 去把 kernel configuration 的 options MAC 加進去,然後到 /boot/loader.conf 加入 mac_portacl_load=”YES” 接著照著 handbook 的 example 依樣畫葫蘆塞進 sysctl security.mac.portacl.rules=uid:53:udp:53,uid:53:tcp:53 然後重新啟動囉。



2006年5月10日 星期三

eaccelerator + php5

剛剛在弄 mediawiki 才發現原來我家的 eaccelerator 根本一直都沒跑阿,花了一些時間看到底問題出在哪裡,發現原來是被擺到了。再安裝厚的提示訊息寫著:
*****************************************************************************

You have installed the eaccelerator package.

Edit %%LOCALBASE%%/etc/php.ini and add:

zend_extension="%%PREFIX%%/lib/php/%%PHP_EXT_DIR%%/eaccelerator.so"

Then create the cache directory:

mkdir /tmp/eaccelerator
chown www /tmp/eaccelerator
chmod 0700 /tmp/eaccelerator

*****************************************************************************

但是實際上如果去 /usr/local/etc/php.ini 設 zend_extension 事實上他會不理你。所以還是得設到 /usr/local/etc/php/extensions.ini 裡面去:
extension=eaccelerator.so 

本來是直接 copy/paste 他的路徑,結果 php -v 下去就又被 ooxx 。所以現在看起來,是真的有跑了:
PHP 5.1.4 (cli) (built: May  9 2006 10:48:26)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
    with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator

被 ports 的 hint message 擺道,很無言的阿!

PS. 前幾天  FreeBSD 的 php 好像地震了一下:
20060506:
  AFFECTS: users of PHP
  AUTHOR: ale@FreeBSD.org

  The old PHP slave ports (phpN-cli, phpN-cgi and mod_phpN) were removed
  in favour of unified PHP ports that allow building any combination of
  PHP SAPIs (cli, cgi and apache module).
  The PHP CGI binary was renamed to php-cgi, so you should update
  the path in your script. To simplify the update process, *only* for
  this release a 'php' compatibility symlink to php-cgi will be created
  if you don't select the CLI SAPI.
  Before the upgrade you *should* run 'make config' in lang/php4 or
  lang/php5 to configure the SAPIs you want to install.
  As a consequence the default binary packages include the CLI and the
  FastCGI SAPIs.
 

所以順手把他重新 make 了一次,進 php 打 make config 勾一勾然後 portupgrade -f 'php*' 下去就搞定了 :p

mediawiki + mysql5.1 beta

剛剛在裝 mediawiki ,本來理論上 make install clean 就能搞定的東西裝了好久。我還笑著跟把妹揚說,搞不好他那裡下去打 make install clean 會直接 ok 也說不定。(把妹楊最近被惡魔化了,雖然他本來就是壞人,不過被惡魔化倒應該是頭一遭。他lab裡的機器現在是 FreeBSD 6 喔!嘿嘿)。原因是因為之前手賤然後現在就遇到很多神秘的問題。

這篇有 提過因為 mysql5.1.7 beta吃了一點小苦頭,而這個問題也同樣發生在 mediawiki 的 CREATE TABLE 的 sql 檔上面。一開始是一度懷疑是不是因為我自己白目去抓 mediawiki 的 svn (自以為以後升級比較方便,可是從 FCU 抓那邊真的是他 X 的慢...)所以爛掉,後來從 ports 裝也是相同的情形,可是現在 mysql 上面又跑幾個東西再上面了,要再 downgrade 其實也可說是頗麻煩,於是就很任命的開始找。一開始看到 Syntax error 大概有個底,照上次經驗把 TYPE 清光光大概就會動。不過後來就很莫名其妙了。

一開始發生 index key 不能 > 1000 bytes 的情形,可是怎麼看都莫名其妙,後來 google 到說原來 utf8 會比較機車,於是就開始 try and error 慢慢調整。之後遇到
A database error has occurred Query: SET NAMES utf8

然後卡關卡好久後才發現原來是因為我一開始就在 my.cnf 設了
init_connect = 'SET NAMES UTF8;'

然後 mediawiki 又自己做了一次,所以不知道該算是誰的錯?解法是把 include/Database.php Line 310 那附近的 $this->query( 'SET NAMES utf8' ); 給幹掉,然後就天下大平了。

如果有需要的可以拿我亂改的 sql 檔蓋到 /maintenance/mysql5/ 底下的 tables.sql,不過爆炸不負責就是。這裡下載。

2006年4月20日 星期四

Install FreeBSD6 on X41 tablet (2)

人總是很懶惰的動物,反正灌好了嗎,反正能夠 dual-boot ,那就繼續用 Windows 吧 XD。反正都付錢買 license 了嘛 XD。

喂喂喂喂,不是這樣說的吧?好啦,上個禮拜實在爆炸到一個不行,於是很生氣的就把小黑上的 FreeBSD 開起來亂裝了。

一開始呢,先把他 cvsup 到 7-current ,然後就可以把 cvsup 淘汰掉,很歡樂的用 csup :

改 make.conf
SUP= /usr/bin/csup
SUPFLAGS= -L 2

然後這裡發現有很討厭的事情,就是在 NAT 後面 fetch 似乎不會自動走 passive ftp 去抓東西,於是找了一下理論上應該是在 make.conf 加上 FETCH_CMD=fetch -U -A -p ( -p Use passive FTP.) ,不過看起來還是很神秘的不理我,於是就直接 bind 一個外面的 ip 給他 :p 。

然後升級了完了之後就開始裝桌面吧,當然,習慣性的用 KDE 。 而且這次很生氣所以不是編 kde3-lite 而是直接編 kde XD。
cd /usr/ports/x11/kde3 ; make install clean

這邊因為耍笨忘了開 BATCH=yes ,然後再加上 FCU 網路狂斷,再加上可憐的小黑,他的硬碟是 1.8" 然後只有 4200RPM (具不可靠測速指出,max transfer rate 大概只有 20MB ... seek time 更是 ~!@#$%^... orz),所以這裡花了我兩天多,雖然忘了開 time 下去量 XD,更好笑的是,之前嘲笑鴨子說怎麼會耍笨到 /usr 割太小然後 diskfull ,結果這次也發生再我身上 orz 。還好 unix-like 的系統下的偉哉 ln 很好用 :p 。

裝完之後當然要再自己 localhost 顯示畫面啊,不然怎麼搞? 所以就得乖乖的裝 X Server :
cd /usr/ports/x11/xorg ; make install clean

然後自動生出設定檔:
Xorg -configure

把生出來的設定檔拷到「他該去的地方」,該去的地方可以 man xorg.conf 看最後面。
cp /root/xorg.conf.new /usr/X11R6/etc/X11/xorg.conf

然後抄某處的 setting 讓小紅點 scroll 功能能用(就是按中賤然後動小紅點就變成滾輪,然後本來的貼上中鍵變成左右鍵一起按)
#TrackPoint Scroll
Option "EmulateWheel" "on"
Option "EmulateWheelButton" "2"

接下來裝中文環境(其實我一直覺得英文的 look-and-feel 真的好看很多,所以搞不好可以看英文然後裝中文字型就好?)
cd /usr/ports/chinese/zh-auto-tw-l10n ; make install clean
cd /usr/ports/chinese/zh_TW-kde-i18n ; make install clean
cd /usr/ports/chinese/zh_TW-koffice-i18n ; make install clean
cd /usr/ports/chinese/fireflyttf ; make install clean

然後進「控制中心」,把字型改成 firefly 辛苦畫的字體「AR PL New Sung」,我是直接把所有都改成這個,然後大小除了視窗標題是 11 以外其他都 12 ,然後固定字寬的暫時用 Monospace 12 ,看起來還不至於太糟。
x41_kde_screenshot4.png
AA 的話我是有開,由於是 LCD 也有設 sub-pixel hinting ,可以參考 statue 的 FreeBSD 中文 Howto (zh-tut) 當中的 fireflyttf ,然後把 .xinitrc 跟 .cshrc 偷出來稍微改一下之後,就可以打 startx 進去玩耍啦!

如果想用用中文輸入法的話,我這邊是裝 oxim ,一樣是 firefly 前輩最近在維護的輸入法,似乎是從 xcin 2.5pre2 改的 :p ,而且用了新酷音,在 freebsd 下的話裝法很簡單:
cd /usr/ports/chinese/oxim ; make install clean

就幫你搞定了 :),然後只要在 .xinitrc 加上
export XMODIFIERS='@im=oxim'
export GTK_IM_MODULE=oxim
export QT_IM_MODULE=xim

以及
exec oxim &

喔當然,還要記得把
exec startkde

的註解 # 拿掉,一切就都會很完美!有中文可以上 msn,可以用整合的很不錯的 Konqueror 找資料看網頁,然後又有很多有趣的小遊戲!其實很夠了 XD。

當然要來點審查砲彈啦?

某妹的「幹」換成大張的圖,不過佔掉了畫面的 1/4 ,很有趣 XD

x41_kde_screenshot5.png

真的可以打中文喔!!

x41_kde_screenshot3.png
很受我跟把妹偉喜愛的遊戲,某天本來要回家,把妹偉被黏上之後又玩了快一個小時才走出去....

x41_kde_screenshot2.png
最後看一下這個blog長啥鳥樣?

x41_kde_screenshot1.png 不賴吧,快換快換!

然後呢,抄 /usr/local/share/skel/zh_TW.Big5/dot.cshrc 來用..把 zh_TW.Big5 改成 zh_TW.UTF-8..然後開始準備大爆炸的痛苦 UTF-8 環境 :p <待續>

2005年12月26日 星期一

IBM Thinkpad上的 bluetooth

我的小黑是學校賣的專案機,型號是 1866-6sv 。今年的 DM 上特別有個項目寫到「所有專案機種皆不含藍芽以及指紋辨識」,害我當時實在很猶豫。後來在種種原因之下狠下心敗下手,卻在交機的時候格外的高興。因為其他的專案機種都做了某些程度上的縮減,但是 1866-6sv 可能試價格太高所以沒人買還是怎樣的,所以才只有五台。於是交貨的機器就變成市售的 1866-6sv ,加上補助瞬間賺了差不多 15k 有。(其實,會猶豫的原因是因為沒有 X41 而且聽說 X60 搞不好快上了。可是在用了一年的筆電後,實在不能忍受沒小黑的日子啊。)其中的差異大概是多了「指紋辨識」、「藍芽」、「Intel 2915 a/b/g 無線網卡」(原本是 2200 b/g)。

而 bluetooth 是 1.2 版的耶。所以「理論上」應該要能支援 A2DP 才對。在上一次回新營的時候,借了 CPU 的那組 HT820 試了一下,發現 IBM 的原廠驅動根本就不能用,便花了一點時間 google 了一下。 那時看到了 Widcomm 4.0.1.2101 這篇文章,於是就照做了。當時的結果是,雖然會動不過怪怪的。好像是 widcomm 對於給 IBM 的藍芽有稍微動點手腳,於是 BT Stack Server 會說 license 然後爛掉,雖然勉強測試一下 A2DP 會動(會裝一個 「爛牙膏品質音效」),可是音質實在是... ~!@# 。不過那天玩的太累想睡覺,於是就草草收工。讓小黑上得爛牙一直癱瘓。

星期四下五因為老闆去開會,沒有上 ADV OS ,所以獲得了一些空閒時間,於是試著解這問題(本來是在選說是要來繼續幫小黑上的 FreeBSD 裝 xorg 還是來修藍芽,還好沒選前者,不然就真的每次剛辛辛苦苦 make 完然後就 release 新版了 Orz)。沒想到到那個論壇晃的結果,發現 Widcomm 5.0.1.802 這篇,然後就先把之前的驅動移除,照他那邊的步驟去抓 5.0.1.802 ,然後解開完之後把 svcpack 蓋上去之後再開始安裝,就很順利的搞定了。實在是很簡單,而且還多了預設的爛牙膏品質音效(A2DP),下次回去再來測測。

題外話,某隻機八鴨的 2672-iv7 上的爛牙據說也可以用。不過請「千萬」不要裝兩次,因為某鴨裝兩次之後的結果是:



而且據說是無解,因為安全模式也進不去,直接把爛牙模組拔掉也沒用。他到最後是直接重灌,偉哉 M$ !

給張審查砲彈:


所以其實 IBM ThinkPad 如果有藍芽的都可以去升級,雖然我看到很多人說 1.1 的上面很多功能不能硬上,可是看機八鴨那邊測試起來好像都還蠻 OK 的,而且換了這驅動之後速度從之前的龜速改善到 70kbytes 左右,很不錯 (小黑互傳的結果,對手機也有稍微改善,不過看起來限制會在手機方)。至少多了一大堆 profile 看起來也爽很多啦 XD。

2005年12月17日 星期六

WDS

這真是個令人討厭的東西。沒有標準化然後害我在那邊搞半天,後來才發現原來除了 SSID 設一樣, Channel 設相同、兩台 AP MAC 要互抄之外,最重要的是「最好」兩台 AP 是同一家廠商的。原本想說 MSI + ASUS 明明就有小通一下下,可是忽然就完全不通了。莫名其妙,就當一頭霧水之際,忽然覺得搞不好 WDS 並沒標準化,於是狠下心再去衝了一台 ASUS 的 WL520G,設完馬上通,而且很快,也不會一頓一頓的。更不會跑一陣子就爛掉。

亙,之前浪費的時間還來啊。

不過呢,現在跟沈大胖之間 AP 用 WDS + WEP 戶連,嘿嘿,這種爽度還是有的 XD。他在他家用網路比我在客廳還快,不過有趣的是 ASUS 的強度設定從 19 -> 84 的話好像超級猛耶 XD。兩台都沒換天線用原廠天線可以跑出 2M 多的成績算不錯了吧 XD。

也正因為這樣這裡多了台 MSI 的 AP ,拿到台中來升級升級 XD。現在無線網路升級成 802.11G + WPA-PSK,應該至少會比較安心一點吧。(不過電磁波.. Orz)。

附帶一題, ASUS 的 WL520G 有放 source code 耶!要不是沒空不然就自己來亂搞 XD。



一樣有圖有真相,上面那張是 AP 疊疊樂。

Install FreeBSD6 on X41 tablet (1)

據說下學期的文獻是留朕恤老師,當然要來巴結一下,至於為什麼,這個故事以後再講。

其實不只這個原因,機八鴨在 X31 上玩 FreeBSD 玩了好一陣子了,雖然他很機八都沒留 blog or wiki ,不過總是還有人可以指點,在遇到困難上面會快很多 XD。我從拿到 X31 就一直喊說要玩玩到都已經被搶走了還是沒玩到,於是乎趁這裡拜比較悠哉,就鐵了心試著來裝 FreeBSD 到 laptop 上。

沒想到困難重重啊,一開始把 combo 機接上去之後很高興的把 FreeBSD 6.0 Release Disc1 丟進去,想說大概三分鐘就可以搞定,之後再慢慢 make 就好,沒想到給我的是這張畫面:

x41t_FreeBSD6_crash_on_BTX_Loader

真是歡樂到一個不行。然後試了漂長輩助教以及機八鴨的 combo 也是不行,發生同樣的情況,於是跑去抓其他舊的版本(因為據機八鴨說他在 FreeBSD6 RC 的 iso 也是開不起來,不過症狀不太一樣),從 5.1 5.2.1 5.3 5.4 都試了,其中好像只有 5.3 沒有畫面一直跑而是 hang 住,其他都一樣的情形。總不會要我用 4.X 試吧?於是一氣之下跑去抓 FreeSBIE、pfsense、DragonFlyBSD,結果還是都一樣。於是只好請教 google ,看到比較可能的情形是說:FreeBSD 6 Released BTX loader issue - BTX loader 不支援 USB 裝置造成的。如我上一篇所說,難不成要如此之邪惡嗎?

由於「邪」太過於麻煩,還要先裝 Linux ,如果讓我一不小心裝 gentoo 上去大概就黏住那就不能巴結老鄧了 ,所以我選擇了「惡」。

PXE 這東西事實上並不陌生,約在四五年前幫高中做電腦教室的時候就已經玩了一次,那時 google 打 PXE 可以說東西少的可憐,所以必須從 Intel、Realtek 那邊挖資料,然後 try and error 想辦法慢慢兜,連螃蟹卡的 boot rom 都要自己燒,還常常會有某版不能配某版的問題,實在是超麻煩。不過很有趣就是了,尤其是把整套系統兜出來之後,透過 PXE Server 開機,派 PCDOS 開機檔,然後用 config.sys 和 autoexec.bat 搭配寫開機選單,再加上 ghost server/ghost preload partition 的配置,可以說撐得上當時自己很滿意的作品。不過可惜的是當時沒有寫 doc 的觀念,只有自己習慣性的隨手寫了幾個 TXT 檔,然後跟著 server backup 起來。只是我沒想到用三台 server 做交互備份的情況下還能夠爛的如此徹底。在一年多後的某天,看到網路上有人也在搞這些東西,可是解的都不怎麼漂亮、或是說不完整,覺得把那些東西拿出來寫 doc 或分享應該不錯,才發現竟然一點文件、一點成果都不剩。

其實說穿了技術性不高,只是那時幾乎沒現成的工具的情況下苦工不少,全部不見了還真有點可惜。這次 build PXE Server 就非常快了。參考了終極流行(toppop)的金蟬脫殼這篇、以及 mount iso 的方法、還有 Diskless FreeBSD 5.2.1 release PXE DHCP NFS NIS 。大概的步驟不外乎是:

Mount ISO
mdconfig -a -t vnode -f /your/iso/image/6.0-RELEASE-i386-disc1.iso -u 0
mount -t cd9660 /dev/md0 /mnt/freebsd6

Install DHCPD
cd /usr/ports/net/isc-dhcp3-devel
make install clean

Modify RC.CONF
該開的東西要開

ee /etc/rc.conf
inetd_enable=yes

dhcpd_enable="YES" # dhcpd enabled?
dhcpd_flags="-q" # command option(s)
dhcpd_conf="/usr/local/etc/dhcpd.conf" # configuration file
dhcpd_ifaces="" # ethernet interface(s)
dhcpd_withumask="022" # file creation mask

nfs_server_enable="YES"

EDIT dhcpd.conf
ee /usr/local/etc/dhcpd.conf
在 host or network 裡加上:
filename "pxeboot";
option root-path "192.168.200.254:/";
next-server 192.168.200.254;

如果 tftp server 跟 dhcp server 不同台的話就由 next-server 指過去,要改 root-path 的話用 root-path 改。
改完重跑: /usr/local/etc/rc.d/isc-dhcpd.sh restart

EDIT inetd.conf
ee /etc/inetd.conf
把註解取消並改後面 boot 路徑
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /home/tftp
檔名由 dhcpd.conf 的 filename 指定,所以 tftpd 只要給路徑。
改完重跑: /etc/rc.d/inetd restart

EDIT exports
ee /etc/exports
#/usr -alldirs -ro
/home/tftp/freebsd60 -ro -maproot=root -network=192.168.200.0 -mask=255.255.255.0
#/mnt/freebsd6 /mnt/freebsd6 -maproot=root x41tablet
/usr -ro -maproot=root -alldirs -network=192.168.200.0 -mask=255.255.255.0
#/diskless_ro -ro -maproot=0 -network 192.168.1.0 -mask 255.255.255.0
/ -ro -maproot=root -alldirs -network=192.168.200.0 -mask=255.255.255.0

改完記得重跑 mound -r
kill -HUP `cat /var/run/mountd.pid`

就會動了,不過跑起來一直 hang 在 rootfs:

freebsd_x41t_pxe_hang.PNG
找了半天不知道怎麼回事,ping 的到但是服務都沒繼續往下跑。感覺上他的 fstab 都沒有吃,花了好幾個小時實在是累了於是就放大絕招。用 VMWARE 灌進去。

在機八鴨的教誨之下:
[上午 04:57:02] (鴨)...: 我現在跟你說要用entire disk 阿
[上午 04:57:17] (鴨)...: 所以醬子相對來說會比較危險一點
[上午 04:58:16] (鴨)...: 你現在的步驟是...
把vmware 的vmdk 幹掉
重新新增一個physical disk
選entire disk
[上午 04:58:31] (鴨)...: 開vmware 起來之後把freebsd 裝完
[上午 04:58:59] (鴨)...: 裝好以後趁除/d9 還可以開起來的時候 dd 把 512 byte 讀出來
[上午 04:59:28] (鴨)...: 讀完以後 windows 的partition 設回來active
[上午 04:59:37] (鴨)...: 降子應該就好了

很順利的搞定了。而且全部都在 vmware 當中搞定(危險動作請勿模仿啊 XD,搞爛恕不負責)。因為我之前就已經用工具先把磁區分好了:

partition_x41.PNG
所以在裝的時候小心,不要安裝 MBR ,然後再割分割區的時候直接用 T 把 type 設成 165 (freebsd) 然後進去切 slice 就好了。至於這裡我沒有割 /swap 因為打算跟 windows 共用 2G 的那塊 fat32 。另外在 loader 的部份為了簡單直接用 NT 的 loader ,可以參考 FreeBSD 的 FAQ 有關 NT Loader 的部份,或是 MicrosoftWindowsBootManager,我是照 debian 那個方法下了:
dd if=/dev/ad0s1c of=/root/BootSector.FreeBSD bs=512 count=1

然後把 BootSector.FreeBSD 想辦法傳出來丟到根目錄後改 boot.ini 加上:
C:\BootSector.FreeBSD="FreeBSD"

並且到 FreeBSD 裡面用 fdisk -t -a -1 ad0 把 Windows XP 的 partition 設回 active ,就可以重開看成果(或是準備炸的亂七八糟了)。

2005年12月14日 星期三

X41tablet 處處挑戰

拿到這台小黑後,馬上就直接買了條 1G RAM 給插了上去,因為 4200RPM 的硬碟實測傳輸率只有 20MBytes 左右,實在是不夠我用,所以想說最好是把 RAM 給插多一點,不然老是在 io 硬碟效率又差的話應該會很難過。沒想到,開始使用的時候就發現了 windows 休眠老是會失敗的問題。當然,我沒想到是 RAM 插太多的問題。於是用了一個多月直到現在。


上禮拜比較閒,抽空想辦法 google 了一下,在 tabletpcbuzz 看到一篇有用的「>1GB RAM and Hibernate Problem -- Possible Solution (Unfortunately Not)」,照著他說的在 boot.ini 加上:


multi disk rdisk partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn /PAE


結果情況真的改善很多,雖然還是會失敗代表不是治標的方法,不過比起來,原先大概休眠十次會有九次失敗,並且跳出「系統資源不足,無法完成 API」,現在大概十次裡只有一次會出現,改善很多。


雖然在上面的 link 中會發現 M$ 好像知道這問題而且也做了 patch ,不過那其實是虎爛的。因為我跑去抓「330909」的時候就發現其實這個套件應該要存在 SP2 裡面裡,但是在我的電腦幾乎都是有更新就裝,沒道理沒裝到。而且抓下來的時候會告訴你「你已經裝了 SP2 ,不能安裝..blah」。


這台小黑還真是處處充滿挑戰啊,前幾天想裝 FreeBSD 卻發現光碟開機就直接爛在 loader ,試了其他台 USB-CDROM 也是一樣,然後也試了 DragonFlyBSD、FreeBSD 5.3 5.4 6.0 、還有之前說想玩的 pfsense,查了一下看到「FreeBSD 6 Released BTX loader issue」據說是 Loader 不支援 USB device ,但是機八鴨在 X31 上面裝的很高興啊!總不會真的要我玩很邪惡的「FreeBSD remote install」吧?


雖然現在想用的方式「PXE install」好像更邪惡了一點 *grin* 。

2005年12月8日 星期四

perl-after-upgrade

我還在納悶怎麼每台機器本來是 FreeBSD 5.x 升到 6.0 之後 perl 都會因為 Locale 爛掉,然後重裝 perl 之後總是會發生 libperl.so 消失的神秘事件。

剛剛我發現了, more 了一下 perl-after-upgrade 之後才發現原來在耍笨,沒有 perl-after-upgrade -f 是不會實際上 perform 的。因為實在太笨了,所以記下來給大家笑。

2005年11月9日 星期三

MySQL 升級,phpBB UTF8 化

恩,非常悲苦。為了在 RW 跑個 portupgrade -acCv 受盡苦難。首先我要說,在 FreeBSD 下還是保險起見不要用 -O3 ,代價太大了。這幾天 RW 重編 Apache2 的次數我想不下二十次!到最後發現竟然是 make.conf 裡的 -O3 在搗蛋。而且因為同時炸太多東西了,所以根本很難發現誓死那個。首先, Perl 掰了,然後 trac 的 Python ,然後 php .. 這個教訓告訴我們不要手賤,等等想到再來把 FastCGI 給裝回去吧 -_-。

爆炸最大的大概是 MySQL ,不知道什麼年代開始,RW 的 MySQL 就變成沒有人敢動的版本,永遠都停在 4.0.20 ...某次不小心升級之後所有 database 全爛,也沒有人有空去看 why ,於是偉大的 clode 就不知道去那弄了 4.0.20 的 package 來,反正誰不小心幹掉就直接用 package 硬裝。(很勇敢對吧?)。很不巧,這次又是我手賤,執意要把 MySQL 換上去,並且還想「順便」把裡面的 database 「全面」 UTF8 化,所以代價就是好幾天幾乎都沒睡超過四小時。不過好在,最後似乎轉過去了。雖然中間應該多少損失一些資料。首先,在 MySQL 4.0.20 的時候先把資料給 dump 出來:

mysqldump -uroot rwphpbb > rwphpbb.sql

我 看到很多人說在 dump 的時候要記得設 -default-char-set=latin1 ,我之前也確實必須要這樣設定才能 dump 出正確的檔案,不過不知道是因為之前編的關係還是版本問題,加了之後反而沒辦法 dump ,所以...。然後就把 MySQL 升級,不過因為是用 portupgrade ,他升到了 4.x ,於是我手動幹掉裝成 MySQL 5 (反正要痛苦就一次痛苦個夠,反正這次我做了很充分的備份),不過健忘症發作,忘了下 -default-charset=utf8 ,所以變成在 rc.conf 裡面加上:

mysql_enable="YES"
mysql_args="--default-character-set=utf8"

然後中間經歷了很多 Apache/PHP 的爆炸就略過不提。處理完之後便拿 RW 的 phpBB 來開刀,首先照著我之前那篇 wordpress 的方式把 .sql 檔案轉換好:

*add follow line to .sql file

SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

*use vim to replace charset

(:1,xxxs/latin1/utf8/g)
這裡我是把 big5e 都換成 utf8 ,雖然我不確定對不對...

*use iconv/piconv 轉換 database big5->utf8

piconv -f big5 -t utf8 rwphpbb_utf8.sql > aaa.sql

然後把他匯入 MySQL,在啟動 MySQL 之前先確定剛剛的 rc.conf 已經設定好,這樣才會把預設的 table 蓋成 UTF8 而不用指定,另外就是 my.cnf 的設定,我暫時是
cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf 然後在 [mysqld] 的 section 加上 init_connect = 'SET NAMES UTF8;' (反正都要全面 UTF8 化了),然後蓋 database 、匯入、設定使用者(因為我是把整個資料庫砍掉重鍊)。

*create database

mysqladmin -uroot create rwphpbb

*restore database

mysql -f -u root rwphpbb < aaa.sql
(用-f 是因為我遇到很多錯誤導致做到一半就爛了,所以強制做完,至於錯誤是啥我也不知道 -_-)

*create database user

mysql> GRANT ALL PRIVILEGES ON 資料庫名稱.* to 使用者名稱@localhost IDENTIFIED BY '密碼';

然後接下來處理 phpBB。如果你看到:

phpBB : Critical Error

Could not connect to the database

請 到 config.php 裡面把 $dbms = 'mysql'; 換成 $dbms = 'mysql4'; 然後燒香拜拜看看連不連的上。連上的話沒有意外你會發現一狗票亂碼,不要擔心,這是正常的。我爬了一些文章後發現 phpBB 官方(或者說是台灣語系的站台)並沒有釋出 UTF8 版本的 Language Pack ,所以很不幸的得自己做。不過不難。只是把中文語系那個目錄的 lang_main.php 裡的 $lang['ENCODING'] = 'big5'; 換成 $lang['ENCODING'] = 'UTF-8'; ,然後把 email 目錄裡的所有檔案的第二行 Charset: Big5 換成 Charset: UTF-8就好了。可以參考 這裡 。或是懶得搞的話可以抓我轉好的 phpBB2.0.17 UTF8 中文語系包。 要注意解開前先把你的 lang_chinese_traditional_taiwan 目錄 rename 一下,本來我是想弄個類似 lang_chinese_traditional_taiwan-UTF8 的語系,可是後來發現這樣會爆炸很大,所以只好用原來的 lang_chinese_traditional_taiwan ,所以你可能需要把 lang_chinese_traditional_taiwan rename 成 lang_chinese_traditional_taiwan.big5 之類的。理論上沒意外的話進去應該會看到 UTF8 的畫面了,感動吧!你可能會注意到好像主畫面是 Big5/UTF8 混合,很神奇吧 -_-。找半天不知道是啥原因,想說應該是 cache ,於是把 phpBB2 裡面的 cache/cache2 都幹掉了還是一樣...到最後才發現,原來去新蓋一個討論板他就會清掉了,那不然他不是存在 cache 裡面是存在那啊 -_-?。

剩下的,就等其他人(使用者)遇到問題再說吧,我跟 phpBB 超不熟,連用都沒在用 :~ 。

 

2005年11月6日 星期日

MySQL 5.0.15 亂碼

剛剛用 Portupgrade -aCcv 升級系統,沒想到 Blog 上的字又變成亂碼了。之前才把 MySQL 的資料從 latin1 -> UTF8 ,本來想說可能是自動升級的時候沒有弄好,重裝了還是一樣爛。機八鴨叫我用

mysql> SHOW VARIABLES LIKE 'character_set_%';
mysql> SHOW VARIABLES LIKE 'collation_%';


來看看發生什麼事了,不過看起來:

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
7 rows in set (0.01 sec)

似乎檔案還是對的,於是 google 了一下,發現其中一招解法是在 wordpress 的 wp-db.php line 56 左右:

// mysql_query("SET NAMES 'utf8';");
// mysql_query("SET CHARACTER SET UTF8;");
$this->select($dbname);

加上 mark 的那兩行,另一招的話則把 my.cnf 丟到 database 的目錄裡面去並且在 [mysqld] 的地方加入:

init_connect = 'SET NAMES UTF8;'

就 ok 了。

2005年10月28日 星期五

64 位元好猛啊!

64 位元真的不是蓋的,好大啊。一般對於 32 bits 的系統來講要把 int 玩到 overflow 似乎不是什麼很困難的事,可是對於 64 bits 的系統來說就很難講。以下就來介紹我昨天被嗆的原因以及試圖要幹的蠢事 XD。

2005年10月27日 星期四

OpenVPN

一陣子以前(好像是今年寒假左右?)曾經為 RW 架了 OpenVPN ,忘了是為什麼了,反正不外乎就是要搞邪惡計畫或者是玩遊戲。之前裝的時候還記得好像剛好是 2.0 RC12 然後剛好出 2.0 RC13 , FreeBSD 的 Ports 還在舊的 1.1.2 的樣子,所以我用手動的方式搞上去的。印象中好像還用 Static Key 搞了很久,期間一直都沒注意到他說如果要用 tap driver 加上 server mode 的話得用 TLS/SSL 而不能用 preshare static key ,然後因此耍了蠻久的白痴。而且那時他沒有提供所謂的 EASY-RSA 這目錄裡的 script ,不然也許是我眼瞎沒找到,所以餵了憑證也生了好久。又因為要為每個人都建憑證大麻煩了,在那邊蓋半天之後才發現原來有 duplicate-cn 的選項讓大家都能用同一份 key ,後來把 key 跟著 OpenVPN GUI for Windows 給包起來給要用的人抓之後才好不容易弄好。

現在由於學校的無線網路 仍然處於門戶大開的階段(完全沒有加密),也因此在我之前的小黑上完全不敢裝 KKMAN / PCMAN 之類的軟體,也不敢連 MUD ,所以在打密碼的時後都得再三確認這網頁到底有沒有加密。雖然說用 ssh tunnel (經由 putty or pietty 來建立)到某台機器的 proxy 可以解決大部分的問題,不過這只限於 http protocol 。也因此又讓我興起了再來裝 OpenVPN 的念頭。擇日不如撞日,於是乎昨天帶完os的課後輔導後就在 LAB 動手了。

2005年10月17日 星期一

DNS 爆炸的問題

看起來似乎找到兇手了。所以前面那篇似乎是錯怪我們偉大的微軟大哥了。本來以為是WindowsXP在討打,結果就算重灌了之後好像情況還是依然沒改善,動不動就會把 blog.cookys.org 指到舊的 ip 去然後爆炸,而且這個問題那位「色小外長輩」好像有跟我反應過,不過機八鴉卻說他都沒遇到,然後拼命嘲笑我說我家台子爆炸了,我猜應該是因為他用 Sharp Reader 來收 RSS 所以都沒感覺,唯一有感覺大概就是RSS噴汁的時候?

問題是出在之前申請的免費 DNS slave:PowerDNS ,今年二月多幫 cookys.org 掛上去的 dns 避免 ADSL 一掛就全部斷光的慘況。不過前一陣子PowerDNS說他們不幹了:

Dear cookys lin,

This message is to inform you of an important change concerning your
PowerDNS Express account.

PowerDNS Express currently provides free dns hosting for over 40.000 domains
worldwide, and this number is still increasing every day.
Unfortunately, we have been suffering from heavy abuse lately. Botnets,
spammers using our mailforwards and repeated DOS attacks have increased our
costs of running this service enormously.

We regret to inform you that, in order to keep providing you with high
quality DNS management, we are forced to stop all free services on PowerDNS
Express as of today.

As a result, your account needs to be upgraded.
Because we would really like to keep you as our customer, we've lowered the
prices of our paid services significantly! Have a look at
http://express.powerdns.com/cshop.php for our new prices.

Please login to your account first to purchase the appropriate packages
and/or remove any unused domains.
Starting October 15th, 2005 we will be disabling accounts that are over balance.

然後我只是沒注意理他,想說掛著那天想到再把他拿掉就好,反正應該沒差。就算那台機器不回依照 DNS 的機制反正還是會查的到。天曉得因為太相信這樣的機制所以就倒楣了。因為PowerDNS的 DNS 「還在線上」、而且「還會回應」,但是「不會更新」。剛剛發現的:

正常的 DNS:

[22:29-/var/log-] $ dig blog.cookys.org @dns.cookys.org

; <> DiG 9.3.0 <> blog.cookys.org @dns.cookys.org
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15828
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 3

;; QUESTION SECTION:
;blog.cookys.org. IN A

;; ANSWER SECTION:
blog.cookys.org. 600 IN A 140.134.26.72

;; AUTHORITY SECTION:
cookys.org. 600 IN NS dns.hysh.tnc.edu.tw.
cookys.org. 600 IN NS dns.twku.net.
cookys.org. 600 IN NS dns.cookys.org.
cookys.org. 600 IN NS dns2.cookys.org.

;; ADDITIONAL SECTION:
dns.twku.net. 600 IN A 61.219.228.78
dns.cookys.org. 600 IN A 220.134.232.80
dns2.cookys.org. 600 IN A 140.134.27.100

;; Query time: 3 msec
;; SERVER: 220.134.232.80#53(dns.cookys.org)
;; WHEN: Sun Oct 16 22:29:56 2005
;; MSG SIZE rcvd: 193

跑去查 PowerDNS 的話:

[22:29-/var/log-] $ dig blog.cookys.org @dns-eu2.powerdns.net

; <> DiG 9.3.0 <> blog.cookys.org @dns-eu2.powerdns.net
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32436
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;blog.cookys.org. IN A

;; ANSWER SECTION:
blog.cookys.org. 600 IN A 210.59.67.2

;; Query time: 343 msec
;; SERVER: 212.72.55.217#53(dns-eu2.powerdns.net)
;; WHEN: Sun Oct 16 22:30:08 2005
;; MSG SIZE rcvd: 49

真是有夠歡樂啊!所以來去去爸爸把PowerDNS拿掉之後就等他更新了吧,希望這樣就解決了-_-。

2005年10月14日 星期五

超神奇的網卡 polling

不知道多久之前,好像是 10/4 吧。cvsup 的時候習慣性都會看一下 src 底下的 UPDATING 看看有沒有什麼新鮮事,那時就看到了:

20051001:
        kern.polling.enable sysctl MIB is now deprecated. Use ifconfig(8)
        to turn polling(4) on your interfaces.

而這次在長輩的板又看到,於是跑去翻 mailinglist,找到這篇,然後又到處 google 了一下為什麼反而又換回去 polling 模式,在半信半疑當中升上了 7.0 CURRENT 10/1 之後的版本,不過按了 ifconfig sis0 polling 之後竟然不理我。後來才發現原來 kernel 裡面要加上
options   DEVICE_POLLING
才會動,稍微測了一下,非常的出乎意料之外...當時如果有人路過我旁邊大概會覺得這瘋子很奇怪,嘴巴合不起來對螢幕傻笑是怎樣,來看看吧:

sis0: flags=8843 mtu 1500
        options=8
        inet6 fe80::290:ccff:fe73:c148%sis0 prefixlen 64 scopeid 0x1
        inet 192.168.210.254 netmask 0xffffff00 broadcast 192.168.210.255
        ether 00:90:cc:73:c1:48
        media: Ethernet autoselect (100baseTX )
        status: active

lab# ping -f 192.168.210.1
PING 192.168.210.1 (192.168.210.1): 56 data bytes
.^C
--- 192.168.210.1 ping statistics ---
383228 packets transmitted, 383227 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.087/0.310/2.778/0.342 ms

 


last pid:  5249;  load averages:  0.75,  0.51,  0.27                                                 up 0+07:26:32  22:49:40
56 processes:  2 running, 54 sleeping
CPU states:  3.0% user,  0.0% nice, 30.7% system, 24.3% interrupt, 41.9% idle
Mem: 167M Active, 631M Inact, 136M Wired, 31M Cache, 111M Buf, 2328K Free
Swap: 2019M Total, 2019M Free

 

  PID USERNAME  THR PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND
 5249 root        1  80    0  4644K   892K RUN      0:10  5.22% ping
  595 cookys      1  79    0  6748K  2160K select   0:18  4.49% screen
 4732 cookys      1  78    0 29364K  2932K select   0:12  2.98% sshd
  545 mysql       3  20    0 64484K 49600K kserel   0:20  0.00% mysqld

然後從 192.168.210.1 看 dumeter:


然後換成 Polling

lab# ifconfig sis0 polling
lab# ifconfig
sis0: flags=8843 mtu 1500
        options=48
        inet6 fe80::290:ccff:fe73:c148%sis0 prefixlen 64 scopeid 0x1
        inet 192.168.210.254 netmask 0xffffff00 broadcast 192.168.210.255
        ether 00:90:cc:73:c1:48
        media: Ethernet autoselect (100baseTX )
        status: active
last pid:  5255;  load averages:  0.84,  0.61,  0.35                                                 up 0+07:29:32  22:52:40
56 processes:  2 running, 54 sleeping
CPU states:  0.7% user,  0.0% nice,  0.0% system,  0.0% interrupt, >99.3% idle
Mem: 175M Active, 608M Inact, 136M Wired, 49M Cache, 111M Buf, 2452K Free
Swap: 2019M Total, 2019M Free

  PID USERNAME  THR PRI NICE   SIZE    RES STATE    TIME   WCPU COMMAND
  595 cookys      1  76    0  6748K  2160K select   0:26  0.00% screen
  545 mysql       3  20    0 64484K 49600K kserel   0:20  0.00% mysqld
 4732 cookys      1  76    0 29364K  2932K select   0:14  0.00% sshd
  572 www         1   4    0 92284K 17048K accept   0:06  0.00% httpd
  669 www         1   4    0 93260K 17960K accept   0:05  0.00% httpd
 5255 root        1  76    0  4644K   892K RUN      0:02  0.00% ping

lab# ping -f 192.168.210.1
PING 192.168.210.1 (192.168.210.1): 56 data bytes
.^C
--- 192.168.210.1 ping statistics ---
91551 packets transmitted, 91550 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.292/0.910/0.952/0.022 ms
一樣從 192.168.210.1 看 Dumeter:


CPU load 減輕暴多!不過看 Dumeter 好像比較慢?實際上用 FTP 抓檔測的結果是:沒差啦,用力用吧。不知道啥時會 MFC ,還是把手邊的機器都來衝 7.0-CURRENT? 這樣好像太 XD 了。

2005年10月12日 星期三

昨天幹的蠢事 - ubench

昨天把硬碟清的差不多了(總共清了四天 -_-,因為其中有一顆 WD 80JB 好像存活了三四年,裡面滿滿的是對我來講比較重要的資料。順便藉著這次機會把之前的 Backup 整理歸類,順便備份到 DVD-R 裡面),想說開始大開殺戒。開始把硬碟亂灌作業系統來玩,當然第一個很好奇的就是 ubench 在這台 deaktop 上的 Gentoo 能夠跑這麼高分,那在 FreeBSD 下會是多少?要嗎就是 Linux 分數偏高所以其他台機器的分數顯得比較低,要嗎就是這台機器真的特別神猛,不過我猜應該是因為 Linux 的關係。

於是我在 WD Raptor上的分割區灌了 FreeBSD 5.4 Release。不過開機的時候遇到很奇怪的問題,因為我用 Gentoo 那時候裝的 Grub 來當作開機管理員。一開進 FreeBSD 之後螢幕就花掉然後不給反應了,看起來就像是因為進了 Graphic Mode 搞得鬼, Google 了半天好像找不到該用啥 keyword 查,想說反正只是測一下 ubench ,乾脆裝到另一顆硬碟效果也一樣。忽然間心血來潮,把 KVM 切成 server 然後 ping desktop ,竟然有反應耶。可是 SSH 是爛掉的,想一想可能是因為剛灌完需要產生 RSA KEY Pair,於是胡亂按了一通然後把他重開機。等了好久,果然莫名其妙 ssh 就通了。

於是我就在 FreeBSD 5.4 下測,沒想到測出來只能用「慘不忍睹」來形容阿。

這是之前在 Gentoo 下測的:

rabbit ubench-0.32 # ./ubench
Unix Benchmark Utility v.0.3
Copyright (C) July, 1999 PhysTech, Inc.
Author: Sergei Viznyuk <sv@phystech.com>
http://www.phystech.com/download/ubench.html
Linux 2.6.11-gentoo-r6 #1 SMP Wed May 25 09:31:04 Local time zone must be set--
ee zic  i686
Ubench CPU:   159850
Ubench MEM:   215002
--------------------
Ubench AVG:   187426 (-march=prescott -msse -msse2 -msse3)

 

這是昨天在 FreeBSD 下測的:

> ubench
Unix Benchmark Utility v.0.3
Copyright (C) July, 1999 PhysTech, Inc.
Author: Sergei Viznyuk <sv@phystech.com>
http://www.phystech.com/download/ubench.html
FreeBSD 5.4-RELEASE FreeBSD 5.4-RELEASE #0: Sun May  8 10:21:06 UTC 2005     roo
t@harlow.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
Ubench CPU:   109562
Ubench MEM:   117601
--------------------
Ubench AVG:   113581 (Tue Oct 11 06:44:21 CST 2005) (NO_HTT)

然後我忽然想到,那時 Linux 的 Kernel 是有 SMP 下去跑的 Kernel ,天曉得會不會有影響。反正就試看看。於是就很高興的去重新編 kernel 。到後來 make installkernel KERNCONF=SMP 打完的時候,看他 installation finished 之後很習慣性的就按了 alt-ctrl-del ,過了兩秒才想到「幹!!」。我現在是用 server ssh 到桌機上啊,這樣等於是我把 server 給重開了阿 -_-。果不其然,開了 37 天多的 server 就被我 alt-ctrl-del 了。 XD 真是超白痴的。後來編完之後測的結果其實還是很糟糕:

> ubench
Unix Benchmark Utility v.0.3
Copyright (C) July, 1999 PhysTech, Inc.
Author: Sergei Viznyuk <sv@phystech.com>
http://www.phystech.com/download/ubench.html
FreeBSD 5.4-RELEASE-p7 FreeBSD 5.4-RELEASE-p7 #0: Tue Oct 11 07:01:27 CST 2005
   cookys@fleebsd.iecs.us:/usr/obj/usr/src/sys/SMP i386
Ubench CPU:   109382
Ubench MEM:   113730
--------------------
Ubench AVG:   111556 (Tue Oct 11 07:30:57 CST 2005) HTT


於是我又本著好奇的心態想說,會不會是 FreeBSD 5.x 系列寫爛了,搞不好 DragonFlyBSD 從 4.xx 上來的會好一點,於是又去抓他的 LiveCD 來測,測了之後反而比 FreeBSD 還慘,不過因為那版是 1.1 ,聽說 1.2 拿掉很多 lock ..於是又抱著一線希望去抓 1.3-DEVELOPMENT。還是差不多:

 

> ubench
Unix Benchmark Utility v.0.3
Copyright (C) July, 1999 PhysTech, Inc.
Author: Sergei Viznyuk <sv@phystech.com>
http://www.phystech.com/download/ubench.html
DragonFly 1.1-CURRENT DragonFly 1.1-CURRENT #10: Mon i386
Ubench CPU:     98245   99820    107728          108276
Ubench MEM:   107367  112979    135429          134525
-------------------- --------   ------          ------
Ubench AVG:   102806  106399    121578          121400
                     (GCC 2.95) (GCC 3.4 -O2)   (GCC -O3)
                        (1.3-DEVELOPMENT ,April 20)
(Tue Oct 11 17:42:25 CST 2005) (GCC 2.95)


後來又很好奇為什麼 FreeBSD 在編 Kernel 的時候都會把特殊指令集給關掉,於是 Google 了一下發現這篇和這篇:

 

For speed reasons, we restrict the kernel to using integer instructions
only.  This means we can avoid the considerable expense of
saving/restoring floating point context unnecessarily for syscalls,
interrupts, etc.

...

Note that we *could* concievably set aside a few xmm registers for
faster data copies inside the kernel, but we don't do it yet.  I
believe linux makes %xmm0 and %xmm1 available in the kernel and saves
them with every trap into kernel mode.


 

Whether or not the kernel is compiled with instructions that use these
registers has absolutely no bearing on whether userland code can use
them.  It's purely about trading one optimization (using optimized
opcodes in the kernel) for another (not having to save and restore
dozens of registers to the stack on each syscall).  It might be
interesting to experiment with allowing a certain class of instructions
in the kernel and saving and restoring the associated registers, and
seeing if GCC will actually generate code that is better and overcomes
the save/restore expense.  Any takers?

Scott

反正就是其實用了的話在 save/restore 的時候會有比較大的 overhead ,所以先關掉。然後其實還有方訪能夠去增加他的效率,那就是跟 Linux 一樣用 %xmm0 and %xmm1 來搞。不過這似乎跟上面的測試沒什麼太大關係就是了,測試數據參考就好。 Linux 在 ubench 的分數上勝出很多是事實 XD。