squid: instrução ilegal (core dumped)

squid: instrução ilegal (core dumped)

SO: Oracle Solaris 11.3.1.5.2, CPU Arch: X86

Instalei recentemente o Squid fazendo

$ pkg install squid

Isso correu bem:

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

mas não consigo executar o Squid:

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

O filecomando me dá isso:

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

Estou dentro de uma zona local (não-kernel). Isso não deveria importar, deveria?

Por que o core dump?

Responder1

Desculpe, acho que encontrei a resposta sozinho:http://wiki.squid-cache.org/KnowledgeBase/IllegalInstructionError.

(citação começa)

Erros de instrução ilegal no Squid 3.4

Sinopse Squid 3.4 e posterior, rodando em determinadossistemas paravirtualizadose até mesmo alguns que afirmam virtualização completa (pelo menos KVM, Xen e derivados Xen foram confirmados até agora) travam com um erro de instrução ilegal logo após a inicialização.

Sintomas

O Squid trava com erro de instrução ilegal imediatamente após a inicialização em uma máquina virtual em processadores compatíveis com Intel

Explicação

O sistema de compilação do Squid usa por padrão a -march=native opção gcc para otimizar o binário resultante. Infelizmente, certos sistemas de (para)virtualização não suportam todo o conjunto de instruções que anunciam. O compilador não sabe e gera instruções que acionam esse erro.

Gambiarra

Essas otimizações são úteis, mas não necessárias para ter um squid totalmente funcional, especialmente em plataformas ia64/amd64. Os padrões detectados podem ser substituídos fornecendo a --disable-arch-native opção ao script de configuração.

(fim da citação)

Estamos executando o Solarisdentro do VMware ESXi 6.0. Então eu acho que esse é o motivo.

Não excluirei minha própria pergunta com a possibilidade de que outra pessoa também se depare com isso.

Responder2

Os clientes com contratos de suporte Oracle podem obter uma versão do squid compilada com o -march=nativesinalizador desativado no Solaris 11.3 SRU 17 (11.3.17.5.0) no /supportrepositório. Isso inclui as correções para:

  • Bug 22051233 – o squid cai imediatamente no processador AMD
  • Bug 22380085 - Instrução ilegal do Squid ocorre ao executar dentro da VM

Responder3

Eu tive o mesmo problema com o Solaris 11.3. Toda vez que eu iniciava o serviço Squid ele entrava no maintenancemodo (você pode verificar usando svcs -a | grep squid):

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

Nos logs( /var/svc/log/network-http:squid.log) eu pegaria a linha de erro coredump:

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

A linha 23 é a linha do script de inicialização /lib/svc/method/http-squidonde ele tenta iniciar o Squid. O segundo número (1833 neste exemplo) parecia incremental a cada falha, mas sem sentido.

No final, copiei o binário do Squid /usr/squid/sbin/squidde uma instalação antiga do Solaris 11.0 (17 MB em vez de 46 MB) e pareceu funcionar bem. Não é uma solução "adequada", mas certamente fácil se você tiver acesso a uma instalação antiga!

informação relacionada