Solaris
魷魚:非法指令(核心轉儲)
作業系統:Oracle Solaris 11.3.1.5.2,CPU 架構:X86
我最近通過這樣做安裝了 Squid
$ pkg install squid
這很順利:
root@darwin1:~# pkg info squid Name: web/proxy/squid Summary: Squid Web Proxy Cache Description: Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more. Category: Web Services/Application and Web Servers State: Installed Publisher: solaris Version: 3.5.5 Build Release: 5.11 Branch: 0.175.3.0.0.30.0 Packaging Date: Fri Aug 21 17:30:06 2015 Size: 51.84 MB FMRI: pkg://solaris/web/proxy/squid@3.5.5,5.11-0.175.3.0.0.30.0:20150821T173006Z
但我無法執行 Squid:
root@darwin1:~# /usr/squid/sbin/squid -h Illegal Instruction (core dumped)
該
file
命令給了我這個:root@darwin1:~# file /usr/squid/sbin/squid /usr/squid/sbin/squid: ELF 32-bit LSB executable 80386 Version 1, dynamically linked, not stripped
我在本地(非核心)區域內。應該沒關係吧?
為什麼是核心轉儲?
抱歉,我想我自己找到了答案:http ://wiki.squid-cache.org/KnowledgeBase/IllegalInstructionError 。
(引用開始)
Squid 3.4 上的非法指令錯誤
概要 Squid 3.4 及更高版本,在某些半虛擬化系統上執行,甚至一些聲稱完全虛擬化的系統(至少到目前為止已確認 KVM、Xen 和 Xen 衍生產品)在啟動後不久就會因非法指令錯誤而崩潰。
症狀
在 Intel 兼容處理器上的虛擬機上啟動後,Squid 立即崩潰並出現非法指令錯誤
解釋
Squid 建構系統預設使用
-march=native
gcc 選項來優化生成的二進製文件。不幸的是,某些(半)虛擬化系統不支持他們宣傳的整個指令集。編譯器不知道,並生成觸發此錯誤的指令。解決方法
這些優化是有幫助的,但對於擁有完整功能的 squid 來說不是必需的,尤其是在 ia64/amd64 平台上。
--disable-arch-native
可以通過向配置腳本提供選項來覆蓋檢測到的預設值。(引用結束)
我們在 VMware ESXi 6.0中執行 Solaris 。所以我想這就是原因。
我不會刪除我自己的問題,因為其他人也會遇到這個奇怪的機會。