Может, кому ещё понадобится. Данная библиотечка позволяет получить список пользователей и групп в системе, список пользователей группы, а также вести поиск по имени или идентификатору в каталогах пользователя или группы. Работает через external-program, что не все, наверное, поймут, но работает. Имеет ограничение на работу в unix-системах, в которых существует команда getent. Традиционно лежит в lisp-репизотрии для Ubuntu и Debian.
среда, 15 сентября 2010 г.
вторник, 7 сентября 2010 г.
Обновление REPO 20100907
Обновления в lisp-репизотрии для Ubuntu и Debian. Оказалось, что у пакета ironclad прописана зависимость на CommonLispController, а у пакета slime используются сценарии post-inst и pre-rm с его участием. Непорядок. Что и было, собственно, исправлено. Заодно обновлён slime на снапшот от 20100907.
воскресенье, 5 сентября 2010 г.
четверг, 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
- 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. Данная библиотека позволяет кроссплатформенно запускать внешние программы.