應該有不少人碰過Apache 啟動時卡在digest module 過不去,導致PHP 不能使用,或是碰過某些程序卡在某個地方很久沒動作。這時候大家可能要去檢查一下/dev/random 這個設備檔案。可以用cat /dev/random 來看它的內容,如果你發現他一直沒顯示任何內容﹝可能是亂碼數字之類的﹞,那就是它出問題了。據我從digest module 的source code 裡所知,這模組呼叫了一個亂數產生的函數,此函數會呼叫/dev/random。所以當/dev/random卡住顯示不出內容時,很自然的任何read() 它的程式會停在那等它回應。我了解Linux kernel 的source code 之後發現,/dev/random 會使用key/mouse/disk 的interrupt 當做亂數種子的計算來源,好處是會有更大的安全性,但問題是當我們沒在使用 key/mouse/disk 或是他們的 interrupt 訊號量不足以產生亂數種子時,/dev/random 就會永遠是空白沒東西。這問題有個暫時的解決辦法,就是將 /dev/random 砍掉,先用link的方式使用 /dev/urandom 取代/dev/random。要完全解決此問題,可至SourceForge 找到gkernel這項目。下載rng-tool 回來編譯安裝。然後於開機的 Scripts 中加入:
rngd -b -o /dev/random -r /dev/urandom此Deamon 將會在沒足夠interrupt 訊號時使用urandom 的亂數當random 的亂數種子。
(責任編輯:城塵)