git-etc - демон гита в директории

Очередная никому не нужная фигня, правда на сей раз с ориентацией на пингвинов-красноглазиков.
В общем, тут уже поднималась тема по поводу создания гит-репозитория для контроля изменений в директории /etc. Ну а так как я человек ленивый, то каждый раз запускать я не буду однозначно - просто лень будет. Вот со скуки и черканул простенького демона (я искренне верю, что 75% линуксоидов способны на это). Не искал, т.к. дело было сделано со скуки, а не потому что имелась какая то задача, наверняка что то подобное уже и существует.
Исходники тут выкладывать не буду, ибо они в достаточной мере большие, чтобы засорить тему. В принципе, там чистой воды баш (надо бы по хорошему на sh портировать), так что, если хотите - можно глянуть исходники на гитхабе (ветка source немного отличается в конфигах от linux, тестить я ж не на /etc буду).
Также имеется сервис для systemd и конфиг файл. В принципе, без правки исходного кода скрипта (только правкой сервиса и конфига) можно запустить несколько таких штук в разных директориях с разными интервалами обновления. Еще (помимо директории и времени обновления) настраивается игнор-лист (по дефолту там *pacnew, *bak и mtab). Логирование самого гита не убирал, потому в journalctl довольно подробно. Ну и + дебаг самого демона.
Для ознакомления с работой/настройкой (хотя, повторюсь, демон элементарный) можно почитать 2 мана: по конфигу и по бинарнику.
Вроде как работает (у меня стоит и запущен), замечания/предложения (кроме тех, что касаются того, что это никому не нужно) с удовольствием выслушаю. В планах еще нарисовать гуй (питон+qt, увы все навыки написания графических оболочек ограничиваются этим. Хотя, мб и cpp попробую освоить) по сути больше с работой гита как такового.
В ауре выложен:
yaourt -S git-etc

ЗЫ забыл вроде в мане указать - будет исправлено в след версии - что время задается в часах и только целочисленное значение >=1 (иначе ошибка вылетит, проверка на идиота немного криво сделана).
PGP 0x31361F01
arcanisrepo
я так понял это демон который весит в памяти и по времени проверяет и комитит изменения в /etc ???
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
я так понял это демон который весит в памяти и по времени проверяет и комитит изменения в /etc ???
в общих чертах - да. Т.е. совсем простенькая штука. Впрочем, по памяти он не проседает (по крайней мере ничего такого обнаружено не было), процессор не грузит, т.к большую часть времени в слипе.
Блин, ошибочка вылетела, поторопился немного с выкладыванием. Не перезапускается %) этот момент я почти не тестил
PGP 0x31361F01
arcanisrepo
Впрочем, по памяти он не проседает (по крайней мере ничего такого обнаружено не было), процессор не грузит, т.к большую часть времени в слипе.
А не лучше ли было это сделать через крон или средствами юнита типа таймер?
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
А не лучше ли было это сделать через крон или средствами юнита типа таймер?
не знаю, может и так и не городить велосипеды. Но я повторюсь, мне делать было нечего =)
arcanis
Блин, ошибочка вылетела, поторопился немного с выкладыванием. Не перезапускается %) этот момент я почти не тестил
ошибка была с теста, когда стоял exit перед слипом (есно демон закрывался успешно). Сейчас все в рабочем состоянии:
[root@ARCANIS /root]# systemctl status git-etc                                                          [19:14] [77%]
git-etc.service - git-etc daemon
          Loaded: loaded (/usr/lib/systemd/system/git-etc.service; enabled)
          Active: active (running) since Ср 2013-02-13 19:06:10 MSK; 8min ago
         Process: 14889 ExecStart=/usr/bin/git-etc $DIRECTORY $TIMESLEEP $IGNORELIST (code=exited, status=0/SUCCESS)
        Main PID: 14895 (git-etc)
          CGroup: name=systemd:/system/git-etc.service
                  ├─14895 /bin/bash /usr/bin/git-etc /etc 12 mtab;;*[bB]ak;;*pacnew
                  └─14903 sleep 43200
