過去のトップページ日記2011.01.24
バナナ。現在栽培されているキャベンディッシュ種は不稔性で株分けなどで増やされているため、遺伝的多様性が無く、同じ病原体で世界中のバナナが絶滅する恐れがあるそうです。 実際に、過去にパナマ病でグロスミッチェル種が壊滅した事があり、21世紀になって、その変異体がキャベンディッシュ種に感染したと報道がされています。主食にしている人が多いアフリカバナナに感染すれば、生活に打撃を受ける人も多いと危惧されていて、遺伝子工学を駆使してパナマ病に耐性のある品種を作る事が試みられているようです(The Scientist)。 農作物は品種改良が進みやすいものですが、バナナは改良が行われて来なかったようです。バナナは完全食品と言われますが、商品作物としても完成度が高かったと言う事みたいですね。 Trackback Ping-URL: http://uncorrelated.no-ip.com/cgi-bin/trackback/20110124あらしの為のTipshttp経由で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のリモート・リポジトリの共有方法としては、他に次のようなものがある。
慣れてしまえばどの運用方法でも大きな問題は起きないが、初期導入は、共有ユーザ・アカウントを作成するか、CGIで運用するのが簡単だ。利用者にsshを使えない人間がいるときは、hgweb.cgiはとても重宝する選択肢になる。 え、そんな人いるのかって? 長い人生では、社会の多様性を感じることもありますよヽ(´д`)ノ 参考ページ注意
|
過去ログ |