четверг, 29 июля 2010 г.

do-backup, программа создания резервных копий

С недавнего времени озаботился созданием резервных копий того, что есть на диске. Точнее, на диске сервера. Конфигурации, некоторое состояние и тому подобное. Не помню почему, но то, что было - не устроило. Ну и решил написать своё решение, но уже на лиспе. Для запуска внешних программ используется библиотека external-program. Программа do-backup обрабатывает конфигурацию вида:

((:contact

(:to "root")

(:subject "DO-BACKUP robot"))

(:action :7z

(:suffix ".7z")

(:program "7z")

(:argument "a")

(:argument :file)

(:argument :files))

(:action :slapcat

(:program "slapcat"))

(:action :pg_dumpall

(:program "su")

(:argument "-")

(:argument "postgres")

(:argument "-c")

(:argument "pg_dumpall"))

(:backup

(:action :7z)

(:file "/etc/")

(:file "/var/lib/bind/")

(:file "/var/lib/egroupware/")

(:file "/var/lib/ejabberd/")

(:file "/var/lib/ldap/")

(:dynamic-file "/var/backups/ldap-data.ldif" :action :slapcat :saveoutput t)

(:dynamic-file "/var/backups/postgresql/postgre.sql" :action :pg_dumpall :saveoutput t)

(:output-directory "/backups/configuration/" "configuration-~a.7z" 60))

(:backup

(:action :7z)

(:file "/var/lib/projects/")

(:output-directory "/backups/projects/" "projects-~a.7z" 30)))

Секция :backup описывает то, что необходимо будет резервнокопировать (в секциях :file и :dynamic-file), а :action - какие дейтвия необходимо выполнять. В целом, как мне кажется, по конфигурации понятно что должно происходить.

Далее, необходимо запускать задания по расписанию. В целом, мог бы подойти и обычный cron, но в данном случае для обобщения решений на лиспе был использован clon как аналог cron'а. Ну и, конечно же, необходимо демонизировать. Это достигается путём использования пакета sbcl-daemon, являющегося производным от restas-daemon.lisp. Важное отличие - это неиспользование (sb-posix:umask 0), поскольку это порождает файлы с записью для всего мира, что несколько небезопасно по умолчанию. Ну и ещё динамический запуск процедур в зависимости от конфигурации. Конфигурация демона do-backup производится в /etc/do-backup.daemon, где и задаётся периодичность запуска.

В заключении - исходный код проекта. Собранные пакеты, готовые для установки - в lisp-репизотрии для Ubuntu и Debian.

Комментариев нет:

Отправить комментарий