фев 13 19:06:10 ARCANIS git-etc[14889]: [II]: Set DIRECTORY to '/etc'
фев 13 19:06:10 ARCANIS git-etc[14889]: [II]: Set TIMESLEEP to '43200' sec
фев 13 19:06:10 ARCANIS git-etc[14889]: [II]: Adding files
фев 13 19:06:10 ARCANIS git-etc[14889]: [II]: Creating new commit
фев 13 19:06:11 ARCANIS git-etc[14889]: [II]: Waiting '43200' sec
PGP 0x31361F01
arcanisrepo
имхо лишний комит - безполезный коммит, слишком много старых версий - непоймешь на которую откатывать...
а для кого этот софт? для тех кто в гите разбираться не хочет? не могу понять просто.
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
sleepycat
имхо лишний комит - безполезный коммит, слишком много старых версий - непоймешь на которую откатывать...
а для кого этот софт? для тех кто в гите разбираться не хочет? не могу понять просто.
скорее да, для тех, кто не хочет разбираться (в сумме, когда допилю небольшой гуй). Ну и автоматика (то для чего писалось "для себя")
PGP 0x31361F01
arcanisrepo
Ну вот, собсна, гуй приделал (python2/pyqt4). Все кликабельно/растягивательно + табуляция и return. В нем имеется какие то общие действия с гитом - вроде вывести список коммитов (по количеству, в определенный день или в интервал). А если в листе нажать на коммит, то можно посмотреть и более детальное содержание вплоть по отдельным файлам. Эти файлы (текущие версии) можно открыть в редакторе внешнем (по дефолту gvim, настраивается). Ну и ясен пень, можно чекнуть статус и закоммитить тут же. +работа с игнор-листом (.git/info/exclude), лист кликабелен.
Из дополнительных возможностей: можно слить старые и новые конфиги в один - для этого используется ветка experimental (создается демоном текущей версии), в которой текущий конфиг заменяется свежим и готовится патч. Затем патч редактируется (по крайней мере, просмотр этого патча обязателен!) и применяется. По умолчанию ищет файлы *.pac*, *.bak, *.Bak, *.old, *.new, *.bckp и подставляет их. Хотя, предусмотрена возможность ручного указания. Еще есть по хардкору возможность отката к коммиту. В том окне все специально усложнено и присутствует предупреждение. При откате одного файла он просто патчится, потому вернуть к старой версии его можно. А вот при полном откате используется git reset --hard, потому до затертых файлов достучаться будет трудно. На самом деле, я просто не смог разрешить все зависимости при отдельном пропатчивании файлов. Хотя, предусмотрено окно лога, в которое вывалятся id затертых коммитов (сами коммиты формально не куда не денутся, пока их не удалить), потому его можно скопировать и затем, при необходимости, откатиться назад (вперед).
Ну небольшое окошко настроек, в т.ч. и конфиг сервиса можно отредактировать. Англ.язык вроде есть (по дефолту). Программе могут потребоваться права суперпользователя (если не будет доступа к гит директории) - это также настраивается (включено по умолчанию) - если доступа не будет и судо будет выключено, большая часть программы откажется работать (сигналов просто не будет). Для этого ее надо запускать из терминала (запускать sudo ctrlconf не нужно в нормальных условиях). Кстати, как выяснилось (_внезапно_), ей терминал нужен, потому ее вообще говоря, надо запускать из терминала. Следует заметить, что у программы не все возможности адекватно тестировались (например, откаты), потому возможны некоторые баги, связанные с этим, которые я с удовольствием выслушаю.
+ Небольшая правка самого скрипта. Добавлено обновление игнор листа, парсер опций, возможность указать нужно ли менять права на директорию или нет (дефолт - да). Вроде все в скрипте. Хотел еще портировать на sh, но, если я правильно понимаю, у меня это не получится, например, из за перенаправления вывода). Потому забил на это дело, жду тапки из за башизмов.
Исходный код все также доступен на гитхабе.
PS да, я быдло-кодер =)
Небольшой выброс (пример лога) в journalctl
[root@ARCANIS /root]# journalctl -bu git-etc.service                                                     [2:28] [75%]
-- Logs begin at Сб 2013-02-16 16:20:27 MSK, end at Вт 2013-02-19 02:28:05 MSK. --
фев 19 02:19:41 ARCANIS git-etc[425]: [II]: Set DIRECTORY to '/etc'
фев 19 02:19:41 ARCANIS git-etc[425]: [II]: Set TIMESLEEP to '43200' sec
фев 19 02:19:41 ARCANIS git-etc[425]: [II]: Cheching ignore-list
фев 19 02:19:41 ARCANIS git-etc[425]: [II]: Experimental branch already exists
фев 19 02:19:41 ARCANIS git-etc[425]: [II]: Adding files
фев 19 02:19:41 ARCANIS git-etc[425]: [II]: Creating new commit
фев 19 02:19:41 ARCANIS git-etc[425]: [II]: Waiting '43200' sec
Пара скриншотов к гуям:
about

окно просмотра изменений в коммите

главное окно

окно слияния старых и новых конфигов

скромное окошко с откатом изменений до определенного состояния
PGP 0x31361F01
arcanisrepo
 
Зарегистрироваться или войдите чтобы оставить сообщение.