Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

4 года назад
Открыть в
​​Часто возникают ситуации, когда хочется вести контроль версий конфигурационных файлов в системе Linux. Это может быть актуально не только, когда сервером пользуются несколько человек, но и для единственного администратора. Простейший способ контроля версий - создание копии файла перед редактированием. Я предлагаю автоматизировать эту процедуру и использовать систему контроля версий git для этих целей на примере ОС Debian или Ubuntu. Для любого другого дистрибутива всё настраивается аналогично. Устанавливаем git: # apt install git Создаём файл конфигурации git: # touch ~/.gitconfig Добавляем информацию о пользователе: [user] name = root email = root@debian11-websrv Создадим репозиторий для конфигов и сразу переименуем его, чтобы потом не путать с другими: # cd ~ && git init && mv .git system.git Добавим в корень системы / информацию о том, где находится репозиторий: # echo "gitdir: /root/system.git" > /.git Устанавливаем права доступа: # chmod 600 ~/.gitconfig # chmod 600 /.git # chmod 700 /root/system.git Настраиваем с помощью списка exclude директории, за которыми будет следить git. Данном случае это /etc. Для этого добавляем в файл ~/system.git/info/exclude пару строк: /* !/etc У нас всё готово. Делаем первый commit: # cd ~ # git add -A && git commit -m 'Создание репозитория debian11-websrv' Добавляем в системный cron выполнение задания с коммитом каждую минуту: * * * * * root cd / && git add -A && git commit -m "Cron commit" > /dev/null Теперь можно что-то изменить в конфигурации, дождаться коммита и проверить изменения. Например, добавьте пользователя: # adduser user01 Посмотрите изменения: # git log --follow -p /etc/passwd Я показал пример, как это может быть настроено. При желании, можно добавить и другие директории. Например, /var/spool/cron/crontabs или /usr/local/etc. Последнее было очень актуально в Freebsd, но давно уже не вижу, чтобы там что-то полезное хранилось. Дополнительно неплохо было бы хранить информацию об установленных пакетах. Все изменения отражаются в лог файле пакетного менеджера, но добавлять в git логи не очень хорошая идея. Удобнее было бы выгружать список пакетов с какой-то периодичностью в файл в /etc/ примерно так: # rpm -qa > /etc/packages.list # dpkg -l > /etc/packages.list Статья по сути готовая инструкция, так что можно забрать в закладки. Если есть какие-то замечания, или более универсальное, удобное решение этой же задачи, делитесь в комментариях. Я знаю, что есть etckeeper, но мне кажется, для такой простой задачи, которую можно решить только с помощью git, нет смысла привлекать какой-то сторонний софт. #linux #git