четверг, 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.

вторник, 20 июля 2010 г.

Обновление REPO 20100720

Очередное пополение в lisp-репизотрии для Ubuntu и Debian.
  • sbcl-daemon - инфраструктура для запуска лисп-приложений под sbcl в качестве демона (начальный коммит, производный от restas-daemon.lisp);
  • trivial-timers - библиотечка таймеров, используемая в clon;
  • clon - некий аналог cron'а.

пятница, 16 июля 2010 г.

Более удобный запуск внешних програм external-program-extender

Для лиспа существует возможность наиболее кроссплатформенно запускать внешние программы - external-program. В целом с задачей своей она справляется, и даже позволяет перенаправлять вывод в поток. Но вот сразу получить вывод в виде строки или же в виде списка строк, как это делает scsh - нет этого встроенного. Собственно, с целью получить подобную функциональность и написал небольшой extender. Теперь можно использовать следующую конструкцию:

* (run/string "ls" '("-a"))

".

..

bin

boot

cdrom

.config

dev

etc

home

initrd.img

initrd.img.old

.kde

lib

lib32

lib64

lost+found

media

mnt

proc

root

sbin

selinux

srv

sys

tmp

usr

var

vmlinuz

vmlinuz.old

"

Или, если хочется получить результат в виде списка строк, то:

* (run/strings "ls" '("-a"))

("." ".." "bin" "boot" "cdrom" ".config" "dev" "etc" "home" "initrd.img"

"initrd.img.old" ".kde" "lib" "lib32" "lib64" "lost+found" "media" "mnt"

"proc" "root" "sbin" "selinux" "srv" "sys" "tmp" "usr" "var" "vmlinuz"

"vmlinuz.old" "")

Данную библиотеку можно собрать из меркуриаловского хранилища исходных текстов, или же, при использовании Ubuntu или Debian из lisp-репизотрия для Ubuntu и Debian.

воскресенье, 4 июля 2010 г.

Обновление REPO 20100604

external-program 0.0.6 в lisp-репизотрии для Ubuntu и Debian. Данная библиотека позволяет кроссплатформенно запускать внешние программы.

[SOLVED] egroupware в lucid и проблемы со входом

Недавно столкнулся с проблемой, что в Ubuntu Lucid Lynx 10.04 egroupware не позволяет произвести вход, объясняя это тем, что "Ваш сеанс не может быть удостоверен." ("your session couldn't be verified"). Изрыл интернет направо и налево и где-то в закоулке нашёл решение. Собственно, необходимо в файле /etc/php5/apache2/php.ini строчку:

request_order = "GP"

Заменить на:

request_order = "GPCS"

И тогда будет производиться вход.

SBCL 1.0.40

Обновление SBCL 1.0.40 в lisp-репизотрии для Ubuntu и Debian. Из приятного - тесты у него проходят теперь и на 32-битной платформе. Внутри у него ASDF2 и теперь нет необходимости в пакете asdf-binary-locations.