Установка Git. Gitolite

Автор: Admin | 14.08.2013

Установка и настройка git сервера, средства управления репозиториями gitolite. Создание первого репозитория, пользователя и группы. Генерирование пользовательских ключей.

Краткое описание GIT, взято с Хабра:

Особенность настройки gitolite заключается в том, что почти никакие операции по его настройке НЕ ПРОИЗВОДЯТСЯ НАПРЯМУЮ НА СЕРВЕРЕ. Чтобы добавить нового пользователя, репозиторий или изменить права доступа надо сделать git clone специального gitolite-admin репозитория, внести изменения и сделать git push. Дело в том, что gitolite использует целую систему хуков, чтобы эти изменения вступили в силу.

Gitolite работает поверх ssh с использованием аутентификации через public-key (точнее, это наиболее популярная конфигурация).На сервере заводится единственный реальный пользователь, через которого будет происходить работа с репозиториями. А «магия» gitolite заключается в том, что в authorized_keys эти ключики попадают с опцией «command=[path]/gl-auth-command ...». Эта опция предписывает ssh-серверу запускать указанную команду независимо от того, что реально хотел исполнить юзер. При этом оригинальная команда сохраняется в переменной SSH_ORIGINAL_COMMAND, которую и считывает gitolite, чтобы узнать, что от него хотели.

Сервер на котором настраивается репозиторий назовем domain.com. Описание приводится для *.deb подобного дистра, но по сути разницы нет.


Установка GitoLite и GIT

Поставить GitoLite и сам GIT:

aptitude install git gitolite

Создать пользователя git, зайти под ним в консоль, перейти в домашний каталог и сгенерировать ssh ключ:

adduser git
su git
cd
ssh-keygen

На предложение ввести passphrase просто жать enter, иначе каждый раз придется его вводить при авторизации по этому ключу. В домашней директории должен появиться каталог .ssh с публичным и приватным ключами (id_rsa и id_rsa.pub). Под ними будут авторизироваться на сервере все клиенты git'а.

Скопировать публичный ключ, переименовав его в git.pub:

cp ~/.ssh/id_rsa.pub ~/.ssh/git.pub

Инициализировать gitolite созданным ключом пользователя git, который будет администратором репозиториев:

gl-setup ~/.ssh/git.pub

Консоль ответит:

The default settings in the rc file (/home/git/.gitolite.rc) are fine for most
people but if you wish to make any changes, you can do so now.
hit enter...

И выдаст файл настроек gitolite в vim (блять, в vim!?!?!?), для выхода нажать :x
Далее завершение инициализации:

creating gitolite-admin...
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
creating testing...
Initialized empty Git repository in /home/git/repositories/testing.git/
[master (root-commit) 01835fa] start
 2 files changed, 6 insertions(+)
 create mode 100644 conf/gitolite.conf
 create mode 100644 keydir/git.pub

Установка закончена. В домашнем каталоге пользователя git создан каталог repositories, в котором уже содержатся два репозитория gitolite-admin.git и testing.git. Тут же будут храниться все будущие репы.

Теперь надо разрешить пользователю git коннектиться к серверу по протоколу SSH и перезапустить демон OpenSSH:

echo AllowUsers git >> /etc/ssh/sshd_config
/etc/init.d/ssh restart

На этом установка и настройки непосредственно на сервере закончены.


Первый коннект и клонирование репозитория

Чтобы создать новый репозиторий и начать им пользоваться необходимо скопировать приватный ключ пользователя git (id_rsa, созданный вначале) на клиентскую машину и с помощью Putty Key Generator импортировать его, т.к. Pageant (Агент аутентификации) не понимает формат OpenSSH:

В Git Extentions запустить Putty Key Generator: (Меню\Удаленные\Putty\Генерировать или импортировать ключ), в открывшемся окне Putty Key Generator пройти в Меню\Conversions\Import key(выбрать скопированный с сервера файл id_rsa)\Save private key, назвать git.ppk

Далее запустить Pagent (Меню\Удаленные\Putty\Запустить агент аутентификации), добавить в агент импортированный ключ git.ppk. Теперь можно первый раз коннектиться к GITу и добавить новые репозитории и пользователей.

Клонируем реп с настройками:

В Git Extentions клонируем репозиторий
[email protected]:gitolite-admin.git

Тут стоит обратить внимание, что префикс git@ - это и есть имя системного пользователя под которым проходит авторизация на сервере по протоколу SSH.
После клонирования видно, что выкачанный репозиторий содержит в себе два каталога:
keys - файлы с публичными ключами пользователей репозитория (сюда же при инициализации скопирован ключ git.pub, с помощью которого и будут коннектиться пользователи на SSH сервер)
conf - содержит файл gitolite.conf - описание конфигурации, распределения прав и другие настройки.

