Как настроить Web-доступ к Mercurial

Posted by

Задача: Как настроить Webдоступ к

В основе данной задачи лежит скрипт hgwebdir.cgi использовав его можно сделать чтобы можно было публиковать не одно хранилище, как если бы я использовал hgweb.cgi где стоит ограничение на одно хранилище. За дополнительные разъяснениями советую обратиться к книге: hgbook.pdf

Вся нижеследующая часть применительно к Ubuntu Trusty Server amd64

Через подготовленный playbook настраиваю систему перед дальнейшими действиями. А о том, как подготовить playbook я расскажу, когда оформлю действия в пошаговую заметку. Просто мне надоело выполнять однотипные действия по настройке системы снова и снова когда я провожу эксперименты с той или иной задумкой.

ekzorchik@system:~$ sudo ansible-playbook /etc/ansible/playbook/default.yml

ekzorchik@system:~$ ssh -l ekzorchik 10.7.9.130 -p 22

ekzorchik@srv-trusty:~$ apt-cache show mercurial | grep Version

Version: 2.8.2-1ubuntu1.3

Version: 2.8.2-1ubuntu1

ekzorchik@srv-trusty:~$ sudo apt-get install apache2 apache2-utils libapache2-mod-wsgi python-setuptools python-pip mercurial -y

ekzorchik@srv-trusty:~$ sudo nano /etc/apache2/apache2.conf

ServerName srv-trusty

ekzorchik@srv-trusty:~$ sudo unlink /etc/apache2/sites-available/000-default.conf

ekzorchik@srv-trusty:~$ sudo unlink /etc/apache2/sites-available/default-ssl.conf

ekzorchik@srv-trusty:~$ sudo unlink /etc/apache2/sites-enabled/000-default.conf

ekzorchik@srv-trusty:~$ sudo rm -Rf /var/www/html/

ekzorchik@srv-trusty:~$ sudo mkdir /var/hg

ekzorchik@srv-trusty:~$ sudo nano /var/hg/hgwebdir.cgi

#!/usr/bin/python

from mercurial import demandimport; demandimport.enable()

from mercurial.hgweb.hgwebdir_mod import hgwebdir

import mercurial.hgweb.wsgicgi as wsgicgi

application = hgwebdir('hgweb.config')

wsgicgi.launch(application)

ekzorchik@srv-trusty:~$ sudo nano /var/hg/hgweb.config

[paths]

/=/var/hg/**

[web]

allow_push = *

push_ssl = false

allowbz2 = yes

allowgz = yes

allowzip = yes

ekzorchik@srv-trusty:~$ sudo chown -R www-data:www-data /var/hg/*

ekzorchik@srv-trusty:~$ sudo chmod gu+x /var/hg/hgwebdir.cgi

ekzorchik@srv-trusty:~$ sudo nano /etc/apache2/sites-available/hg.conf

<Virtualhost *:80>

ScriptAlias /hg "/var/hg/hgwebdir.cgi"

<Directory /var/hg>

Options +ExecCGI

</Directory>

<Location /hg>

AuthType Basic

AuthName "Mercurial repositories"

AuthUserFile /var/hg/hgusers

Require valid-user ekzorchik

</Location>

</Virtualhost>

ekzorchik@srv-trusty:~$ sudo a2ensite hg.conf

Отключаю многопоточные процессы:

ekzorchik@srv-trusty:~$ sudo a2dismod mpm_event

ekzorchik@srv-trusty:~$ sudo a2enmod mpm_prefork cgi

ekzorchik@srv-trusty:~$ sudo pip install demandimport

ekzorchik@srv-trusty:~$ sudo htpasswd -c /var/hg/hgusers ekzorchik

  • New password: 712mbddr@
  • Re-type new password: 712mbddr@

Adding password for user ekzorchik

ekzorchik@srv-trusty:~$ sudo chown -R www-data:www-data /var/hg/*

ekzorchik@srv-trusty:~$ sudo apache2ctl restart

Для того, чтобы ограничить права на запись (операция push) или на чтение мы будем использовать файл hgrc:

ekzorchik@srv-trusty:~$ sudo nano /etc/mercurial/hgrc

allow_push = *

push_ssl = false

ekzorchik@srv-trusty:~$ sudo mkdir -p /var/hg/example

ekzorchik@srv-trusty:~$ cd /var/hg/example/

ekzorchik@srv-trusty:/var/hg/example$ sudo hg init

ekzorchik@srv-trusty:/var/hg/example$ cd ~/

ekzorchik@srv-trusty:~$ sudo chown -R www-data:www-data /var/hg/*

ekzorchik@srv-trusty:~$ sudo service apache2 status

ekzorchik@srv-trusty:~$ sudo service apache2 start

После проверяю, через Webбраузер как происходит доступ к Webстранице с авторизацией и после.

http://10.7.9.130/hg

Запрос аутентификации при обращении к репозитариям Mercurial

 

И у меня получилось, но теперь уже применительно к Ubuntu Trusty Server разобрать, как организовать Web-доступ к репозитарию на базе Mercurial:
Чтобы создать еще один репозитарий:
ekzorchik@srv-trusty:~$ sudo mkdir /var/hg/default

ekzorchik@srv-trusty:~$ sudo -u www-data hg init /var/hg/default
abort: Permission denied: '/var/hg/default/.hg'

ekzorchik@srv-trusty:~$ sudo hg init /var/hg/default

ekzorchik@srv-trusty:~$ sudo chown -R www-data:www-data /var/hg/*

Но дабы я сам мог создавать ветки работы с Mercurial я изменю права доступа:

ekzorchik@srv-trusty:~$ sudo chown -R ekzorchik:www-data /var/hg/*

ekzorchik@srv-trusty:~$ nano /var/hg/default/.hg/hgrc

[web]
contact = Ollo Alexander
description = My repository
allow_push = ekzorchik
allow_archive = gz zip bz2

ekzorchik@srv-trusty:~$ cd /var/hg/default/

ekzorchik@srv-trusty:/var/hg/default$ echo 2 > 1

ekzorchik@srv-trusty:/var/hg/default$ hg add

adding 1

ekzorchik@srv-trusty:/var/hg/default$ hg status

A 1

ekzorchik@srv-trusty:/var/hg/default$ hg commit -u ekzorchik

Add 2 in file 1 ← добавил описание в файл визирования изменений
HG: --
HG: user: ekzorchik
HG: branch 'default'
HG: added 1

ekzorchik@srv-trusty:/var/hg/default$ hg log

changeset: 0:247ce878d334
tag: tip
user: ekzorchik
date: Thu Dec 28 12:17:06 2017 +0300
summary: Add 2 in file 1

А как это представлено через Web-интерфейс:

Web-представление работы репозитария на базе MercurialОтлично, это мне и нужно было, чтобы не в консоли смотреть что я делал и над чем работал, а взглянуть на Web вспомнить. Так удобнее.
К примеру мне нужно поработать с репозитарием, на другой системе, то чтобы получить себе копию нужно в консоли:
aollo@work:~$ sudo apt-get install mercurial -y

aollo@work:~$ hg clone http://10.7.9.130/hg/default

http authorization required
realm: Mercurial repositories
user: ekzorchik
password: 712mbddr@
destination directory: default
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

или запись логин и пароль в одну строку URL адреса:

aollo@work:~$ hg clone http://ekzorchik:712mbddr@@10.7.9.130/hg/default

Итого я решил для себя свою задачу, пусть все слишком кустарно, но начало положено в практическом желании.
На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.