mergemaster

Mergemaster tips and tricks!

 

При переходе с версии на версию FreeBSD самым неприятным этапом является обновление конфигурационных файлов. mergemaster отнимает массу времени и сил, требует аккуратности и внимательности. Это наверное один из самых неудобных инструментов FreeBSD!
Но на самом деле это не совсем так! Если внимательно изучить, как он работает и разобраться с его ключами, то можно значительно упростить себе жизнь. Не скажу, что обновление станет приятным, но уж оно точно перестанет быть такой головной болью.

Как работает mergemaster

mergemaster – это обычный shell скрипт! Очень длинный, слегка запутанные и требующий неплохого знания программирования на sh (man sh, man test, man mtree вам в помощь!), но все же всего лишь скрипт.
Если очень упрощенно рассказывать, как он работает, то получится примерно такая схема:

  • Из свежих /usr/src собирается новый корень в отдельном каталоге. По умолчанию это /var/tmp/temproot
  • Запускается цикл сравнения всех файлов из нового корня с аналогичными по названию файлами в текущем корне
  • По результатам сравнения принимается решение, что делать с этим файлом

Результатов сравнения может быть не так много:
1) Файл есть в новом корне, но нет в текущем
2) Файлы не отличаются
3) Файлы имеют разный тип (например в текущем корне это линк, а в новом обычный файл
4) Файлы отличаются
Но вот число файлов при проверке исчисляется сотнями.
Если запускать mergemaster с минимальным набором опций и без подготовки, то вся тяжесть выбора ложится на системного администратора. Но выход есть, и есть он в самом mergemaster!
Скрипт имеет несколько механизмов автоматического выбора действия при сравнении.

Механизмы автоматического выбора

  • 1) mtree база данных

Допустим у нас есть конфигурационный файл, который никак не менялся пользователем. Значит его можно спокойно обновить до новой версии, так как никаких правок, специфичных для данного сервера в него не вносилось. Логика простая, но как узнать, что файл не изменился с момента установки системы?
Ответом может стать утилита mtree. При ее помощи можно создать текущий снимок дерева каталогов (права и размер файлов их чексуммы и т.п.). Такую базу данных можно использовать для сравнения с состоянием того же дерева каталогов, но в