Использование измененной библиотеки liblmdb

В дистрибутив Эллес для ОС Astra Linux включена измененная сборка библиотеки liblmdb0, реализующей базу данных Lighting Memory-Mapped Database (LMDB) для использования службой каталогов при указании опции --backend-store=mdb в процессе развертывания контроллера домена или ввода сервера в домен в роли контроллера.

Формат именования

Имя сборки библиотеки liblmdb0 формируется по шаблону:

liblmdb0_<original_lib_version>-1-inno-<MDB_IDL_LOGN_value>_<architecture>.deb

В шаблоне:

  • original_lib_version — исходная версия библиотеки, на основе которой сформирована сборка;

  • MDB_IDL_LOGN_value — значение MDB_IDL_LOGN, используемое в сборке;

  • architecture — архитектура, для которой предназначена сборка.

Например:

liblmdb0_0.9.21-1-inno-18_amd64.deb

Рекомендации по использованию

В библиотеке liblmdb на основе MDB_IDL_LOGN определяется, в частности, значение MDB_IDL_UM_MAX:

MDB_IDL_UM_MAX = MDB_IDL_LOGN + 1

В контексте работы LMDB значение MDB_IDL_UM_MAX ограничивает максимальное количество так называемых «грязных» страниц (dirty pages), то есть страниц, которые имеют изменения, но не записаны на диск, в пределах одной транзакции.

В стандартной сборке библиотеки, устанавливаемой по умолчанию, значение MDB_IDL_LOGN составляет 16. Таким образом, максимальное количество «грязных» страниц в пределах транзакции составляет 217 = 131 072. Этого может быть недостаточно при эксплуатации базы данных каталога с большим количеством объектов, что приводит к ошибке "MDB_TXN_FULL: Transaction has too many dirty pages - transaction too big" и прерыванию транзакции.

Для устранения ошибки в дистрибутиве текущей версии Эллес поставляется сборка библиотеки с увеличением значения MDB_IDL_LOGN до 18. В этом случае максимальное количество страниц составляет 219 = 524 288, что в 4 раза больше стандартного значения. Тем самым обеспечивается возможность корректного завершения транзакций при работе с большими базами данных службы каталогов.

Установка при развертывании нового контроллера домена

При развертывании нового контроллера домена измененная сборка библиотеки liblmdb0 может устанавливаться до или после установки пакета inno-samba.

Чтобы установить библиотеку:

  • при использовании apt-репозитория выполните:

    sudo apt install liblmdb0=0.9.21-1-inno-18 --allow-downgrades -y
  • при локальной установке из архива укажите путь к распакованным файлам и имя пакета; например:

    sudo apt install ./packages/inno-samba-1.6.0/liblmdb0_0.9.21-1-inno-18_amd64.deb --allow-downgrades -y

Чтобы предотвратить автоматическое обновление библиотеки, также выполните:

sudo apt-mark hold liblmdb0

Установка на существующий контроллер домена

Чтобы установить измененную сборку библиотеки liblmdb0 на существующий контроллер домена:

  1. Переведите контроллер домена в режим обслуживания:

    sudo samba-tool maintenance on
  2. Остановите службу inno-samba:

    sudo systemctl stop inno-samba.service
  3. Установите требуемую измененную сборку библиотеки, следуя инструкциям в подразделе «Установка при развертывании нового контроллера домена».

  4. Запустите службу inno-samba:

    sudo systemctl start inno-samba.service
  5. Выведите контроллер домена из режима обслуживания:

    sudo samba-tool maintenance off

Возврат к использованию стандартной сборки

Чтобы использовать стандартную сборку библиотеки liblmdb0, устанавливаемую в операционной системе по умолчанию:

  1. Снимите запрет на автоматическое обновление библиотеки:

    sudo apt-mark unhold liblmdb0
  2. Переведите контроллер домена в режим обслуживания:

    sudo samba-tool maintenance on
  3. Остановите службу inno-samba:

    sudo systemctl stop inno-samba.service
  4. Обновите системные пакеты стандартной командой:

    sudo apt update -y
  5. Запустите службу inno-samba:

    sudo systemctl start inno-samba.service
  6. Выведите контроллер домена из режима обслуживания:

    sudo samba-tool maintenance off