鱿鱼:非法指令(核心转储)

pet*_*erh 4 solaris virtual-machine vmware squid

操作系统:Oracle Solaris 11.3.1.5.2,CPU 架构:X86

我最近安装了鱿鱼

$ pkg install squid
Run Code Online (Sandbox Code Playgroud)

这很顺利:

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
Run Code Online (Sandbox Code Playgroud)

但我不能运行 Squid:

root@darwin1:~# /usr/squid/sbin/squid -h
Illegal Instruction (core dumped)
Run Code Online (Sandbox Code Playgroud)

file命令给了我这样的:

root@darwin1:~# file /usr/squid/sbin/squid
/usr/squid/sbin/squid:  ELF 32-bit LSB executable 80386 Version 1, dynamically linked, not stripped
Run Code Online (Sandbox Code Playgroud)

我在本地(非内核)区域内。应该没有关系吧?

为什么核心转储?

pet*_*erh 7

抱歉,我想我自己找到了答案:http : //wiki.squid-cache.org/KnowledgeBase/IllegalInstructionError

(报价开始)

Squid 3.4 上的非法指令错误

概要 Squid 3.4 及更高版本,在某些半虚拟化系统上运行,甚至一些声称完全虚拟化(至少 KVM、Xen 和 Xen 衍生产品到目前为止已得到确认)在启动后不久因非法指令错误而崩溃。

症状

在 Intel 兼容处理器上的虚拟机上启动后,Squid 立即因非法指令错误而崩溃

解释

Squid 构建系统默认使用-march=native gcc 选项来优化生成的二进制文件。不幸的是,某些(准)虚拟化系统不支持他们宣传的整个指令集。编译器不知道,并生成触发此错误的指令。

解决方法

这些优化是有帮助的,但不是拥有功能齐全的鱿鱼所必需的,尤其是在 ia64/amd64 平台上。可以通过向--disable-arch-native 配置脚本提供选项来覆盖检测到的默认值。

(引用结束)

我们在 VMware ESXi 6.0 中运行 Solaris 。所以我想这就是原因。

我不会删除我自己的问题,因为其他人也会遇到这个问题。