Mercurial на Windows Server 2003

Вас могут смутить столь архаичный цифры в заголовке, однако, думаю, не я один до сих пор использую в работе w2k3 и mssql2000. Причина банальна: зачем что-то покупать, когда это куплено и работает. Дискуссию о недостатках/преимуществах w2k3 и w2008 предлагаю опустить. C другой стороны я не чужд прогрессу и в последнее время плотно использую в своей работе mercurial. И вот возникла необходимость поднять внутренний сервер, при этом в наличии имеется как раз таки оной из заголовка. Речь далее пойдет не о hg serve, а о полноценном hgweb. Статья возникла по причине того, что на то, чтобы заставить его работать, ушел целый день; при этом пошаговые инструкций на русском найдены не были. Да и английских не пруд пруди.
Примечание. Все манипуляции касаются Mercurial 1.8.3, Python 2.6.6 и архитектуры x86. Для других версий mercurial нужно брать версию Python, для которой он скомпилирован (см. на офф. сайте mercurial).

Установка

  1. Скачать и установить Mercurial;
  2. Скачать и установить Python;
  3. Получить hgweb.cgi. Тут есть два способа:
    • скачать исходники с сайта Mercurial
    • или получить копию исходников
      hg clone http://selenic.com/repo/hg
    Нужный нам файл находится в корне директории:
    Расположение hgweb.cgi
  4. Создать папку, в которой будет находиться Mercurial. В моем случае это
    C:\Inetpub\hg
    ;
  5. Разархивировать в эту папку файл library.zip из каталога, в который установлен Mercurial (по умолчанию
    C:\Program Files\Mercurial\library.zip
    );
  6. Оттуда же скопировать папку Templates (по умолчанию
    C:\Program Files\Mercurial\Templates
    );
  7. И напоследок скопировать в эту директорию файл hgweb.cgi.

Настройка

Теперь нужно разрешить python выполнять .cgi:
  1. Открыть диспетчер служб IIS;
  2. Нажать «Добавить новое расширение веб-служб…»;
  3. В открывшемся окне ввести имя расширения. Я назвал его Python;
  4. Нажать кнопку «Добавить» и в открывшемся окне ввести путь к исполняемому файлу
    C:\Python26\python.exe -u "%s" "%s"
    ;
  5. Установить галку «Установить состояние расширения как «Разрешено»»;
    Добавление нового веб-расширения
  6. В итоге имеем веб-расширение Python
    Веб-расширение добавлено
Далее нужно создать виртуальную директорию для папки, где находится Mercurial, — с установкой галки «выполнение (например приложений ISAPI или CGI)» — и разрешить выполнять .cgi скрипты. Для этого нужно:
  1. В свойствах виртуальной директории на вкладке «Виртуальный каталог» в разделе «Параметры приложения» нажать кнопку «Настройка»;
    Настройка виртуальной директории
  2. В открывшемся окне нажать верхнюю кнопку «Добавить…»;
  3. В открывшемся окне ввести путь к исполняемому файлу
    C:\Python26\python.exe -u "%s" "%s"
    , имя расширения
    .cgi
    , команды сократить до
    GET,HEAD,POST
    , убедиться, что установлена галка «Обработчик сценариев»;
    Добавление .cgi
    Расширение
    .cgi
    добавлено:
    Расширение .cgi добавлено
  4. Нажать все Океи.
Теперь можно проверить работоспособность Python. Создаем скрипт:
print 'Status: 200 OK'
print 'Content-type: text/html'
print
print '<html><head><title>Python test</title></head>'
print '<body><h1>Работает!</h1></body>'
print '</html>'
и сохраняем его в папку с Mercurial, например как test.cgi (
C:\Inetpub\hg\test.cgi
). Открываем браузер и смотрим:
Проверка python

Конфигурирование Mercurial

Теперь нужно настроить сам Mercurial. Создайте в папке, где находится hgweb.cgi, файл hgweb.config.
Примечание. hgweb.cgi у меня заработал только при ANSI-кодировке hgweb.config. При UTF-8 вылетала ошибка парсинга.
Далее нужно открыть в редакторе hgweb.cgi и указать путь к конфигурационному файлу:
# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "/path/to/repo/or/config"
В нашем случае файл лежит рядом и мы пишем просто:
# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "hgweb.config"
Чтобы посмотреть ошибки, которые могут возникнуть, можно раскомментировать строчку:
# Uncomment to send python tracebacks to the browser if an error occurs:
import cgitb; cgitb.enable()
Теперь открываем в редакторе наш hgweb.config и добавляем туда следующее:
[web]
allow_push = *
push_ssl = false
Этими строчками мы разрешили добавлять изменения всем пользователям без использования ssl.
Смотрим в браузере:
Проверка hgweb.cgi
Mercurial работает! Но нет ни одного репозитория…

Добавление репозиториев

Тут все просто: нужно создать директорию на диске, где будут находится репозитории, и в ней создать для каждого репозитория свой каталог. Делаем через командную строку:
C:\Documents and Settings\admin>cd ..\..
C:\>mkdir Repos
C:\>cd repos
C:\Repos>mkdir test
C:\Repos>hg init test
Теперь в hgweb.config нужно указать путь к нашему репозиторию. Для этого добавим:
[paths]
Test = C:\Repos\test
F5 в браузере и видим наш репозиторий:
Проверка hgweb.cgi

Для красоты добавим оформление веб-страницы:
[web]
style = monoblue
allow_push = *
push_ssl = false
Monoblue — это один из шаблонов, которые находятся в папке
C:\Inetpub\hg\Templates
. Изначально в папке всего четыре шаблона — coal, gitweb, monoblue, paper. Но с легкостью можно создать свой. О шаблонах mercurial можно почитать здесь.

Чуть-чуть баловства и уже можно кое-что посмотреть:
Граф ревизий репозитория Test

Красивый URL

Признаюсь сделать это у меня получилось частично…
http://localhost/hg/hgweb.cgi/Test/
Смотрится некошерно. Поэтому мы скачиваем бесплатную версию Helicon's ISAPI Rewriter 3, устанавливаем её и открываем ISAPI Rewrite manager, жмем кнопку «Edit».
ISAPI Rewrite manager
и добавляем правило
RewriteRule /hg/(.*) /hg/hgweb.cgi/$1 [I,O]

Хотя правило и заработало и URL стал красивый, но в html-коде страницы красовалось
<link rel="stylesheet" href="/hg/hgweb.cgi/Test/static/style-monoblue.css" type="text/css">
и, соответственно, стиль не применялся… Это я так и не поборол.

Заключение

В итоге мы имеем внутренний сервер Mercurial. Однако, после нескольких дней использования встал другой вопрос — управление репозиториями… На данный момент приходится лезть на сервер, создавать для репозиториев каталоги и прописывать их в hgweb.config, что приемлемо для нашей компании, но все ж не совсем удобно. В идеале — это веб-клиет типа bitbucket.org.

Ссылки

1. Running Mercurial on Windows — просто, но мало; статья старая, от 7 июня 2009 г.
2. Setting up and configuring Mercurial in a Windows/IIS/Active Directory environment — хороший, но скупой сборник из четырех статей: 1) установка, 2) украшение Url, 3) прикручивание Active Directory и 4) изменение шаблона веб-страницы.
3. Setting up a Mercurial server under IIS7 on Windows Server 2008 R2 — хоть статья и для Windows Server 2008, но оказалась весьма полезной.


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.