Gitolite

Материал из pNp Wiki
Перейти к: навигация, поиск

Установка и настройка Gitolite3

Для разработок программистов и для системных администраторов, что бы базу данных с паролями хранить.


Исходные условия:

  1. 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
$

Ссылки