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

7

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

    
задан Sarah 16.12.2012 в 14:10
источник

2 ответа

3

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

  

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

    
ответ дан Cédric Julien 19.12.2012 в 08:30
0

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

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

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

  • Чтобы сравнить с конфигурацией по умолчанию, мы сначала должны хранить оригиналы всех этих файлов. Затем мы можем создать то, что вы хотите, с чем-то вроде ...
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 и т. д.) неповрежденными в порядке чтобы быть обнаруженным должным образом большим количеством программного обеспечения. Если файл не имеет расширения, версия # просто добавляется в конец. Код для этого более сложный, но работает мгновенно, поэтому никаких проблем. Случай может быть сделан для ряда других схем, но это работает для меня.

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

    
ответ дан DocSalvager 19.12.2012 в 07:38