Установка и настройка Mercurial
Установка сервера
Для того чтобы установить необходимый набор пакетов достаточно выполнить следующую команду:
$ sudo apt-get install mercurial mercurial-server
Настройка сервера
$ sudo su -l hg
По умолчанию у данного пользователя домашняя директория не в /home:
$ pwd
/var/lib/mercurial-server/
Перейдём в репозитории и создадим новый:
$ cd repos
$ hg init testrepo
Протестируем репозиторий:
$ cd testrepo
Создадим тестовый файлик:
$ echo "test msg" > test.txt
$ hg status
? test.txt
$ hg add test.txt
$ hg status
A test.txt
Попробуем закоммитить файл:
$ hg ci -m 'asd'
прервано: не задано имя пользователя (см. "hg help config")
Система требует задать имя пользователя от которого будет выполняться коммиты:
$ mcedit ~/.hgrc
Добавим в этот файл информацию о пользователе
[ui]
username = hg@server
$ hg ci -m 'asd'
Ошибок больше нет.
Добавим описание репозитория
$ mcedit /var/lib/mercurial-server/repos/testrepo/.hg/hgrc
Запишем в него следующее:
[web]
description = Тут описание репозитория
Настройка доступа к Mercurial через HTTP
Установка apache2
$ sudo apt-get install apache2 apache2-utils libapache2-mod-wsgi
Настройка VHost для Mercurial
sudo mcedit /etc/apache2/sites-available/mercurial.conf
Там будет следующее содержимое:
<VirtualHost *:80>
ServerAdmin admin@company.ru
ServerName repo.company.ru
DocumentRoot /var/lib/mercurial-server/repos/
# Настройка WCGI
WSGIProcessGroup hg
WSGIDaemonProcess hg user=hg group=hg threads=2 maximum-requests=1000
# Обработчик WSGI
WSGIScriptAlias / /var/lib/mercurial-server/repos/hgwebdir.wsgi
# Аутентификация
<Location />
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /var/lib/mercurial-server/repos/.htpasswd
Require valid-user
</Location>
# Логи сервера
ErrorLog ${APACHE_LOG_DIR}/error.repo.log
CustomLog ${APACHE_LOG_DIR}/access.repo.log combined
</VirtualHost>
Главное не забыть настроить хост в прямой зоне DNS-сервера, где "repo.company.ru >>> x.x.x.x".
Включим указанный сайт штатными средствами apache2:
$ sudo a2ensite mercurial.conf
Затем перезапустим сервер:
$ sudo /etc/init.d/apache2 restart
Настройка скрипта, отображающего содержимое репозитория
Далее настроим скрипт, для работы с репозиторием:
$ sudo mcedit /var/lib/mercurial-server/repos/hgwebdir.wsgi
Запишем в него следующее содержимое:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
os.environ['HGENCODING'] = 'utf-8'
from mercurial.hgweb.hgwebdir_mod import hgwebdir
from mercurial.hgweb.request import wsgiapplication
path = os.path.dirname(os.path.abspath(__file__))
application = hgwebdir(path+'/hgwebdir.conf')
$ sudo mcedit /var/lib/mercurial-server/repos/hgwebdir.conf
Запишем в этот файл следующее:
[web]
style = coal
allow_push = *
push_ssl = no
[paths]
testrepo = /var/lib/mercurial-server/repos/testrepo/
Есть небольшой хак, допустим в директории /var/lib/mercurial-server будет несколько репозиториев и возможно в будущем придётся их добавлять то достаточно в графе [paths] указать корневую директорию:
[paths]
/ = /var/lib/mercurial-server/repos/*
Последний штрих:
$ sudo chown hg:hg /var/lib/mercurial-server/repos/hgwebdir.wcgi /var/lib/mercurial-server/repos/hgwebdir.conf
Настроим доступ только для авторизованных пользователей
Для этого используем штатную утилиту из пакета apache2.utils:
htpasswd -c /var/lib/mercurial-server/repos/.htpasswd username
Теперь попытаем залогиниться, откроем через любой браузер адрес нашего сервера mercurial, после чего авторизуемся и перед нами будет список репозиториев, который мы указали в файле hgwebdir.conf.
Дальнейшее обслуживание
$ sudo su -l hg
$ cd /var/lib/mercurial-server/repos/
$ hg init newrepo
$ mcedit hgwebdir.conf
newrepo = /var/lib/mercurial-server/repos/newrepo/
И всё, ничего перезапускать не требуется.
Сдалал всё по вашей инструкции, однако непонятно теперь, где искать этот репозиторий, как зайти на него в браузере и как клонировать его на клиентских машинах. Спасибо!
Всё просто)
С точки зрения фс на сервере:
/var/lib/mercurial-server/repos/мойреп
С точки зрения web:
http://хост/мойреп
---
То есть клонирование репозитория выглядит так:
hg clone http://хост/мойреп
Ошибка Internal Server Error из-за
# Настройка WCGI
WSGIProcessGroup hg
WSGIDaemonProcess hg user=hg group=hg threads=2 maximum-requests=1000
# Обработчик WSGI
WSGIScriptAlias / /var/lib/mercurial-server/repos/hgwebdir.wsgi
В чем может быть беда?