.png)
Betriebssystem: Oracle Solaris 11.3.1.5.2, CPU-Architektur: X86
Ich habe vor kurzem Squid installiert, indem ich
$ pkg install squid
Das hat gut geklappt:
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
aber ich kann Squid nicht ausführen:
root@darwin1:~# /usr/squid/sbin/squid -h
Illegal Instruction (core dumped)
Der file
Befehl gibt mir Folgendes:
root@darwin1:~# file /usr/squid/sbin/squid
/usr/squid/sbin/squid: ELF 32-bit LSB executable 80386 Version 1, dynamically linked, not stripped
Ich befinde mich in einer lokalen (nicht zum Kernel gehörenden) Zone. Das sollte doch keine Rolle spielen, oder?
Warum der Core Dump?
Antwort1
Entschuldigung, ich glaube, ich habe die Antwort selbst gefunden:http://wiki.squid-cache.org/KnowledgeBase/IllegalInstructionError.
(Zitatbeginn)
Ungültige Anweisungsfehler bei Squid 3.4
Synopsis Squid 3.4 und höher, läuft auf bestimmtenparavirtualisierte Systemeund sogar einige, die vollständige Virtualisierung versprechen (zumindest sind bislang KVM, Xen und Xen-Derivate bestätigt), stürzen kurz nach dem Start mit einem Fehler aufgrund einer ungültigen Anweisung ab.
Problembeschreibung
Squid stürzt unmittelbar nach dem Start auf einer virtuellen Maschine auf Intel-kompatiblen Prozessoren mit dem Fehler „Illegal Instruction“ ab
Erläuterung
Das Squid-Build-System verwendet standardmäßig die
-march=native
Option gcc, um die resultierende Binärdatei zu optimieren. Leider unterstützen bestimmte (Para-)Virtualisierungssysteme nicht den gesamten Befehlssatz, den sie angeben. Der Compiler weiß dies nicht und generiert Anweisungen, die diesen Fehler auslösen.Problemumgehung
Diese Optimierungen sind hilfreich, aber nicht notwendig, um einen voll funktionsfähigen Squid zu haben, insbesondere auf ia64/amd64-Plattformen. Die erkannten Standardwerte können überschrieben werden, indem die
--disable-arch-native
Option dem Konfigurationsskript übergeben wird.
(Zitat Ende)
Wir verwenden Solarisinnerhalb von VMware ESXi 6.0. Ich schätze also, das ist der Grund.
Ich werde meine eigene Frage nicht löschen, für den unwahrscheinlichen Fall, dass jemand anderes auch darauf stößt.
Antwort2
Kunden mit Oracle-Supportverträgen können eine Version von Squid, die mit -march=native
deaktiviertem Flag in Solaris 11.3 SRU 17 (11.3.17.5.0) kompiliert wurde, aus dem /support
Repo beziehen. Dies beinhaltet die Fixes für:
- Fehler 22051233 - Squid stürzt auf AMD-Prozessor sofort ab
- Fehler 22380085 - Bei der Ausführung in einer VM tritt ein ungültiger Squid-Befehl auf.
Antwort3
Ich hatte das gleiche Problem mit Solaris 11.3. Jedes Mal, wenn ich den Squid-Dienst startete, wechselte er in den folgenden maintenance
Modus (Sie können dies mit überprüfen svcs -a | grep squid
):
maintenance 21:17:13 svc:/network/http:squid
In den Protokollen ( /var/svc/log/network-http:squid.log
) würde ich die Coredump-Fehlerzeile erhalten:
/lib/svc/method/http-squid: line 23: 1833: Illegal instruction(coredump)
Zeile 23 ist die Zeile im Startskript /lib/svc/method/http-squid
, in der versucht wird, Squid zu starten. Die zweite Zahl (in diesem Beispiel 1833) schien bei jedem Fehler inkrementell, aber bedeutungslos zu sein.
Am Ende habe ich die Squid-Binärdatei /usr/squid/sbin/squid
von einer alten Solaris 11.0-Installation (17 MB statt 46 MB) kopiert und dann schien es einwandfrei zu funktionieren. Keine „richtige“ Lösung, aber sicherlich eine einfache, wenn Sie Zugriff auf eine alte Installation haben!