SVNサーバ設定記録

出典: Wikimura

SSH認証はやめた。研究室に入る段階でSSHを使っているので、やっぱり2重に認証するのは面倒。 SSHで入ったらApache+mod_dav_svnの簡単なパスワード認証を使うことにする。 そのため、研究室内のPCでSVNサーバを動かそうと考えた。

Apache+mod_dav_svnは研究室内のWindowsマシンに設置する。VisualSVN ServerはGUIでサーバが管理できるから便利。というより、引き継ぎが簡単なので...

疑問:Apache+mod_dav_svnは外部へSVNサーバ管理機能を提供してくれるのだろうか?リポジトリやユーザの追加がサーバマシン上でしか行えないと少し面倒。この機能はWebDAVというらしい。

とりあえずSVNサーバを動かすWindowsと、Sambaが動いているCentOSの両方にユーザを作らないと。 課題は、SVNサーバがSambaにログインできるかということ。SVNサーバ(Apacheがやってくれる)がログインしたとしても、アクセス権がだめとか、再起動するとログインを忘れるとか、ログインしないとアクセスできないといった問題は生じないか?(サービスがSYSTEM以外のアカウントの権限を持って起動することは可能だけど、ログインしなおさなくても良いだろうか?)


目次

SVN用ユーザ作成

useraddでSVNのリポジトリを置くためのスペースを確保するためのユーザを作る。 RAID構成されたホストFile-server上に作る。このユーザをSambaユーザとしてネットワーク共有できるようにする。ユーザ名はsvnuserにする。

作業は以下のようにしていたのを覚えている。

  • 管理者権限取得
  • ユーザとグループの作成
  • 仮ログイン
  • smbpasswdでSamba用パスワードを作成
  • このコマンドでユーザ通常のパスワードがSamba用のと同じになる


VisualSVN Server インストール

Kimuralab-001にインストールすることにした。VisualSVN serverを通常通りインストールする。 svnuserアカウントでインストールする。

インストール後、Subversion導入手順で書いたようにFile-server上にリポジトリを設置する。ファイルサーバへはnet useでログインしておく。サービスを起動するアカウントを、ファイルサーバへログインしているアカウントに設定しないと、リポジトリを管理できなくなってしまう。

net use \\ファイルサーバ\ユーザ /user:ユーザ

課題:サービスのアカウント

サービスを起動するアカウントを設定する必要があるのは少し気になる...いろいろ不安なので、できればSYSTEMでサービスを起動したい。

そこで見つけたのがPAM(Pluggable Authentication Module)という機能。Apacheから利用できるらしい。ApacheがSambaのアカウント名とパスワードを持っていることも可能になるらしい。 PAMを利用して認証を行う参照。 ApacheがPAMを使ってSambaの認証を取ることができれば、SYSTEMアカウント上でも利用できるのではないか?

VisualSVNはモジュールを追加する機能が削られているようなので、結局のところApacheは別に入れなくてはならない。引き継いでくれる人に任せよう...

とりあえず現在のセッティングでは、サーバが動いているアカウントからログアウトしても大丈夫。リポジトリへのアクセスは可能。

メモ:サーバ管理機能

ユーザの追加やアクセス権の設定などには、サーバ管理を行うsvnadminを使用する。これは当然サーバにログインしていないと使えない(勝手にクライアントがアクセス権を設定し直されたら困るし)。

VisualSVN Serverは、GUIでSVNサーバの管理が行えるので大変使いやすい。ただ、サーバにログインしないと使えないのは同じ。Apache + mod_dav_svnだけでなく、たぶんsvnserveにも対応していると思う(svnadminでSVNリポジトリを操作するだけだから)。 自宅PCはSSHサーバが動いているので、SSH+SVNを構築したいと考えている。

確認すること

  • 何があってもSambaにあるリポジトリが操作できること
    • SVNサーバの起動ユーザがログアウトする
    • 他のユーザがログインする
    • サーバが再起動する
  • IP制限できること
    • LAN内の192.168...のIPでのみアクセス可能なこと

