При развертывании сервера или клиентского приложения 1С:Предприятие на операционных системах семейства Linux (таких как Ubuntu, Debian, CentOS, Astra Linux или РЕД ОС) системные администраторы часто сталкиваются с неприятной ошибкой: «Ошибка загрузки библиотеки libWand.so по причине: Библиотека не обнаружена». Данный сбой приводит к тому, что часть критически важных функций платформы становится недоступной. В частности, пользователи не могут выгружать документы в формат PDF, использовать методы табличных документов, строить диаграммы, генерировать штрихкоды или работать с графическими объектами.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы поиска библиотек платформой 1С и рассмотрим пошаговые сценарии ее устранения для различных архитектур и дистрибутивов.
Для начала разберемся, что представляет собой библиотека libWand.so. В экосистеме Linux это не самостоятельный файл, а символическая ссылка (symlink), которую платформа 1С ожидает увидеть в системе для взаимодействия с пакетом обработки изображений ImageMagick (точнее, с его интерфейсом MagickWand). Платформа использует эту библиотеку для выполнения всех операций, связанных с растровой и векторной графикой.
Основными причинами сбоя инициализации графической подсистемы являются:
libMagickWand-6.Q16.so.5), в то время как 1С жестко ориентирована на поиск имени libWand.so или libMagickWand.so.Далее мы подробно рассмотрим практические методы решения каждого из этих затруднений.
Проанализируем ситуацию, когда на современном 64-битном сервере (x86_64 / amd64) разворачивается 32-битный сервер 1С:Предприятия. Это частая практика для экономии на лицензиях или при работе с устаревшими конфигурациями. В этом случае операционная система просто не видит установленный 64-битный ImageMagick, так как 32-битному процессу 1С требуются строго 32-битные версии библиотек.
Рассмотрим по шагам процесс настройки для дистрибутивов Ubuntu и Debian:
Шаг 1. Включим поддержку 32-битной архитектуры (i386) в операционной системе:
dpkg --add-architecture i386
apt-get update
Шаг 2. Установим базовые системные 32-битные библиотеки, без которых платформа 1С не сможет запуститься:
apt-get install -y libc6:i386 libncurses5:i386 libstdc++6:i386
Шаг 3. Теперь установим 32-битный пакет ImageMagick, содержащий необходимую библиотеку MagickWand, а также сопутствующие утилиты:
apt-get install -y imagemagick-6.q16:i386 imagemagick:i386
Шаг 4. Установим дополнительные зависимости, которые требуются для корректной отрисовки шрифтов и конвертации документов:
apt-get install -y t1utils:i386 libt1-5:i386 unixodbc:i386 libgsf-bin:i386
После выполнения этих команд операционная система получит необходимый набор библиотек нужной разрядности, и сервер 1С сможет успешно загрузить графическую подсистему.
Проанализируем важный нюанс, о котором часто забывают даже опытные системные администраторы. Вы можете установить все необходимые библиотеки и создать вручную символические ссылки, но платформа 1С все равно продолжит выдавать ошибку отсутствия libWand.so.
Причину этого поведения можно выявить, если запустить процесс сервера 1С под трассировкой системных вызовов strace. В логах утилиты можно обнаружить, что платформа осуществляет поиск библиотеки путем вызова командного интерпретатора:
sh -c "file -Lb /usr/lib/libMagickWand-6.Q16.so.1 | cut -b-6"
Платформа 1С использует системную утилиту file для динамической проверки архитектуры и типа загружаемого бинарного файла. Если в вашей операционной системе (особенно в Docker-контейнерах или минимальных инсталляциях Ubuntu Server/Debian Netinst) пакет file отсутствует, 1С вернет пустой результат и решит, что подходящей библиотеки нет.
Решение этой проблемы предельно простое. Выполним установку утилиты в зависимости от дистрибутива.
Для систем на базе Debian/Ubuntu/Astra Linux:
apt-get install -y file
Для систем на базе RedHat/CentOS/РЕД ОС:
yum install -y file
После установки утилиты перезапустите службу сервера 1С:Предприятия:
systemctl restart srv1cv83
Если разрядность операционной системы и платформы 1С совпадает (например, используется полностью 64-битное окружение), но ошибка все равно возникает, это свидетельствует о несовпадении имени файла библиотеки в системе с тем именем, которое запрашивает 1С.
Посмотрим на пример поиска библиотеки в системе Ubuntu. Выполним поиск всех установленных компонентов libMagickWand:
find /usr/lib/ -name "libMagickWand*" -print
Система может вернуть следующий результат:
/usr/lib/x86_64-linux-gnu/libMagickWand-6.Q16.so.2
/usr/lib/x86_64-linux-gnu/libMagickWand-6.Q16.so.2.0.0
Как мы видим, физический файл библиотеки называется libMagickWand-6.Q16.so.2, в то время как 1С ищет абстрактную ссылку libWand.so. Чтобы решить эту проблему, нам необходимо создать жесткую или символическую ссылку в системных каталогах динамического линкера.
Для 64-битных операционных систем Debian/Ubuntu выполним команду:
ln -s /usr/lib/x86_64-linux-gnu/libMagickWand-6.Q16.so.2 /usr/lib/libWand.so
ln -s /usr/lib/x86_64-linux-gnu/libMagickWand-6.Q16.so.2 /usr/lib/libMagickWand.so
Для 32-битных систем (или при использовании многоархитектурности) пути будут другими:
ln -s /usr/lib/i386-linux-gnu/libMagickWand-6.Q16.so.2 /usr/lib/libWand.so
ln -s /usr/lib/i386-linux-gnu/libMagickWand-6.Q16.so.2 /usr/lib/libMagickWand.so
Для систем CentOS, РЕД ОС или других RPM-совместимых дистрибутивов библиотеки располагаются в каталогах /usr/lib64/. Создадим ссылки для них:
ln -s /usr/lib64/libMagickWand-6.Q16.so.2 /usr/lib64/libWand.so
ln -s /usr/lib64/libMagickWand-6.Q16.so.2 /usr/lib64/libMagickWand.so
После создания ссылок обязательно выполним обновление кэша динамических библиотек операционной системы:
ldconfig
Иногда после установки всех пакетов и настройки символических ссылок при попытке выполнить формирование отчета или выгрузку в PDF сервер 1С аварийно завершает работу либо выдает ошибку о невозможности загрузки объекта со статичным TLS (Thread Local Storage). Это известная проблема несовместимости библиотеки распараллеливания вычислений libgomp, используемой в ImageMagick, с ограничениями адресного пространства потоков в старых версиях glibc.
Для обхода этой проблемы нам необходимо принудительно загружать библиотеку работы с потоками раньше, чем стартует сам процесс 1С. Для этого используется механизм предварительной загрузки LD_PRELOAD.
Рассмотрим, как внедрить это решение в автозапуск службы сервера 1С.
Шаг 1. Откроем для редактирования файл конфигурации службы 1С. В зависимости от версии дистрибутива это может быть файл /etc/default/srv1cv83 или юнит-файл systemd.
Если управление службой осуществляется через systemd, создадим файл переопределения конфигурации:
systemctl edit srv1cv83
Шаг 2. Добавим в открывшийся файл секцию, устанавливающую переменную окружения:
[Service]
Environment="LD_PRELOAD=libgomp.so.1"
Шаг 3. Сохраним изменения, обновим конфигурацию диспетчера служб systemd и перезапустим сервер 1С:
systemctl daemon-reload
systemctl restart srv1cv83
Если вы запускаете клиентское приложение 1С:Предприятие на рабочем месте пользователя вручную через терминал, запуск следует производить следующим образом:
LD_PRELOAD=libgomp.so.1 /opt/1C/v8.3/x86_64/1cestart
Этот простой шаг гарантирует, что библиотека OpenMP инициализирует свой TLS-сегмент в самом начале работы процесса, предотвращая последующие сбои динамического загрузчика.
Даже если библиотека libWand.so успешно обнаруживается и загружается платформой, операции с текстом на диаграммах или генерация печатных форм могут завершаться ошибками или отображать нечитаемые символы ("квадраты" вместо букв). Причина кроется в отсутствии стандартных шрифтов TrueType от компании Microsoft (таких как Arial, Times New Roman, Courier New), которые по умолчанию используются в конфигурациях 1С.
Проанализируем шаги по установке шрифтов и их правильной регистрации в графической системе сервера.
Шаг 1. Установим пакет лицензионных шрифтов Microsoft. Для операционных систем Ubuntu/Debian выполним:
apt-get install -y ttf-mscorefonts-installer
Для дистрибутивов РЕД ОС и CentOS воспользуемся пакетным менеджером yum (предварительно может потребоваться подключить репозиторий EPEL):
yum install -y msttcore-fonts-installer
Шаг 2. Обновим системный кэш шрифтов операционной системы:
fc-cache -fv
Шаг 3. Теперь нам необходимо запустить специальную утилиту, поставляемую вместе с платформой 1С:Предприятие. Она предназначена для сопоставления системных шрифтов с механизмами рендеринга ImageMagick и генерации конфигурационного файла type.xml.
Перейдем в каталог утилит установленной платформы (путь может отличаться в зависимости от версии платформы и разрядности):
cd /opt/1C/v8.3/x86_64/utils/
Запустим скрипт настройки системы с правами суперпользователя:
sudo ./config_system
Скрипт просканирует каталоги шрифтов /usr/share/fonts/, найдет установленные шрифты TrueType и корректно пропишет их в конфигурационные файлы 1С. После этого перезапустим службу сервера 1С, чтобы изменения вступили в силу.
В некоторых случаях (например, на устаревших дистрибутивах Linux или при неразрешимых конфликтах зависимостей пакетов) попытка установить 32-битные библиотеки ImageMagick в 64-битную основную систему может вызвать серьезный даунгрейд ключевых пакетов ОС. В такой ситуации идеальным выходом будет запуск сервера 1С в изолированной 32-битной среде с помощью утилит schroot и debootstrap.
Рассмотрим этот продвинутый метод по шагам.
Шаг 1. Установим необходимые инструменты виртуализации окружения в основной 64-битной системе:
apt-get install -y schroot debootstrap
Шаг 2. Создадим файл конфигурации для нового 32-битного окружения. Создадим файл /etc/schroot/schroot.d/trusty32.conf со следующим содержимым:
[trusty32]
description=Ubuntu 14.04 32-bit Environment for 1C
directory=/mnt/trusty_i386
type=plain
personality=linux32
aliases=default
users=root
groups=root
root-groups=root
Шаг 3. Создадим целевую директорию и развернем базовую 32-битную систему Ubuntu с помощью debootstrap:
mkdir -p /mnt/trusty_i386
debootstrap --variant=buildd --arch i386 trusty /mnt/trusty_i386 http://archive.ubuntu.com/ubuntu
Шаг 4. Настроим автоматическое монтирование системных директорий хост-машины внутрь изолированного окружения. Добавим в файл /etc/fstab основной системы следующие строки:
/proc /mnt/trusty_i386/proc none rbind 0 0
/dev /mnt/trusty_i386/dev none rbind 0 0
/sys /mnt/trusty_i386/sys none rbind 0 0
/tmp /mnt/trusty_i386/tmp none rbind 0 0
/home /mnt/trusty_i386/home none rbind 0 0
Выполним монтирование:
mount -a
Шаг 5. Войдем в созданное окружение под правами суперпользователя:
schroot -c trusty32
Теперь мы находимся внутри изолированной 32-битной системы. Здесь мы можем без каких-либо конфликтов с основной ОС установить необходимые версии ImageMagick, дополнительные графические библиотеки, СУБД или клиентские пакеты 1С:
apt-get update
apt-get install -y imagemagick libgsf-bin unixodbc t1utils
Установите 32-битный сервер 1С:Предприятия внутри этого окружения стандартным способом. Запуск службы 1С изнутри окружения будет происходить в «чистой» 32-битной среде, что полностью избавит вас от ошибок несовместимости библиотек libWand.so.
Мы подробно проанализировали причины сбоя при загрузке графического модуля 1С на Linux-серверах и рассмотрели комплекс различных решений. В подавляющем большинстве случаев для исправления ошибки достаточно убедиться в наличии утилиты file, установить пакет imagemagick соответствующей разрядности и создать правильную символическую ссылку libWand.so на фактический системный файл библиотеки. Применение этих подходов на практике позволит вам обеспечить стабильную и производительную работу серверов 1С:Предприятие в среде Linux без необходимости тратить средства на дорогостоящие лицензии Windows-окружения.