Как хранить репозитории etckeeper на центральном сервере через git
Я хотел бы иметь один центральный репозиторий git для репозиториев etckeeper.git всех моих серверов. Здесь было предложено использовать файл в /etc/etckeeper/commit.d, который в основном выглядит следующим образом, предполагая, что в somedir на somehost настроено git-репо:
#!/bin/sh
cd /etc
git push faruser@farhost:somedir
Проблема в том, что было бы неплохо иметь все серверы в одном репо на центральном сервере. Я старался
git push faruser@farhost:somedir/server1
но это не удалось.
Как видите, я никогда раньше не работал с git... Любые идеи о том, как это можно сделать, очень ценятся:)
Ура,
Andreas
5 ответов
Я могу понять, что мне нужно центральное место со всей информацией о вашей конфигурации, но вы, вероятно, хотите, чтобы они по-прежнему оставались отдельными репозиториями, просто в одном месте. Для этого посмотрите, как отправить в удаленные места в git (используя git push). Затем вам нужно будет настроить доступ к этому местоположению со всех ваших серверов, после чего вы сможете перейти со всех из них. На этом этапе предложение, на которое вы указали, должно сработать.
В дополнение к хорошему ответу от pjz, вот как это можно сделать, шаг за шагом:
Создайте файл /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".
Вы должны настроить удаленный хост таким образом, чтобы локальный пользователь (я имею в виду root, так как вы используете etckeeper) может передавать в удаленный репозиторий. Как это сделать, зависит от того, как вы хотите, чтобы ваши git-репо на удаленном сайте были опубликованы / доступны. Например, при использовании git через ssh вы, скорее всего, настроите пару sshkey без ключевой фразы и, следовательно, разрешите локальному корню входить в систему на Reomteside без вмешательства (keyoard-,...). И да, при отправке на удаленный сайт, хранилище должно существовать, поэтому должно быть хотя бы пустое хранилище. Итак, сначала сообщите нам точную ситуацию, с которой вы работаете, и точную ошибку, которую вы получили
Я думаю, что первоначальный вопрос заключается в том, как подтолкнуть к разным веткам в одном репо. Один из способов архивирования это использовать синтаксис:
git push faruser@farhost:somedir master:server1
Это подтолкнет локальную ветку 'master' к удаленной ветке 'server1'. Вы можете иметь различные варианты, такие как:
git push faruser@farhost:somedir master:auto/$(hostname)
Несколько замечаний:
так как все ветви не имеют общего предка, вам, возможно, понадобится --force для первого коммита
по той же причине в удаленном репо вы увидите n линейных независимых историй. В частности, вы не сможете легко увидеть общую часть вашей ветки. Идея проекта: взять несколько веток git, создать новые для общего обновления и убедиться, что состояние в начальных коммитах также присутствует в переписанных коммитах (т. Е. Переписать историю, добавив commit/merge/..., но обязательно посмотрите состояние начальных коммитов)
По крайней мере, на Debian есть опция в etckeeper.conf.
...
# To push each commit to a remote, put the name of the remote here.
# (eg, "origin" for git).
PUSH_REMOTE="origin"
...
После ручного добавления удаленных репозиториев в git все должно работать из коробки