過去のトップページ

日記

2011.01.24
バナナ

バナナ。現在栽培されているキャベンディッシュ種は不稔性で株分けなどで増やされているため、遺伝的多様性が無く、同じ病原体で世界中のバナナが絶滅する恐れがあるそうです。

実際に、過去にパナマ病でグロスミッチェル種が壊滅した事があり、21世紀になって、その変異体がキャベンディッシュ種に感染したと報道がされています。主食にしている人が多いアフリカバナナに感染すれば、生活に打撃を受ける人も多いと危惧されていて、遺伝子工学を駆使してパナマ病に耐性のある品種を作る事が試みられているようです(The Scientist)。

農作物は品種改良が進みやすいものですが、バナナは改良が行われて来なかったようです。バナナは完全食品と言われますが、商品作物としても完成度が高かったと言う事みたいですね。

Trackback Ping-URL: http://uncorrelated.no-ip.com/cgi-bin/trackback/20110124

あらしの為のTips

http経由でMercurialのリポジトリを共有する。

分散バージョン管理システムでは、sshを通して共有リポジトリにpush/pullを行う事が多いと思うが、sshの鍵に慣れないプログラマやデザイナもいて、それが運用上の支障になるときがある。そういう時は、GitではWebDAV、MercurialではCGIによるhttp通信が可能だ。

特にMercurialのCGIは、(1)専用プロトコルでデータ通信量が少ない、(2)ウェブ・サーバーのモジュール(mod_dav)のインストールと設定が不要、(3)WebDAVのプロトコルがFirewall等に遮断されている場合も利用可能というアドバンテージがある。

1. ウェブサーバー(Apache)の設定

hgweb.cgiを置くディレクティブは、CGIが動くようにする必要がある。また、BASIC認証などで、アクセス制限を行う必要もあるだろう。

<Location "/hgweb">
  SetHandler cgi-script
  Options +ExecCGI
  AuthType Basic
  AuthName “Mercurial Repositories”
  AuthUserFile /var/www/cgi-dat/hgpwd
  AuthGroupFile /dev/null
  Require valid-user
</Location>

上の例では、パスワード・ファイルが/var/www/cgi-dat/hgpwd、httpの絶対パスが/hgwebを仮定した設定例だ。パスワード・ファイルの作成方法は、以下のようになる。

cd /var/www/cgi-dat
# 新規作成
htpasswd -c hgpwd user1
# 追加
htpasswd hgpwd user2

もちろんBASIC認証は、pwauthやデータベースを使う事もできる。

2. 共有リポジトリを作成

hg-initやhg-cloneで、共有リポジトリを作成する。Apacheユーザ(e.g. www-data)が読み書きできる必要がある(suEXECでApacheユーザー以外が読み書きする場合も、同様にそのユーザーが、読み書きできるようにする)。

cd /var/www/htdocs
mkdir hgweb
chmod 775 hgweb
mkdir /var/hg; mkdir /var/hg/hgweb
chmod 1777 /var/hg
cd /var/hg/hgweb
hg init
chown -R apache /var/hg/hgweb

リポジトリ作成後、.hg/hgrcに以下を追加しておく。ファイルが存在しない場合は、作成を行うこと。

[web]
push_ssl = false
allow_push = *
encoding=UTF-8

SSLが使えるときはpush_ssl = trueに、特定のユーザーだけを許可する場合はallow_pushにカンマ区切りでBASIC認証のユーザー名を追加する。

chown -R www-data:www-data /var/hg/hgweb

3. rootが共有リポジトリを編集できるように設定

Apacheユーザ(例ではwww-data)でログインできない場合は、共有リポジトリでchangesetを消したり、changesetを統合したり、rebaseを行うときは、rootで編集をする必要があるだろう。そのときは/root/.hgrcに以下の記述を追加しておく。

[extensions]
mq=

[trusted]
users=www-data

もし上述の設定が無いと、"not trusting file"となり、編集ができない場合がある。なお、rootで編集した場合は、root権限のオブジェクトが追加されている可能性があるので、chmod -R www-dataと所有権を再設定しておく方が無難。

4. hgweb.cgiのコピーと設定

locate hgweb.cgiをすると、Mercurialをインストール時にインストールされたhgweb.cgiの場所が分かるのでコピー・編集を行う。

cp /usr/share/doc/mercurial-common/examples/hgweb.cgi /var/www/htdocs/hgweb/Project1

CGIファイルの名称は任意のもので問題ないが、プロジェクト名と同じにしておくほうが、cloneするときに便利だ。ここではProject1とした。

もしインストール位置が不明でも、以下のように中身は単純なものだから、作成しても良い。

#!/usr/bin/env python
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb, wsgicgi
# 第1引数がリポジトリ位置、第2引数がリポジトリ名
application = hgweb("/var/hg/hgweb", "Repository Name")
wsgicgi.launch(application)

インストールしたものをコピーするにしろ、上記をコピペするにしろ、リポジトリ位置とリポジトリ名は設定にあわせて変更する必要がある。

5. クライアント側でcloneを行う

最後に動作確認でcloneを行う。パーミッションを確認する意味では、branch名を設定し、.hgignore等を追加してからpushもしてみた方が良い。

hg clone http://user1:password@example.com/hgweb/Project1

まとめ

TortoiseHgやMacHg、Eclipseで簡単に利用する事ができる。

公開鍵認証方式のsshにはセキュリティーの面で劣るが、TracやRedmineでソースコードが見られることを考えると、SSLを通せば概ね問題ない。パスワードの運用が問題になる場合は、pwauthなどの認証モジュールを併用すれば良い。

なお、Mercurialのリモート・リポジトリの共有方法としては、他に次のようなものがある。

(1) 共有ユーザ・アカウントを作成し、そこに複数の利用者のssh公開鍵を登録

誰がログインしたかが分からなくなるが、外部からの攻撃には強い運用方法。比較的、運用上のミスも発生しづらい。

(2) 共有リポジトリ用のユーザー・グループを作成

共有リポジトリのグループを作成し、利用者をそのグループに参加させた上で、umaskを0002にセットしておく。また、共有リポジトリのグループを共有リポジトリ用に設定して、共有リポジトリの権限をユーザ、グループが読み書き実行可能で、set group idを付与した状態(chmod 4775)にしておく。あるユーザにumaskの設定ミスがあると、他のユーザが更新不可能に陥る可能性がある。

慣れてしまえばどの運用方法でも大きな問題は起きないが、初期導入は、共有ユーザ・アカウントを作成するか、CGIで運用するのが簡単だ。利用者にsshを使えない人間がいるときは、hgweb.cgiはとても重宝する選択肢になる。

え、そんな人いるのかって? 長い人生では、社会の多様性を感じることもありますよヽ(´д`)ノ

参考ページ

  1. JapaneseCGI_Install - Mercurial

注意

  1. 本ページは、本当に投げやりに書いています。
  2. 本サイトは、24時間運用ですが、事前に告知無くサーバーが停止するときもあります。必要な情報はメモをしてください。
  3. チャット友達へのページです。不愉快な思いをしても著者は責任を負いません。

過去ログ
最新版
01.24
01.17
12.25
10.23
05.08
04.11
02.21
02.15
...MORE!

全文検索
画像板
投票CGI
ゲーム
パズル
マーカー
会員登録
会員専用

RSS1.0
RSS 1.0