squid: Illegal Instruction(코어 덤프)

squid: Illegal Instruction(코어 덤프)

OS: Oracle Solaris 11.3.1.5.2, CPU 아키텍처: X86

최근에 다음을 수행하여 Squid를 설치했습니다.

$ pkg install squid

이것은 잘 진행되었습니다:

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

하지만 Squid를 실행할 수는 없습니다.

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

file명령은 다음을 제공합니다.

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

로컬(비커널) 영역 안에 있습니다. 그것은 중요하지 않습니다, 그렇죠?

왜 코어 덤프인가?

답변1

죄송합니다. 제가 직접 답을 찾은 것 같습니다.http://wiki.squid-cache.org/KnowledgeBase/IllegalInstructionError.

(인용 시작)

Squid 3.4의 잘못된 명령어 오류

개요 Squid 3.4 이상, 특정 환경에서 실행반가상화 시스템전체 가상화(최소한 KVM, Xen 및 Xen 파생 제품은 지금까지 확인됨)를 주장하는 일부 주장도 시작 직후 불법 명령 오류로 인해 충돌이 발생합니다.

증상

Intel 호환 프로세서의 가상 머신을 시작한 직후 Squid가 잘못된 명령 오류와 충돌함

설명

Squid 빌드 시스템은 기본적으로 -march=native gcc 옵션을 사용하여 결과 바이너리를 최적화합니다. 불행하게도 특정 (반)가상화 시스템은 그들이 광고하는 전체 명령어 세트를 지원하지 않습니다. 컴파일러는 이 오류를 트리거하는 명령을 모르고 생성합니다.

해결 방법

이러한 최적화는 도움이 되지만 특히 ia64/amd64 플랫폼에서 완전한 기능을 갖춘 오징어를 갖추는 데 반드시 필요한 것은 아닙니다. 감지된 기본값은 --disable-arch-native 구성 스크립트에 옵션을 제공하여 무시할 수 있습니다 .

(인용 끝)

우리는 솔라리스를 실행하고 있습니다VMware ESXi 6.0 내부. 그래서 그런 이유인 것 같아요.

다른 사람도 이 문제에 직면할 가능성이 높다고 해서 내 질문을 삭제하지는 않겠습니다.

답변2

-march=nativeOracle 지원 계약을 체결한 고객은 저장소 에서 Solaris 11.3 SRU 17(11.3.17.5.0)에서 비활성화된 플래그 로 컴파일된 Squid 버전을 얻을 수 있습니다 /support. 여기에는 다음 사항에 대한 수정 사항이 포함됩니다.

  • 버그 22051233 - AMD 프로세서에서 오징어가 즉시 넘어짐
  • 버그 22380085 - VM 내부에서 실행할 때 Squid 잘못된 명령이 발생함

답변3

나는 솔라리스 11.3에서도 같은 문제를 겪었다. Squid 서비스를 시작할 때마다 maintenance모드로 전환됩니다. (를 사용하여 확인할 수 있습니다 svcs -a | grep squid):

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

로그( /var/svc/log/network-http:squid.log)에 코어 덤프 오류 줄이 표시됩니다.

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

/lib/svc/method/http-squid라인 23은 Squid를 시작하려고 시도하는 시작 스크립트의 라인입니다 . 두 번째 숫자(이 예에서는 1833)는 실패할 때마다 증가하는 것처럼 보였지만 의미가 없습니다.

결국 /usr/squid/sbin/squid이전 Solaris 11.0 설치(46MB가 아닌 17MB)에서 Squid 바이너리를 복사했는데 제대로 작동하는 것 같았습니다. "적절한" 솔루션은 아니지만 이전 설치에 액세스할 수 있다면 확실히 쉬운 솔루션입니다!

관련 정보