Calamar: Instrucción ilegal (núcleo arrojado)

Calamar: Instrucción ilegal (núcleo arrojado)

SO: Oracle Solaris 11.3.1.5.2, Arco de CPU: X86

Recientemente instalé Squid haciendo

$ pkg install squid

Esto salió bien:

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

pero no puedo ejecutar Squid:

root@darwin1:~# /usr/squid/sbin/squid -h
Illegal Instruction (core dumped)

El filecomando me da esto:

root@darwin1:~# file /usr/squid/sbin/squid
/usr/squid/sbin/squid:  ELF 32-bit LSB executable 80386 Version 1, dynamically linked, not stripped

Estoy dentro de una zona local (no del núcleo). No debería importar, ¿verdad?

¿Por qué el volcado de memoria?

Respuesta1

Lo siento, creo que encontré la respuesta yo mismo:http://wiki.squid-cache.org/KnowledgeBase/IllegalInstructionError.

(comienza la cita)

Errores de instrucciones ilegales en Squid 3.4

Sinopsis Squid 3.4 y posteriores, ejecutándose en ciertossistemas paravirtualizadose incluso algunos afirman que la virtualización completa (al menos KVM, Xen y derivados de Xen están confirmados hasta ahora) falla con un error de instrucción ilegal poco después del inicio.

Síntomas

Squid se bloquea con un error de instrucción ilegal inmediatamente después del inicio en una máquina virtual en procesadores compatibles con Intel

Explicación

El sistema de compilación Squid utiliza de forma predeterminada la -march=native opción gcc para optimizar el binario resultante. Lamentablemente, ciertos sistemas de (para)virtualización no admiten todo el conjunto de instrucciones que anuncian. El compilador no lo sabe y genera instrucciones que desencadenan este error.

Solución alterna

Estas optimizaciones son útiles pero no necesarias para tener un Squid completamente funcional, especialmente en plataformas ia64/amd64. Los valores predeterminados detectados se pueden anular proporcionando la --disable-arch-native opción al script de configuración.

(fin de la cita)

Estamos ejecutando Solarisdentro de VMware ESXi 6.0. Entonces supongo que esa es la razón.

No eliminaré mi propia pregunta por la extraña posibilidad de que alguien más se encuentre con esto también.

Respuesta2

Los clientes con contratos de soporte de Oracle pueden obtener una versión de squid compilada con el -march=nativeindicador deshabilitado en Solaris 11.3 SRU 17 (11.3.17.5.0) desde el /supportrepositorio. Esto incluye las correcciones para:

  • Error 22051233: el calamar se cae inmediatamente en el procesador AMD
  • Error 22380085: la instrucción Squid Ilegal ocurre cuando se ejecuta dentro de VM

Respuesta3

Tuve el mismo problema con Solaris 11.3. Cada vez que iniciaba el servicio Squid, entraba en maintenancemodo (puedes comprobarlo usando svcs -a | grep squid):

maintenance    21:17:13 svc:/network/http:squid

En los registros ( /var/svc/log/network-http:squid.log) obtendría la línea de error de coredump:

/lib/svc/method/http-squid: line 23: 1833: Illegal instruction(coredump)

La línea 23 es la línea del script de inicio /lib/svc/method/http-squiddonde intenta iniciar Squid. El segundo número (1833 en este ejemplo) parecía incremental con cada falla, pero carecía de significado.

Al final, copié el binario Squid /usr/squid/sbin/squidde una instalación antigua de Solaris 11.0 (17 MB en lugar de 46 MB) y pareció funcionar bien. No es una solución "adecuada", pero ciertamente es fácil si tiene acceso a una instalación anterior.

información relacionada