.png)
OS: 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
しかし、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
私はローカル (カーネル以外) ゾーン内にいます。問題ないはずですよね?
なぜコアダンプするのですか?
答え1
申し訳ありませんが、私自身が答えを見つけたと思います。http://wiki.squid-cache.org/KnowledgeBase/IllegalInstructionError。
(引用開始)
Squid 3.4 での不正命令エラー
概要 Squid 3.4以降、特定の準仮想化システム完全な仮想化を主張しているもの (少なくとも KVM、Xen、および Xen 派生版は今のところ確認されています) でも、起動直後に不正な命令エラーでクラッシュすることがあります。
症状
Squid は、Intel 互換プロセッサ上の仮想マシンで起動するとすぐに不正命令エラーでクラッシュします。
説明
Squid ビルド システムは、デフォルトで
-march=native
gcc オプションを使用して結果のバイナリを最適化します。残念ながら、一部の (準) 仮想化システムは、宣伝されている命令セット全体をサポートしていません。コンパイラはそれを認識せず、このエラーを引き起こす命令を生成します。回避策
これらの最適化は役立ちますが、特に ia64/amd64 プラットフォームでは、squid が完全に機能するために必須ではありません。検出されたデフォルトは、
--disable-arch-native
configure スクリプトにオプションを指定することで上書きできます。
(引用終了)
Solarisを実行していますVMware ESXi 6.0の内部。だからそれが理由だと思います。
他の人もこれに遭遇する可能性があるので、自分の質問を削除するつもりはありません。
答え2
-march=native
Oracle サポート契約を結んでいるお客様は、Solaris 11.3 SRU 17 (11.3.17.5.0) でフラグを無効にしてコンパイルされた squid のバージョンを/support
リポジトリから入手できます。これには次の修正が含まれます。
- バグ 22051233 - AMD プロセッサ上で squid がすぐにダウンする
- バグ 22380085 - Squid VM 内で実行中に不正な命令が発生する
答え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
) に、コアダンプ エラー行が表示されます:
/lib/svc/method/http-squid: line 23: 1833: Illegal instruction(coredump)
/lib/svc/method/http-squid
23 行目は、起動スクリプト内でSquid を起動しようとする行です。2 番目の数字 (この例では 1833) は失敗するたびに増加しているように見えますが、意味はありません。
結局、/usr/squid/sbin/squid
古い Solaris 11.0 インストール (46 MB ではなく 17 MB) から Squid バイナリをコピーしたところ、正常に動作するようになりました。「適切な」解決策ではありませんが、古いインストールにアクセスできる場合は確かに簡単です。