squid: Unzulässige Anweisung (Core Dump)

squid: Unzulässige Anweisung (Core Dump)

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 fileBefehl 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=nativedeaktiviertem Flag in Solaris 11.3 SRU 17 (11.3.17.5.0) kompiliert wurde, aus dem /supportRepo 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 maintenanceModus (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/squidvon 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!

verwandte Informationen