Собственно все, сервер GITа установлен и готов к работе, осталось завести новые репы и пользователей

Добавление нового репозитория и пользователей

Управление всеми изменениями GIT'а происходит через специальный gitolite-admin репозиторий, напрямую на сервере ни чего делать не надо.

Клонирование:
Для этого надо иметь права на редактирование репозитория gitolite-admin, клонировать репозиторий [email protected]:gitolite-admin.git на локальную машину.

Для добавление нового пользователя скопировать пользовательский сгенерированный публичный ключ, при помощи Putty Key Generator, в формате username.pub в каталог keydir выкачанного репозитория.
Добавление нового репозитория и назначение прав осуществляется путем редактирования файла conf\gitolite.conf, добавив в него блок:

#Добавление групп и пользователей в группах (Этим создаются новые группы groupname_1 и groupname_2, включающая пользователей username_1, username_2 и username_3, username_4 соответственно.)
@groupname_1 = username_1 username_2
@groupname_2 = username_3 username_4
#Добавление нового репа
repo 	projectname
#Права групп на реп
	RW+ 	=	@groupname_1
	RW	=	@groupname_2

где
projectname - название проекта\нового репозитория
@groupname_1 - название группы для доступа к репу projectname с правами RW+
@groupname_2 - название группы для доступа к репу projectname с правами RW
username_1 - имя пользователя, по названию ключа username_1.pub

R - позволяет чтение
RW - позволяет делать push в существующий реп или создавать новый реп
RW+ - позволяет делать «push -f» или удалять реп (т.е. уничтожать информацию)
- (минус) - запрещает доступ

Закоммитить изменения в реп:
Открыть реп, нажать на кнопку commit, в появившемся окне слева нажать Stage(all), описать коммит и Commit&push

В конечном итоге файл gitolite.conf примет следующий вид:

@gitoliteadmin = git
@groupname_1 = username_1 username_2
@groupname_2 = username_3 username_4

repo    gitolite-admin
        RW+     =   @gitoliteadmin
repo    testing
        RW+     =   @all		

repo 	projectname_1
	RW+ 	=	@groupname_1
	RW	=	@groupname_2

Все готово.
Теперь новый репозиторий находится по адресу [email protected]:projectname.git

Генерация пользовательских ключей

При помощи Putty Key Generator сгенерировать ключ со следующими параметрами:
Тип ssh2-rsa
Битность 2048

Должно получиться 2 файла:
Приватный ключ получается нажатием кнопки "Save private key" > username.ppk
Публичный ключ необходимо скопировать в Putty Key Generator из окна сверху и сохранить одной строчкой в файл > username.pub, который и надо копировать в каталог /keydir.
Паролей ни каких не вводить!!!

Пример правильного формата публичного ключа:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQBPFuT4oag106Q5DtrP52NJ8fplt8FrTubU1nhgU//abFehe1ojEexP/T91/NW6pTmU9QoDy0csJtkZScyKYM8XMNAKRIlToaP72iboROjtQ2uziIpEyBg9eaqR6cT5Zkv95ZMZs5oHUF+JJEvx44aNKu7ABKZ6pyrWiwpoIZeUdfVePHNGoJFHDfikJ5whjUxH/1gUgEAoTRgOgEcp3DCToT3gWNJbRFPdKmyGjqu6vUJTVQxoUBoB05lreEYf7Oc/6WYPsGFgjvOJRTS2qQIYAcKype+j4wJJTLst6lBdGhEML8cRRNbtgJTwewOJvCHhMS/0M6veCAXclN19XpI7 rsa-key-20130815

Пример не правильного формата публичного ключа

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20130815"
AAAAB3NzaC1yc2EAAAABJQAAAQBPFuT4oag106Q5DtrP52NJ8fplt8FrTubU1nhg
U//abFehe1ojEexP/T91/NW6pTmU9QoDy0csJtkZScyKYM8XMNAKRIlToaP72ibo
ROjtQ2uziIpEyBg9eaqR6cT5Zkv95ZMZs5oHUF+JJEvx44aNKu7ABKZ6pyrWiwpo
IZeUdfVePHNGoJFHDfikJ5whjUxH/1gUgEAoTRgOgEcp3DCToT3gWNJbRFPdKmyG
jqu6vUJTVQxoUBoB05lreEYf7Oc/6WYPsGFgjvOJRTS2qQIYAcKype+j4wJJTLst
6lBdGhEML8cRRNbtgJTwewOJvCHhMS/0M6veCAXclN19XpI7
---- END SSH2 PUBLIC KEY ----

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *