Mercurial на Windows Server 2003
Вас могут смутить столь архаичный цифры в заголовке, однако, думаю, не я один до сих пор использую в работе w2k3 и mssql2000. Причина банальна: зачем что-то покупать, когда это куплено и работает. Дискуссию о недостатках/преимуществах w2k3 и w2008 предлагаю опустить. C другой стороны я не чужд прогрессу и в последнее время плотно использую в своей работе mercurial. И вот возникла необходимость поднять внутренний сервер, при этом в наличии имеется как раз таки оной из заголовка. Речь далее пойдет не о hg serve, а о полноценном hgweb. Статья возникла по причине того, что на то, чтобы заставить его работать, ушел целый день; при этом пошаговые инструкций на русском найдены не были. Да и английских не пруд пруди.
Смотрим в браузере:
Mercurial работает! Но нет ни одного репозитория…
Для красоты добавим оформление веб-страницы:
Чуть-чуть баловства и уже можно кое-что посмотреть:
и добавляем правило
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, но оказалась весьма полезной.
Примечание. Все манипуляции касаются Mercurial 1.8.3, Python 2.6.6 и архитектуры x86. Для других версий mercurial нужно брать версию Python, для которой он скомпилирован (см. на офф. сайте mercurial).
Установка
- Скачать и установить Mercurial;
- Скачать и установить Python;
- Получить hgweb.cgi. Тут есть два способа:
- скачать исходники с сайта Mercurial
- или получить копию исходников
hg clone http://selenic.com/repo/hg
- Создать папку, в которой будет находиться Mercurial. В моем случае это
;C:\Inetpub\hg
- Разархивировать в эту папку файл library.zip из каталога, в который установлен Mercurial (по умолчанию
);C:\Program Files\Mercurial\library.zip
- Оттуда же скопировать папку Templates (по умолчанию
);C:\Program Files\Mercurial\Templates
- И напоследок скопировать в эту директорию файл hgweb.cgi.
Настройка
Теперь нужно разрешить python выполнять .cgi:- Открыть диспетчер служб IIS;
- Нажать «Добавить новое расширение веб-служб…»;
- В открывшемся окне ввести имя расширения. Я назвал его Python;
- Нажать кнопку «Добавить» и в открывшемся окне ввести путь к исполняемому файлу
;C:\Python26\python.exe -u "%s" "%s"
- Установить галку «Установить состояние расширения как «Разрешено»»;
- В итоге имеем веб-расширение Python
- В свойствах виртуальной директории на вкладке «Виртуальный каталог» в разделе «Параметры приложения» нажать кнопку «Настройка»;
- В открывшемся окне нажать верхнюю кнопку «Добавить…»;
- В открывшемся окне ввести путь к исполняемому файлу
, имя расширенияC:\Python26\python.exe -u "%s" "%s"
, команды сократить до.cgi
, убедиться, что установлена галка «Обработчик сценариев»;GET,HEAD,POST
Расширение
добавлено:.cgi
- Нажать все Океи.
и сохраняем его в папку с Mercurial, например как test.cgi (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>'
C:\Inetpub\hg\test.cgi
). Открываем браузер и смотрим:Конфигурирование 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"
Теперь открываем в редакторе наш hgweb.config и добавляем туда следующее:# Uncomment to send python tracebacks to the browser if an error occurs: import cgitb; cgitb.enable()
Этими строчками мы разрешили добавлять изменения всем пользователям без использования ssl.[web] allow_push = * push_ssl = false
Смотрим в браузере:
Mercurial работает! Но нет ни одного репозитория…
Добавление репозиториев
Тут все просто: нужно создать директорию на диске, где будут находится репозитории, и в ней создать для каждого репозитория свой каталог. Делаем через командную строку:Теперь в hgweb.config нужно указать путь к нашему репозиторию. Для этого добавим:C:\Documents and Settings\admin>cd ..\.. C:\>mkdir Repos C:\>cd repos C:\Repos>mkdir test C:\Repos>hg init test
F5 в браузере и видим наш репозиторий:[paths] Test = C:\Repos\test
Для красоты добавим оформление веб-страницы:
Monoblue — это один из шаблонов, которые находятся в папке[web] style = monoblue allow_push = * push_ssl = false
C:\Inetpub\hg\Templates
. Изначально в папке всего четыре шаблона — coal, gitweb, monoblue, paper. Но с легкостью можно создать свой. О шаблонах mercurial можно почитать здесь.Чуть-чуть баловства и уже можно кое-что посмотреть:
Красивый URL
Признаюсь сделать это у меня получилось частично…
http://localhost/hg/hgweb.cgi/Test/Смотрится некошерно. Поэтому мы скачиваем бесплатную версию Helicon's ISAPI Rewriter 3, устанавливаем её и открываем ISAPI Rewrite manager, жмем кнопку «Edit».
и добавляем правило
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 комментариев