The Apple Geek

Чему ты научился сегодня?

Повторение старой проблемы c Open Directory, бекап базы OD и восстановление из неё

Понедельник начался хорошо. С переводом времени удалось выспаться, утром на работе выпить чашку кофе и ударно начать новый проект.

Отлучился на рабочую встречу. Через час пришёл, попытался разлочить Mac. Чёрный экран, на скринсейвере застыло время ухода, созерцание Spinning Beachball of Death. Зашёл с другого компьютера по SSH - SystemUIServer, Screenserver и ещё пара процессов в состоянии “Uninterruptible wait”. ‘shutdown -r now’. Mac mini Server сваливается в серый экран и 15 минут пытается перезагрузиться. Нужно работать, и я перезагружаю его по питанию.

Дальнейшее предсказуемо - “Network accounts are unavailable”:

Мда. Очередной час будет потерян на оживление Open Directory после деструктивнейшей для системы операции написания кода в Sublime Text и его запуска в iTerm.

$ tail -f /var/log/slapd.logslapd[510]: bdb(dc=ceiling-cat,dc=ctrld,dc=me): file id2entry.bdb has LSN 1/2423845, past end of log at 1/1796008slapd[510]: bdb(dc=ceiling-cat,dc=ctrld,dc=me): Commonly caused by moving a database from one database environmentslapd[510]: bdb(dc=ceiling-cat,dc=ctrld,dc=me): to another without clearing the database LSNs, or by removing all ofslapd[510]: bdb(dc=ceiling-cat,dc=ctrld,dc=me): the log files from a database environmentslapd[510]: bdb(dc=ceiling-cat,dc=ctrld,dc=me): /var/db/openldap/openldap-data/id2entry.bdb: unexpected file type or formatslapd[510]: bdb_db_open: database "dc=ceiling-cat,dc=ctrld,dc=me": db_open(/var/db/openldap/openldap-data/id2entry.bdb) failed: Invalid argument (22).slapd[510]: backend_startup_one (type=bdb, suffix="dc=ceiling-cat,dc=ctrld,dc=me"): bi_db_open failed! (22)slapd[510]: bdb_db_close: database "dc=ceiling-cat,dc=ctrld,dc=me": alock_close failedslapd[510]: slapd stopped.

Но теперь ситуация лучше - после прошлого сбоя я запустил ежедневный бекап Open Directory. Рецепт нашёл на serverfault.

Скрипт ~/bin/od_backup:

#!/bin/bashdst="/Users/ctrld/server_backup"pass="correcthorsebatterystaple"#sudo slapconfig -backupdb /odbackups#sudo slapconfig -restoredb /odbackupsdate=$(date +%Y-%m-%d-%H%M)sudo /Applications/Server.app/Contents/ServerRoot/usr/sbin/serveradmin command <<-EOC    dirserv:backupArchiveParams:archivePassword = $pass    dirserv:backupArchiveParams:archivePath = ${dst}/od_backup-${date}    dirserv:command = backupArchiveEOC

Запуск в launchd (/Library/LaunchDaemons/me.ctrld.od_backup.plist):

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd ><plist version="1.0">    <dict>        <key>Label</key>        <string>me.ctrld.od_backup</string>        <key>ProgramArguments</key>        <array>            <string>/Users/ctrld/bin/od_backup</string>        </array>        <key>StartCalendarInterval</key>        <dict>            <key>Hour</key>            <integer>06</integer>            <key>Minute</key>            <integer>24</integer>        </dict>    </dict></plist>

Активация:

$ launchctl load -w /Library/LaunchDaemons/me.ctrld.od_backup.plist

Скрипт успел поработать неделю. Если вы будете его задействовать, то не забудьте следить, делается ли бекап. Также учтите, что скрипт при запуске просто передаёт команды в serveradmin и сразу прекращается, но образ с бекапом появляется в заданном каталоге.

Лучшая практика бекапов - это восстановление. Я сделал это так:

$ sudo launchctl unload /System/Library/LaunchDaemons/org.openldap.slapd.plist$ sudo slapconfig -restoredb /Users/ctrld/server_backup/od_backup-2012-10-29-0624.sparseimage

Программа запросила пароль, через короткое время база была восстановлена и OD был запущен.

Я удивился простоте. И сразу натолкнулся на подвох - SSL-сертификаты ушли в Валхаллу.

Благо я использую etckeeper (brew install etckeeper). Расписывать подробно не хочется. Я достал сертификат из git (можно и из Time Machine), потом перетащил в Cert Manager в Server.app. Запросился пароль к ключу, его я нашёл в Keychain в ключе “Mac OS X Server certificate management”.

Рестарт, сервер заработал. Мда…

Оц-тоц первертоц, бабушка здорова,
Оц-тоц первертоц, кушает компот,
Оц-тоц первертоц, и мечтает снова
Оц-тоц первертоц, пережить налёт.

Comments