500件の特許をオープンソース・ソフトウエアに対し許諾

http://itpro.nikkeibp.co.jp/free/ITPro/NEWS/20050111/154581/

どういう特許かみてないからわからないけど(見ても多分わからないけど。。)かっこいいなぁ、ふとっぱらだなぁ。

けど、

IBMは2004年に3248件の米国特許を取得。12年間連続で米国で最も多くの特許を取得したという。

ふとっぱら?

インストール

http://summersoft.fay.ar.us/pub/subversion/latest/redhat-8.0/bin/
から、以下のファイルを落としてきて、

それ、インストール

rpm -ivh apr-0.9.5-0.2.i386.rpm
rpm -ivh apr-util-0.9.5-0.1.i386.rpm
rpm -ivh neon-0.24.7-1.i386.rpm
rpm -ivh subversion-1.1.3-1.rh80.i386.rpm

めも。

$ svn --version
svn, バージョン 1.1.3 (r12730)
   コンパイル日時: Jan 14 2005, 22:30:10

Copyright (C) 2000-2004 CollabNet.
Subversion はオープンソースソフトウェアです。
http://subversion.tigris.org/ を参照してください。
この製品には、CollabNet (http://www.Collab.Net/) によって開発されたソフトウェア
が含まれています。

以下のリポジトリアクセス (RA) モジュールが利用できます:

 *p1* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
  - 'http' スキーマを操作します
  - 'https' スキーマを操作します
 *p2* ra_local : Module for accessing a repository on local disk.
  - 'file' スキーマを操作します
 *p3* ra_svn : Module for accessing a repository using the svn network protocol.
  - 'svn' スキーマを操作します

まずは。。

以下、ここ
http://subversion.bluegate.org/doc/ch01s07.html
を見ながら作業。

リポジトリを作る。

$ svnadmin create /home/svn/repository/
$ ls
./  ../  README.txt  conf/  dav/  db/  format  hooks/  locks/

ファイルをインポート

以下のファイルとディレクトリをつくってから、

  • /home/svn/temp/trunk/hoge1.txt
  • /home/svn/temp/trunk/hoge2.txt
  • /home/svn/temp/branches
  • /home/svn/temp/tags

そして、インポート

$ svn import /home/svn/temp/ file:///home/svn/repository -m "initial"
追加しています              /home/svn/temp/trunk
追加しています              /home/svn/temp/trunk/hoge1.txt
追加しています              /home/svn/temp/trunk/hoge2.txt
追加しています              /home/svn/temp/branches
追加しています              /home/svn/temp/tags

リビジョン 1 をコミットしました。

最初、"-m"をつけないでやったら怒られたけど、まぁよしとする。

インポートしたのを、チェックアウトしてみる。

$pwd
/home/svn/workspace
$ls
./  ../
$ svn checkout file:///home/svn/repository/trunk
A  trunk/hoge1.txt
A  trunk/hoge2.txt
リビジョン 1 をチェックアウトしました。
$ls
./  ../  trunk/

trunk/hoge1.txtを適当に編集してから。。

$svn status
M      hoge1.txt

$svn commit -m "initial commit!"
送信しています              hoge1.txt
ファイルのデータを送信中です.
リビジョン 2 をコミットしました。

おけ。

svn commitの前に、環境変数SVN_EDITORに"vi"を設定しておくと、"-m"オプションがなくても怒られない。
ただし、svn commitするとviが立ち上がるようになるので、そこで適当にメッセージを入力する。

次は自分のPCからリポジトリを見れるようにサーバを立てよう。

サーバの種類

http://subversion.bluegate.org/doc/ch06.html

Subversionでは何もしなくても、file:///〜 でローカルからリポジトリにアクセスできる。
リモートからのアクセスの方法は以下の2つ。

両方同時に設定、なんてこともできるみたいだけど、まずは、初期設定が"かなり簡単"とあるsvnserveをやってみる。

svnserveを使う。

http://subversion.bluegate.org/doc/ch06s03.html

$svnserve -d -r /home/svn/repository/

とりあえず、リポジトリを限定してsvnserveをデーモン起動。


Telnetしてみると、

>telnet XXX.XXX.XXX.XXX 3690
( success ( 1 2 ( ANONYMOUS ) ( edit-pipeline ) ) )

なんかよくわからないのが返ってくるけど、とりあえずサーバは動いているっぽい。


というわけで、自マシンのTurtoiseSVNで、

svn://XXX.XXX.XXX.XXX/trunk

リポジトリのURLに設定してチェックアウトする。

svnserveの認証と認可の設定をする。

上に続けて、ファイルを編集して、コミットしようとしたら、

Commit failed (detailes follow)
Connection is read-only

と怒られる。。

どうやら、リポジトリにあるconf/svnserve.confをいじる必要があるらしい。
とりあえず、以下の設定をしたい。

  1. AnonymouseユーザはReadOnly
  2. 認証されたユーザは書き込みできる。
  3. tagsディレクトリは認証されていようがいまいがReadOnly


まず、「AnonymouseユーザはReadOnly」「認証されたユーザは書き込みできる。」だが、これはデフォルトの振る舞いなので、わざわざ設定する必要はないが、一応、明示的に書いておく。

[/home/svn/repository/conf/svnserve.conf]

[general]
anon-access=read
auth-access=write

Anonymouseユーザを拒否したければ、anon-access=noneとすればいい。


あとは、ユーザの定義。
svnserve.confを以下のように編集。

[/home/svn/repository/conf/svnserve.conf]

[general]
anon-access=read
auth-access=write
password-db=hogemoge.pwd
realm=test relam

password-dbには、ユーザIDとそのパスワードを記述するためのファイル名を書く。上記の通りにかくと、svnserve.confと同じディレクトリにhogemoge.pwdというファイルを用意すればよい。
以下、hogemoge.pwdの内容。

[/home/svn/repository/conf/hogemoge.conf]

[users]
#USER=PASSWORD
svn=xxxxxx
masakas=xxxxxx

特に、svnserveを起動しなおすとかはしなくてもいいみたい。
これで、自マシンからコミットしてみるとユーザとパスワードを求められるので、入力すると、コミットが成功する。

特定のディレクトリにアクセス制御を設ける。

あとは、「tagsディレクトリは認証されていようがいまいがReadOnly」だけなんだけど、

リポジトリ中の特定のパスに対する詳細なアクセス制御は存在しません。多くのプロジェクトとサイトではこのレベルのアクセス制御は十分すぎるものです。しかしもしディレクトリごとのアクセス制御が必要なら、サーバプロセスとしてsvnserve のかわりに Apache を利用する必要があるでしょう。

とあり、svnserveにはそんな機能はないらしい。

しかし、pre-commitフックというものを使うと実現できるらしい。(以下の引用)

pre-commit フックを使ってファイルパス名ごとの書き込みアクセス制御を強制することができ ます。Subversion 配布パッケージには commit-access-control.pl と、より洗練された sophisticated svnperms.py スクリプトが含ま れていて、pre-commitスクリプトとして使うことができます。

けど、commit-access-control.plやら、svnperms.pyがなかったので、適当に見てみたら、リポジトリ内のhooksディレクトリにそれっぽいのがあった。

$ls /home/svn/repository/hooks/
./  ../  post-commit.tmpl  post-revprop-change.tmpl  pre-commit.tmpl  pre-revprop-change.tmpl  start-commit.tmpl

そういうわけで、pre-commit.tmplをいじって、自前のフックを作ってみよう。

続きは、明日。。。