суббота, 14 января 2012 г.

Про RCS для конфигурационных файлов

Уже не раз сталкивался с идеей сунуть конфиги на серверах в какую-то систему котроля версий. Систем этих, как известно, валом, на любой вкус. Но все популярные у программистов для такой задачи слабо подходят: отслеживают все дерево, что-то ломают и т.п. В то же время в самых древних скрижалях по администрированию UNIX можно встретить не менее древнюю систему контроля версий, с названием RCS - Revision Control System. Просто и очевидно.
После прочтения маленького мануала и прочих man rcsintro rcs ci co, и нескольких замученных в усмерть текстовых файлов, я родил такой вот враппер для текстового редактора, который можно легко впихнуть в .bashrc и пользоваться:
# RCS wrapper to help make all files versioned
vim() {
 if [ ! -e `dirname $1`/RCS ] ; then
  mkdir -v `dirname $1`/RCS
 fi
 if [ -e `dirname $1`/RCS/$1.v ] ; then
  co -l $1
  /usr/bin/vim $1
  ci -u $i
 else 
  ci -u $1
  co -l $1
  /usr/bin/vim $1
  ci -u $1
 fi
}

Он почти все делает сам, делая работу с версиями довольно-таки простой, но не лишен и недостатков. Так что если кто-то поднаторел с RCS, я бы хотел чтобы мы вместе это допилили до состояния предмета искусства.
Итак: если в директории файлы еще не подвергались работе с RCS - он создает каталог для хранения версий. Дело в том что в отсутсвие этого каталоге, файл с информацией об изменениях будет храниться тут же рядом, что не очень круто, и замусоривает каталог. Если каталог уже есть, но файл еще не подвергался пыткам - он вносится в систему контроля версий, затем вы его редактируете, и он заносит новую ревизию куда положено.

Итак, недостатки, а точнее один недостаток, который я совсем недавно обнаружил:
При редактировании файла с владельцем user:root и правами 600, владелец почему-то сбрасывается на root. Почему, пока не разобрался. Второе что, видимо, имеет те же корни - права на файл меняются так, чтобы он был только для чтения (из соображений "дабы никто не мог поправить файл в обход системы контроля версий). Обе эти вещи могут сделать файл конфигурации непригодным для использования приложением, так что тут надо как-то придумать хороший метод исправления проблемы.