Mercurial, webからリポジトリ見れるようにした

普段はsshで十分なのですが、だれかにcloneさせたいとか、pushもいちいち秘密鍵作ってもらったりとかめんどくさい。エンジニアならそうでもないんだけど。

とりあえずブラウザから見れて、hg clone http://example.com/hg/repo-name な感じにできるところまで。

mkdir -p /var/www/hg
cd /var/www/hg
cp /usr/share/doc/mercurial-1.5/contrib/hgwebdir.wsgi ./
vi /etc/httpd/conf.d/hg.conf

<VirtualHost *:80>
Servername hg.runeleaf.net
ErrorLog logs/hg.runeleaf.net-error_log
CustomLog logs/hg.runeleaf.net-access_log combined

WSGIScriptAlias /hg "/var/www/hg/hgwebdir.wsgi"

<Location /hg>
  AuthUserFile /path/to/.htpasswd
  AuthGroupFile /dev/null
  AuthName "Mercurial Server"
  AuthType Basic
  require valid-user
</Location>

<Directory /var/ww/hg>
  Options ExecCGI FollowSymlinks
  AddHandler wsgi-script .wsgi
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>
</VirtualHost>

ベーシック認証などを実際にpushするユーザー名で設定しておくと幸せになれるって話らしい。

mkdir -p /var/hg/repos/hoge
cd /var/hg/repos/hoge
hg init
cd /var/hg
vi hgweb.config

[web]
allow_push = username
push_ssl = true

[paths]
/ = /var/hg/repos/**

allow_pushでpushユーザーを制限したり、push_sslでhttps経由じゃないとだめとか。falseにするとhttpでpushできるけどオススメしているサイトはなかった。

hgweb.configの設定をwsgiスクリプトにする。

vi /var/www/hg/hgwebdir.wsgi

# コメント外す
import os
os.environ["HGENCODING"] = "UTF-8"

application = hgwebdir('/var/hg/hgweb.config')

httpd再起動して完了。

http://hg.runeleaf.net/hg にアクセスするとリポジトリの一覧がみれたり、
hg clone http://hg.runeleaf.net/hg/hoge
とかでcloneできたり。

まあpush権限なんて普通に考えたらssh経由でいいよねぇ・・

Python, rubyのsinatraっぽいjuno入れた

インスタンスをcentos5.4から5.5に変更してたらすべて消えてしまったので、じゃあ今度はsinatraじゃないものでやろう!とポジティブシンキングで涙を飲んだ記録です。

ちなみにpythonは2.7を入れてます。/usr/local以下です。記憶してない。

easy_install juno

とすると、まず他にインストールするものがあるだろうと言われるので、それらを入れます。

easy_install Jinja2
easy_install SQLAlchemy
easy_install Mako
easy_install Werkzeug
easy_install juno

アプリケーションを作成します。

mkdir -p /var/www/runeleaf.jp/juno
cd /var/www/runeleaf.jp/juno
vi application.py
#!/usr/local/bin/python
from juno import *

init({
  'use_debugger': True,
  })

@route('/')
def index(web):
  template('home.html', title="runeleaf")

config("mode", "wsgi")
application = run()

mkdir -p static/css
mkdir templates

vi static/css/_.css
vi templates/home.html

mod_wsgiを使ってapache2で見れるようにします。

yum install mod_wsgi
vi /etc/httpd/conf.d/wsgi.conf
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonPath /usr/local/lib/python2.7/site-packages

バーチャルホストに設定します。

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName runeleaf.net
    WSGIScriptAlias / /var/www/runeleaf.jp/juno/application.py
    ErrorLog logs/runeleaf.net-error_log
    CustomLog logs/runeleaf.net-access_log combined
</VirtualHost>

httpd再起動して完了。