18.5. Управление системными конфигурационными файлами в RCS

Проблема

Требуется сохранять все версии системных конфигурационных файлов, чтобы легко вернуться к более ранней конфигурации.

Решение

Возникает соблазн скопировать всё содержимое /etc в репозиторий RCS, но это не нужно и расточительно. Заархивируйте /etc обычным способом, а затем используйте RCS для сохранения только изменяемых файлов. Начните с занесения в репозиторий всех файлов, которые собираетесь редактировать. Извлекайте их, чтобы вносить изменения, а затем возвращайте обратно после завершения правки. После занесения в репозиторий скопируйте рабочий файл на его место в /etc. Это обеспечит полную историю изменений всех конфигурационных файлов, подвергавшихся правке.

Комментарий

В следующем примере создается репозиторий RCS для двух программ — Amavisd-new и Clam Anti-Virus. Каждая программа имеет собственный подкаталог в репозитории. Все команды выполняются с правами root.

# mkdir /rcs_configs
# cd /rcs_configs
# mkdir -p amavis/RCS
# mkdir -p clamav/RCS
# cd /amavis
# cp /etc/amavis/amavisd.conf amavisd.conf
# ci -i amavisd.conf
RCS/amavisd.conf,v <- amavisd.conf
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
» original amavis config. used with clamav and postfix
»
initial revision: 1.1
done

После этого можно извлекать файл для редактирования:

# co -l amavisd.conf
# vim amavisd.conf

После внесения изменений сохраните и закройте файл, а затем снова занесите его в репозиторий:

# ci -u amavisd.conf

Теперь скопируйте рабочий файл в /etc:

# cp amavisd.conf /etc/amavis/amavisd.conf

Исходная копия и первая изменённая версия надёжно сохранены, и система готова к дальнейшему сохранению других версий.

Вместо того чтобы создавать подкаталоги для каждой программы, можно хранить все данные в одном каталоге, что позволяет легко управлять файлами. При использовании RCS нужно избегать случайной блокировки файлов. Если вы попытаетесь занести файл в репозиторий вместо извлечения или извлечёте файл и забудете занести его обратно, то при следующей попытке может появиться ошибка:

# co -l amavisd.conf
RCS/amavisd.conf,v -> amavisd.conf
co: RCS/amavisd.conf,v: multiple revisions locked by carla; please specify one

При указании конкретной версии предупреждение также может появиться:

# co -l -r1.4 amavisd.conf
RCS/amavisd.conf,v -> amavisd.conf
revision 1.4 (locked)
writable amavisd.conf exists; remove it? [ny](n): y
co: RCS/amavisd.conf,v: warning: You now have 2 locks,
done

Самый простой способ устранить блокировку — вручную отредактировать файл RCS (в данном случае RCS/amavisd.conf,v). Для этого сначала нужно разрешить запись в файл:

# chmod 644 amavisd.conf,v

Затем отредактируйте его заголовок. Найдите следующий фрагмент:

head    1.4;
access;
symbols;
locks
carla:1.1
carla:1.2; strict;
comment @$ @;

Удалите блокировки в секции locks. После изменений этот фрагмент будет выглядеть так:

head    1.4;
access;
symbols;
locks;
strict;
comment @$ @;

Сохраните файл и верните его в режим «только для чтения»:

# chmod 444 amavisd.conf,v

См. также

rcsintro(1), ci(1), co(1); домашняя страница RCS (http://www.cs.purdue.edu/homes/trinkle/RCS).