- Brain IT!
- суббота, 7 ноября 2009 г.
- Установка и настройка системы контроля версий Mercurial на сервере
- 10 комментариев:
- Life-cycle
- вторник, 5 октября 2010 г.
- Mercurial on Windows Server
- Mercurial Server on Apache/Windows
- 3 Answers 3
- Setup Mercurial Server in Windows Machine — Tutorials are outdated
- 3 Answers 3
- Установка Mercurial Server и использование авторизации по SSH
- Установка Mercurial Server
- Настройка SSH для авторизации по ключам
- Настройка Mercurial Server
- Окончательная настройка
Brain IT!
О программировании и около
суббота, 7 ноября 2009 г.
Установка и настройка системы контроля версий Mercurial на сервере
/www-data/hg/ (у меня Apache выполняется от имени www-data:www-data):
10 комментариев:
Миша, а почему Mercurial если не секрет? Я понимаю что это вопрос религии больше, просто интересно. И как другие участники проекта к нему относятся? Я в том смысле, что среднего разработчика и к SVN не всегда можно нормально приучить.
Вопрос выбора между Мерком и СВН — это уже не религия. Мерж из страшного сна СВНщика превращается в простую повседневную операцию, также и бранчи. Чисто за счет конвенций и структуры репозиториев можно подогнать систему практически под любой workflow, в том числе и с ревизией кода. К тому же в случае кодинга в отсутствие интернета не нужно думать как сохранять получаемые ревизии, чтобы потом их закоммитить.
Ну а насчет освоения. За пару дней-максимум неделю вполне реально освоить, а потом уже за уши не оторвешь.
Ну а преимущество перед имеющими ту же функциональность, но существенно более гиковскими, Git и Bazaar — вполне консистентный гуй.
Life-cycle
Большая часть этого блога посвящена вопросам и мыслям, которые возникают у меня при разработке программного обеспечения.
вторник, 5 октября 2010 г.
Mercurial on Windows Server
Последнее время я увлекся системой децентрализованного контроля версии Mercurial. Нравится мне эта штука прежде всего своей легкостью и ненавязчивостью.
В начале я использовал его для индивидуальных проектов для возможности иметь историю изменении и возможность ветвления.
Для такого использования надо, всего лишь, поставить вот это
После чего в любом каталоге будет достаточно набрать:
hg init
hg add
hg commit -m «first»
и все файлы будут зачекинены в репозитории.
Если есть желание использовать репозитории удаленно, то это тоже достаточно не сложно.
Я буду рассматривать вариант поднятия сервера под Windows.
Предположим мы хотим сделать 2 репозитория в одном каталоге сервера:
D:\REPOS\
D:\REPOS\firstproject
D:\REPOS\secondproject
Для этого в каталог D:\REPOS\ кладем вот такой конфиг web_dir.config:
[paths]
firstproject = D:/REPOS/firstproject
secondproject = D:/REPOS/secondproject
[web]
allow_push = *
push_ssl = false
contact = Bilbo Baggins
description = fixes
allow_archive = zip
После этого в каталоге D:\REPOS\ выполняем командочку
hg serve —webdir-conf web_dir.config
Не очень очевидно то что после запуска вы ничего на консоли не увидите и управление вам не вернется. 🙂
Попробуите заити по адресу http://localhost:8080 ,должны увидеть простой веб интерфейс с двумя проектами.
Остальные параметры значат следующее
- allow_push — * — разрешает пушить в репозитории всем
- push_ssl = false — разрешает пушить по http (по умолчанию только ssl)
- contact = Bilbo Baggins — имя того кто отвечает за проект (для каждого проекта можно переопределить в .hg\hgrc для конкретного репозитория )
- description = fixes — описание проекта
- allow_archive = zip — добавляет ссылочку для скачивания последней версии в архиве
Пользоваться этим просто. На клиентской машине так же ставим mercurial и даем команду:
hg clone http://myserver/firstproject
Теперь у нас есть своя копия репозитория локально и можно с ней работать, после того как сделали изменения и их зачекинили (hg commit) ,можно их вернуть обратно на сервер командой hg push или взять свежее с сервера командой hg pull
При этом в веб интерфеисе можно легко смотреть изменения , коменттарии и прочее.
Вообщем все очень просто и удобно.
Для более подробного понимания всех команд hg RTFM User Guide
Mercurial Server on Apache/Windows
I’m searching for info to setup a Mercurial Server for Windows (7 or XP) with an Apache (xampp if it is useful to know it) with the Push Model, just like in this question but my team is composed of 5 to 8 (unsolvent) guys who are each one working in separated places, so I don’t think the bitbucket solution or anyother non-private repo out there.
I think this post would do the trick, but i haven’t experienced anything with cgi before,
Has anybody done this before? where can I find a more detailed explanation? thanks in advance
I’m now getting this error: Premature end of script headers: hgwebdir.cgi
The log error says «no module named mercurial»
this is my hgwebdir.cgi file
3 Answers 3
Here is my httpd.conf piece for the mercurial sites (slightly edited):
I also had to turn on a few modules for Auth Digest, etc.
I put the hgwebdir.cgi in the root of the public and the private folders, and just put each of my hg repos in the repos subfolder under the appropriate folders.
Apache authentication took care of my authorization.
Then I just put a hgweb.config file in the same locations like this:
Updated Question
The mercurial packages need to be on the PYTHON_PATH
This answer gives more detail.
John Weldons answer is correct, I just wanted to provide a little detail on the wide array of possibilities you may also be interested in.
hgwebdir is just a wsgi application, so you can run it like any other wsgi application using mod_wsgi in apache2. mod_wsgi will also perform better than cgi because the overhead of loading the python interpreter is done once rather than for each request.
Also by virtue of being a wsgi application means you can also wrap it up in middleware, or hang it off another url of a bigger website etc.
For example, say you are using trac(another wsgi app) and you want to share the authorization scheme between trac and hgwebdir, this can be accomplished by putting them both behind authorization middleware like repoze.who for example.
Finally, since python paste makes building web apps out of smaller pieces, I wrote this code snippet to start hgwebdir via paste.
And the corresponding config file part to load it.
Setup Mercurial Server in Windows Machine — Tutorials are outdated
I am refering to HgWebDirStepByStep, and trying to setup it in Windows machine (Windows 7).
- I can no longer download hgwebdir.cgi from http://www.mercurial-scm.org/repo/hg-stable/raw-file/tip/hgwebdir.cgi. The link is dead.
- I was told to modify hgwebdir.cgi content to sys.path.insert(0, «c:/dev/Mercurial/lib») , but I didn’t found any folder in my latest Mercurial installation. I can only see there is a zip file on it.
Seems the information on the tutorial is pretty outdated. Any good guides for me to setup Mercurial server in Windows machine? As there is already an Apache in the server, I would like to make use of the Apache instead of IIS.
3 Answers 3
By collecting information bits and bytes from every corners, I would like to summary the steps to setup mercurial server using Apache, with authentication feature.
Add the following content to C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf
Create the following 4 files
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\hg\hgwebdir.cgi (Download from http://makinggames.ca/wp-content/uploads/2010/05/hgwebdir.txt and rename it to hgwebdir.cgi)
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\hg\hgweb.config with the following content.
c:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\hg\passwd.txt (Refer to this guide http://sniptools.com/vault/windows-apache-and-htaccess-authentication)
c:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\hg.htaccess (Just leave the file empty)
Initialize repositories in
This can be done using TortoiseHg, by applying «Create Repository Here», through right click on folder D:\mercurial-repo\dummy0 and D:\mercurial-repo\dummy1
Установка Mercurial Server и использование авторизации по SSH
Установка Mercurial Server
Первым, что пришло в голову — была установка из репозиториев. Обновив пакеты и выполнив команду:
я обнаружил, что установилась версия 1.0.1-1, которая не является последней.
На официальном сайте был обнаружен deb-пакет с версией 1.2-1, который и был установлен командой
Настройка SSH для авторизации по ключам
Т.к. я хотел, чтобы все ключи пользователей, которые имеют доступ к серверу по ssh, хранились в одном месте, то в файл /etc/ssh/sshd_config была добавлена следующая строчка:
AuthorizedKeysFile /etc/ssh/keys/%u.pub
Она означает, что файлы ключей должны храниться в папке /etc/ssh/keys/ и иметь вид имя_пользователя.pub
Настройка Mercurial Server
Домашняя директория с конфигами Mercurial Server находится в /var/lib/mercurial-server. Нас интересует файл .mercurial-server, именно в нем хранится основной конфиг сервера. Там можно изменить пути к репозиториям, директории с публичными ключами и др. Т.к. репозитории у меня вынесены на другой диск, то и переменную repos я изменил соответствующим образом.
Пользователи делятся на две группы: root(имеют полные права на все репозитории, в том числе и на создание) и users(имеют право на pull и push).
Ключи пользователей, которые должны иметь доступ к серверу необходимо поместить в папку /etc/mercurial-server/keys/users, а ключи администраторов — /etc/mercurial-server/keys/root.
Специальный репозиторий hgadmin
После установки сервера автоматически создается служебный репозиторий hgadmin, в котором можно хранить ключи пользователей и администраторов. Это очень удобно, т.к. нет необходимости загружать в ручную ключи пользователей.
Структура точно такая же, как и в системе, т.е. ключи хранятся в /hgadmin/keys/users и /hgadmin/keys/root для пользователей и администраторов соответственно.
Там же можно хранить файл access.conf который отвечает за права доступа пользователей.
Окончательная настройка
/.ssh/authorized_keys нам нужно создать символическую ссылку в каталоге /etc/ssh/keys/. Для этого выполняем команду:
После того, как мы поместили ключ в /etc/mercurial-server/keys необходимо обновить права доступа, для этого необходимо выполнить следующую команду:
Если ключи были добавлены с помощью hgadmin, то изменения вступают в силу автоматически.