NSFBackup

Илья Евсеев


Содержание

Что это такое?
Почему для работы с базами MicroBackup нельзя использовать без NSFBackup?
Почему бы не использовать nsfcopy без MicroBackup?
Имеет ли nsfbackup какое-то отношение к BackupAdmin?
В какой среде работает nsfbackup?
Что такое domino-environ?
Установка
Настройка
Запуск
Можно ли шифровать и подписывать создаваемые копии?
Неочевидные детали реализации
Состояние разработки

Что это такое?

NSFBackup - это утилита копирования баз данных Lotus Notes/Domino, подключаемая к программе MicroBackup. Связка MicroBackup+NSFBackup позволяет создавать резервные копии баз, не останавливая сервер.

Почему для работы с базами MicroBackup нельзя использовать без NSFBackup?

Потому что в момент создания резервной копии база может быть открыта сервером. Если сервер вносит в неё изменения, какие-то из них могут быть уже записаны на диск, а какие-то - ещё нет. Единственный способ скопировать базу, не перезапуская сервер Domino и не рискуя потерять данные -- читать её функциями Notes API (можно, правда, включить в базе поддержку транзакций, но это слишком частный случай).

Почему бы не использовать nsfcopy без MicroBackup?

Можно, но зачем? Лишний пакет объёмом 25 килобайт вряд ли отяготит систему. Резервирование данных заключается не только в копировании, и MicroBackup отвечает за выполнение всей остальной работы, в первую очередь -- за прореживание старых архивов.

Имеет ли nsfbackup какое-то отношение к BackupAdmin?

А как же! Самое непосредственное! BackupAdmin я начал писать в декабре 2001, урывками возился с ним несколько месяцев, окончательно забросив в мае 2002. Поводом для начала его разработки послужило необъяснимое повреждение учётной записи одного из серверов в Публичной АК. Довольно быстро мне удалось тогда набросать общий каркас базы, но в итоге работа окончательно зашла в тупик из-за проблем с (а) тонкостями интерфейса и (б) организацией распределённого/интерактивного/пакетного выполнения, которая в среде Notes/Domino одновременно и сложная, и убогая, и кривая. При разработке Юникс-аналога у меня, ясный пень, подобных проблем не возникало! Единственное, что MicroBackup позаимствовал из BackupAdmin'a -- это идея вытирания части архивов по мере их устаревания.

В какой среде работает nsfbackup?

Окончательная конструкция тестировалась только под ALT Linux Master'ом. Очевидно, что перенос под другой Линукс или Юникс не составит проблемы.

Пакет NSFBackup состоит из двух частей: программы NSFCopy (написана на Си++ и использует Notes API через LNFC) и вызывающего её сценария NSFBackup (написан на Bash'e), который, в свою очередь, вызывается MicroBackup'ом. Для установки под Линуксом требуется предварительная установка моего собственного пакета domino-environ.

MicroBackup использует Perl, GNU find и Bash.

Отдельные куски отлаживались под Win32 с использованием Borland C++ и ActiveState Perl из MSSFU, так что при о-очень большом желании можно было бы получить работающую систему и под Windows.

Что такое domino-environ?

Это пакет для автоматической настройки окружения сервера Domino под Линуксом, которую до сих пор мне приходилось делать вручную. Пока его написание находится в настолько ранней стадии, что устанавливать его я настоятельно рекомендую с ключем "--noscripts".

В этом случае эффект от установки будет следующий: в базе RPM в таблицу "Provides" будет добавлена запись "libnotes.so", которую rpmbuild автоматически добавляет в "Requires" строящегося пакета nsfbackup.rpm. Симлинк на libnotes.so желательно вручную создать в каталоге /lib.

Установка

Вам потребуется скачать с моего сайта три RPM-пакета:

  • microbackup
  • domino-environ
  • nsfbackup

Если у вас настроен APT и подключен мой репозитарий, то задача упрощается:

apt-get install nsfbackup

Настройка

В каталоге /etc/microbackup/nsfbackup хранятся файлы с именами баз, которые надо архивировать. По умолчанию там будет один файл с именем Публичной АК, то есть names.nsf. Прочие вы должны сочинить сами. Примеры файлов-списков:

/etc/microbackup/nsfbackup/mailboxes:
		mail/bgates.nsf
		mail/ltorvald.nsf
/etc/microbackup/nsfbackup/sys:
		catalog.nsf
		admin4.nsf
		certlog.nsf
		alog4.nsf
/etc/microbackup/nsfbackup/websites:
		evseev_homepage.nsf
		stallman_homepage.nsf

Все базы, указанные в списках, будут помещаться в общий архив с именем /var/microbackup/snapshot/domino/q_дата_создания.zip.

Запуск

MicroBackup запускается Cron'ом автоматически раз в день. Запуск вручную производится так:

microbackup /etc/microbackup/policies/nsfbackup

Рекомендуется выполнить это команду сразу после настройки, чтобы убедиться, что архив создаётся там, где нужно, и содержит то, что требуется.

Можно ли шифровать и подписывать создаваемые копии?

Да. Ниже приведён полный список ключей утилиты NSFCopy:

-r   Создавать реплики (по умолчанию создаются копии)
-s   Подписать текущим ID документы, бывшие подписанными
-S   Подписать текущим ID все документы
-e   Шифровать создаваемую базу текущим ID (простое шифрование)
-E   Шифровать создаваемую базу текущим ID (обычное шифрование)
-!   Шифровать создаваемую базу текущим ID (сильное шифрование)
-f   Перезаписывать целевой файл, если он уже существует
-q   Менее подробный вывод
-v   Более подробный вывод

Неочевидные детали реализации

Предполагается, что NSFBackup вызывается пользователем root. Однако NSFCopy должна вызываться от имени пользователя "notes". Если запустить её от имени root'a, сервер Domino может повиснуть, если приложение захватит используемые им какие-то ресурсы IPC. Такое ощущение, что при его написании использовался следующий принцип:

if (errno == EBUSY || errno == EAGAIN) panic_core("...");

Однако, если nsfcopy запускается от имени notes'a, целевой временный подкаталог должен быть создан также от его имени, в доступном ему каталоге, причём не внутри каталога данных Domino, где базы может увидеть и открыть сервер.

С другой стороны, архиватор следует запускать от root'a, так как только root имеет право доступа к каталогу данных MicroBackup. Архиватору требуется знать, из какого каталога брать базы. Следовательно, создание временного каталога должно производиться отдельным вызовом sudo, иначе root-процессу будет затруднительно получить его имя. Передать целиком на выполнение sudo всю часть сценария, выполняемую от имени notes'a, таким образом, невозможно.

Нетрудно видеть, что от NSFBackup требуется весьма нетривиальное переключение между правами выполнения разных пользователей.

Состояние разработки

В апреле 2003 года разработка была заморожена. Хостинг проекта на сайте моей предыдущей конторы был ликвидирован её начальством в сентябре. Сейчас хостинг восстановлен на Народе.ру в связи с просьбами отдельных трудящихся. Возможно, что возобновятся дополнения и в сам проект.

Хостинг от uCoz