読者です 読者をやめる 読者になる 読者になる

Selection for my Life

いま、僕にできること。

subversionで設定ファイルの管理

subversionで設定ファイルの管理

目的

ルータやSWのコンフィグファイルで変更点などを管理して作業トラブルを防止できるようにする

方法

subversion(サーバ側)
バージョン管理システム

trac(サーバ側)
subversionの管理情報をweb画面として表示させる

TortoiseSVN(クライアント側)
windowsクライアントにインストールして、subversionコマンドをGUIから操作できるようにする


サーバ側インストール検証

[ 検証前提 ]
MacBookにてvirtualbox上にcentOSを構成して検証する。
OS:centOS 6.5 64bit
Men:1GB
検証確認日は2015年3月にて検証する。ダウンロードURL等の情報に注意

_ OSの更新
セキュリティ的な面もあるので、まずはアップデートを実施

# yum update

_ SELinuxを無効化する
権限設定等でうまく動作しない場合があるので、無効化します。

# vi /etc/selinux/config
      SELINUX=disabledへ変更する
# reboot
      設定を反映させるため、再起動をする

_ apacheのインストール

# yum install httpd
     インストールされていない場合、インストールしておく。
     web画面を利用して変更履歴や差分情報を確認できるようにするために必要 

_ subversionをインストールする。

# yum install subversion
      Package subversion-1.6.11-12.el6_6.x86_64 already installed and latest version
      と表示されるかも。

_ subversion リポジトリを作る。
Workspaceという名前でリポジトリを作ってみます。

# mkdir -p /home/svn/repos/demoPJ
# svnadmin create /home/svn/repos/demoPJ
      /home/svn/repos/demoPJ にsubversion管理に関係するファイルやらディレクトリが作られます。
      バックアップするときは、このdemoPJをバックアップしておくと戻せるはず。
      プロジェクト毎(管理したい案件毎)に名前を変えて作成して管理します。

_ svnserver.confの内容は下記のとおり
匿名アクセスは拒否、パスワード認証後は書き込みOK パスワード設定ファイルをそれぞれ設定

# cd /home/svn/repos/demoPJ/conf
# mv svnserve.conf svnserve.conf.org
# vi /home/svn/repos/demoPJ/conf/svnserve.conf
                               
[general]
anon-access = none
auth-access = write
password-db = passwd
                               

_ passwdファイルの内容は下記のとおり
subversionを利用するユーザーとパスワードを設定します。

# cd /home/svn/repos/demoPJ/conf
# vi /home/svn/repos/demoPJ/conf/passwd
                               
[users]
admin = admin
devuser = password
                               

_ 運用に使用する trunk, branches, tags を作っておきます。

# svn mkdir file:///home/svn/repos/demoPJ/trunk -m "create"
# svn mkdir file:///home/svn/repos/demoPJ/branches -m "create"
# svn mkdir file:///home/svn/repos/demoPJ/tags -m "create"

trunk,branches,tagsはsubversionの標準的な運用名なので、絶対必要ということではない。
運用ルール策定時に調整するとよいと思う。
./trunk -> 本流 (現在稼働中のファイル)
./branches -> 作業中ファイル(これから変更するファイル)
./tags -> バージョン毎のファイル(過去バージョンのファイル)

_ リポジトリを公開(httpでアクセスできるように)するための準備をする。
ApacheSubversionリポジトリを公開するための mod_dav_svn をインストールします。

# yum install mod_dav_svn

インストールが終わると、/etc/httpd/conf.d に subversion.conf が作成されるので
ファイルを編集してディレクティブを追加。アクセスするにあたり、パスワード認証するようにします。

httpd.conf のLoadModuleに mod_dav_svnを読込むように行を追加する

# vi /etc/httpd/conf/httpd.conf
                               
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
                               
# vi /etc/httpd/conf.d/subversion.conf
                               

  DAV svn
  SVNParentPath /home/svn/repos

  AuthzSVNAccessFile /home/svn/repos/authzsvn.conf
  Require valid-user
  AuthType Basic
  AuthName "Authorization"
  AuthUserFile /home/svn/repos/.htpasswd

                               

