Понадобилось мне поднять на вендовой тачке гит-сервер для тестов. Да не простой, а с шифрованием и мощным разделением прав. Погуглив, нашел идеальное для меня решение — gitolite. Был еще gitosis, но у него с правами было не густо.
Проблема в том, что для gitolite нужен ssh-сервер и UNIX-like система. Но не беда. Было решено поднимать это чудо при помощи cygwin, с которым мне уже приходилось сталкиваться не раз и не два.
Итак, кому интересно как такое сделать, прошу под кат.
Для работы нам понадобится cygwin с пакетами git и openssh. Я не буду рассказывать как установить сигвин. В сети и так полно гайдов, не считая официального. Просто не забудьте при установке добавить два вышеперечисленных пакета.
Для безопасной и удобной работы с гит-сервером, нужно настроить ssh. Именно через него будет происходить авторизация пользователей и шифрование трафика.
Запускаем Cygwin Bash Shell (тыць одноименных значок в пуске).
Внимение! Cygwin использует юзеров из венды. Поэтому, запускать его нужно от имени пользователя с правами администратора. Если у пользователя не будет прав админа, службу sshd будет невозможно создать. Но админ-права нам нужны только для создания службы и поэтому, можно дать права админа юзеру только на время установки.
Допустим, пользователь, от коротого вы запустили cygwin называется “gitserveruser”. Тогда в cygwin в папке /home появится директория gitserveruser. Запомните это имя на будущее.
Примем некоторые условные обозначения:
gitserveruser — Имя пользователя, от коротого запускаем cygwin
gitserver — IP-адрес или домен сервера, на котором будет git-сервер
gitclientuser — Имя пользователя в системе, в которой запускается Git Bash
gitclient — IP-адрес или домен сервера, на котором запускается Git Bash
В командной строке cygwin пишем:
$ ssh-host-config
и жмем энтер.
(Надеюсь, вы знаете, что знак $ по традиции означает ввод в консоль и его набирать не нужно).
Вдим:
*** Info: Generating /etc/ssh_host_key
*** Info: Generating /etc/ssh_host_rsa_key
*** Info: Generating /etc/ssh_host_dsa_key
*** Info: Creating default /etc/ssh_config file
*** Info: Creating default /etc/sshd_config file
*** Info: Privilege separation is set to yes by default since OpenSSH 3.3.
*** Info: However, this requires a non-privileged account called 'sshd'.
*** Info: For more info on privilege separation read /usr/share/doc/openssh/READ
ME.privsep.
*** Query: Should privilege separation be used? (yes/no)
Отвечаем “yes”
Видим:
*** Info: Updating /etc/sshd_config file
*** Warning: The following functions require administrator privileges!
*** Query: Do you want to install sshd as a service?
*** Query: (Say "no" if it is already installed as a service) (yes/no)
Отвечаем “yes”
Видим:
*** Query: Enter the value of CYGWIN for the daemon: []
Отвечаем “binmode tty ntsec”
Видим:
*** Info: The sshd service has been installed under the LocalSystem
*** Info: account (also known as SYSTEM). To start the service now, call
*** Info: `net start sshd' or `cygrunsrv -S sshd'. Otherwise, it
*** Info: will start automatically after the next reboot.
*** Info: Host configuration finished. Have fun!
Все! На этом конфигурация ssh-демона закончена. Теперь он появится в списке служб Windows и его можно запустить.
Далее меняем пароль у нашего юзера в cygwin:
$ passwd
И дважды вводим новый пароль. Он временный. Потом его можно будет удалить.
После этого, через Пуск > Панель управления > Администрирование > Службы запускаем службу “CYGWIN sshd”.
Теперь представим, что установленный нами cygwin - это сервер, к которому у нас есть доступ по ssh.
Запускаем Git Bash (надеюсь, вы msysgit уже установили, иначе зачем вам гит-сервер) и вводим следующее:
$ ssh-keygen -t rsa
И на все вопросы жмем энтер (это означает, что мы не хотим изменять положение файла и не хотим устанавливать контрольную фразу). Увидим примерно следующее:
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Documents and Settings/gitclientuser/.ssh/id_rsa
):
Created directory '/c/Documents and Settings/gitclientuser/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Documents and Settings/gitclientuser/.ssh/id_rs
a.
Your public key has been saved in /c/Documents and Settings/gitclientuser/.ssh/id_rsa.pu
b.
The key fingerprint is:
************************************************************* gitclientuser@gitclient
За исключением разве того, что имя пользователя и компьютера будет ваше.
А теперь нам нужно передать серверу наш ключ, чтобы авторизироваться без пароля:
В Git Bash вводим (помним, что gitserver - адрес компьютера, на котором запущен sshd, можно localhost; gitserveruser - имя пользователя, из-под которого запускали cygwin):
$ ssh-copy-id -i ~/.ssh/id_rsa gitserveruser@gitserver
Я нарочно сделал это так, как нужно было бы делать при обмене ключами с реальным сервером. Это можно было бы сделать напрямую в винде, но так не интересно =)
Теперь нам можно удалить пароль пользователя, чтобы на ssh можно было заходить только при помощи ключей:
В Cygwin Bash Shell вводим passwd и два раза нажимаем энтер чтобы установить пустой пароль.
Чтобы проверить, работает ли авторизация по ключам, в клиенте (Git Bash) вводим:
$ ssh gitserveruser@gitserver pwd
После этого у нас НЕ должны спрашивать пароль, а просто показать путь к домашней директории сервера:
/home/gitserveruser
Все. На этом установка и настройка ssh-сервера и обмен ключами закончен. Переходим к установке gitolite:
Открываем Git Bash и переходим в временную папку:
$ cd d:/tmp
После этого, клонируем репозиторий с гитолайтом, чтобы его потом установить:
$ git clone git://github.com/sitaramc/gitolite.git
Когда он закачается, у вас в временной папке появится папка gitolite.
Далее начинаем установку:
$ cd gitolite/src
$ ./gl-easy-install -q gitserveruser gitserver sitaram
Где gitserveruser - наш пользователь в cygwin, а gitserver - адрес компьютера, на котором он запущен, напрмер localhost. sitaram - имя администратора gitolite. Его можно изменить, а лучше не трогать.
После ввода команды, нас попросят ввести проверочную фразу для sitaram. Ее можно не вводить а просто нажать энтер.
Все, гитолайт установлен. Теперь нужно подправить один баг, связанный с cygwin:
В папке вашего пользователя в cygwin откройте файл .bashrc и добавьте в конец следующие строки:
export GL_RC=~/.gitolite.rc
export GL_BINDIR=~/.gitolite/src
export GL_REPO=gitolite-admin
export GL_USER=gitserveruser
export GL_TS="$y-$m-$d.$h:$min:$s"
Не забываем заменить gitserveruser на имя пользователя в cygwin.
Если все равно возникают странные баги, попробуйте добавить строку
$ENV{PATH} = "/usr/local/bin:/bin:/usr/bin";
в самый верх файла ~/.gitolite.rc на сервере, это должно помочь.
Теперь можно удалить из временной папки папку gitolite.
После этого, клонируем себе админский репозиторий для дальнейшей настройки:
В Git Bash переходим во временную папку и вводим:
$ git clone gitolite:gitolite-admin.git
В результате получим админский репозиторий, в который можно добавлять ключи других пользователей и настраивать доступ как угодно.
Вам нужно только помнить: вы можете получить доступ к репозиториям при подключении такого вида:
$ git clone gitolite:testing.git
А все остальные будут подключаться например так:
$ git clone gitserveruser@gitserver:testing.git
Все, все остальное вы найдете в доках gitolite!
©2010. Postage by Greg Cooper. Icons by P.J. Onori. Thanks to Jamie Cassidy & Panic.
Edited by Neris
Comments