利用するときは

  • 以下を行うときはkimuralab-001のsvnuserにログインして作業すること
    • リポジトリの作成・削除
    • リポジトリのアクセス権設定
    • ユーザ・グループの作成・削除・編集
    • 他のリポジトリとの同期


同期のテスト

Subversionリポジトリのバックアップ( svnsync )」を参考に、自宅PCと研究室PCの同期をとってみた。

svnsyncは一方通行の同期...というかバックアップを目的としているらしい。

考察:各自の運用はどうすべきか

  • PCについて
    • 自宅、研究室個人、研究室共有の3つのPCが使えるだろう
    • 研究室個人PCはローカルとファイルサーバの共有ディスクが使える
    • 研究室共有(SVNサーバ)もローカルとファイルサーバの共有ディスクが使える
  • 接続について
    • 安全な接続のために、自宅・研究室間はSSHでつなぎたい
    • 研究室ではSSHサーバが動いている。
    • 自宅PCでSSHサーバを動かすのは手間がかかるため、やる人は少ないだろう
    • 導入が容易なSVNサーバのバイナリ(VisualSVN Server)は、Basic認証
      • なるべくSSHで守られた内側に設置したい→SVNサーバは研究室内が好ましい
  • リポジトリの管理
    • 個人の研究に関する部分は、研究室個人PCで管理すべき
      • 研究室個人PC上でVisualSVN Serverをインストール、ファイルサーバにリポジトリを置く
    • 共有プロジェクトに関する部分は、研究室共有PCで管理すべき
      • 研究室共有PC上でVisualSVN Serverをインストール、ファイルサーバにリポジトリを置く
      • 管理アカウントは1つなので、使用されていないときにログインし、設定しなくてはならない
      • ログオフ忘れは禁物になる
  • バックアップ
    • svnsyncは一方通行なのでバックアップ向き
    • GUIは存在しない
      • バッチファイルを用意することは可能
    • 個人リポジトリのバックアップ
      • 研究室個人PCから自宅PCへ
      • SSHトンネリングでサーバ同士を接続
    • 共有リポジトリのバックアップ
      • ファイルサーバからローカルへコピー
      • 心配ならディスクに焼くなどする

運用案: 個人的な研究の管理

  • 研究室個人PCにSVNサーバを立てる
  • 研究室個人PCにSVNクライアントも入れる
  • リポジトリをファイルサーバの個人領域に設置する
  • 自宅PCはクライアントのみ入れる

環境構築

  • 研究室個人PCにVisualSVN Serverをインストール
  • VisualSVN Serverのサービスを通常使用するアカウントで起動するよう設定
  • VisualSVN Serverから、リポジトリをファイルサーバに置くよう設定
  • ユーザ設定(本人だけ)を行う
  • ローカルのディスク上にリポジトリのバックアップ先リポジトリを作る
    • Tortoseの「ここにリポジトリを作る」を使うことでコマンドラインツール不要に

サーバ管理

  • 個人的な共有をするつもりが無ければ、ユーザ作成は本人の分だけ
  • これらの操作はローカル or リモートデスクトップから行う
  • バックアップはファイルサーバからローカルのディスクへ持ってくるようsvnsyncする

日常の作業

  • 作業開始時にチェックアウト
  • 作業終了時にコミット
  • 共有しないならアップデートやマージはしないはず
  • たまにバックアップを実行
  • 自宅からはSSHトンネリング

運用案: 共有データの管理

  • 研究室共有PCにSVNサーバを立てる
  • 研究室共有PCにSVNクライアントも入れる
  • リポジトリをファイルサーバのSVN用ユーザ領に設置する

