非常にレガシーなはなしです。
Trac Lightningからの移行をどうしようか悩んだ末に検証した内容なのですが、おそらくこれを本番環境で採用する事はないと思います。*1
一応最低限の動作を確認したので備忘録としてエントリを残しておきます。
0. はじめに
本エントリの前提としては、
- Windows Server上のSubversionでソース管理をする
- 小規模なオンプレ環境
となります。
Trac Lightningからの移行だけを考えるのであれば、Windowsを捨てる、Subversionを捨てる、Tracを捨てるというのが割と現実解になりますが、本エントリではその点は考えないことにします。
検証環境
検証環境は以下となります。
- Windows Server 2012 R2
- インストール直後の状態に最新のWindows Updateを適用した状態
- Windows PowerShell 4.0
- デフォルトでインストールされているPowerShellをそのまま使います
試していませんが、Windows Server 2016でも問題はないかと思います。
試しました。Windows Server 2016+PowerShell 5.1でも本手順は動作します。
1. VisualSVN Serverのインストール
SubversionサーバーとしてVisualSVN Serverを採用します。
バージョンは現時点で最新のVer.3.6.3
にします。
こちらはGUIのインストーラーからインストールしても構わないのですが、面倒なのでPowerShellから以下の様にしてサイレントインストールします。
# Install VisualSVN Server $VISUALSVN_VER = '3.6.3' $VISUALSVN_INSTALL_PATH = 'C:\Program Files\VisualSVN Server' Invoke-WebRequest -Uri "https://www.visualsvn.com/files/VisualSVN-Server-$($VISUALSVN_VER)-x64.msi" -OutFile "$(Get-Location -PSProvider Filesystem)\VisualSVN-Server-$($VISUALSVN_VER)-x64.msi" Start-Process -FilePath "msiexec.exe" -ArgumentList @('/i', "$(Get-Location -PSProvider Filesystem)\VisualSVN-Server-$($VISUALSVN_VER)-x64.msi", '/qb', "INSTALLDIR=""$VISUALSVN_INSTALL_PATH""", 'USE_SSL=1', 'ADDLOCAL=Server,Manager,AddSvnToPath') -Wait -PassThru
このインストールでは、
- インストール先 :
C:\Program Files\VisualSVN Server
- インストール対象 :
- VisualSVN Server - Standard Edition
- Administration Tools
- コマンドラインのPATHを追加
のインストールを行います。
インストール後の設定として、今回は認証方式をWindows認証とし、ローカルAdministrator
をなんでもできるユーザーにしておきます。
# PowerShellを再起動していれば、Import-Module VisualSVNとしても良い Import-Module (Join-Path $VISUALSVN_INSTALL_PATH "PowerShellModules\VisualSVN") # 認証方式をWindowsn認証に Set-SvnServerConfiguration -AuthenticationMode Windows # ローカルAdministratorの権限設定 Add-SvnAccessRule -Global -AccountName "$(hostname)\Administrator" -Access ReadWrite
また、必要があれば以下の様にしてサンプルのリポジトリを作成することも可能です。
# 必要があればリポジトリを作成 New-SvnRepository -Name SampleProject New-SvnRepositoryItem -Repository SampleProject -Path ('/branches', '/tags', '/trunk') -Type Folder
これでVisualSVN Serverのインストールと設定は完了です。
この時点でふつうにVisualSVN Serverに対してWebアクセスできます。
2. Pythonのインストール
Tracを動作させために、先ずはPythonをインストールします。
Tracは未だにPython3系に対応していないため、Python 2.7.13をインストールします。
こちらもPowerShellから以下の様にサイレントインストールします。
# Install Python $PYTHON_VER = '2.7.13' $PYTHON_INSTALL_PATH = 'C:\Python27' Invoke-WebRequest -Uri "https://www.python.org/ftp/python/$($PYTHON_VER)/python-$($PYTHON_VER).amd64.msi" -OutFile "$(Get-Location -PSProvider Filesystem)\python-$($PYTHON_VER).amd64.msi" Start-Process -FilePath "msiexec.exe" -ArgumentList @('/i', "$(Get-Location -PSProvider Filesystem)\python-$($PYTHON_VER).amd64.msi", '/qb', "TARGETDIR=""$PYTHON_INSTALL_PATH""", 'ALLUSERS=1', 'ADDLOCAL=ALL') -Wait -PassThru # PowerShellを再起動しない場合はPATHを追加しておく $env:PATH = $env:PATH + ";$PYTHON_INSTALL_PATH;$(Join-Path $PYTHON_INSTALL_PATH "Scripts")"
このインストールでは、
- インストール先 :
C:\Python27
- インストール対象 : すべてのオプション
のインストールを行います。
3. Tracのインストール
ここからTracをインストールし、VisualSVN Server上のApacheで動作させます。
3-1. Tracのインストール
pipからTrac(+Genshi)、Babelをインストールします。
Tracのバージョンは現時点の安定板であるVer.1.2.2
とします。
# 一応Tracのバージョンを指定してインストール。同時にGenshiもインストールされる。 pip install Trac==1.2.2 pip install Babel
ここで理由は不明なのですが、util\__init__.py
ファイル内で、ctypes.windll.kernel32.MoveFileTransactedW
を呼び出すとエラーとなってしまったのでMoveFileTransacted
に置換するパッチを当てておきます。
環境によってはこのパッチは不要かもしれません。
$PYTHON_INSTALL_PATH = 'C:\Python27' # Trac 1.2.2用パッチ # ※Windows Server 2016だとこのパッチ無しでもエラー無く動作しました。 & { $SitePackagesDir = Join-Path $PYTHON_INSTALL_PATH "Lib\site-packages\" $InitFilePath = Join-Path $SitePackagesDir "trac\util\__init__.py" Copy-Item $InitFilePath "$($InitFilePath).orig" (Get-Content -LiteralPath $InitFilePath -Raw) -replace 'MoveFileTransactedW','MoveFileTransacted' | Set-Content -LiteralPath $InitFilePath }
3-2. デフォルトプロジェクトの作成
続けてデフォルトのサンプルプロジェクトを作成し、VisualSVN Server上のApacheにデプロイします。
プロジェクト名はSampleProject
、作成先はC:\Projcets\Trac
としています。
$VISUALSVN_INSTALL_PATH = 'C:\Program Files\VisualSVN Server' # デフォルトのプロジェクトを作成 $TRAC_PROJECT_ROOT_PATH = 'C:\Projcets\Trac' $TRAC_DEFAULT_PROJECT_NAME = 'SampleProject' $TRAC_DEFAULT_PROJECT_PATH = Join-Path $TRAC_PROJECT_ROOT_PATH $TRAC_DEFAULT_PROJECT_NAME mkdir $TRAC_PROJECT_ROOT_PATH -Force trac-admin $TRAC_DEFAULT_PROJECT_PATH initenv $TRAC_DEFAULT_PROJECT_NAME sqlite:db/trac.db # ローカルAdministratorを管理者に # ※ここの Administrator、TRAC_ADMIN は大文字小文字を区別するので注意 trac-admin $TRAC_DEFAULT_PROJECT_PATH permission add Administrator TRAC_ADMIN # Apacheの実行ユーザー(NETWORK SERVICE)にアクセス権を与える & { $Acl = Get-Acl -LiteralPath $TRAC_PROJECT_ROOT_PATH $Rule = New-Object System.Security.AccessControl.FileSystemAccessRule("NETWORK SERVICE","FullControl","ContainerInherit,ObjectInherit","None","Allow") $Acl.SetAccessRule($Rule) $Acl | Set-Acl -LiteralPath $TRAC_PROJECT_ROOT_PATH } # プロジェクトのデプロイ trac-admin $TRAC_DEFAULT_PROJECT_PATH deploy $VISUALSVN_INSTALL_PATH
3-3. pthファイルの追加
次に、先程インストールしたPythonからVisualSVNにインストールされているパッケージを読み込むために、独自のpthファイルを追加しておきます。
$VISUALSVN_INSTALL_PATH = 'C:\Program Files\VisualSVN Server' $PYTHON_INSTALL_PATH = 'C:\Python27' # 独自のpthファイル、trac_custom.pth を追加し、SVN関連パッケージのPATHを記載。 @" $((Join-Path $VISUALSVN_INSTALL_PATH "bin") -replace '\\','\\') $((Join-Path $VISUALSVN_INSTALL_PATH "PythonPackages") -replace '\\','\\') "@ -replace "`n","`r`n" | Set-Content (Join-Path $PYTHON_INSTALL_PATH "trac_custom.pth") -Encoding Default
3-4. Apacheの設定
VisualSVN SeverのApacheには、カスタマイズ用に\conf\httpd-custom.conf
という空ファイルがデフォルトで用意されています。
以下のコマンドを実行して、このファイルの内容をカスタマイズします。
今回はWSGIを使う最低限の設定のみ入れていますが、必要に応じて変更しても良いでしょう。
$VISUALSVN_INSTALL_PATH = 'C:\Program Files\VisualSVN Server' # httpd-custom.conf ファイルのカスタマイズ @" # Customize for Trac LoadModule wsgi_module bin/mod_wsgi.so WSGIScriptAlias /trac "$(Join-Path $VISUALSVN_INSTALL_PATH "cgi-bin\trac.wsgi")" <Location "/trac/"> WSGIApplicationGroup %{GLOBAL} </Location> "@ -replace "`n","`r`n" | Set-Content (Join-Path $VISUALSVN_INSTALL_PATH "conf\httpd-custom.conf") -Encoding Default
続けて、\cgi-bin\trac.wsgi
の内容をカスタマイズします。
このファイルは前項のプロジェクトのデプロイ時に作成されているのですが、内容は変更する必要があります。
$VISUALSVN_INSTALL_PATH = 'C:\Program Files\VisualSVN Server' $PYTHON_INSTALL_PATH = 'C:\Python27' $TRAC_PROJECT_ROOT_PATH = 'C:\Projcets\Trac' # trac.wsgi ファイルのカスタマイズ @" #!$(Join-Path $PYTHON_INSTALL_PATH "python.exe") import os os.environ['TRAC_ENV_PARENT_DIR'] = '$($TRAC_PROJECT_ROOT_PATH -replace '\\','\\')' import trac.web.main application = trac.web.main.dispatch_request "@ -replace "`n","`r`n" | Set-Content (Join-Path $VISUALSVN_INSTALL_PATH "cgi-bin\trac.wsgi") -Encoding Default
3.5 VisalSVN Serverの再起動
これで一通りの設定は完了です。
最後にVisalSVN Serverを再起動します。
Stop-Service VisualSVNServer Start-Service VisualSVNServer
4. プロジェクトのカスタマイズ
この時点でhttps://localhost/trac
にアクセスすればTracを利用できるはずです。
ユーザー認証はVisualSVNの認証を引き継いでいます。
ただ、プロジェクトの初期状態ではバナーが非表示であったり、ソース管理の設定がなされていないので、必要に応じてtrac.ini
を修正してやる必要があります。
今回は以下の内容を修正しました。
# ソース管理にSubversionを使用する [components] tracopt.versioncontrol.svn.* = enabled # ロゴをデフォルトのものに設定 [header_logo] src = common/trac_banner.png
これで最低限動作する状態になります。
後は必要に応じてカスタマイズしてください。
*1:Redmineに移行しようと思っているので...