Подбор ссылок по mercurial - http://mercurial.ru/
Надеюсь, сайт будет развиваться и обрастет со временем новыми русскоязычными сервисами по этой славной системе хранения версий.
Показаны сообщения с ярлыком mercurial. Показать все сообщения
Показаны сообщения с ярлыком mercurial. Показать все сообщения
суббота, 29 января 2011 г.
вторник, 10 августа 2010 г.
Ода eclipse
Очень часто люди задаются вопросом, чем пользоваться для разработки программного обеспечения. Однозначного ответа тут нет. У меня очень долго не складывались отношения с eclipse, так как либо он тормозил, так как компьютеры были слишком слабыми, либо он падал, так как что-то с чем-то не срасталось, либо у меня на тот момент оказывались более удобные инструменты. В целом, использование eclipse идет немного мимо желания шире использоват vim. И тем не менее, я сейчас пользуюсь eclipse, и нисколько не жалею. Пользуюсь на маленьком asus eee 901, на котором как утверждается - невозможно им пользоваться. Оказалось - возможно. Главное, очистить как можно больше рабочего пространства. Мое выглядит приблизительно вот так:
Вполне душевно.
Самое вкусное естественно в том, что за время глючной жизни затмения под него было разработано множество плагинов, да и сам он оброс полезным функционалом. Перечислю те, которые сильно помогают мне:
Итого, у меня почти vim, я могу править и отлаживать все что мне нужно, все это собрано в одном месте, да и в версии eclipse helios добавили хорошие возможности по созданию ссылок в рабочем пространстве, что сильно упрощает жизнь, очень удобно. В экран влезает, работает достаточно стабильно. Вот и встает вопрос, как же подружить свою любовь к vim и удобность работы с eclipse. Пока ответа нет (eclim не предлагать, хочу его использовать, но я так понимаю - придется его пилить, то, что я попробовал - это слишком мало, по сравнению с тем, что дает мне vrapper), я иду на компромисы и изучаю возможности и того и другого, не отдавая однозначного предпочтения. В конце концов я уверен, что прийду к какому-то хорошему варианту, лучше, чем текущий.
А пока, спасибо eclipse за повышение моей продуктивности.
Вполне душевно.
Самое вкусное естественно в том, что за время глючной жизни затмения под него было разработано множество плагинов, да и сам он оброс полезным функционалом. Перечислю те, которые сильно помогают мне:
- Vrapper - делает eclipse похожим на vim. До полного сходства далеко, но зато весь функционал остается в непосредственной доступности.
- Pydev - теперь мы можем редактировать и отлаживать python.
- EPIC - если вы еще не забыли о языке perl, этот плагин вам также понадобится. Меня он тут очень выручил, когда выяснилось, что модуль получения котировок вышел из строя.
- MercurialEclipse - интеграция с mercurial.
Итого, у меня почти vim, я могу править и отлаживать все что мне нужно, все это собрано в одном месте, да и в версии eclipse helios добавили хорошие возможности по созданию ссылок в рабочем пространстве, что сильно упрощает жизнь, очень удобно. В экран влезает, работает достаточно стабильно. Вот и встает вопрос, как же подружить свою любовь к vim и удобность работы с eclipse. Пока ответа нет (eclim не предлагать, хочу его использовать, но я так понимаю - придется его пилить, то, что я попробовал - это слишком мало, по сравнению с тем, что дает мне vrapper), я иду на компромисы и изучаю возможности и того и другого, не отдавая однозначного предпочтения. В конце концов я уверен, что прийду к какому-то хорошему варианту, лучше, чем текущий.
А пока, спасибо eclipse за повышение моей продуктивности.
суббота, 19 июня 2010 г.
Публикация репозиториев mercurial через связку nginx + uwsgi
В процесс развития инфраструктуры домашнего сервера решил перейти со связки
apache + subversion на более интересный вариант с nginx + mercurial. Покопался в сети и не нашел интересного мне варианта на uwsgi, поэтому разбирался сам. Результат естественно публикую для пользы коммунити.
Надо обеспечить web-доступ к репозиторию mercurial. Требуется иметь две схемы доступа, приватную и публичную. Приватная требует авторизации пользователя на чтение и запись, публичная - только на запись. Работать должно через nginx и uwsgi.
Я не рассматриваю установку nginx, uwsgi и mercurial. Предполагается, что они установлены и собраны в нужной конфигурации (т.е. nginx собран с модулем для uwsgi). Будем рассматривать только процесс настройки. Хост система у меня gentoo, кое что относится только к этому дистрибутиву, большая же часть полезна всем.
По пунктам:
1. Создание выделенного пользователя для mercurial и репозиториев под ним, запуск через uwsgi;
2. Подключение uwsgi в nginx;
3. Настройка доступа;
4. Создание сервиса для запуска uwsgi средствами gentoo.
В качестве базы я пользовался материалом отсюда.
Создаем пользователя:
Создаем конфигурации для коллекций репозиториев (все еще из под пользователя hg):
Теперь создаем wsgi-запускалки (за образец я беру пример из поставки mercurial, и заменяю там config):
Все готово к запуску uwsgi (все еще под пользователем hg):
Запускаем без указания модуля, модули будут загружаться динамически соответствующей директивой в конфигурации nginx.
Идем в /etc/nginx и правим через sudo или под root.
В /etc/nginx/nginx.conf прописываем upstream для uwsgi:
Затем в нужном нам server добавляем обработчики location для uwsgi, например так:
Перезапускаем nginx. Заходим в браузер по одному из адресов http://localhost/public или http://localhost/private и убеждаемся, что нигде не ошиблись.
Осталось настроить доступ.
До этого мы настроили сервер в localhost с полным доступом, теперь цепляемся к внешнему адресу (kilork.org) с разграничением доступа:
Стоит отметить, что в случае public доступа конфигурация немного странная (приходится писать proxy_pass http://localhost). Для private добавляется только доступ. Либо тут мне не хватает познаний, либо это какая-то ошибка с передачей параметров при ограничении доступа.
Заводим пользователей:
Перезапускаем nginx. Проверяем.
Если все работает, то осталось только привести в порядок скрипты в gentoo, так как запускать руками сервер не сильно правильно.
Подозреваю, что скоро эта часть станет неактуальной и скрипт будет идти в составе ebuild'а. Но пока его нет, сделаем простейший скрипт для упрощения себе жизни.
Создаем исполняемый файл /etc/init.d/uwsgi_hg со следующим содержимым:
1002 надо заменить на id пользователя hg. Пока скрипт ужасно грязный, как разберусь получше, или кто может поможет - улучшу обязательно.
Теперь мы можем спокойно стартовать, останавливать, добавлять в загрузку наш новый сервис:
Осталось перенести статику на nginx, переписать парочку скриптов, которые взаимодействуют с subversion на apache, и о последнем можно будет забыть. С чем я себя и поздравляю.
apache + subversion на более интересный вариант с nginx + mercurial. Покопался в сети и не нашел интересного мне варианта на uwsgi, поэтому разбирался сам. Результат естественно публикую для пользы коммунити.
1. Постановка задачи
Надо обеспечить web-доступ к репозиторию mercurial. Требуется иметь две схемы доступа, приватную и публичную. Приватная требует авторизации пользователя на чтение и запись, публичная - только на запись. Работать должно через nginx и uwsgi.
2. Решение
Я не рассматриваю установку nginx, uwsgi и mercurial. Предполагается, что они установлены и собраны в нужной конфигурации (т.е. nginx собран с модулем для uwsgi). Будем рассматривать только процесс настройки. Хост система у меня gentoo, кое что относится только к этому дистрибутиву, большая же часть полезна всем.
По пунктам:
1. Создание выделенного пользователя для mercurial и репозиториев под ним, запуск через uwsgi;
2. Подключение uwsgi в nginx;
3. Настройка доступа;
4. Создание сервиса для запуска uwsgi средствами gentoo.
2.1. Создание выделенного пользователя для mercurial и репозиториев под ним
В качестве базы я пользовался материалом отсюда.
Создаем пользователя:
sudo useradd --home-dir /home/hg -m hgДиректории:
sudo -u hg mkdir -p /home/hg/repos/{private,public}Права:sudo chmod u=rwx,g=rwx,o= -R /home/hgИнформация о пользователе и настройки push:
sudo su - hg echo -e "[ui]\nusername = kilork.org\n[web]\nallow_push = *\npush_ssl = false" > ~/.hgrc
Создаем конфигурации для коллекций репозиториев (все еще из под пользователя hg):
echo -e "[collections]\n/home/hg/repos/public = /home/hg/repos/public" > /home/hg/public.config echo -e "[collections]\n/home/hg/repos/private = /home/hg/repos/private" > /home/hg/private.config
Теперь создаем wsgi-запускалки (за образец я беру пример из поставки mercurial, и заменяю там config):
echo -e "from mercurial import demandimport; demandimport.enable()\nfrom mercurial.hgweb.hgwebdir_mod import hgwebdir\n\napplication = hgwebdir('public.config')" > /home/hg/public.py
echo -e "from mercurial import demandimport; demandimport.enable()\nfrom mercurial.hgweb.hgwebdir_mod import hgwebdir\n\napplication = hgwebdir('private.config')" > /home/hg/private.pyВсе готово к запуску uwsgi (все еще под пользователем hg):
uwsgi -s /tmp/uwsgi.sock -C -m -M
Запускаем без указания модуля, модули будут загружаться динамически соответствующей директивой в конфигурации nginx.
2.2. Подключение uwsgi в nginx
Идем в /etc/nginx и правим через sudo или под root.
В /etc/nginx/nginx.conf прописываем upstream для uwsgi:
upstream uwsgicluster {
server unix:///tmp/uwsgi.sock;
}Затем в нужном нам server добавляем обработчики location для uwsgi, например так:
server {
listen localhost;
server_name localhost;
location /public {
uwsgi_pass uwsgicluster;
include uwsgi_params;
uwsgi_param SCRIPT_NAME /public;
uwsgi_param UWSGI_SCRIPT public;
uwsgi_modifier1 30;
}
location /private {
uwsgi_pass uwsgicluster;
include uwsgi_params;
uwsgi_param SCRIPT_NAME /private;
uwsgi_param UWSGI_SCRIPT private;
uwsgi_modifier1 30;
}
}Перезапускаем nginx. Заходим в браузер по одному из адресов http://localhost/public или http://localhost/private и убеждаемся, что нигде не ошиблись.
Осталось настроить доступ.
2.3. Настройка доступа
До этого мы настроили сервер в localhost с полным доступом, теперь цепляемся к внешнему адресу (kilork.org) с разграничением доступа:
server {
listen kilork.org;
server_name kilork.org www.kilork.org;
location /public {
limit_except GET {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.hg.public.htpasswd;
proxy_pass http://localhost;
}
uwsgi_pass uwsgicluster;
include uwsgi_params;
uwsgi_param SCRIPT_NAME /public;
uwsgi_param UWSGI_SCRIPT public;
uwsgi_modifier1 30;
}
location /private {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.hg.private.htpasswd;
uwsgi_pass uwsgicluster;
include uwsgi_params;
uwsgi_param SCRIPT_NAME /private;
uwsgi_param UWSGI_SCRIPT private;
uwsgi_modifier1 30;
}
}Стоит отметить, что в случае public доступа конфигурация немного странная (приходится писать proxy_pass http://localhost). Для private добавляется только доступ. Либо тут мне не хватает познаний, либо это какая-то ошибка с передачей параметров при ограничении доступа.
Заводим пользователей:
sudo htpasswd -c /etc/nginx/.hg.public.htpasswd hguser sudo htpasswd -c /etc/nginx/.hg.private.htpasswd hguser sudo htpasswd /etc/nginx/.hg.private.htpasswd hguser2
Перезапускаем nginx. Проверяем.
Если все работает, то осталось только привести в порядок скрипты в gentoo, так как запускать руками сервер не сильно правильно.
2.4. Создание сервиса для запуска uwsgi средствами gentoo
Подозреваю, что скоро эта часть станет неактуальной и скрипт будет идти в составе ebuild'а. Но пока его нет, сделаем простейший скрипт для упрощения себе жизни.
Создаем исполняемый файл /etc/init.d/uwsgi_hg со следующим содержимым:
#!/sbin/runscript
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
depend() {
need net
}
start() {
ebegin "Start uwsgi for hg"
cd /home/hg
start-stop-daemon --start \
--exec /usr/bin/uwsgi -- --uid 1002 --pidfile /home/hg/uwsgi_hg.pid -s /tmp/uwsgi.sock -C -m -M -d /home/hg/uwsgi_hg.log
eend $? "Failed to start uwsgi for hg"
}
stop() {
ebegin "Stopping uwsgi for hg"
if [ -f /home/hg/uwsgi_hg.pid ]; then
pkill -9 uwsgi &> /dev/null
rm /home/hg/uwsgi_hg.pid
fi
eend $? "Failed to stop uwsgi for hg"
}
1002 надо заменить на id пользователя hg. Пока скрипт ужасно грязный, как разберусь получше, или кто может поможет - улучшу обязательно.
Теперь мы можем спокойно стартовать, останавливать, добавлять в загрузку наш новый сервис:
sudo rc-config start uwsgi_hg sudo rc-config stop uwsgi_hg sudo rc-config add uwsgi_hg default
Осталось перенести статику на nginx, переписать парочку скриптов, которые взаимодействуют с subversion на apache, и о последнем можно будет забыть. С чем я себя и поздравляю.
Подписаться на:
Сообщения (Atom)
