Собираем
информацию
по крупицам
Статьи - Компьютерное

Платформа 1C:Предприятие

Установка сервера 1С 8.2 под Linux. Борьба с ошибкой "Error: service failed to start!"
18-12-2012
12:02:29

Недавно устанавливал сервер 1С:Предприятие 8.2.15.319 в операционной системе CentOs 5.5. Вылезла проблема, на которую натыкаются многие системные администраторы - демон сервера srv1cv82 не запускался. В интернете куча обсуждений данного вопроса, рецепты везде разные. В этой статье я расскажу в чем заключалась ошибка у меня, и как ее решил.

 

 

Исходные данные

 

Имеем чистую систему CentOs 5.5, установленную админами хостинга на выделенный сервер. Непонятно, почему в конце 2012 года ставят именно версию 5.5, когда уже стабильна 6.3. Ну да ладно, попробуем запустить сервер на пятой ветке. Но на всякий случай обновимся до последнего стабильного релиза. Из-под рута запускаем:

 

yum check-update

yum update

 

Проверим, какая версия CentOs получилась:

 

# cat /etc/redhat-release

CentOS release 5.8 (Final)

 

 

 

Установка RPM-пакетов

 

Наша конфигурация проверена и протестирована на версии платформы 8.2.15.319. Поэтому будем ставить именно эту версию сервера. Скачиваем архив с RPM пакетами с официального сайта 1С. В нашем случае получим следующие файлы:

 

1C_Enterprise82-common-8.2.15-319.i386.rpm

1C_Enterprise82-common-nls-8.2.15-319.i386.rpm

1C_Enterprise82-crs-8.2.15-319.i386.rpm

1C_Enterprise82-crs-nls-8.2.15-319.i386.rpm

1C_Enterprise82-server-8.2.15-319.i386.rpm

1C_Enterprise82-server-nls-8.2.15-319.i386.rpm

1C_Enterprise82-ws-8.2.15-319.i386.rpm

1C_Enterprise82-ws-nls-8.2.15-319.i386.rpm

 

Устанавливаем все эти пакеты (хотя, подозреваю, что не все они нужны). Устанавливать командой

 

rpm -ivh *

 

не рекомендуется, так как пакеты имеют зависимости друг от друга, и если один не установится, то он просто будет пропущен. Поэтому устанавливаем пакеты руками друг за другом из-под рута (я просто пользуюсь Midnight Commander, входя в каждый пакет по Enter и запуская INSTALL). При установке смотрим, какой пакет не установился. Ставим сначала зависимый пакет, потом возвращаемся к неустановленному, снова его ставим - он должен установиться.

 

В процессе установки произойдет запуск сервера 1С:Предприятия. Выглядеть это будет так:

 

Starting 1C:Enterprise 8.2 server: OK

 

Но так будет не у всех и не всегда. Велика вероятность увидеть такое сообщение:

 

Starting 1C:Enterprise 8.2 server: Error: service failed to start!

FAILED

 

 

 

Почему не стартует сервер 1С предприятия?

 

Итак RPM-пакеты установлены. В инсталл-скриптах RPM-пакетов прописывается автозапуск демона сервера 1С при старте системы. Кроме того, при установке RPM-пакета с сервером, сервер сразу запускается. Это произойдет, если все прошло нормально. В нашем случае мы видим ошибку, и начинаем разбираться, в чем причина и как исправить.

 

Для начала убедимся, что сервер действительно не стартует. Попытаемся запустить его вручную:

 

# service srv1cv82 start

Starting 1C:Enterprise 8.2 server: Error: service failed to start!

FAILED

 

Видим все ту же ошибку. Нигде не сказано, где искать лог ошибок сервера 1С, поэтому посмотрим для начала файл /var/log/messages:

 

# cat /var/log/messages

...

Dec 18 11:19:24 srv3217 setroubleshoot: SELinux is preventing ragent from loading /opt/1C/v8.2/i386/backbas.so which requires text relocation. For complete SELinux messages. run sealert -l 9d52cffb-e837-45d8-be82-35c50be717ab

 

Да, последняя строка в логе очень интересная. Она касается сервера 1С. Долго я не мог понять что сие значит. А эначит это то, что в опенсорче те еще грамотеи, и поставить точку вместо запятой - для них раз плюнуть. А ведь всего-навсего нужно было написать:

 

