Задача: Разобрать, как опираясь на ранее опубликованные заметки осуществить все тоже самое но с уклоном к системе Ubuntu Bionic (18.04) Server, а именно накрутить Webдоступ к репозитариям Mercurial собственных проектов.

Первым делом задействую заметку по выкачиванию с домашней основной системы репозитария где содержится собственный скрипт настраивающий запущенную систему Ubuntu 18.04 Server под виртуальной средой Virtualbox где я произвожу тестирование, а если все хорошо складывается применяю в продакшене. Я так работаю со всем.

ekzorchik@srv-bionic:~$ sudo apt-get install mercurial -y

ekzorchik@srv-bionic:~$ hg clone ssh://ekzorchik@172.33.33.7://home/ekzorchik/dproject

ekzorchik@srv-bionic:~$ sudo ./dproject/default

ekzorchik@srv-bionic:~$ uname -a

Linux srv-bionic 4.15.0-29-generic #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Теперь перехожу собственно к решению поставленной задачи этой заметки:

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

ekzorchik@srv-bionic:~$ echo "ServerName localhost" | sudo tee -a /etc/apache2/apache2.conf

ServerName localhost

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

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

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

ekzorchik@srv-bionic:~$ sudo rm /var/www/html/index.html

ekzorchik@srv-bionic:~$ sudo nano /var/www/html/index.html

<head>

<meta http-equiv="refresh" content="1;URL=http://172.33.33.25/hg" />

</head>

ekzorchik@srv-bionic:~$ sudo mkdir /var/www/html/hg

ekzorchik@srv-bionic:~$ sudo nano /var/www/html/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-bionic:~$ sudo nano /var/www/html/hg/hgweb.config

[paths]

/=/var/www/html/hg/**

[web]

allow_push = *

push_ssl = false

allowbz2 = yes

allowgz = yes

allowzip = yes

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

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

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

<Virtualhost *:80>

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

<Directory /var/www/html/hg>

Options +ExecCGI

</Directory>

<Location /hg>

AuthType Basic

AuthName "Mercurial repositories"

AuthUserFile /var/www/html/hg/hgusers

Require valid-user ekzorchik

</Location>

</Virtualhost>

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

ekzorchik@srv-bionic:~$ sudo a2dismod mpm_event

Module mpm_event disabled.

To activate the new configuration, you need to run:

systemctl restart apache2

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

Considering conflict mpm_event for mpm_prefork:

Considering conflict mpm_worker for mpm_prefork:

Enabling module mpm_prefork.

Enabling module cgi.

To activate the new configuration, you need to run:

systemctl restart apache2

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

ekzorchik@srv-bionic:~$ sudo htpasswd -c /var/www/html/hg/hgusers ekzorchik

New password: 712mbddr@

Re-type new password: 712mbddr@

Adding password for user ekzorchik

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

ekzorchik@srv-bionic:~$ sudo systemctl restart apache2

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

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

allow_push = *

push_ssl = false

ekzorchik@srv-bionic:~$ sudo hg init /var/www/html/hg/example

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

ekzorchik@srv-bionic:~$ sudo systemctl status apache2 | head -n 5

● apache2.service - The Apache HTTP Server

Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)

Drop-In: /lib/systemd/system/apache2.service.d

└─apache2-systemd.conf

Active: active (running) since Sun 2018-08-19 21:19:57 MSK; 2min 40s ago

После проверяю, через Web-браузер как происходит доступ к Web-странице (http://IP&DNS/hg) с авторизацией и после.

Указываю:

  • Имя пользователя: ezkorchik
  • Пароль: 712mbddr@

и нажимаю кнопку ОК.

Доступ к репозитариям Mercurial защищен связкой логин и пароль

После чего попадаю на Web-интерфейс представления каталога с будущими репозитариями Mercurial, в текущий момент у меня только один проект (репозитарий) с именем example.

В Web-доступе пока только один репозитарий с именем example

 

Так как Web-сервис Apache2 работает от имени группы www-data, то чтобы я мог из под своей учетной записи (login: ekzorchik) создавать репозитарии и взаимодействовать с ними мне нужно быть в этой группе, иначе бы пришлось делать chown каждый раз, а это не совсем удобно:

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

ekzorchik@srv-bionic:~$ sudo nano /var/www/html/hg/example/.hg/hgrc

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

[ui]
username = ekzorchik <ekzorchik@ekzorchik.ru>

ekzorchik@srv-bionic:~$ cd /var/www/html/hg/example/

ekzorchik@srv-bionic:/var/www/html/hg/example$ nano one

#!/bin/bash
echo $USER

ekzorchik@srv-bionic:/var/www/html/hg/example$ chmod +x one

ekzorchik@srv-bionic:/var/www/html/hg/example$ hg add

ekzorchik@srv-bionic:/var/www/html/hg/example$ hg status

A one

ekzorchik@srv-bionic:/var/www/html/hg/example$ hg commit -m "First Script on Mercurial"

Теперь переключаюсь на Web-интерфейс и что я вижу:

Содержимое изменений в репозитарии при просмотре через Web-интерфейс

 

Просмотр и визуализация того что сделано в репозитарии через Web-интерфейс намного удобнее ну или смотря кому-как если использовать консоль. Я считаю, что оба способа имеют право на использование, я же так делаю.

И вот теперь когда все мои проекты доступны через Web-интерфейс, получить их содержимое не составляет большого труда:

ekzorchik@navy:~$ hg clone http://ekzorchik:712mbddr@@172.33.33.25/hg/example

destination directory: example
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
new changesets 7fa3ceda9cba
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

ekzorchik@navy:~$ ls example

one → а вот и файл в проекте и их может быть множество, просто в рамках этой заметки он пока один.

На заметку: Для своих системно-административных целей у меня на домашнем системе Ubuntu 18.04 развернуто большое количество проектов под каждую задачу:

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

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору. Также прошу на https://win.ekzorchik.ru https://lin.ekzorchik.ru https://net.ekzorchik.ru https://voip.ekzorchik.ru https;//home.ekzorchik.ru