14-летний школьник из Москвы сошел с ума собирая KDE из исходников

Сижу в потоке, правлю nginx.conf, птички поют, коты ебутся, весна!

Запускаю nginx reload, хм, ничего не изменилось… Лезу в nginx.conf, а в нем все мои локейшены, которые я добавил — похерены отсутствуют.

Почесываю свою лысую кабину. Ага, значит какой-нибудь puppet агент тут крутится или ансибл.

Смотрю процессы, паппета нет, смотрю логи auth на момент подключения ансибла. Да блядь. Пусто! Смотрю логи крона и сам крон, ничо нет. В логах нет — нихуя!

Списываю всё на глюки симуляции этого мира и магнитные бури. Добавляю еще раз локейшены, перезапускаю nginx, сука! Локейшенов нет

Курю, бегаю по каталогам, размеренно думаю. Ииии замечаю забавнейшую вещь. В корне каталога etc есть директория .git!!! Вот и сложился пазл. Картина маслом.

Как я и думал, здесь установлен ETCKeeper.

Это такая херабора, которая отслеживает изменения в каталоге etc. Если что-то изменилось, оно это откатывает из git репозитория.

А чтобы поправить nginx конфиг, предварительно нужно запушить в репу актуальные правки иии только потом оно останется на сервере.

Штука довольно интересная, в своё время я ее втыкал где только можно. Очень полезна от криворуких разработчиков/тестировщиков с рутом. Которые ломают и потом утверждают, что они ничего не делали.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
А ты просто смотришь диффы в git и тыкаешь их носом как нагадивших в макбук котяток.

Ставится эта штука очень просто, через apt, ну а дальше почти из коробки работает, достаточно сказать с каким репозиторием ей взаимодействовать и по желанию добавить всякие конфиденциальные файлы в .gitignore.

Давай позабавимся:

apt install etckeeper git
cd /etc
git remote add origin git@github.com:bashdays/etc.git

В git репе в разделе Deploy Keys, добавляем public root ключик с галочкой Allow write access.

А затем применяем бест практику и пушим в мастер:

git push -u origin master

Всё Initial Commit почти со всем содержимым, запушен в репу. Красотища!

Но перед пушем не забываем поправить файлик .gitignore и добавить в него например всякие shadows и т.п.

Ну а теперь пробуем отредактировать какой-нибудь fstab и добавить новую строчку. Добавил? Ок, запускай!

etckeeper commit "поправил fstab" && git push

Всё! Правки в git репе. Ну и по желанию всё это дело можно откатить, либо пачкой, либо один файл.

Делается так, смотрим список коммитов:

etckeeper vcs log --pretty=oneline

e36f279 (HEAD -> master, origin/master)
9c24a66 поправил fstab
c1ee020 Initial commit

Теперь откатываем правленый fstab:

etckeeper vcs checkout 9c24a66 /etc/fstab

Ееее! Откатилось. Ну и не забываем, что после отката нужно зафиксировать все изменения.

etckeeper commit "вернул как было"
git push

Вот и всё! Функционал etckeeper намного шире, я рассказал про основное и саму концепцию. А если будет интересно думаю ты и сам найдешь всю нужную информацию в гугле.

Вообще можно и через Bash скрипт такое размутить, не устанавливая никакой софт, но иногда проще сделать apt install чем отлаживать баги в своем коде.

Отслеживать изменения можно через incron и автоматически коммитить:

incrontab -e
/etc IN_MODIFY /usr/bin/etckeeper commit "modified $@/$#"

Incron запускает таски не по временным меткам, а по событиям.

Добавить больше нечего. Хорошего тебе дня!