.png)
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 file
comando 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=native
sinalizador desativado no Solaris 11.3 SRU 17 (11.3.17.5.0) no /support
repositó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 maintenance
modo (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-squid
onde 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/squid
de 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!