QNAP TS219P Ⅱ でSubversionを使う
自宅で複数のPCを使い分けていて、ファイルの共有をしたかったけど、都度NASにファイルを上書き保存とかするのはどっちが最新かわからなくなったりごちゃごちゃしてくることがよくあったのでLAN環境で使えるバージョン管理の環境を作ってみました。
プログラムとかならGitHubとかでいいんですが、外部に出したくないようなファイルを共有するときなんかに便利です。
NASにSubversionをインストール
まずパッケージマネージャをインストールします。
以前は使えていたipkgというパッケージマネージャは、QTS 4.3.3現在ではサポートされなくなったらしく、opkg(Entware-ng)というパッケージマネージャをwebからダウンロードして来る必要があります。
Install on QNAP NAS
ダウンロードした.qpkgファイルをAppCenterの手動でインストールでインストールします。
インストールが完了したら一旦アプリを停止、起動します。自分の環境では一度これを行わないとターミナルからopkgコマンドが使えませんでした。
次からはNASへの操作はSSHで行うため、teratermなどを使います。
teratermからNASのIPアドレスを指定して、管理者としてログインします。
opkg list でインストールできるパッケージが列挙されるので、インストールしたいパッケージの名前を探します。
めっちゃ多いし、フィルタリングもできないっぽいので頑張って探します。
subversion-serverというパッケージがあるので opkg subversion-server でインストールします。 インストールが完了すると svnserve,svnadminが使えるようになります。
SVNサーバの起動
まずSVNサーバのルートディレクトリとして使用するためのディレクトリを作成します。
自分は以下の場所に svnディレクトリを作成しました。
mkdir share/MD0_DATA/svn
次に、
svnserve -d -r /share/MD0_DATA/svn
でsvnサーバを起動します。
-d がデーモンモード、 -r が指定のディレクトリをルートディレクトリとするオプションです。
「svnserve can't bind server socket address already in use」みたいなエラーが出て起動できないときは、「killall svnserve」を一回実行してから再度コマンドを実行すれば起動出来ると思います。
ディレクトリの「MD0_DATA」の部分はNASの環境によって変わります。シグルドライブの場合は「HDA_DATA」になるようです。
svnserveを終了させる場合は
kill processID(procID)で終了させます。
procID の部分は ps |grep svn で出てくるリストの該当プロセスの一番左端の整数値を入力します。
何らかの理由で強制終了させなければならない場合、 kill -9 processID(procID) で強制終了になります。
リポジトリの作成
svnディレクトリをルートとして、以下のパスにリポジトリを作成します。
svnadmin create /share/MD0_DATA/svn/repos01
これでrepos01がリポジトリになります。
リポジトリを複数作りたい場合、svnディレクトリをsvnサーバのルートディレクトリとして起動しているので、svnディレクトリ以下に svnadmin create してやれば外部からアクセスできるリポジトリを作成することができます。
不要になったリポジトリの削除は、ただそのディレクトリを削除すれば良いです。
例)
rm -r -f /share/MD0_DATA/svn/repos01
ユーザーの設定
今までの手順で、最低限リポジトリの作成、外部からのアクセスは出来るようになりましたが、このままではリポジトリに対してコミットなどがまだできません。
なので、リポジトリに対してユーザーの設定をしてやる必要があります。
ユーザーとパスワード、アクセス権限の設定を行うには以下のファイルを操作します。
/share/MD0_DATA/svn/<name of repository>/conf/passwd /share/MD0_DATA/svn/<name of repository>/conf/svnserve.conf /share/MD0_DATA/svn/<name of repository>/conf/authz
passwd,svnserve.conf,authzともにすでにいろいろ書かれていますが、全部コメントアウトされているので、必要な箇所のみ抜粋し書き直します。
snvserve.conf設定
こちらはとくにもともと記載されているものから変更する必要もないのでそのまま抜き出しました。
なぜか anon-access = read のままにしていると、リポジトリに対して show log が失敗してしまうので anon-access = none にします。
[general] anon-access = none auth-access = write password-db = passwd authz-db = authz
anon-access とは匿名アクセスのことです。
auth-access とは認証アクセスのことです。これでアクセスするためのユーザーを作っていきます。
****-access に対しては[none][read][write]が設定できるようです。
password-db はユーザーとパスワードの書かれたデータベースファイルです。
passwd の部分が指定したデータベースファイルの名前で、svnserve.confファイルと同じディレクトリにあるファイルを指定します。
今回はデフォルトで作られている passwd ファイルをそのまま使用しました。
passwd設定
このデータベースファイルは任意の名前で作成することができます。
自分で作成したデータベースファイルを使う場合はsvnserve.conf と同じディレクトリ内に作成し、password-db = passwd の部分を書き換えてください。
例)
password-db = mypasswd
必要なだけユーザーを追加します。
[users] harry = harryssecret sally = sallyssecret
ユーザー名 = パスワード のように記述します。
authz設定
passwdファイルに追加したユーザーをグループに分けます。
[groups]
harry_and_sally = harry,sally
ディレクトリごとのアクセス権を設定します。
[path]
@group or user = r,rw,''
[path]の部分にアクセス権を設定したいディレ雨k取りのパスを記述します。
[/]ならルートパスになります。
アクセス権を設定する際にグループも指定できます。その場合は最初に「@」をつけてからグループ名を記述します。
ワイルドカードも設定できます。
アクセス権はr,rw,''の3つがあります。最後の''は無記入ということです。無記入の場合は全くアクセスできなくなります。
例)
[/] @harry_and_sally = rw * = r [/foo] @harry_and_sally = r harry = rw * =
PCからリポジトリにアクセスする方法
上記テジョンで作成したリポジトリへのアクセス方法ですが、
svn://URL/<name of repository>
でアクセスできます。「URL」の部分はNASのIPアドレスを指定します。
svnserve起動用のスクリプトの用意
これまでの作業でほぼバージョン管理を行う上で必要なことはほぼ完了しましたが、NASが再起動したときなど、このままではsvnサーバをもう一度手動で起動しなければなりません。
NAS起動時に実行されるスクリプトを作成することでこれを自動化します。
mount -t ext2 /dev/mtdblock5 /tmp/config vi /tmp/config/autorun.sh (while test ! -x "/opt/bin/svnserve"; do sleep 10; done; /opt/bin/svnserve -d -r /share/*/svn)& vi終了 chmod +x /tmp/config/autorun.sh umount /tmp/config
QTS 4.3.3ではデフォルトでは実行しなくなってるので、ブラウザからNASにアクセスして
コントロールパネル -> ハードウェア -> 一般
「起動時にユーザー定義処理を実行」にチェックを入れます。
参考
Subversionのインストールと設定(svnserve編)
Subversionのインストールと設定(Apache編)
Subversion
QNAP TS-219P+ Subversion (svnserve) 導入
Subversion1.5.2 svnserve.confでのセキュリティ保護
Subversion “show log” is offline
Running Your Own Application at Startup