| 1 | = Trac と mod_python = #Tracandmod_python |
| 2 | [[TracGuideToc]] |
| 3 | |
| 4 | Trac では [http://www.modpython.org/ mod_python] を利用可能です。 [http://www.modpython.org/ mod_python] は Trac のレスポンスタイムを飛躍的に向上し、特に [TracCgi CGI] と比べて、 [wiki:TracStandalone tracd]/mod_proxy では使用できない多くの Apache 機能を使えるようにします。 |
| 5 | |
| 6 | 以下の説明は Apache2 のためのものです; まだ Apache1.3 を使用しているなら、 [http://trac.edgewall.org/wiki/TracModPython2.7 TracModPython2.7] にいくつか情報があります。 |
| 7 | |
| 8 | == シンプルなコンフィグレーション == #Simpleconfiguration |
| 9 | |
| 10 | mod_python をインストールしたら、 Apache の設定ファイルに以下の一行を追加してモジュールをロードしなければなりません: |
| 11 | {{{ |
| 12 | LoadModule python_module modules/mod_python.so |
| 13 | }}} |
| 14 | |
| 15 | ''Note: モジュールがインストールされている正しいパスは HTTPD をどこにインストールしたかによって変わります。'' |
| 16 | Debian で apt-get を使用する場合 |
| 17 | {{{ |
| 18 | apt-get install libapache2-mod-python libapache2-mod-python-doc |
| 19 | }}} |
| 20 | (Debian の続き) mod_python をインストールした後に、apache2 (上の Load Module に相当するもの) のモジュールを有効にしなければなりません : |
| 21 | {{{ |
| 22 | a2enmod mod_python |
| 23 | }}} |
| 24 | Fedora で yum を使用する場合: |
| 25 | {{{ |
| 26 | yum install mod_python |
| 27 | }}} |
| 28 | httpd.conf に以下を加えることで、 mod_python がインストールされたかテストすることができます。セキュリティ上の理由から、テストが終わった時点で以下のコンフィグは削除するべきです。 Note: mod_python.testhandler は mod_python 3.2+ で利用可能です。 |
| 29 | {{{ |
| 30 | #!xml |
| 31 | <Location /mpinfo> |
| 32 | SetHandler mod_python |
| 33 | PythonInterpreter main_interpreter |
| 34 | PythonHandler mod_python.testhandler |
| 35 | </Location> |
| 36 | }}} |
| 37 | |
| 38 | mod_python を使用した簡単な Trac のセットアップ方法は以下のようになります: |
| 39 | {{{ |
| 40 | #!xml |
| 41 | <Location /projects/myproject> |
| 42 | SetHandler mod_python |
| 43 | PythonInterpreter main_interpreter |
| 44 | PythonHandler trac.web.modpython_frontend |
| 45 | PythonOption TracEnv /var/trac/myproject |
| 46 | PythonOption TracUriRoot /projects/myproject |
| 47 | </Location> |
| 48 | }}} |
| 49 | |
| 50 | '''`TracUriRoot`''' オプションは不要な場合もあります。 `TracUriRoot` オプションを付けずに試し、 Trac が正しく URL を生成できないか、 "No handler matched request to..." というエラーが出るようであれば '''`TracUriRoot`''' を追加して下さい。 `Location` と '''`TracUriRoot`''' が同じパスになるようにしてください。 |
| 51 | |
| 52 | !PythonOption の一覧は以下の通りです。 |
| 53 | {{{ |
| 54 | # For a single project |
| 55 | PythonOption TracEnv /var/trac/myproject |
| 56 | # For multiple projects |
| 57 | PythonOption TracEnvParentDir /var/trac/myprojects |
| 58 | # For the index of multiple projects |
| 59 | PythonOption TracEnvIndexTemplate /srv/www/htdocs/trac/project_list_tepmlate.html |
| 60 | # A space delimitted list, with a "," between key and value pairs. |
| 61 | PythonOption TracTemplateVars key1,val1 key2,val2 |
| 62 | # Useful to get the date in the wanted order |
| 63 | PythonOption TracLocale en_GB.UTF8 |
| 64 | # See description above |
| 65 | PythonOption TracUriRoot /projects/myproject |
| 66 | # Override default python egg cache location |
| 67 | PythonOption PYTHON_EGG_CACHE /var/trac/myprojects/egg-cache |
| 68 | }}} |
| 69 | |
| 70 | === 認証設定 === #ConfiguringAuthentication |
| 71 | |
| 72 | パスワードファイルを作成して、認証を構成するには [wiki:TracCgi#AddingAuthentication CGI] と同じように行います。 |
| 73 | {{{ |
| 74 | #!xml |
| 75 | <Location /projects/myproject/login> |
| 76 | AuthType Basic |
| 77 | AuthName "myproject" |
| 78 | AuthUserFile /var/trac/myproject/.htpasswd |
| 79 | Require valid-user |
| 80 | </Location> |
| 81 | }}} |
| 82 | |
| 83 | Apache の mod_ldap 認証のコンフィグは少し扱いにくいです。(httpd 2.2.x と OpenLDAP: slapd 2.3.19) |
| 84 | |
| 85 | 1. Apache の httpd.conf に以下のモジュールをロードする必要があります |
| 86 | {{{ |
| 87 | LoadModule ldap_module modules/mod_ldap.so |
| 88 | LoadModule authnz_ldap_module modules/mod_authnz_ldap.so |
| 89 | }}} |
| 90 | |
| 91 | 2. httpd.conf は以下のような感じになります: |
| 92 | |
| 93 | {{{ |
| 94 | #!xml |
| 95 | <Location /trac/> |
| 96 | SetHandler mod_python |
| 97 | PythonInterpreter main_interpreter |
| 98 | PythonHandler trac.web.modpython_frontend |
| 99 | PythonOption TracEnv /home/trac/ |
| 100 | PythonOption TracUriRoot /trac/ |
| 101 | Order deny,allow |
| 102 | Deny from all |
| 103 | Allow from 192.168.11.0/24 |
| 104 | AuthType Basic |
| 105 | AuthName "Trac" |
| 106 | AuthBasicProvider "ldap" |
| 107 | AuthLDAPURL "ldap://127.0.0.1/dc=example,dc=co,dc=ke?uid?sub?(objectClass=inetOrgPerson)" |
| 108 | authzldapauthoritative Off |
| 109 | require valid-user |
| 110 | </Location> |
| 111 | }}} |
| 112 | |
| 113 | Microsoft Active Directory の LDAP インタフェースを使用する場合: |
| 114 | |
| 115 | {{{ |
| 116 | #!xml |
| 117 | <Location /trac/> |
| 118 | SetHandler mod_python |
| 119 | PythonInterpreter main_interpreter |
| 120 | PythonHandler trac.web.modpython_frontend |
| 121 | PythonOption TracEnv /home/trac/ |
| 122 | PythonOption TracUriRoot /trac/ |
| 123 | Order deny,allow |
| 124 | Deny from all |
| 125 | Allow from 192.168.11.0/24 |
| 126 | AuthType Basic |
| 127 | AuthName "Trac" |
| 128 | AuthBasicProvider "ldap" |
| 129 | AuthLDAPURL "ldap://adserver.company.com:3268/DC=company,DC=com?sAMAccountName?sub?(objectClass=user)" |
| 130 | AuthLDAPBindDN ldap-auth-user@company.com |
| 131 | AuthLDAPBindPassword "the_password" |
| 132 | authzldapauthoritative Off |
| 133 | # require valid-user |
| 134 | require ldap-group CN=Trac Users,CN=Users,DC=company,DC=com |
| 135 | </Location> |
| 136 | }}} |
| 137 | |
| 138 | Note 1: このケースでは LDAP 検索で複数の OU をまとめて取得するために、 AD のグローバルカタログサーバ (Global Catalog Server) に接続しています (ポート番号が通常 LDAP で使用される 389 ではなく 3268 であることに注意してください) 。 GCS は基本的に "平らな" ツリーであり、ユーザが、どの OU に属するか不明な場合でも検索することができます。 |
| 139 | |
| 140 | Note 2: Active Directory は、レコードにアクセスするために user/password (AuthLDAPBindDN と AuthLDAPBindPassword) による認証を必要とします。 (訳注: GC ではなく、通常の LDAP であれば Active Directory の ACL に認証なしユーザからの読み取り許可を設定すれば不要です) |
| 141 | |
| 142 | Note 3: "require ldap-group ..." ディレクティブはメンバのアクセスが許可されている AD のグループを指定します。 |
| 143 | |
| 144 | |
| 145 | |
| 146 | === !PythonPath を設定する === #SettingthePythonPath |
| 147 | |
| 148 | もし Trac のインストールが、通常の Python ライブラリのパスの中に無い場合、 Apache が Trac の mod_python ハンドラを見つけられるように `PythonPath` ディレクティブで指定しなければなりません: |
| 149 | {{{ |
| 150 | #!xml |
| 151 | <Location /projects/myproject> |
| 152 | ... |
| 153 | PythonPath "sys.path + ['/path/to/trac']" |
| 154 | ... |
| 155 | </Location> |
| 156 | }}} |
| 157 | |
| 158 | !PythonPath ディレクティブを使用するときは気をつけてください。そして、 `SetEnv PYTHONPATH` は動かないので ''使用しない'' で下さい。 |
| 159 | |
| 160 | == マルチプロジェクトのセットアップ == #Settingupmultipleprojects |
| 161 | |
| 162 | Trac の mod_python ハンドラには Subversion の `SvnParentPath` とよく似た `TracEnvParentDir` というコンフィグレーションオプションがあります。 |
| 163 | {{{ |
| 164 | #!xml |
| 165 | <Location /projects> |
| 166 | SetHandler mod_python |
| 167 | PythonInterpreter main_interpreter |
| 168 | PythonHandler trac.web.modpython_frontend |
| 169 | PythonOption TracEnvParentDir /var/trac |
| 170 | PythonOption TracUriRoot /projects |
| 171 | </Location> |
| 172 | }}} |
| 173 | |
| 174 | `/projects` の URL をリクエストすると、 TracEnvironment の親ディレクトリ `TracEnvParentDir` として設定したディレクトリ配下のサブディレクトリ一覧が表示されます。その一覧から何かプロジェクトを選択するとそれに該当する TracEnvironment を開くことができます。 |
| 175 | |
| 176 | あなたのプロジェクトのホームページとして、サブディレクトリのリストが必要ないならば、以下のようにすることができます |
| 177 | {{{ |
| 178 | #!xml |
| 179 | <LocationMatch "/.+/"> |
| 180 | }}} |
| 181 | |
| 182 | これは !DocumentRoot フォルダの直下にカスタムホームページとして配置されていない場合には、すべてのロケーションで代わりに mod_python を使用することを Apache に教えます。 |
| 183 | |
| 184 | すべてのプロジェクトに対して、 `<LocationMatch>` ディレクティブを使用することによって同じ認証の仕組みを使用することができます。 |
| 185 | {{{ |
| 186 | #!xml |
| 187 | <LocationMatch "/projects/[^/]+/login"> |
| 188 | AuthType Basic |
| 189 | AuthName "Trac" |
| 190 | AuthUserFile /var/trac/.htpasswd |
| 191 | Require valid-user |
| 192 | </LocationMatch> |
| 193 | }}} |
| 194 | |
| 195 | == 仮想ホストの設定 == #VirtualHostConfiguration |
| 196 | |
| 197 | 以下に示す例は Trac を仮想サーバーとしてセットアップするときに必要な設定です。 (例えば、!http://trac.mycompany.com といった |
| 198 | URL でアクセスすることができます): |
| 199 | |
| 200 | {{{ |
| 201 | #!xml |
| 202 | <VirtualHost * > |
| 203 | DocumentRoot /var/www/myproject |
| 204 | ServerName trac.mycompany.com |
| 205 | <Location /> |
| 206 | SetHandler mod_python |
| 207 | PythonInterpreter main_interpreter |
| 208 | PythonHandler trac.web.modpython_frontend |
| 209 | PythonOption TracEnv /var/trac/myproject |
| 210 | PythonOption TracUriRoot / |
| 211 | </Location> |
| 212 | <Location /login> |
| 213 | AuthType Basic |
| 214 | AuthName "MyCompany Trac Server" |
| 215 | AuthUserFile /var/trac/myproject/.htpasswd |
| 216 | Require valid-user |
| 217 | </Location> |
| 218 | </VirtualHost> |
| 219 | }}} |
| 220 | |
| 221 | `<Location>` の代わりに `<LocationMatch>` を使用してログインで問題が発生する場合 |
| 222 | |
| 223 | 複数のプロジェクトをサポートする仮想ホストの設定では、 "`TracEnv`" /var/trac/myproject を "`TracEnvParentDir`" /var/trac/ に置き換えて下さい。 |
| 224 | |
| 225 | Note: !DocumentRoot should not point to your Trac project env. As Asmodai wrote on #trac: "suppose there's a webserer bug that allows disclosure of !DocumentRoot they could then leech the entire Trac environment". |
| 226 | |
| 227 | == トラブルシューティング == #Troubleshooting |
| 228 | |
| 229 | サーバエラーのページがでたときには、 まずは Apache のエラーログを確認するか、 `PythonDebug` オプションを有効にして下さい: |
| 230 | {{{ |
| 231 | #!xml |
| 232 | <Location /projects/myproject> |
| 233 | ... |
| 234 | PythonDebug on |
| 235 | </Location> |
| 236 | }}} |
| 237 | |
| 238 | 複数プロジェクトの場合は、全てのプロジェクトでサーバを再起動してみてください。 |
| 239 | |
| 240 | === Expat-related のセグメンテーションフォルト === #expat |
| 241 | |
| 242 | この問題は Unix 上で Python 2.4 を使用するとき、ほぼ確実に発生します。 |
| 243 | Python 2.4 の使用する Expat (C で書かれた XML パーザライブラリ) と Apache の使用する Expat のバージョンが異なる場合に、セグメンテーションフォルトが発生します。 |
| 244 | Trac 0.11 は Genshi (間接的に Expat が使用される) を使用しているため、以前 Trac 0.10 で正常に動いていたとしても、現在のあなたの環境で問題が起こり得ます。 |
| 245 | |
| 246 | Graham Dumpleton が、この問題について詳しく書いています。問題の [http://www.dscpl.com.au/wiki/ModPython/Articles/ExpatCausingApacheCrash 説明と回避方法] を確認してください。 |
| 247 | |
| 248 | === フォームを送信するときの問題 === #Formsubmissionproblems |
| 249 | |
| 250 | もし、 Trac で何かしらのフォームを送信したときに、トラブルに見舞われたら (送信後にスタートページにリダイレクトされてしまう、などがよくある問題です) {{{DocumentRoot}}} の中に mod_python をマッピングしたパスと同じフォルダやファイルが存在しないか確認してください。どういうわけか、 mod_python は静的リソースと同じところにマッピングされると混乱してしまいます。 |
| 251 | |
| 252 | === 仮想ホストの設定においての問題 === #Problemwithvirtualhostconfiguration |
| 253 | |
| 254 | <Location /> ディレクティブが使用されている場合に `DocumentRoot` を設定すると ''403 (Forbidden)'' エラーになることがあります。 `DocumentRoot` ディレクティブを削除するか、アクセスが許されているディレクトリに設定されているかどうかを確認して下さい (対応する `<Directory>` ブロックにて) |
| 255 | |
| 256 | <Location /> で `SetHandler` を使用すると、すべてを mod_python でハンドルすることになりますが、いかなる CSS も image/icons もダウンロードできなくなります。この問題を回避するために、われわれは <Location /trac> で `SetHandler None` を使用しています。しかし、この方法がエレガントな解決方法だとは思っていません。 |
| 257 | |
| 258 | === .htaccess ファイルを使用する === #Using.htaccess |
| 259 | |
| 260 | ディレクトリの設定をほんのちょっと修正するには `.htaccess` ファイルを使用すればいいかもしれませんが、これは動作しません。 Apache が Trac の URL に "/" (スラッシュ) を追加すると、正しい動作を妨げてしまいます。 |
| 261 | |
| 262 | それでは、 mod_rewrite を使用すればいいように見えますが、これも動作しません。とにかく、百害あって一理なしです。指示に従ってください。 :) |
| 263 | |
| 264 | === Win32 での特記 === #Win32Issues |
| 265 | Windows 上で mod_python 3.2 より前のバージョンで Trac を動かしている場合、添付ファイルのアップロードが '''動かない''' でしょう。この問題は 3.1.4 以降で解決されました。 mod_python をアップグレードしてこの問題を解決してください。 |
| 266 | |
| 267 | |
| 268 | === OS X での特記 === #OSXissues |
| 269 | |
| 270 | OS X で mod_python を使用するとき、 `apachectl restart` コマンドで Apache の再起動ができないでしょう。これは、 mod_python 3.2 でおそらく修正されるでしょう。しかし、 [http://www.dscpl.com.au/projects/vampire/patches.html ここ] にあるパッチを適用すれば、 3.2 以前のバージョンでもこの問題を回避できます。 |
| 271 | |
| 272 | === SELinux での特記 === #SELinuxissues |
| 273 | |
| 274 | もし、 Trac が ''Cannot get shared lock on db.lock'' というようなメッセージが出力したら、 |
| 275 | リポジトリに セキュリティコンテキストを設定する必要があるでしょう: |
| 276 | |
| 277 | {{{ |
| 278 | chcon -R -h -t httpd_sys_content_t PATH_TO_REPOSITORY |
| 279 | }}} |
| 280 | |
| 281 | [[http://subversion.tigris.org/faq.html#reposperms]] も参考にして下さい |
| 282 | |
| 283 | === FreeBSD での特記 === #FreeBSDissues |
| 284 | mod_python と sqlite パッケージのインストールバージョンに注意して下さい。 Ports には両パッケージともいろいろなバージョンがありますが、初期の pysqlite と mod_python は組み合わせることができません。前者は python のスレッド機能サポートが必要ですし、 後者 は python のスレッド機能なしのインストールが必要です。 |
| 285 | |
| 286 | apache2 を普通にコンパイルしてインストールした場合、 apache はスレッドのサポートなしになります (これが FreeBSD 上であまりよく動かない原因)。 --enable-threads を使用して ./configure を実行することで apache にスレッドのサポートありにすることができますが、これはお勧めできません。 |
| 287 | 最良のオプションは /usr/local/apache2/bin/ennvars に下記の一行を追加することだと [[http://modpython.org/pipermail/mod_python/2006-September/021983.html 考えられます。]] |
| 288 | |
| 289 | {{{ |
| 290 | export LD_PRELOAD=/usr/lib/libc_r.so |
| 291 | }}} |
| 292 | |
| 293 | === Subversion での特記 === #Subversionissues |
| 294 | |
| 295 | コマンドラインや TracStandalone で使用しているときは動くのに、 mod_python を使用しているときのみ、 `Unsupported version control system "svn"` というエラーが出力される場合、 [wiki:"TracModPython#SettingthePythonPath" PythonPath] ディレクティブに Python bindings へのパスを追加するのを忘れている可能性があります。 (Python の `site-packages` ディレクトリに Python binding へのリンクを追加するか、 `.pth` ファイルを作っておくのがベターです。) |
| 296 | |
| 297 | これに当てはまらない場合、使用している Subversion のライブラリが Apache が使用しているバージョンと適合性がないかもしれません。 (たいてい `apr` ライブラリの不適合性が原因になります。) その場合、 Apache の svn モジュール (`mod_dav_svn`) も使用できないでしょう。 |
| 298 | |
| 299 | また、ランタイムエラー ({{{argument number 2: a 'apr_pool_t *' is expected}}}) を抑止するためにも、複数のサブインタプリタを使用できる最近のバージョンの `mod_python` が必要になります。 3.2.8 では ''たぶん'' 動きますが、 [http://trac.edgewall.org/ticket/3371 #3371] に記述されている通り、メインインタプリタを使用するように強制するワークアラウンドを使用する方がおそらく良いでしょう: |
| 300 | {{{ |
| 301 | PythonInterpreter main_interpreter |
| 302 | }}} |
| 303 | これは、よく知られている mod_python と Subversion の Python バインディングの他の問題 ([http://trac.edgewall.org/ticket/2611 #2611], [http://trac.edgewall.org/ticket/3455 #3455]) について推奨しているワークアラウンドです。 [http://trac.edgewall.org/ticket/3455#comment:9 #3455] Graham Dumpleton のコメントに問題点が指摘されています。 |
| 304 | |
| 305 | === ページレイアウトの問題 === #Pagelayoutissues |
| 306 | |
| 307 | Trac のページフォーマットが奇妙に見えるなら、ページレイアウトを管理するスタイルシートが Web サーバによって適切に扱われていない可能性が考えられます。 Apache のコンフィグに以下を追加してみてください: |
| 308 | {{{ |
| 309 | #!xml |
| 310 | Alias /myproject/css "/usr/share/trac/htdocs/css" |
| 311 | <Location /myproject/css> |
| 312 | SetHandler None |
| 313 | </Location> |
| 314 | }}} |
| 315 | |
| 316 | Note: 上記のコンフィグが効果を発揮するためには、プロジェクトの root 位置のコンフィグ後に追加しなければなりません。つまり {{{<Location /myproject />}}} 以降です。 |
| 317 | |
| 318 | === HTTPS の問題 === #HTTPSissues |
| 319 | |
| 320 | Trac を完全に https で実行したいにも関わらず、プレーンな http にリダイレクトされる場合、 Apache のコンフィグに以下を追加してください: |
| 321 | {{{ |
| 322 | #!xml |
| 323 | <VirtualHost * > |
| 324 | DocumentRoot /var/www/myproject |
| 325 | ServerName trac.mycompany.com |
| 326 | SetEnv HTTPS 1 |
| 327 | .... |
| 328 | </VirtualHost> |
| 329 | }}} |
| 330 | |
| 331 | === Fedora 7 の問題 === #Fedora7Issues |
| 332 | 必ず 'python-sqlite2' をインストールしてください。 TracModPython では必須です (tracd では必須ではありません)。 |
| 333 | |
| 334 | |
| 335 | === php5-mhash または その他の php5 モジュールのセグメンテーションフォルト === #Segmentationfaultwithphp5-mhashorotherphp5modules |
| 336 | php5-mhash モジュールがインストールされている場合、 (debian etch について報告された) セグメンテーションフォルトに遭遇するでしょう。 php-mhash を削除して、問題が解決するかを確かめてみてください。 debian のバグレポート [[http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=411487]] を参考にして下さい。 |
| 337 | |
| 338 | システムライブラリの代わりに、サードパーティのライブラリでコンパイルされた php5 を使用する一部の人々にもトラブルが発生します。ここを確認してください [[http://www.djangoproject.com/documentation/modpython/#if-you-get-a-segmentation-fault]] |
| 339 | |
| 340 | ---- |
| 341 | See also: TracGuide, TracInstall, TracCgi, TracFastCgi |