Solaris

魷魚:非法指令(核心轉儲)

  • October 19, 2017

作業系統: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 。所以我想這就是原因。

我不會刪除我自己的問題,因為其他人也會遇到這個奇怪的機會。

引用自:https://unix.stackexchange.com/questions/375696