Можно ли использовать etckeeper с одним общим git-репозиторием?

9

Я заметил, что несколько человек рекомендовали использовать etckeeper для применения контроля версий к моему каталогу / etc.

Мне кажется, что установка по умолчанию помещает репозиторий на тот же компьютер, что и / etc, которым вы пытаетесь управлять. Это прекрасно работает для контроля версий, но не дает дополнительного преимущества создания резервных копий файлов вне сервера или позволяет дублировать части / etc с одного исходного компьютера на другой.

Можно ли использовать один репозиторий git на компьютере с центральным администратором, чтобы etckeeper на каждом сервере сохранял свои данные в одном месте?

(Сейчас я делаю то же самое с svn и некоторыми пользовательскими скриптами для фиксации и возврата файлов, но я должен помнить, чтобы фиксировать их при внесении изменений.)

казарка
источник

Ответы:

8

Сначала используйте install etckeeper, настроенный для git в /etc/etckeeper/etckeeper.conf. Используйте метод установки etckeeper для вашего дистрибутива или из исходного кода.

Скоро у вас будет /etc/.git

Теперь на вашем сервере, убедитесь, что у вас есть (безопасное) репо, чтобы нажать на ...

 # ssh faruser@farhost     
 # mkdir somedir cd somedir && git init && chmod 700 .git    
 # exit

Теперь на начальном хосте отправьте локальное хранилище на сервер через ssh:

# cd /etc && git push faruser@farhost:somedir

Somedir, конечно, может быть относительным в этом случае (в соответствии с соглашением SSH)

Делайте это каждый раз, когда вы вносите изменения, которые влияют на / etc (и записывается в /etc/.git etckeeper), и вы будете иметь как локальные, так и внешние машины для своей машины.

Или настройте ssh без пароля и подключите файл /etc/etckeeper/commit.d/, чтобы это происходило автоматически, если машина всегда подключена.

кванты
источник
2
Это выглядит великолепно. Есть ли способ сохранить локальный репозиторий в подкаталоге удаленного? Я хотел бы сделать нечто подобное, используя один удаленный репозиторий для хранения (отдельных) конфигураций для нескольких серверов.
Эндрю Ферье
может git pushработает на ваш созданный Git репо? Вероятно, вам нужно создать голое репо в somedir-хуке под commit.d - это действительно хорошая идея, мне это нравится
larrycai
3

Можно добавить конфигурацию удаленной ветви, чтобы сопоставить главную ветку репозитория etckeeper с каждого сервера с веткой в ​​удаленном репозитории. Для этого вы можете выполнить следующие команды на каждом сервере:

cd /etc
git branch -m master $HOSTNAME
git remote add origin git@git.example.com:path/to/single/repo.git
git push -u origin master:$HOSTNAME

После этой настройки последующие git pushбудут отправлять изменения из каждой главной ветви сервера в выделенную ветку сервера в центральном хранилище.

Хотя ветви не будут иметь общей отправной точки, это позволяет легко сравнивать один и тот же файл из двух разных ветвей, представляющих два разных сервера, запустив:

git diff origin/server1 origin/server2 -- file

Это можно сочетать с автоматической настройкой, предложенной jojoo .

ТТТ
источник
git push -u origin master: $ HOSTNAME здесь не работает. Удаленное репо - это пустое голое репо. ошибка: src refspec master не соответствует ни одному.
Бертл
1

Как это сделать автоматически, полная история:

Создайте файл /etc/etckeeper/commit.d/60-push (не забудьте chmod + x it) на клиентах.

#!/bin/sh
git push central_server:/var/git/client_name.git master

central_server определен в конфигурации ssh, см. ниже. /var/git/client_name.git - это каталог на центральном сервере, содержащий git-репо.

~ / .Ssh / config от root (!) Должен содержать что-то вроде этого:

host central_server
Hostname 192.168.0.1
User etckeeper #a user on the central server 
IdentityFile ~/.ssh/custom_key # key is in authorized_keys in
             #etcpeeper@central_server:~/.ssh/authorized_keys

Затем вам нужно запустить git-репо на центральном сервере

mkdir /var/git/client_name.git
su etckeeper
cd /var/git/client_name.git
git --bare init

Протестируйте его с небольшим редактированием в / etc, а затем etckeeper передаст "test push'ing".

jojoo
источник
1

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

jldugger
источник
Не уверен, как это сделать (второй репозиторий). Можете ли вы уточнить?
Брент
Вам, вероятно, нужно клонировать одно из репозиториев на свое «центральное репо»; вам нужен только один. Оттуда вы можете вносить изменения, а затем каждый из серверов может выбирать исправления, сохраненные в ревизии. То, как вы это настроили, изначально зависит от DSCM. Для git, смотрите kernel.org/pub/software/scm/git-core/docs/gittutorial.html
jldugger
-2

Вы действительно не хотите делать etckeeper своей политикой резервного копирования. Хотя наличие копии ваших файлов конфигурации было бы неплохо, этого едва ли достаточно для того, чтобы считаться планом аварийного восстановления.

Вместо этого сфокусируйтесь на создании реальных резервных копий вашей системы. Упрощенным может быть cronjob для подачи тарбола на ленту ... о, верно. Никто не использует ленты больше. Хорошо, черт побери, чтобы rsync все ваши файлы на выделенном NAS . Чтобы найти более надежные решения для резервного копирования, взгляните на Amanda и Bacula .

И в случае академиков, я был в состоянии подтолкнуть мой etckeeper репо до GitHub так же , как и любого другого мерзавца репо.

Shazburg
источник
Никто не говорит о создании резервной политики. Но по моему опыту удобно иметь все в одном месте, на более безопасном сервере.
Брент
1
Тогда я неправильно понял. Если то, что вы действительно ищете, - это средство для централизованного хранения и распространения конфигурации вашей системы, то, возможно, Puppet ( reductivelabs.com/products/puppet ) вам в этом поможет.
Шазбург
Например: мы переносим все наши конфигурации на один хост. там запускается trac, который используется для визуализации изменений в конфигурации (и, конечно, записи билетов, если что-то не работает, ...), хотя это супер удобно, я могу, например, сравнить crontabs со всех наших хостов с несколько кликов.
Jojoo