Содержание
NSFBackup - это утилита копирования баз данных Lotus Notes/Domino, подключаемая к программе MicroBackup. Связка MicroBackup+NSFBackup позволяет создавать резервные копии баз, не останавливая сервер.
Потому что в момент создания резервной копии база может быть открыта сервером. Если сервер вносит в неё изменения, какие-то из них могут быть уже записаны на диск, а какие-то - ещё нет. Единственный способ скопировать базу, не перезапуская сервер Domino и не рискуя потерять данные -- читать её функциями Notes API (можно, правда, включить в базе поддержку транзакций, но это слишком частный случай).
Можно, но зачем? Лишний пакет объёмом 25 килобайт вряд ли отяготит систему. Резервирование данных заключается не только в копировании, и MicroBackup отвечает за выполнение всей остальной работы, в первую очередь -- за прореживание старых архивов.
А как же! Самое непосредственное! BackupAdmin я начал писать в декабре 2001, урывками возился с ним несколько месяцев, окончательно забросив в мае 2002. Поводом для начала его разработки послужило необъяснимое повреждение учётной записи одного из серверов в Публичной АК. Довольно быстро мне удалось тогда набросать общий каркас базы, но в итоге работа окончательно зашла в тупик из-за проблем с (а) тонкостями интерфейса и (б) организацией распределённого/интерактивного/пакетного выполнения, которая в среде Notes/Domino одновременно и сложная, и убогая, и кривая. При разработке Юникс-аналога у меня, ясный пень, подобных проблем не возникало! Единственное, что MicroBackup позаимствовал из BackupAdmin'a -- это идея вытирания части архивов по мере их устаревания.
Окончательная конструкция тестировалась только под 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 под Линуксом, которую до сих пор мне приходилось делать вручную. Пока его написание находится в настолько ранней стадии, что устанавливать его я настоятельно рекомендую с ключем "--noscripts".
В этом случае эффект от установки будет следующий: в базе RPM в таблицу "Provides" будет добавлена запись "libnotes.so", которую rpmbuild автоматически добавляет в "Requires" строящегося пакета nsfbackup.rpm. Симлинк на libnotes.so желательно вручную создать в каталоге /lib.
Вам потребуется скачать с моего сайта три RPM-пакета:
Если у вас настроен APT и подключен мой репозитарий, то задача упрощается:
apt-get install nsfbackup
В каталоге /etc/microbackup/nsfbackup хранятся файлы с именами баз, которые надо архивировать. По умолчанию там будет один файл с именем Публичной АК, то есть names.nsf. Прочие вы должны сочинить сами. Примеры файлов-списков:
/etc/microbackup/nsfbackup/mailboxes:/etc/microbackup/nsfbackup/sys:mail/bgates.nsf mail/ltorvald.nsf/etc/microbackup/nsfbackup/websites:catalog.nsf admin4.nsf certlog.nsf alog4.nsfevseev_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 требуется весьма нетривиальное переключение между правами выполнения разных пользователей.