Gitolite
Содержание
Установка и настройка Gitolite3
Для разработок программистов и для системных администраторов, что бы базу данных с паролями хранить.
Исходные условия:
- CentOS x64 6.5 с установленным дополнительным репозиторием EPEL
# yum install gitolite3
Настройка
Администратор репозиториев будет root, поэтому создаем ключик:
# ssh-keygen -vt rsa
Важное замечание - администратор репозиториев, в нашем случае root, не должен подключаться на сервер по ключу. Если это происходит, то следует создать еще один ключ.
В процессе создания ключа, программа спросить passphrase. Добавить по вкусу. Затем копируем публичный ключ в домашнюю директорию gitolite3:
# cp /root/.ssh/id_rsa.pub /var/lib/gitolite3/
И присваиваем права на ключик пользователю gitolite3:
# chown gitolite3:gitolite3 /var/lib/gitolite3/id_rsa.pub
От пользователя gitolite3 инициализируем репозиторий:
-bash-4.1$ gitolite setup --pubkey id_rsa.pub Initialized empty Git repository in /var/lib/gitolite3/repositories/gitolite-admin.git/ Initialized empty Git repository in /var/lib/gitolite3/repositories/testing.git/ -bash-4.1$
Вывод должен быть примерно такой, как выше, без warning'ов. Теперь, из под учетной записи администратора репозиториев (в нашем случае root), клонируем репозиторий:
# git clone gitolite3@172.20.20.118:gitolite-admin.git Initialized empty Git repository in /root/gitolite-admin/.git/ /var/lib/gitolite3/.bashrc: line 10: bind: warning: line editing not enabled /var/lib/gitolite3/.bashrc: line 11: bind: warning: line editing not enabled remote: Counting objects: 6, done. remote: Compressing objects: 100% (4/4), done. remote: Total 6 (delta 0), reused 0 (delta 0) Receiving objects: 100% (6/6), done. #
Если же администратор репозитория имеет другие названия ключей, например gitoliteadmin, то необходимо указать ssh, какие конкретно ключи для каких хостов стоит применять. Не следует забывать выставить права 600 на файл config:
# cat .ssh/config Host nms-heater1.zzz.ru HostName nms-heater1.zzz.ru IdentityFile ~/.ssh/gitoliteadmin User gitolite3
# ls -lahi .ssh/config 1572882 -rw------- 1 root root 105 Mar 20 09:22 .ssh/config #
Разумеется, что резолвинг доменных имен должнен быть настроен предаварительно.
У пользователя root в наличии репозиторий, где хранится конфигурационный файл
с настройками доступов пользователей к репозиториям и бранчам:
# ls -lahi /root/gitolite-admin/conf/ total 12K 1572943 drwxr-xr-x 2 root root 4.0K Feb 20 09:44 . 1572905 drwxr-xr-x 5 root root 4.0K Feb 20 09:39 .. 1572944 -rw-r--r-- 1 root root 78 Feb 20 09:39 gitolite.conf #
и директория, где хранятся пользовательские ключи (собственно это и есть сами виртуальные пользователи).
Добавление пользователя
Пользователь создал публичный и приватный ключи, теперь копируем их на сервер. Далее, ключи следует положить в директорию администратора репозиториев:
# cp /home/andy/andy.pub /root/gitolite-admin/keydir/
Затем добавить файл в репозиторий:
# pwd /root/gitolite-admin # git add /root/gitolite-admin/keydir/avedischev.pub
Проверим добавился ли наш ключ:
# echo $? 0 # git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: keydir/avedischev.pub # #
Теперь делаем комит и отправляем файл в репозиторий:
# git commit -av -m "Andrew Vedischev's key has been added" [master bcd899e] Andrew Vedischev's key has been added Committer: root <root@nms-heater1.zzz.ru> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com If the identity used for this commit is wrong, you can fix it with: git commit --amend --author='Your Name <you@example.com>' 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 keydir/avedischev.pub # # git push --all -v Pushing to gitolite3@nms-heater1.zzz.ru:gitolite-admin.git Counting objects: 6, done. Delta compression using up to 4 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 710 bytes, done. Total 4 (delta 0), reused 0 (delta 0) To gitolite3@nms-heater1.zzz.ru:gitolite-admin.git be46d3e..bcd899e master -> master #
Подробный вывод предыдущих команд показан для наглядности, в реальности, быть пожет, некоторые ключи не потребуются. После этого правим конфигурационный файл:
# cat /root/gitolite-admin/conf/gitolite.conf repo gitolite-admin RW+ = gitoliteadmin repo testing RW+ = @all repo kesspassx RW+ = avedischev #
Так же отправляем измененый файл конфигурации в репозиторий:
# git add /root/gitolite-admin/conf/gitolite.conf # git commit -a -m "keepassx repo has been added" [master 077bab1] keepassx repo has been added Committer: root <root@nms-heater1.zzz.ru> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate. You can suppress this message by setting them explicitly: git config --global user.name "Your Name" git config --global user.email you@example.com If the identity used for this commit is wrong, you can fix it with: git commit --amend --author='Your Name <you@example.com>' 1 files changed, 3 insertions(+), 0 deletions(-) # git push --all -v Pushing to gitolite3@nms-heater1.zzz.ru:gitolite-admin.git Counting objects: 7, done. Delta compression using up to 4
Что бы пользователь мог работать с репозиториями, по именному ключу или по разным ключам, надо создать файл: /home/andy/.ssh/config И привести его к следующему виду:
IdentityFile ~/.ssh/%u
Либо вписать имя пары ключей, если они не совпадают с именем пользователя. Проверяем:
andy@powercharge:~$ ssh gitolite3@nms-heater1.zzz.ru info hello avedischev, this is gitolite3@nms-heater1 running gitolite3 3.5.3.1-1.el6 on git 1.7.1 R W keepassx R W testing andy@powercharge:~$
Работа с репозиторием
Далее, работаем с репозиторием как обычно. Копируем его на свою машину:
$ git clone gitolite3@nms-heater1.zzz.ru:keepassx Cloning into 'keepassx'... remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), 113.45 KiB | 0 bytes/s, done. Checking connectivity... done.
Копируем файл в наш репозиторий, заходим в директорию нашего репозитория
$ cp /home/andy/Documents/orange.kdb keepassx/ $ cd keepassx/ $ ls orange.kdb
Добавляем файл в репозиторий, проверяем обновился ли репозиторий и делаем коммит:
$ git add orange.kdb $ git status On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: orange.kdb $ git commit -a -m "initial commit of passwords database" [master 1f02eaa] initial commit of passwords database 1 file changed, 0 insertions(+), 0 deletions(-) rewrite orange.kdb (98%) $
Отправляем изменения в удаленный репозиторий
$ git push --all -v gitolite3@nms-heater1.zzz.ru:keepassx Pushing to gitolite3@nms-heater1.zzz.ru:keepassx Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 113.48 KiB | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To gitolite3@nms-heater1.zzz.ru:keepassx 2d1fe3b..1f02eaa master -> master $