Raison d’être

電脳硬化症気味な日記です。まとまった情報は wiki にあります。

2012.7.8 (Sunday)

at 10:09  

CentOS 6.2 64bit にmono を導入成功!   [ICTメモ]

 CentOS 6.2 64bitにApache Tomcatを導入した際にもトラブルに悩まされましたが、ASP.NETアプリの実行環境 mod_mono を導入するのにも、かなり苦労しました。備忘のためメモを残します。

(1st trial)
 Mono Project Web Siteには勿論、他のWebサイトでも、RHEL6用のbinary packageが見つからなかったので、最新の mono-2.11.2, xsp-2.10.2, mod_mono-2.10 のソースファイルを組合せてbuildしようとしてみたものの、「monoliteがout-of-dateです」等のエラーにより、makeできず。

(2nd trial)
 EPELのrpm repositoryで、mono-2.4.3のRPMを発見したので、xsp-2.4.3, mod_mono-2.4.3 のソースファイルと組み合わせてみたところ、「mod_mono_server_default(Socket File)が見つからない」とかで、mod-mono-server2が起動せず。確かにそんなファイルはできていませんでしたが…

(3rd trial)
 CentOS 6.2 64bitにmono-2.6.7をインストールした記事を発見。ただし、紹介されているRHEL5用のRPMは「rpmReadSignature failed: sigh load:BAD」とかでinstallできず。
 mono-2.6.7, xsp-2.6.5, mod_mono-2.6.3 のソースコードをbuildすることにした。そして、ASP.NETアプリ実行時に gdiplus.dll が必要になるので、libgdiplus-2.6.7 も事前にインストールしておく。更に、(build errorにはならないが) libgdiplusが各種画像フォーマットをサポートするためには、各画像ライブラリの開発者用ツールがinstallされている必要がある。

$ sudo yum -y install libexif-devel libjpeg-devel libpng-devel libtiff-devel giflib-devel
$ export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:/usr/lib/pkgconfig
$ wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.6.7.tar.bz2
$ tar xjf libgdiplus-2.6.7.tar.bz2 ; cd libgdiplus-2.6.7
$ ./configure -prefix=/usr ; make
$ sudo make install ; sudo checkinstall
$ sudo yum localinstall ~/rpmbuild/RPMS/x86_64/libgdiplus-2.6.7-1.x86_64.rpm
$ su -
# ldconfig

 最後に"ldconfig"を実行してキャッシュを再構築しないと、libgdiplus.soが有効にならない、のには参った。

$ wget http://download.mono-project.com/sources/mono/mono-2.6.7.tar.bz2
$ tar xjf mono-2.6.7.tar.bz2 ; cd mono-2.6.7
$ ./configure -prefix=/usr ; make
$ sudo make install ; sudo checkinstall
$ sudo yum localinstall ~/rpmbuild/RPMS/x86_64/mono-2.6.7-1.x86_64.rpm

 buildには結構時間がかかる。10分程度?

$ wget http://download.mono-project.com/sources/xsp/xsp-2.6.5.tar.bz2
$ tar xjf xsp-2.6.5.tar.bz2 ; cd xsp-2.6.5
$ ./configure -prefix=/usr ; make
$ sudo make install ; sudo checkinstall
$ sudo yum localinstall ~/rpmbuild/RPMS/x86_64/xsp-2.6.5-1.x86_64.rpm

 xspはmod-mono-server2のために必要。

$ wget http://download.mono-project.com/sources/mod_mono/mod_mono-2.6.3.tar.bz2
$ tar xjf mod_mono-2.6.3.tar.bz2 ; cd mod_mono-2.6.3
$ ./configure -prefix=/usr ; make
$ sudo make install ; sudo checkinstall
$ sudo yum localinstall ~/rpmbuild/RPMS/x86_64/mod_mono-2.6.3-1.x86_64.rpm
$ su -
# mv /etc/httpd/conf/mod_mono.conf /etc/httpd/conf.d/mono.conf
# vim /etc/httpd/conf.d/mono.conf

 mono.confに下記を追記

MonoAutoApplication disabled
MonoSetEnv LANG=ja_JP.UTF-8
 
 …
 
# MonoAutoApplicationが有効なら、下記の「MonoServerPath (default)」以外は不要。
Alias /testapp01 /path/to/testapp01
MonoApplications dotnet20 "/testapp01:/path/to/testapp01"
MonoServerPath dotnet20 /usr/bin/mod-mono-server2
<Location /testapp01>
 MonoSetServerAlias dotnet20
 SetHandler mono
 <IfModule mod_headers.c>
  Header set X-Powered-By "Mono"
 <IfModule>
</Location>

 「MonoAutoApplicationを有効」にして、DocumentRoot配下の全ASP.NETアプリを有効にする手段もあるが、.NET version違いのアプリを共存させるためには、MonoServerPath, MonoSetServerAlias をアプリ個別に指定する必要があろう。 複数instanceの並行稼動はpassenger-3.2から対応で、passenger-3.0では非対応みたい。だから、Alias指定を省いた下記で好し。

MonoServerPath /usr/bin/mod-mono-server2
Alias /testapp01 /path/to/testapp01
MonoApplications "/testapp01:/path/to/testapp01"
<Location /testapp01>
 SetHandler mono
 <IfModule mod_headers.c>
  Header set X-Powered-By "Mono"
 <IfModule>
</Location>

 それと、httpd.confの「Include conf.d/*.conf」行を、「User apache」「Group users」行よりも後(下)に移動することも必要らしい。どうせなら、httpd.confの最後でいい。

 以上で、.NET 2.0のASP.NETアプリが起動するようになった。


« HONDAには、ワクワク感を期待す…
checkinstall on C… »
  trackback:    



Go back.