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).