Использование измененной библиотеки 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 на существующий контроллер домена:
-
Переведите контроллер домена в режим обслуживания:
sudo samba-tool maintenance on
-
Остановите службу
inno-samba:sudo systemctl stop inno-samba.service
-
Установите требуемую измененную сборку библиотеки, следуя инструкциям в подразделе «Установка при развертывании нового контроллера домена».
-
Запустите службу
inno-samba:sudo systemctl start inno-samba.service
-
Выведите контроллер домена из режима обслуживания:
sudo samba-tool maintenance off
Возврат к использованию стандартной сборки
Чтобы использовать стандартную сборку библиотеки liblmdb0, устанавливаемую в операционной системе по умолчанию:
-
Снимите запрет на автоматическое обновление библиотеки:
sudo apt-mark unhold liblmdb0
-
Переведите контроллер домена в режим обслуживания:
sudo samba-tool maintenance on
-
Остановите службу
inno-samba:sudo systemctl stop inno-samba.service
-
Обновите системные пакеты стандартной командой:
sudo apt update -y
-
Запустите службу
inno-samba:sudo systemctl start inno-samba.service
-
Выведите контроллер домена из режима обслуживания:
sudo samba-tool maintenance off