CentOS6.3(6.2?)にMercurialをインストールする。
この際、特にWEBサーバーのインストールに躓いたのでメモを残す。
バージョン違いなのか、ネット上の情報通りにやってもうまくいかない。
ただ、認証方法周りはあまり動作確認していなかったかも。結構前の手順メモ。
やりたかったことはhttp(s)プロトコル経由でhgコマンドを動かし、URLにユーザー名を含めた認証にしたかったけど、
この手順で本当にできたかは記憶が定かではない。場合によっては修正や追加が必要かも。
ポート開放
# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10443 -j ACCEPT
# useradd -m hg
# passwd hg
パスワード
# gpasswd -a apache hg
# yum install python-devel
# yum install make
# yum install gcc
# wget http://peak.telecommunity.com/dist/ez_setup.py
# python ez_setup.py
# easy_install -U mercurial
メモ:hgweb.cgiインストール場所
/usr/share/doc/mercurial-1.4/hgweb.cgi
メモ:apacheインストール場所(デフォルト)
/etc/httpd
# mkdir /var/www/hg
# su hg
# mkdir /var/www/hg/test
# chmod 775 /var/www/hg/test
# cd /var/www/hg/test
# hg init
# vi /var/www/hg/test/.hg/hgrc
[web]
push_ssl = false
allow_push = *
contact = xxx@xxx.xxx
name = xxxx
description = xxxx
# vi /var/www/hg/hgweb.config
[paths]
test = /var/www/hg/test
簡易サーバー
# hg serve -p 8080 --webdir-conf /var/www/hg/hgweb.config &
http://localhost:8080/
apacheサーバー
# mkdir /var/www/cgi-bin/hg
# cp /usr/share/doc/mercurial-1.4/hgweb.cgi /var/www/cgi-bin/hg/.
# chown apache:apache /var/www/cgi-bin/hg/hgweb.cgi
# chmod 755 /var/www/cgi-bin/hg/hgweb.cgi
# vi /var/www/cgi-bin/hg/hgweb.cgi
コメントアウト解除
--------------------------------------------------------------------------------------
import sys
--------------------------------------------------------------------------------------
コメントアウト
--------------------------------------------------------------------------------------
#sys.path.insert(0, "/usr/lib/python2.6/site-packages/")
--------------------------------------------------------------------------------------
追記
--------------------------------------------------------------------------------------
config = "/var/www/hg/hgweb.config"
--------------------------------------------------------------------------------------
コメントアウト解除
--------------------------------------------------------------------------------------
import os
os.environ["HGENCODING"] = "UTF-8"
--------------------------------------------------------------------------------------
そのしたに追記
--------------------------------------------------------------------------------------
os.environ["HGRCPATH"] = "/etc/httpd/conf/hgrc"
--------------------------------------------------------------------------------------
コメントアウト
--------------------------------------------------------------------------------------
#from mercurial.hgweb.hgweb_mod import hgweb
#import mercurial.hgweb.wsgicgi as wsgicgi
--------------------------------------------------------------------------------------
追記
--------------------------------------------------------------------------------------
from mercurial.hgweb import hgweb, wsgicgi
application = hgweb(config)
--------------------------------------------------------------------------------------
結果
--------------------------------------------------------------------------------------
#!/usr/bin/python
import sys
from mercurial import demandimport; demandimport.enable()
config = "/var/www/hg/hgweb.config"
import os
os.environ["HGENCODING"] = "UTF-8"
os.environ["HGRCAPATH"] = "/etc/httpd/conf/hgrc"
from mercurial.hgweb import hgweb, wsgicgi
application = hgweb(config)
wsgicgi.launch(application)
--------------------------------------------------------------------------------------
# vi /etc/httpd/conf/hgrc
[trusted]
users = hg
groups = hg
# cd /var/www/hg/test
# chmod g+w .hg .hg/* .hg/store/*
# chmod g+s .hg .hg/store .hg/store/data
参考:
http://d.hatena.ne.jp/kokutoto/20090505/p1
http://d.hatena.ne.jp/eldesh/20110125/1295938971
http://d.hatena.ne.jp/takuya_1st/20120120/1327028570
http://blog.oklab.org/?tag=mercurial
http://d.hatena.ne.jp/tututen/20100721/1279738184
自己証明(適当、Redmineインストールの記事の方が適切)
# cd /etc/httpd/conf
# openssl genrsa -out server.key 1024
# openssl req -new -key server.key -out server.csr -config /etc/pki/tls/openssl.cnf
パスワード
# openssl x509 -in server.csr -out server.crt -req -signkey server.key
# vi /etc/httpd/conf/httpd.conf
追記・・・だけど、もとからconfは全て読むしmod_sslはssl.confに書かれてるし、作業の必要なし
--------------------------------------------------------------------------------------
LoadModule ssl_module modules/mod_ssl.so
include /etc/httpd/conf.d/ssl.conf
--------------------------------------------------------------------------------------
変更(http用の設定だけどポートは閉じるので意味なし)
--------------------------------------------------------------------------------------
#Listen 10080
ServerName localhost:10080
<Directory "/var/www/html/">
AuthDigestProvider file
AuthType Digest
AuthName "Secret Zone"
AuthDigestDomain /
AuthUserFile /etc/httpd/.htdigest
Require valid-user
・・・
</Directory>
--------------------------------------------------------------------------------------
# yum install mod_ssl
# vi /etc/httpd/conf.d/ssl.conf
変更
--------------------------------------------------------------------------------------
Listen 10443
--------------------------------------------------------------------------------------
新規
--------------------------------------------------------------------------------------
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
--------------------------------------------------------------------------------------
変更
--------------------------------------------------------------------------------------
<VirtualHost _default_:10443>
--------------------------------------------------------------------------------------
変更
--------------------------------------------------------------------------------------
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server.key
--------------------------------------------------------------------------------------
追記
--------------------------------------------------------------------------------------
<Directory "/var/www/cgi-bin/">
AuthDigestProvider file
AuthType Digest
AuthName "Secret Zone"
AuthDigestDomain /
AuthUserFile /etc/httpd/.htdigest
Require valid-user
・・・
</Directory>
--------------------------------------------------------------------------------------
# htdigest -c /etc/httpd/.htdigest 'Secret Zone' hg
--------------------------------------------------------------------------------------
パスワード入力:
--------------------------------------------------------------------------------------
このままだと10443とかにポート変更した影響でSELinuxが邪魔する
# yum install policycoreutils-python
確認
# semanage port -l | grep http
# semanage port -a -t http_port_t -p tcp 10080
# semanage port -a -t http_port_t -p tcp 10443
# /etc/init.d/httpd restart
接続確認
https://localhost:10443/cgi-bin/hg/hgweb.cgi
hg clone
ソース:https://hg@localhost:10443/cgi-bin/hg/hgweb.cgi/test/
ソース:ssh://hg@localhost//var/www/hg/test