
作業系統: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/[email protected],5.11-0.175.3.0.0.30.0:20150821T173006Z
但我無法運行魷魚:
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
我在本地(非內核)區域內。應該沒什麼關係吧?
為什麼要核心轉儲?
答案1
抱歉,我想我自己找到了答案: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
向配置腳本提供選項來覆寫偵測到的預設值。
(引文結束)
我們正在運行 SolarisVMware ESXi 6.0 內部。所以我想這就是原因。
我不會刪除我自己的問題,因為其他人也會遇到這個問題。
答案2
-march=native
擁有 Oracle 支援合約的客戶可以從儲存庫取得在 Solaris 11.3 SRU 17 (11.3.17.5.0) 中停用該標誌的編譯後的魷魚版本/support
。這包括以下修復:
- Bug 22051233 -魷魚在 AMD 處理器上立即倒下
- Bug 22380085 - 在 VM 內運作時出現 Squid 非法指令
答案3
我在 Solaris 11.3 也遇到了同樣的問題。每次我啟動 Squid 服務時,它都會進入maintenance
模式(您可以使用 檢查svcs -a | grep squid
):
maintenance 21:17:13 svc:/network/http:squid
在日誌 ( /var/svc/log/network-http:squid.log
) 中,我會得到 coredump 錯誤行:
/lib/svc/method/http-squid: line 23: 1833: Illegal instruction(coredump)
/lib/svc/method/http-squid
第 23 行是啟動腳本中嘗試啟動 Squid 的行。第二個數字(本例為 1833)似乎在每次失敗時都會增加,但毫無意義。
最後,我/usr/squid/sbin/squid
從舊的 Solaris 11.0 安裝中複製了 Squid 二進位(17MB 而不是 46MB),然後它似乎工作正常。這不是一個“正確”的解決方案,但如果您可以訪問舊的安裝,這肯定是一個簡單的解決方案!