Задача: Как настроить Web–доступ к Mercurial
В основе данной задачи лежит скрипт 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
И у меня получилось, но теперь уже применительно к 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 вспомнить. Так удобнее.
К примеру мне нужно поработать с репозитарием, на другой системе, то чтобы получить себе копию нужно в консоли:
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.