SVN оказалась очень и очень удобной штукой для хранения конфигов серверов в едином репозитории. Типичные случаи - развернуть те же настройки bash и screen на новом FreeBSD сервере, что и на остальных, или восстановить рабочий конфиг после неверных изменений, которые привели к неработоспособности какого-либо сервиса.
Рассмотрим случай, когда есть три сервера, colo, gate-vasil и gate-vasil2, задача - забекапить /usr/local/etc и восстановить на другом сервере.
Для начала воспользуемся статьей http://www.opennet.ru/docs/RUS/blfs6/server/svnserver.html для разворачивания svn сервера на хосте colo (я пока делал в тестовых целях без ssh, с минимумом защищенности).
После того как сервер svn создан и запущен займемся созданием репозитория для хранения конфигов.
Допустим сервер svn хоста colo настроен на хранение репозиториев в /usr/local/repositories.
colo# cd /usr/local/repositories
colo# mkdir conf
colo# svnadmin create conf
после этого в нашем распоряжении созданный репозиторий, к которому мы сможем обращаться через url svn://colo/conf
colo# cd #создадим стру-ру подкаталогов (пока в домашней директории, затем среплицируем в svn)
colo# svn checkout svn://colo/conf
colo# mkdir gate-vasil
colo# mkdir gate-vasil/etc
colo# mkdir gate-vasil/usr/local/etc
colo# svn add gate-vasil ## рекурсивное добавление стр-ры
colo# svn commit -m mycomment ## записываем изменения на сервере svn
Вот пример как добавить /usr/local/etc сервера gate-vasil в хранилище
gate-vasil# cd /usr/local
gate-vasil# svn import etc svn://colo/gate-vasil/usr/local/etc ## рекурсивно проимпортирует дир-рии /usr/local/etc
или второй вариант
gate-vasil# cd /usr/local
gate-vasil# svn checkout svn://colo/gate-vasil/usr/local/etc
gate-vasil# cd etc
gate-vasil# svn add myconfigdir
gate-vasil# svn add -N myconfigdir2 ## ключ -N позволит не добавлять рекурсивно все содержимое каталога, а лишь сам каталог
gate-vasil# svn commit -m mycomment ## коммитим содержимое
Ну и, например, как же восстановить конфигурацию на каком-либо другом сервере?
в шелл на gate-vasil2
gate-vasil2# cd /usr/local
gate-vasil2# svn checkout svn://colo/gate-vasil/usr/local/etc
На что стоит обратить внимание.
* необходимо поиграться с путями svn для четкого понимания процесса
* не забывать делать commit для сохранения измененй
Удачи!
UPDATE:
все сказанное выше - пример тривиальный, и приводится в образовательных целях для начинающих гуру, и для больших и средних сетей он врядли применим.
А вот действительно взросложе решение для управления конфигами в больших сетях: cfengine.
cfengine is a language based system specifically designed for testing
and configuring unix-like systems attached to a TCP/IP network. You can
think of cfengine as a very high level language -- much higher level
than Perl or shell. A single statement can result in many hundreds of
links being created, or the permissions of many hundreds of files being
set. The idea of cfenginge is to create a single file or set of config
uration files which will describe the setup of every host on your net-
work.
cfagent runs on every host and parses one file (or file-set), the con-
figuration of the host is checked against this file and, if desired,
any deviations are fixed. cfagent reads a configuration file called
cfengine.conf in a directory pointed to by the environment variable
CFINPUTS. cfagent performs host integrity and security checks as
installing and repairing system configuration.
Оставить комментарий