Skip to content

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" は「ディレクトリを再帰的に辿って対象を保存する」ことを意味します。

1
2
3
4
5
6
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/" を追記します)。

1
PATH=$PATH:$HOME/bin:/opt/novell/mono/bin/

httpd.conf への追記

httpd.conf へ下記を追記し、xsp パッケージに添付されているデモサイトを閲覧出来るようにします。同時に ASP.NET 1.1 では無く ASP.NET 2.0 が動作するよう、MonoServerPath も指定しておきます。

1
2
3
4
5
6
7
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 として動作していることが確認出来ます。

file

"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." と表示され、正常に動作しない場合がありました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[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 を無効化する例です。

1
2
3
4
5
# sudo /usr/sbin/getenforce
Enforcing
# sudo /usr/sbin/setenforce 0
# sudo /usr/sbin/getenforce
Permissive