_ subversionリポジトリへのアクセスを制御するため、.htpasswdを設置する。

# htpasswd -c /home/svn/repos/.htpasswd admin
    作成するユーザーのパスワードを設定してきます。
    New password:
    Re-type new password:
    Adding password for user admin

    .htpasswdにユーザ追加する場合は、-c オプションを抜く。
# htpasswd /home/svn/repos/.htpasswd devuser


_ リポジトリへのアクセスを制御するためのファイルを作成します。
   /home/svn/repos/ に authzsvn.conf を作成

# vi /home/svn/repos/authzsvn.conf
                               
[groups]
developers = devuser
manager = admin

[/]
* = r

[demoPJ:/]
@developers = rw
@manager = rw
                               

_ Apacheリポジトリ読み書きできるようにパーミッションを変更します。

# chown -R apache:apache /home/svn/repos/demoPJ

_ Apacheを再起動する。

# service httpd restart

_ Windowsからリポジトリにアクセスしてみる。
ブラウザ
http://[サーバーIP]/svn/demoPJ
(IP部分は仮想サーバのIPで置き換えてください。)
ともにアカウントとパスワードを入力してアクセスできればOK。

_ pythonのインストール

# yum install python

_ pythonapacheのモジュールをインストール

# yum install mod_wsgi

_ sqliteのインストール

# yum install sqlite python-sqlite

_ pythonツールをインストール

# yum install python-setuptools

_ Babelのインストール pythonのライブラリです。
これをインストールして、easy_installコマンドを利用できるようにします。

# easy_install Babel

_ pythonのパッケージ管理コマンドからtrac(日本語化されたもの)をインストール
# easy_install http://www.i-act.co.jp/project/products/downloads/Trac-0.12.3.ja2.zip

_ tracのディレクトリを作る
( /home の配下でもOKです。 バックアップはこのディレクトリ配下を取る)

# mkdir /var/trac

_ tracコマンドでプロジェクト(案件ごとの領域)を初期生成する。
この初期化処理で関連ファイルやtracの機能ファイルが生成されます。
不要になったプロジェクトは、このディレクトリを消せばOK

# trac-admin /var/trac/demoPJ initenv
    プロジェクト名 [My Project]> xxxx <-プロジェクト名
    データベース接続文字列 [sqlite:db/trac.db]>   <- 空でEnter

_ tracの管理者権限を作成したプロジェクトに与える。
これで、admin ユーザーを設定します。個人のアカウントに管理者権限を与えてもOK

# trac-admin /var/trac/demoPJ permission add admin TRAC_ADMIN

_ adminのパスワードを設定する。
htpasswdコマンド -c オプションは初回だけ。別ユーザーを追加設定するときは、
-cオプションは必要ない。-cを付けてしまうと、パスワードファイルが上書きされてしまうので注意
subversion側の.htpasswdと共有してもよいと思う。subversiontracのユーザ一致するという
 前提が成り立つなら共有したほうがよいと思う。

# htpasswd -c /var/trac/trac.htpasswd admin

  _ 匿名ユーザーの BROWSER_VIEW 表示を削除しておく
    匿名ユーザーに開示OKのプロジェクトなら削除しなくてもよい。
# trac-admin /var/trac/demoPJ permission remove anonymous  BROWSER_VIEW

_ UTF8で統一しておくと、文字化けを防止できる
trac.iniにデフォルト文字コード指定をUTF8に変更する。

# vi /var/trac/demoPJ/conf/trac.ini
        default_charset = UTF8

_ pythonのモジュール設定ファイルを作成

# vi /var/trac/trac.wsgi
                               
import os

os.environ['TRAC_ENV_PARENT_DIR'] = '/var/trac'
os.environ['PYTHON_EGG_CACHE'] = '/var/trac/eggs'

import trac.web.main
application = trac.web.main.dispatch_request
                               

_ apacheから読めるようにファイルのパーミッション変更
プロジェクトを追加した場合は、別途apacheから読めるパーミッションへ変更する。