For complete SELinux messages, run sealert -l 9d52cffb-e837-45d8-be82-35c50be717ab

 

И ни у кого бы вопросов не возникло. Запускаем рекомендуемую в этом сообщении команду и видим портянку:

 

# sealert -l 9d52cffb-e837-45d8-be82-35c50be717ab

Сводка:

SELinux is preventing ragent from loading /opt/1C/v8.2/i386/backbas.so which

requires text relocation.

 

Подробное описание:

The ragent application attempted to load /opt/1C/v8.2/i386/backbas.so which

requires text relocation. This is a potential security problem. Most libraries

do not need this permission. Libraries are sometimes coded incorrectly and

request this permission. The SELinux Memory Protection Tests

(http://people.redhat.com/drepper/selinux-mem.html) web page explains how to

remove this requirement. You can configure SELinux temporarily to allow

/opt/1C/v8.2/i386/backbas.so to use relocation as a workaround, until the

library is fixed. Please file a bug report

(http://bugzilla.redhat.com/bugzilla/enter_bug.cgi) against this package.

 

Разрешение доступа:

If you trust /opt/1C/v8.2/i386/backbas.so to run correctly, you can change the

file context to textrel_shlib_t. "chcon -t textrel_shlib_t

'/opt/1C/v8.2/i386/backbas.so'" You must also change the default file context

files on the system in order to preserve them even on a full relabel. "semanage

fcontext -a -t textrel_shlib_t '/opt/1C/v8.2/i386/backbas.so'"

 

Следующая команда разрешит доступ:

chcon -t textrel_shlib_t '/opt/1C/v8.2/i386/backbas.so'

 

Дополнительные сведения:

Исходный контек root:system_r:initrc_t

Целевой Контекс system_u:object_r:usr_t

Целевые Объекты /opt/1C/v8.2/i386/backbas.so [ file ]

Source ragent

Source Path /opt/1C/v8.2/i386/ragent

Port <Неизвестно>

Host srv3217

Source RPM Packages 1C_Enterprise82-server-8.2.15-319

Target RPM Packages 1C_Enterprise82-common-8.2.15-319

RPM политики selinux-policy-2.4.6-327.el5

Selinux активна True

Тип политики targeted

MLS активна True

Принудительный Enforcing

Имя доп.модуля allow_execmod

Имя хоста srv3217

Платформа Linux srv3217 2.6.18-308.24.1.el5PAE #1 SMP Tue

Dec 4 18:28:32 EST 2012 i686 i686

Счетчик уведомл 3

First Seen Tue Dec 18 10:57:32 2012

Last Seen Tue Dec 18 11:19:24 2012

Local ID 9d52cffb-e837-45d8-be82-35c50be717ab

Номера строк

Сырые сообщения

host=srv3217 type=AVC msg=audit(1355815164.656:31): avc: denied { execmod } for pid=2836 comm="ragent" path="/opt/1C/v8.2/i386/backbas.so" dev=md0 ino=16154631 scontext=root:system_r:initrc_t:s0 tcontext=system_u:object_r:usr_t:s0 tclass=file

host=srv3217 type=SYSCALL msg=audit(1355815164.656:31): arch=40000003 syscall=125 success=no exit=-13 a0=5d0b000 a1=29c000 a2=5 a3=bfbd6fa0 items=0 ppid=2835 pid=2836 auid=0 uid=501 gid=501 euid=501 suid=501 fsuid=501 egid=501 sgid=501 fsgid=501 tty=(none) ses=1 comm="ragent" exe="/opt/1C/v8.2/i386/ragent" subj=root:system_r:initrc_t:s0 key=(null)

 

В общем, система безопасности SELinux заблокировала запуск 1С сервера. Но в этой портянке находится еще одна рекомендация:

 

Следующая команда разрешит доступ:

chcon -t textrel_shlib_t '/opt/1C/v8.2/i386/backbas.so'

 

Запускаем ее, после чего сервер 1С будет нормально стартовать:

 

service srv1cv82 start

Starting 1C:Enterprise 8.2 server: OK

 

 

Заметьте, что для старта 1С-сервера не обязательно наличие PostgreSQL. Сервер стартует сам по себе, и может быть установлен практически на чистую Linux-систему.

 

 

На этом все, надеюсь кому-то помог.

 



К списку "Компьютерное"

Поделиться этой страницей


Статистика


RSS подписка

Подпишитесь на новости сайта по RSS


 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик