svn+sshの設定
公開鍵認証も設定したので、開発するにはやっぱりSubversionがほしいので、svn+sshでアクセスできるように設定します。
まずはインストールと確認
$ sudo yum install subversion $ svn --version
次は、http://wiki.mmj.jp/index.php?Service%2FSubversion#c2d14f3c を参考に設定していきます。
まずsvnユーザーを作成
# mkdir /var/svn # groupadd svn # useradd -g svn -d /var/svn svn useradd: warning: the home directory already exists. Not copying any file from skel directory into it. # chown svn:svn /var/svn # ls -la /var/svn/ total 8 drwxr-xr-x 2 svn svn 4096 Apr 11 16:59 . drwxr-xr-x 22 root root 4096 Apr 11 16:59 ..
次にsvnのリポジトリにアクセスするユーザーをグループに追加してコミットできるようにします。
usermod -a -G svn foo
リポジトリを作成します。
# su svn $ svnadmin create /var/svn/baz-repo $ ls -la /var/svn/ total 12 drwxr-xr-x 3 svn svn 4096 Apr 11 17:02 . drwxr-xr-x 22 root root 4096 Apr 11 16:59 .. drwxr-xr-x 7 svn svn 4096 Apr 11 17:02 baz-repo $
umaskを確認します。002なら要らないらしいのですが、0022と出ました。
$ umask 0022
$ cd /var/svn/baz-repo $ ls -la db/ total 36 drwxr-sr-x 5 svn svn 4096 Apr 11 17:02 . drwxr-xr-x 7 svn svn 4096 Apr 11 17:02 .. -rw-r--r-- 1 svn svn 6 Apr 11 17:02 current -r--r--r-- 1 svn svn 2 Apr 11 17:02 format -rw-r--r-- 1 svn svn 5 Apr 11 17:02 fs-type drwxr-sr-x 2 svn svn 4096 Apr 11 17:02 revprops drwxr-sr-x 2 svn svn 4096 Apr 11 17:02 revs drwxr-sr-x 2 svn svn 4096 Apr 11 17:02 transactions -rw-r--r-- 1 svn svn 37 Apr 11 17:02 uuid -rw-r--r-- 1 svn svn 0 Apr 11 17:02 write-lock
各ディレクトリにはSGIDは有効になっているのは確認できたけど、グループの書き込み権限がないので、権限を与える。
$ find db/ -perm +200 -exec chmod g+w {} \; $ ls -la db/ total 36 drwxrwsr-x 5 svn svn 4096 Apr 11 17:02 . drwxr-xr-x 7 svn svn 4096 Apr 11 17:02 .. -rw-rw-r-- 1 svn svn 6 Apr 11 17:02 current -r--r--r-- 1 svn svn 2 Apr 11 17:02 format -rw-rw-r-- 1 svn svn 5 Apr 11 17:02 fs-type drwxrwsr-x 2 svn svn 4096 Apr 11 17:02 revprops drwxrwsr-x 2 svn svn 4096 Apr 11 17:02 revs drwxrwsr-x 2 svn svn 4096 Apr 11 17:02 transactions -rw-rw-r-- 1 svn svn 37 Apr 11 17:02 uuid -rw-rw-r-- 1 svn svn 0 Apr 11 17:02 write-lock
で、このままだと、svn+sshでのアクセス時に起動されるsvnserveが作成するファイルがグループに書き込み権限のないものになってしまうので、umask 002で動くように、スクリプトを書き換えます。
# cd /usr/bin # mv svnserve svnserve-org
で、/usr/bin/svnserveは以下のように作成します。
#!/bin/sh umask 002 /usr/bin/svnserve-org "$@"
で、この新しいスクリプトも実行可能にしておきます。
# chmod 755 svnserve
これでサーバー側の設定はオッケーなはず!
ここからクライアントで確認します。
秘密鍵をssh-agentに使ってもらうために以下のようにした上で
$ ssh-agent bash $ ssh-add ~/.ssh/foo_bar_id_rsa
$ svn info foo@xxx.xxx.xxx.xxx/var/svn/baz-repo/
これで、リポジトリの情報が表示されたら成功です。
あとは普通にチェックアウトして、何かコミットしてみるといいでしょう。
一応、コミット後、svnのリポジトリにグループの書き込み権限がないファイルが作られていないことを確認しましょう。
$ ls -la /var/svn/baz-repo/db/revs/ total 16 drwxrwsr-x 2 svn svn 4096 Apr 11 17:45 . drwxrwsr-x 5 svn svn 4096 Apr 11 17:45 .. -rw-rw-r-- 1 svn svn 115 Apr 11 17:02 0 -rw-rw-r-- 1 foo svn 273 Apr 11 17:45 1 $
Macなら
SSHKeychainの環境設定の[SSH キー]に作成した秘密鍵を登録しておくと便利です。もしかしたら[エージェント]-[一つのキーを追加]から作成した秘密鍵を登録する必要があるかもしれません。
すると、コマンドラインからssh-agent, ssh-addを行う必要がなくなります。
Windowsなら
PuTTYに付属するpagentにキーを登録しておいて、TortoiseSVNとかでpagentを使用するように設定すればクリアしてくれるはずです。結構前にやってたんですけど、忘れましたw。ググってください。