Skip to content

31 Октябрь 2011

Git server на Windows Server 2008

git-windows

Звучит криво, не правда ли?  :smile: Истинно линуксовое создание под Виндой!? Никогда не повторяйте это дома  :smile: Git server должен стоять на Linux системе и только. Однако если очень прижмет … придется нарушить это правило …

Задача — установить центральный Git сервер на машину с Windows Server 2008, для работы небольшой команды с приватным репо. Никакого веб интерфейса и доступа через http не планируется.

 

В качестве сервер-демона будет использован gitosis, так хорошо мне знакомый и прекрасно работающий на Линукс системах.

:!: Итак, поехали

Первое что нужно сделать — установить cygwin (http://cygwin.com/install.html). Это своего рода эмулятор Линукса на Вин машинах. При установке выбираем установку через интернет, устанавливаем пакеты:

  • git, а также все что начинается на git- [ в категории devel ]
  • openssh [ категория Net ]
  • python [ категория python ]
После установки у нас появится эмулятор Линукс шела  Cygwin Bash Shell — с ним мы и будем работать далее. Заходим в шел и в первую очередь выполняем команды (дабы избежать глюков в дальнейшем):
chmod +r /etc/passwd
chmod u+w /etc/passwd
chmod +r /etc/group
chmod 755 /var

:!: Установка SSH демона

Для работы с репозиторием будет использоваться протокол SSH, как и должно это быть. Соответственно нужна имуляция ssh-демона.

  1. Выполняем в шеле `ssh-host-config`
  2. Should privilege separation be used? (yes/no) — yes
  3. new local account ‘sshd’? (yes/no) — yes
  4. Do you want to install sshd as a service? - yes
  5. Enter the value of CYGWIN for the daemon: [] — просто жмем Enter
  6. Do you want to use a different name? (yes/no) - no
  7. Do you want to use a different name? (yes/no) - yes
  8. Please enter the password: — вводим пароль от аккаунта, через которого будет работать cygwin. Это необходимо только для защиты авторизации в систему под этим пользователем. Пользователь будет иметь права администратора. 
  9. Host configuration finished. Have fun! — все прошло хорошо, ура  :cool:
  10. Теперь запускаем наш ssh демон командой `net start sshd`

:!: Устанавливаем Python Setuptools

Gitosis написан на питоне, поэтому нас ждет еще немного секса… :slim:  Сразу смотрим установленную версию питона, с помощью `python -V` в баше. Теперь выбираем из списка [http://pypi.python.org/pypi/setuptools#downloads] установщик в .egg формате, соответствующий нашей версии питона.

Скачанное »яйцо» кладем в С:/, либо куда вам нужно и выполняем в баше:

  • `cd /cygdrive`
  • `cd <path>`, где <path> — путь к папке с «яйцом»
  • Запускаем яйцо на выполнение — `./setuptools-0.6c11-py2.6.egg`
  • `chmod +r /usr/lib/python2.6/ -R`  - папка у вас может быть другая, в зависимости от версии

:!: Устанавливаем gitosis

cd /cygdrive/c
mkdir gitosis && cd gitosis
git clone git://eagain.net/gitosis.git
cd gitosis
python setup.py install

Теперь время настройки.

  • Создаем пользователя для gitosis, с пользовательским доступом, не администратора.
  • Делаем пользователя доступным для cygwin. Вводим в шеле: `mkpasswd -l -u USER >> /etc/passwd`, где USER — имя только что созданного пользователя (у меня это имя — git)
  • Создаем публичный ключ администратора репозитория (то есть с вашего персонального компьютера). По умолчанию, если вы уже используете git client, он лежит тут: ..\Users\.ssh\id_rsa.pub
  • Копируем файл на сервер, в папку с установленным cygwin. У меня это C:\cygwin\tmp
  • Выполняем `chmod 755 /tmp/id_rsa.pub`
  • Входим в шелл под пользователем git. Входим в командную строку windows и вводим: `runas /user:git C:/cygwin/cygwin.bat` (возможно у вас имя пользователя другое).
  • В новом шеле: `gitosis-init < /tmp/id_rsa.pub`
  • Возвращаемся в шелл администратора: `chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update`

:!: Заключение

Вот мы и кончили!  :fat:

Теперь можем клонировать наш знакомый gitosis-admin, менять настройки репо, добавлять пользователей, создавать новые репозитории, все как обычно! Админский репо доступен по адресу git clone git@your-server:gitosis-admin.git. Конечно же не забываем открыть 22 порт на сервере.

:!: Особенности

Если после выше описанного у вас все заработает — считайте что вы альфа самец cygwin’а  (666) У меня возникла следующая неприятность: в момент push’а в репо, выскакивали ошибки

fatal error – unable to remap \?\C:\cygwin\lib\python2.6

В принципе push все равно проходил, но чисто с эстетической точки зрения они меня раздражали. Итак, победил я это следующим образом:

  1. Установить пакет rebase через cgywin setup tool (использовалась в начале этой статьи)
  2. Через шелл выполнить команду: `chmod 777 /cgydrive/c/Users/Administrator/AppData/Local/Temp` (возможно у вас другое имя пользователя)
  3. Закрыть все шелы cgywin и остановить службу ssh демона
  4. Запустить …/cgywin/bin/ash.exe
  5. Ввести команду `/bin/rebaseall`
  6. Проверить результат
Не смотря на то, что у меня rebaseall вернул следующее:

/usr/bin/tclpip84.dll: skipped because not rebaseable
rebase: failed to create temporary rebase database: No such file or directory

ошибка при push’е исчезла. Видимо нужные питоновские dll все же перестроились как надо.

Обсуждение закрыто.