2014年4月20日 星期日

Google Chrome 在 32-Bit 的舊電腦不能啟動的原因

在舊的 M2400 筆電中安裝 Fedora 已不記得是多久前的事了,換用「MATE 桌面環境」也有好幾個月,沒注意到何時開始發現 Google 的 Chrome 不能啟動,並出現這個錯誤訊息:
ERROR:nacl_helper_linux.cc(233)] NaCl helper process running without a sandbox!
Most likely you need to configure your SUID sandbox correctly
這問題找了很久,網路上也有許多討論,
  • SELinux 的限制某些子行程的啟動:有試著將它關閉也不能正常啟動。
  • Sandbox 的版本問題:用『google-chrome --no-sandbox』命令列啟動,雖說可以啟動,但似乎還是不太正常。
  • Google Chrome 的程式碼未更新,建議用 Chromium:Google Chrome 已經更新好幾版了,應該不是這問題。
一直沒有找出比較可能的答案,當然也沒辦法解決這問題。只好轉而找出引發這個問題的根本原因,至少確認是否值得再花時間去找解答。
  想說在 M2400 筆電上,也重新安裝 Fedora 好多次了有些麻煩,不如用 VirtualBox 虛擬機試試。把虛擬機的規格設得跟 M2400 最接近,包含 CPU、記憶體、硬碟等。安裝好 Fedora 20 後,立即安裝 Google Chrome 來試試看,想不到可以正確啟動、執行,絲毫沒有任何問題。
  規格幾乎都一樣,怎麼一台可以、另一台不行呢?再詳細比較細部規格,並參考錯誤時的訊息,似乎發現了一個可能的問題點,就是:
M2400 的 CPU 沒有 NX (No-eXecute) 功能
這是 CPU 的安全機制,會限制某些程式碼不能執行,以保護系統安全。舊的 CPU 常未有這項功能,而 Google Chrome 預設使用這個功能,應該是造成『Google Chrome 在 32-Bit 的舊電腦不能啟動』的原因。
  因此,筆者可以暫時歸納得知這個結論:是:
在 32-bit 電腦中,若 Chrome 不能正常啟動,先檢查 CPU 是否支援 NX 功能,
若有支援:再細查其它問題。
若不支援:不用試了,等 Chrome 或 sandbox 的開發者修改。
至於 CPU 有否支援 NX 功能,在 Linux 可以用這個命令,
[SiB@F20-32 ~]$ cat /proc/cpuinfo
processor:0
vendor_id:GenuineIntel
cpu family:6
model:42
model name:Intel(R) Core(TM) i7-2670QM CPU @ 2.20GHz
stepping:7
cpu MHz:2178.000
. . . . .
flags:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht nx rdtscp constant_tsc pni ssse3
bogomips:4389.44
. . . . .
上例是在 VirtualBox 中模擬出的 32-bit 電腦之查詢結果,在『flags:』之後有個『nx』旗標,就是指這部電腦可以正常執行 Chrome。再看下一個例子,
[SiB@P3-1G ~]$ cat /proc/cpuinfo
processor:0
vendor_id:GenuineIntel
cpu family:6
model:8
model name:Pentium III (Coppermine)
stepping:10
microcode:0x1
cpu MHz:999.666
. . . . .
flags:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 mmx fxsr sse
bogomips:1999.33
. . . . .
在第二個例子中,『flags:』那列中並無『nx』旗標。所以,Chrome 在這部電腦中就不能正常執行。
  確定了原因,就不需再努力嘗試去解決問題,畢竟修改一個未參與發展的軟體,要花費的時間是很可觀的,而且也不是所有的問題都要參與,大家分工就是「開源碼軟體」發展的精神。

已測試版本:

  • Fedora: 19, 20 (32-bit)
  • Chrome: ~30, 31~34

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)