カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

subversionのインストールでパーミッションと戦ってみた

正直、svnの環境整えようとすると、パーミッションが個人的に一番腹が立つ。

不要な権限与えたくないけど、複数ユーザでの更新作業はやれるほうがいいし、もろもろ悩ましい。
ということで、そのときの備忘録。

ちなみに、ApacheやWebdavの設定はしないで、svn環境できればok。
とりあえず、今回はクライアント側をWindows環境下として想定。Macは気力あれば書く。

まぁ、結論は負けましたw
まずユーザと開発グループ追加。このユーザにシェルとパスワード与えず、開発者をdevグループに所属させるってのがいいのかなぁ。
ここで既に悩ましい。

# /usr/sbin/groupadd dev
# /usr/sbin/adduser -g dev svn

んで、subversionのインストール。

# yum install subversion

んで、まずここ。
今回はGUI環境でTortoiseSVNを使ったんだけど、そういうクライアントからチェックアウトしたりするときに、/home/以下の権限はいじってあげないといけない。

要はグループの実行権限が求められてしまう…

# chmod 770 /home/svn

まぁ、適当なとこにレポジトリ置くディレクトリ作りましょう。pオプションはほんと素敵。

#mkdir -p /home/svn/repos

んで、レポジトリ作成。まぁ、branches, tags, trunkをデフォにしておく。

# svnadmin create /home/svn/repos/project.com
# chown -R svn:dev /home/svn/repos/project.com
# svn mkdir file:///home/svn/repos/project.com/trunk file:///home/svn/repos/project.com/tags file:///home/svn/repos/project.com/branches -m 'Create trunk, tags, and branches.'

次にクライアント側の設定。今回は、「TortoiseSVN」の場合。他のクライアント調べる時間がなく(ry

  • まず適当な場所に、フォルダを作る。
  • マイドキュメント→「project.com」とか。まぁ、D直下でもどこでも。
  • project.comフォルダを右クリック。
  • 「SVN Checkout」を選択


レポジトリのURL: svn+ssh://username@server/home/svn/repos/project.com
※username, serverは置き換えてください。あとポート指定も必要だったらその変更も。
んで、チェックアウトするディレクトリ: C:\\Documents and Settings\\username\\My Documents\\subversion\\project.com とか、
D:\\repos\\project.com とか。 これで必要な環境は整う。

んで、ここでまた悔しい問題。
この状態だとコミットできないので、パーミッションをいじる。

db以下に全てグループからの書き込み権限を与える。
(※これがほんと悩ましい。なぜ-Rを使わねばならんのだ)

# chmod -R g+w /home/svn/repos/project.com/db

「-R」を使わず、openでエラー出たものだけに書き込み権限を与えたり、
一度「-R g+w」で権限与えてから、どんどん書き込み権限を削除していって、
エラーでないまでやったんだけど、その状態で再現させると、やはりパーミッションエラーが出た…

ここを読むと、apacheからの書き込み権限全部db/だけじゃなく、dav/に与えろとか書いてあるけど、なんでそんないっぱい権限与えなきゃならないんだ、いやだーと思いつつ、やっぱダメだった次第。

「Make sure apache has r/w permission to *all*」って…
自分で何もできないのが悔しい…
挫折して悔しかったけど何も手を打てなくて、ファイルを作ったり適当に作業して、コミット。

おまけ

これを機に、レポジトリの構成綺麗にしたいという稀有な人もいるかもしれないので、そのことも書いておこ。
現レポジトリ→なんか構成がひどい→整理してみた→新レポジトリ作った→移動させたい。とか。
必要なデータだけをコピーしたいところ。 ex: 最新trunck,最新リビジョンとか

ただし、単にコピペすると.svnがあるせいか現レポジトリの情報を引き継いでしまうので、エクスポートします。

  • まずコピーしたいやつが、コピー先にある場合は消す ex: trunkディレクトリとか
  • 新レポジトリにコピーしたいフォルダ(ex: trunk)を右クリック
  • エクスポート
  • エクスポート先はプロジェクトの名前(ex: マイドキュメント\\repos\\project.comとか)
  • これでtrunkフォルダができて、中身もインポートされてくる
  • ので、あとはこれでコミット

まぁ、久々にsvn構築したみたりすると、美しさとか求めたくなって、無駄な病が発生しそうだったので、これぐらいで良かったのかも知れない。
いずれにしても、なんかしっくり来ない…

そして、検証が微妙にアバウトなので、、、、なんか間違ってたらご指摘をーーーーー!!