Генерация различий между текущей / etc / и конфигурацией по умолчанию

После установки и различных пользовательских конфигураций можно использовать, например. apt и некоторые shell-fu для создания diff для каждого файла в / etc /, который отличается от стандартной конфигурации? Это дало бы возможность генерировать краткую сводку о состоянии конфигурации после факта, а не полагаться на ручное ведение журнала в процессе, если кто-то захочет вспомнить, что было изменено позднее.

7
задан 16 December 2012 в 18:10

2 ответа

Вы должны взглянуть на etckeeper :

etckeeper - это набор инструментов, позволяющих / etc храниться в git, mercurial, Даркс, или БЗР хранилище. Он подключается к apt (и другим менеджерам пакетов, включая yum и pacman-g2) для автоматической фиксации изменений, внесенных в / etc во время обновления пакетов. Он отслеживает метаданные файлов, которые системы контроля версий обычно не поддерживают, но это важно для / etc, например, для разрешений / etc / shadow. Он достаточно модульный и настраиваемый, а также простой в использовании, если вы понимаете основы работы с контролем версий.

0
ответ дан 16 December 2012 в 18:10

Я нахожусь в процессе разработки решения той же проблемы.

По сути, моя цель - система, позволяющая отменять и возвращать с детализацией на уровне файлов.

Начиная с вашего вопроса и работая задом наперед ...

  • Чтобы сравнить с конфигурацией по умолчанию, мы должны сначала сохранить оригиналы всех этих файлов. Тогда мы можем производить то, что вы хотите, с чем-то вроде ...
DIFFDIR= ......
ARCDIR=./.archives                         # see below

function getlastarchive() {
  ... code to return last archived version ...
}

for FILE in /etc/*
do
  ARCFILE="$(getlastarchive $FILE)"
  diff $ARCDIR/$ARCFILE /etc/$FILE  >$DIFFDIR/$FILE.diff
done
  • Для хранения оригиналов я решил принять соглашение о наличии одного подкаталога .archives в любом каталоге с измененным файлом. Он создается по необходимости скриптом file-archive.
  • Если вам нужен только один уровень отмены, вам нужно только скопировать неизмененный файл в каталог .archives, прежде чем он будет изменен.
  • Для неограниченной отмены нам нужна схема управления версиями. Очевидным выбором является отметка даты и времени, добавляемая к имени заархивированной версии. Нечто подобное ...
Files:                      /etc/hosts
                            /etc/resolv.conf

Archived Versions:          /etc/.archives/hosts.20121219015459
                            /etc/.archives/resolv.conf.20121219015459
  • Вместо этого я использую только автоматически вычисляемую инкрементную версию #, как в ...
Files:                      /etc/hosts
                            /etc/resolv.conf

Archived Versions:          /etc/.archives/hosts.00
                            /etc/.archives/resolv.00.conf
  • Версия # - это до расширения, так как я также использую это для отредактированных версий изображений, которым нужны их расширения (.jpg,. png, и т. д.), чтобы быть обнаруженным многими программами. Если файл не имеет расширения, версия # просто добавляется в конец. Код для этого более сложный, но запускается мгновенно, поэтому никаких проблем. Можно привести аргументы в пользу ряда других схем, но это работает для меня.

Надеюсь, это поможет!

0
ответ дан 16 December 2012 в 18:10

Другие вопросы по тегам:

Похожие вопросы: