Linux 環境で ASP.NET を実行するには
Linux 環境でも mono をインストールすることで .NET を利用出来るようになりますが、更に xsp や mod_mono をインストールすることで ASP.NET も利用出来るようになります。mono は Windows、Mac OS X、openSUSE、Solaris、Redhat など、各種プラットフォームに提供されています。ここでは CentOS 5.5 (64bit)へのインストールを前提にします。また、必要に応じて iptables や SELinux の設定を調整してあり、Apache もインストール済みとします。
インストール
CentOS 向けの mono パッケージは Novell のサイトで提供されています。Novell のサイトから wget し、rpm でインストールします。wget のオプションの意味ですが、"-A rpm" は「拡張子を rpm に限定」、"-nd" は「ディレクトリを作成しない」、"-r" は「ディレクトリを再帰的に辿って対象を保存する」ことを意味します。
| sudo yum -y install giflib-devel
mkdir mono
cd mono
wget -A rpm -nd -r http://ftp.novell.com/pub/mono/download-stable/RHEL_5/x86_64/
wget http://ftp.novell.com/pub/mono/download-stable/RHEL_5/noarch/mono-addon-xsp-2.6.5-4.6.noarch.rpm
sudo rpm -ivh *.rpm
|
Novell で配布されている RPM からインストールした場合、mono は /opt/novell/mono/bin/ にインストールされてしまいましたので、ここへパスを通します。修正前の ~/.bash_profile は以下のようになっていました。
1
2
3
4
5
6
7
8
9
10
11
12 | # .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
|
パス(PATH)の定義を以下のように変更します(":/opt/novell/mono/bin/" を追記します)。
| PATH=$PATH:$HOME/bin:/opt/novell/mono/bin/
|
httpd.conf への追記
httpd.conf へ下記を追記し、xsp パッケージに添付されているデモサイトを閲覧出来るようにします。同時に ASP.NET 1.1 では無く ASP.NET 2.0 が動作するよう、MonoServerPath も指定しておきます。
| MonoServerPath /opt/novell/mono/bin/mod-mono-server2
Alias /demo "/opt/novell/mono/lib/xsp/test/"
MonoApplications "/demo:/opt/novell/mono/lib/xsp/test/"
<Location /demo>
SetHandler mono
</Location>
|
確認
ブラウザから該当ディレクトリにアクセスすると xsp のサンプルが ASP.NET 2.0 として動作していることが確認出来ます。
"Failed to connect to mod-mono-server after several attempts to spawn the process." メッセージが出る場合
ブラウザから動作確認しようとすると、Apache のログファイルに "Failed to connect to mod-mono-server after several attempts to spawn the process." と表示され、正常に動作しない場合がありました。
| [Sat Oct 23 07:05:58 2010] [notice] Digest: done
[Sat Oct 23 07:05:58 2010] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
[Sat Oct 23 07:08:11 2010] [notice] caught SIGTERM, shutting down
[Sat Oct 23 07:08:12 2010] [notice] SELinux policy enabled; httpd running as context user_u:system_r:httpd_t
[Sat Oct 23 07:08:12 2010] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sat Oct 23 07:08:12 2010] [notice] Digest: generating secret for digest authentication ...
[Sat Oct 23 07:08:12 2010] [notice] Digest: done
[Sat Oct 23 07:08:12 2010] [notice] Apache/2.2.3 (CentOS) configured -- resuming normal operations
[Sat Oct 23 07:08:25 2010] [error] Failed to connect to mod-mono-server after several attempts to spawn the process.
[Sat Oct 23 07:08:38 2010] [error] Failed to connect to mod-mono-server after several attempts to spawn the process.
|
SELinux が有効になっているとこのような結果になる場合があるようで、SELinux を適切に設定するか、もしくは SELinux 自体を無効にすることで mod_mono を正常に動作させることが出来ます。以下は SELinux を無効化する例です。
| # sudo /usr/sbin/getenforce
Enforcing
# sudo /usr/sbin/setenforce 0
# sudo /usr/sbin/getenforce
Permissive
|