.png)
ОС: Oracle Solaris 11.3.1.5.2, архитектура ЦП: 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), аварийно завершают работу с ошибкой недопустимой инструкции вскоре после запуска.
Симптомы
Squid аварийно завершает работу с ошибкой Illegal Instruction сразу после запуска на виртуальной машине на процессорах, совместимых с Intel
Объяснение
Система сборки Squid по умолчанию использует
-march=native
опцию gcc для оптимизации результирующего двоичного файла. К сожалению, некоторые системы (пара-)виртуализации не поддерживают весь набор инструкций, который они рекламируют. Компилятор не знает и генерирует инструкции, которые вызывают эту ошибку.Обходной путь
Эти оптимизации полезны, но не обязательны для полностью функционального squid, особенно на платформах ia64/amd64. Обнаруженные значения по умолчанию можно переопределить, указав опцию
--disable-arch-native
в скрипте конфигурации.
(конец цитаты)
Мы работаем на Solaris.внутри VMware ESXi 6.0. Так что, я думаю, вот в чем причина.
Я не буду удалять свой вопрос на тот случай, если кто-то еще с этим столкнется.
решение2
Клиенты с контрактами Oracle Support могут получить версию squid, скомпилированную с -march=native
отключенным флагом в Solaris 11.3 SRU 17 (11.3.17.5.0) из /support
репозитория. Это включает исправления для:
- Ошибка 22051233 - squid сразу падает на процессоре AMD
- Ошибка 22380085 — Squid недопустимая инструкция возникает при запуске внутри виртуальной машины
решение3
У меня была та же проблема с Solaris 11.3. Каждый раз, когда я запускал службу Squid, она переходила в maintenance
режим (можно проверить с помощью svcs -a | grep squid
):
maintenance 21:17:13 svc:/network/http:squid
В журналах ( /var/svc/log/network-http:squid.log
) я бы увидел строку ошибки coredump:
/lib/svc/method/http-squid: line 23: 1833: Illegal instruction(coredump)
Строка 23 — это строка в скрипте запуска, /lib/svc/method/http-squid
где он пытается запустить Squid. Второе число (1833 в этом примере) кажется инкрементным при каждой неудаче, но бессмысленным.
В конце концов я скопировал двоичный файл Squid /usr/squid/sbin/squid
из старой установки Solaris 11.0 (17 МБ вместо 46 МБ), и затем он, похоже, заработал нормально. Не "правильное" решение, но определенно простое, если у вас есть доступ к старой установке!