環境構築

  • 研究室共有PCのSVN管理ユーザでVisualSVN Serverをインストール
  • VisualSVN ServerのサービスをSVN管理ユーザで起動するよう設定
  • VisualSVN Serverから、リポジトリをファイルサーバに置くよう設定
  • ユーザ設定を行う
  • ローカルのディスク上にリポジトリのバックアップ先リポジトリを作る
    • Tortoseの「ここにリポジトリを作る」を使うことでコマンドラインツールが不要なのは同じ

サーバ管理

  • 必要な分のユーザとグループを作る
  • これらの操作はローカル or リモートデスクトップから行う
  • バックアップはファイルサーバからローカルのディスクへ持ってくるようsvnsyncする
  • これらの作業は数人の管理者に委託した方が好ましい
    • 同時ログインができない上、強制的な割り込みで操作が打ち切られたら破損するかもしれないため
    • 管理者が必要になってしまうが、ユーザ作りと権限設定は最初だけ
    • リポジトリ数が減る代わりに巨大化しやすくなるのは困る
    • ある程度性質の似た者同士はまとめるリポジトリを分け、サブディレクトリで管理する
    • リポジトリが巨大化し過ぎぬよう、リポジトリはうまく分けたいところ...
    • ユーザ作成だけは本人立ち会いのもと、パスワードを設定してもらうしかない

日常の作業

共有メンバのすること:

  • 必要なデータをチェックアウト
  • 作業中のリポジトリへの変更を得る(更新)
  • 衝突を解消(マージ)
  • リポジトリへ変更をコミット
    • 個人PCで作業する

管理者のすること:

  • ファイルサーバからローカルへバックアップ(svnsync)
  • たまにデータを書きだし
    • サーバ(kimuralab-001)へログインして作業する


リポジトリを別のPCから操作する

SVNサーバはKimuralab-001に入れてある。リポジトリ本体はファイルサーバのSVN用アカウントに置いてある。管理するときはSVN管理ユーザにログインして、VisualSVN ServerのGUIを起動すればよい。


ところが、Kimuralab-001にしか入っていないソフトがあるため、誰かがこれを利用していればログインできない。 サーバの管理ができないのは問題なので、自分のPCから供用SVNサーバを管理できるようにしようと考えた。というか、SVNユーザの領域を共有にすれば良さそうだが...なるべく管理者以外アクセスさせたくない(うっかり消されたら怖い)。 サーバ機能はKimuralab-001に任せて、ユーザ追加やリポジトリ作成の仕事は管理者PCから行えれば、Kimuralab-001の利用状況にかかわらず操作ができるだろう。


ただ、元々個人用SVNサーバを稼働させているため、VisualSVN Serverは個人用サーバを管理するための設定になっている。これを共用SVNサーバ管理用に切り替えることができれば良いのだが...少し手間がかかりそうだ。


とはいえ、サーバ自体は稼働させなくて良いので、その辺は楽かもしれない。


まず、リポジトリの位置や各種ファイルの置き場所の設定を切り替えなくてはならない。これはApacheのhttpd.confに書かれている。更に、Sambaのログインユーザを切り替えなくてはならない。これはnet useコマンドで行う。


リポジトリ本体はSVNユーザ領域にあるので、Sambaでログインできればアクセス可能になる。SVNサーバのGUIでもリポジトリ位置を変更すればすぐにでも対応できるはず...。


とりあえず試す

  • サーバ停止
  • 設定ファイル切り替え
  • Sambaログインユーザ切り替え
  • サーバ開始

うまくいかず。

net stop "VisualSVN Server"
net use \\ファイルサーバ\自分 /delete
net use \\ファイルサーバ\SVN管理ユーザ /delete /user:Samba上のSVN管理ユーザ
    ->パスワード入力

VisualSVN Serve GUI上で...リポジトリ場所変更
net start "VisualSVN Server"
    -> アプリケーション固有のエラーらしい
    -> Invalid file path: (httpasswdが無いらしい)

VisualSVN Serverを再インストールして設定しなおせば切り替え可能。でも面倒。

サーバは動かないが、管理機能は使えるのでOK?