# chmod 755 /var/trac/trac.wsgi
# chown -R apache:apache /var/trac/

_ apacheの設定ファイルを作成
subversionのhtpasswdと共有する場合は、AuthUserFileのパスを変更する

# vi /etc/httpd/conf.d/trac.conf
                               
WSGIScriptAlias /trac /var/trac/trac.wsgi


    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all



   AuthType Basic
   AuthName "trac"
   AuthUserFile "/var/trac/trac.htpasswd"
   Require valid-user

                               

_ apacheの設定テストと再起動

# /etc/init.d/httpd configtest
# service httpd restart

ブラウザでアクセス
http://[サーバーIP]/trac
http://[サーバーIP]/trac/[プロジェクト名]

_ tracとsubvertionを連動させる。
tracにブラウザで接続し、プロジェクト単位でadminでログインする。
・「管理」のメニューから「バージョンコントロール」の「リポジトリ」をクリック
・画面右側の「リポジトリを追加」で、「種類」->[svn],「ディレクトリ」->[subversionのパス]


リポジトリ "demoPJ" が追加されました。
Tracリポジトリと同期させるために trac-admin $ENV repository resync "demoPJ" を実行してください。
コミットごとに trac-admin $ENV changeset added "demoPJ" $REV を呼ぶようにリポジトリの post-commit フックを設定してください。

# trac-admin /var/trac/demoPJ repository resync "demoPJ"
Resyncing repository history for demoPJ...
3 revisions cached.
Done.

# cd /home/svn/repos/demoPJ/hooks
# vi post-commit

subversionレポジトリのhookディレクトリに以下をpost-commitという名前で実行可能属性をつけて配置。
                               
#!/bin/sh
export TRAC_ADMIN="/usr/bin/trac-admin"
export TRAC_ENV_PARENT_DIR="/var/trac"
export PYTHON_EGG_CACHE="${TRAC_ENV_PARENT_DIR}/.egg_cache"
export TRAC_ENV="${TRAC_ENV_PARENT_DIR}/demoPJ"
${TRAC_ADMIN} ${TRAC_ENV} changeset added "$1" "$2"
                               

# vi post-revprop-change

同様にpost-revprop-changeを配置
                               
#!/bin/sh
export TRAC_ADMIN="/usr/bin/trac-admin"
export TRAC_ENV_PARENT_DIR="/var/trac"
export PYTHON_EGG_CACHE="${TRAC_ENV_PARENT_DIR}/.egg_cache"
export TRAC_ENV="${TRAC_ENV_PARENT_DIR}/demoPJ"
${TRAC_ADMIN} ${TRAC_ENV} changeset modified "$1" "$2"
                               

# chown apache.apache post-commit post-revprop-change
# chmod 755 post-commit post-revprop-change


----動作確認-------

[root@vagrant-centos65 test]# svn checkout /home/svn/repos/demoPJ
svn: Try 'svn help' for more info
svn: Error parsing arguments
[root@vagrant-centos65 test]# ll
total 0
[root@vagrant-centos65 test]# svn checkout http://localhost/svn/demoPJ
Authentication realm: http://localhost:80 Authorization
Password for 'root':
Authentication realm: http://localhost:80 Authorization
Username: admin
Password for 'admin':

                               
ATTENTION!  Your password for authentication realm:

   http://localhost:80 Authorization

can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/root/.subversion/servers'.
                               
Store password unencrypted (yes/no)? yes
A    demoPJ/trunk
A    demoPJ/branches
A    demoPJ/tags

                               
ATTENTION!  Your password for authentication realm:

   http://localhost:80 Authorization

can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/root/.subversion/servers'.
                               
Store password unencrypted (yes/no)? y
Please type 'yes' or 'no': yes
Checked out revision 3.
[root@vagrant-centos65 branches]# cp /var/log/messages messages
[root@vagrant-centos65 branches]# svn add messages
A         messages
[root@vagrant-centos65 branches]# svn commit -m "var/log/messages commit test 1st"
Adding         branches/messages
Transmitting file data .
Committed revision 4.



svn commit -m "var/log/messages commit test 2st"