IBM iにSubversionサーバーを設定 その2
前回の続きで、IBMi(AS/400)のSVNデーモンの起動とチェックアウト&コミットをします。
SVNデーモンの起動
インストールの際に、「OPENLIB/OPENSYS」(※適宜 QGPL/QBATCHなどに置き換えて下さい)というサブシステムで、自動実行される様にしたので、”ENDSBS”でサブシステムを落として、”STRSBS”で再起動をします。
しかし、再起動してもSVNデーモンが上がらない。:-(
サブシステムの自動実行ジョブを確認すると、ジョブ記述が”SUBVERSION/SVNSERVE”にあるので確認すると...。
JOBDのジョブ待ち行列が「QGPL/QPGMR」になってる!インストールの時に指定した、”OPENLIB/OPENSYS”は、一体何だったんだ?夢か幻か?ADDAJEだけは、やってくれたけど、肝心のジョブ記述が、存在しないジョブ待ち行列じゃ意味が無いですハイ。
CHGJOBDで「OPENLIB/OPENSYS」に変更します。
しかし、JOBDの値変えて、STRSBSしても上手くいかない??
どうも”SUBVERSION(インストールライブラリ)/STRSVNSVR”が動いているようなので、次のように手動で実行してみると...
「SUBVERSION/STRSVNSVR PATH('/Subversion/repositories') PORT(3690) 」
「バッチジョブでやりなさい!」とお叱り受けたので、SBMJOBでやってみると動くではないですか!
もう考えるのは面倒臭くなったので、起動用のCLPを以下の様に1本作ります。
/*********************************************************************/ /* OPNELIB/STRSVND : SVN デーモン開始 */ /* 2009/11/25 WRITE BY ushida */ /*********************************************************************/ /* 変数定義 */ /*********************************************************************/ PGM DCL VAR(&CCSID ) TYPE(*DEC) LEN(5 0) /* 元 CCSID */ RTVJOBA CCSID(&CCSID) CHGJOB CCSID(5035) RMVLIBLE LIB(SUBVERSION) MONMSG MSGID(CPF0000) ADDLIBLE LIB(SUBVERSION) MONMSG MSGID(CPF0000) RMVLIBLE LIB(QTEMP) MONMSG MSGID(CPF0000) ADDLIBLE LIB(QTEMP) MONMSG MSGID(CPF0000) /* デーモン開始 */ SUBVERSION/STRSVNSVR PATH('/Subversion/repositories') + PORT(3690) CHGJOB CCSID(&CCSID) END: RETURN ENDPGM
”SUBVERSION/SVNSERVE”のジョブ記述をコピーして、”要求データまたはコマンド”を「CALL さっき作ったプログラム」にします。
作ったジョブ記述をADDAJEで、サブシステムの自動実行ジョブに登録します。
これでどうだ!とやったら上手く動きました。
(※後で気づいたのですが、自動で作られた、”SVNOWNER”と”SVNGROUP”のユーザーCCSIDが”*SYSVAL(5026)”だからか駄目だったのかな?自分は、オープン系の時には、CLPでお決まりのように、”5035”のCHGJOBを入れてあるから?上手くいった?)
メニューの<3>のインポート機能は、途中でコケます。Cのプログラムを見る元気は、流石にないので、スルーします。
クライアントソフトでも出来るから、必要ないかもしれません。
アクセス許可の設定
とりあえず動作確認の意味で、「svn://」では無く、IFSをファイル共有で試しました。
直ぐ忘れるので、余分ですが、
になります。
まずは、適当なディレクトリをインポートします。
「file://192.168.xxx.xxx/TestRepos」で、何事も無く普通にインポート&チェックアウト&コミット出来ました。
サーバー運用で、流石にこれは、まずいので、Basic認証から順にトライします。
「リポジトリ/conf/svnserve.conf」を以下の様に変更します。
#「リポジトリ/conf/svnserve.conf」 [general] # anon-access :匿名アクセス ,auth-access:権限アクセス # (read ) :読取可能 # (write) :読取書込み可能 # (none) :アクセス拒否 # anon-access = read # auth-access = write anon-access = none auth-access = write # password-db :パスワードファイル「絶対パス」又は「相対パス」 # password-db = passwd password-db = userlist
ユーザーファイル「リポジトリ/conf/userlist」(省略はpasswd)を以下の様に作成します。
#「リポジトリ/conf/userlist」 [users] # harry = harryssecret # sally = sallyssecret username = password
これで、クライアント側でユーザーパスワードを聞いてくるようになります。
ただこれだと、Basic認証を通過したユーザー全てが、Write権限になってしまうので、次にパスベース認証をやってみました。
authzを使って、ユーザ別にアクセスを制御します。「リポジトリ/conf/svnserve.conf」を以下の様に変更します。
#「リポジトリ/conf/svnserve.conf」 [general] -- 省略 -- # anon-access :匿名アクセス権,auth-access:認証者のアクセス権 anon-access = none # auth-access = write # authz-db :ユーザー毎のアクセス権 authz-db = authz
「authz」を使う時点で、「auth-access」は無効になっているようですが、一応コメントに。
ユーザーリスト(「リポジトリ/conf/userlist」)はこんな感じに変更。
#「リポジトリ/conf/userlist」 [users] admin = password user = password poweruser = password
でもって以下が、「authz(「リポジトリ/conf/authz」)」。リポジトリ毎やディレクトリ毎の設定も出来ます。
[groups] #グループ定義。複数ユーザーはカンマ区切 admins = admin,poweruser users = user #ユーザー毎許可(r:read | w:write) [/project1/trunk] # admin = rw # poweruser = rw # user = r # * = #グループ許可 [/] @admins = rw @users = r * = # リポジトリ指定で許可 # [repository:/project/trunk] # @admins = rw # * = r
チェックアウト&コミット
これで、チェックアウト&コミットのユーザー毎のアクセス制御が出来ました。ログもちゃんと表示できました。
でここまできたら、「svn+ssh」でやりたくて、挑戦しましたが、結果は今のところ駄目でした。
方法としては、以下の様な感じなのかな?と思いつつも...。
1.グループユーザープロファイルの「SVNGROUP」を、SSHのユーザーに設定。 2.PASEシェルで以下を実行 # cd /Subversion/repositories/TestSSHRepos(リポジトリ名) # chmod -R g+s . # umask 002 3.認証鍵のペア作って。「~/.ssh/authorized_keys」に”svnserveコマンド”と”公開鍵”を追記。 4.cygwinかputtyを使って、連携?
考えていたのですが、”3”の”svnserve”コマンドが、AS/400版Subversionは、
「command="/QSYS.LIB/SUBVERSION.LIB/SVNSERVE.PGM -t -r /Subversion/repositories” ssh-rsa(公開鍵)」
これって、*PGMだから、PASEシェルからは動かない?QSHからは動きそうだけど、SSHはPASE環境だしのジレンマで諦めました。
また何か良い方法を考えます。