Microsoft Windowsの .NET用に開発した Webアプリケーションを動作させるため、.NET互換のオープンソースフレームワーク Mono とアプリケーションサーバー XSP を CentOSサーバーにインストールします。

必要パッケージのインストール

Monoおよび関連ソフトウェアはソースファイルからコンパイルしてインストールします。
コンパイルする際に必要となるパッケージをインストールします。
《先頭文字 \:rootユーザー、$:一般ユーザーでの実行になります》
$ sudo yum -y install \
>   make     \
>   gcc-c++" \
>   glib2-devel   \
>   libpng-devel  \
>   libjpeg-devel \
>   giflib-devel  \
>   libtiff-devel \
>   libexif-devel \
>   libX11-devel  \
>   fontconfig-devel \
>   gettext

autoconfのインストール

configureスクリプト自動生成ツール autoconf のバージョンが古いと、GDI拡張ライブラリのインストールでコンパイルエラーが発生します。
GNUプロジェクト autoconfサイト から autoconf 2.68 以上 を /usr/local/src にダウンロードしてインストールを行います。
※ /usr/local/srcには、インストールするユーザーで書き込み権限を設定しています。
《先頭文字 \:rootユーザー、$:一般ユーザーでの実行になります》
$ cd /usr/local/src
# 2013/11/17時点での最新バージョンをダウンロードしています
$ wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz

# ファイルを展開して、コンパイルを行います
# yumでインストールされている autoconf と競合しないよう path の通っていない場所にインストール先を変えています
$ tar xzvf autoconf-2.69.tar.gz
$ cd autoconf-2.69
$ ./configure \
>   --prefix=/opt \
>   2>&1 | tee configure.log
$ make 2>&1 | tee make.log

# root権限でインストールを行います
# pacoでパッケージ管理を行っています
$ sudo env PATH=$PATH paco -D make install 2>&1 | tee make_install.log

# ダウンロードファイルを削除します
$ cd ..
$ rm autoconf-2.69.tar.gz

GDI拡張ライブラリのインストール

画像処理関係の機能を処理するため GitHub から GDI拡張ライブラリ libgdi+のソールファイルを /usr/local/src にダウンロードしてインストールを行います。
※ /usr/local/srcには、インストールするユーザーで書き込み権限を設定しています。
《先頭文字 \:rootユーザー、$:一般ユーザーでの実行になります》
$ cd /usr/local/src
$ wget https://github.com/mono/libgdiplus/archive/master.zip \
>  -O libgdiplus-master.zip

# ファイルを展開して、コンパイルを行います
$ unzip libgdiplus-master.zip
$ cd libgdiplus-master
$ /opt/bin/autoreconf -fiv
$ ./configure \
>   2>&1 | tee configure.log
$ make 2>&1 | tee make.log

# root権限でインストールを行います
# pacoでパッケージ管理を行っています
$ sudo env PATH=$PATH paco -p libgdiplus make install 2>&1 | tee make_install.log

# ダウンロードファイル/インストールフォルダーを削除します
$ cd ..
$ rm libgdiplus-master.zip
$ rm -rf libgdiplus-master

Mono本体のインストール

Monoプロジェクト公式サイト から Mono本体のソールファイルを /usr/local/src にダウンロードしてインストールを行います。
※ /usr/local/srcには、インストールするユーザーで書き込み権限を設定しています。
《先頭文字 \:rootユーザー、$:一般ユーザーでの実行になります》
$ cd /usr/local/src
# 2013/11/17時点での最新バージョンをダウンロードしています
$ wget http://download.mono-project.com/sources/mono/mono-3.2.3.tar.bz2

# ファイルを展開して、コンパイルを行います
$ tar xjvf /home/src/mono/mono-3.2.3.tar.bz2
$ cd mono-3.2.3
$ ./configure \
>   --with-libgdiplus=/usr/local/lib/libgdiplus.la \
>   2>&1 | tee configure.log
$ make 2>&1 | tee make.log

# root権限でインストールを行います
# pacoでパッケージ管理を行っています
$ sudo env PATH=$PATH paco -D make install 2>&1 | tee make_install.log

# ダウンロードファイル/インストールフォルダーを削除します
$ cd ..
$ rm mono-3.2.3.tar.bz2
$ rm -rf mono-3.2.3

アプリケーションサーバーのインストール

ASP.NETのアプリケーションを動作させるため Monoプロジェクト公式サイト からアプリケーションサーバー XSP を /usr/local/src にダウンロードしてインストールを行います。
※ /usr/local/srcには、インストールするユーザーで書き込み権限を設定しています。
《先頭文字 \:rootユーザー、$:一般ユーザーでの実行になります》
$ cd /usr/local/src
# 2013/11/17時点での最新バージョンをダウンロードしています
$ wget http://download.mono-project.com/sources/xsp/xsp-2.10.2.tar.bz2

# ファイルを展開して、コンパイルを行います
$ tar xjvf /home/src/mono/xsp-2.10.2.tar.bz2
$ cd xsp-2.10.2
$ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig \
> ./configure \
>   2>&1 | tee configure.log
$ make 2>&1 | tee make.log

# root権限でインストールを行います
# pacoでパッケージ管理を行っています
$ sudo env PATH=$PATH paco -D make install 2>&1 | tee make_install.log

# ダウンロードファイル/インストールフォルダーを削除します
$ cd ..
$ rm xsp-2.10.2.tar.bz2
$ rm -rf xsp-2.10.2

Apache連携モジュールのインストール

HTTPサーバー Apacheとアプリケーションサーバー xspを連携させるため GitHub から Apache連携モジュール mod_mono を /usr/local/src にダウンロードしてインストールを行います。
※ /usr/local/srcには、インストールするユーザーで書き込み権限を設定しています。
《先頭文字 \:rootユーザー、$:一般ユーザーでの実行になります》
$ cd /usr/local/src
$ wget https://github.com/mono/mod_mono/archive/master.zip \
>  -O mod_mono-master.zip

# ファイルを展開して、コンパイルを行います
$ unzip mod_mono-master.zip
$ cd mod_mono-master
$ ./autogen.sh \
>   2>&1 | tee configure.log
$ make 2>&1 | tee make.log

# root権限でインストールを行います
# pacoでパッケージ管理を行っています
$ sudo env PATH=$PATH paco -p mod_mono make install 2>&1 | tee make_install.log

# ダウンロードファイル/インストールフォルダーを削除します
$ cd ..
$ rm mod_mono-master.zip
$ rm -rf mod_mono-master

# システム共通のレジストリディレクトリを作成します
$ sudo mkdir /usr/local/etc/mono/registry
$ sudo chown apache.apache /usr/local/etc/mono/registry
$ sudo chmod 700 /usr/local/etc/mono/registry

動作確認用アプリケーションの配置

動作確認用に Microsoft Visual Studio Express 2013 for WebASP.NET MVC 4 Webアプリケーション - 空プロジェクトテンプレート で作成した HelloWorld を CentOSサーバーに配置してみます。
配置先のディレクトリを /var/mono/app/mvc/helloworld にしています。
《先頭文字 \:rootユーザー、$:一般ユーザーでの実行になります》
$ sudo mkdir -p  /var/mono/app/mvc
$ sudo chmod 777 /var/mono/app/mvc
$ cd /var/mono/app/mvc

# 当サイトで準備している動作確認用アプリケーションを用いて配置しています
$ wget http://www.system-act.com/archives/dotnet/asp/mvc/helloworld.zip
$ unzip helloworld.zip

HTTPサーバー Apacheの設定

ASP.NETのアプリケーションを HTTPサーバー Apacheで動作させるための設定を行います。
なお、ASP.NETアプリケーションは Apacheの仮想ホスト環境で動作させる設定にしています。
例として仮想ホスト名は mono.system-act.com にしています。

Apacheの設定ファイルに mod_monoの設定を追加します。
※ ディレクトリや設定は当サイトの環境のもので、Apacheをソースからインストールしています。
/usr/local/apache2/conf/httpd.conf ...《root権限で編集しています》
     :

# ASP.NET Framework
Include conf/mod_mono.conf

ASP.NETのアプリケーション用の仮想ホスト mono.system-act.comを追加します。
※ ディレクトリや設定は当サイトの環境のもので、Apacheをソースからインストールしています。
/usr/local/apache2/conf/extra/httpd-vhosts.conf ...《root権限で編集しています》
     :

<VirtualHost 192.168.11.11:80>
  ServerName     mono.system-act.com
  ServerAdmin    webmaster@system-act.com
  ErrorLog      "| /usr/sbin/cronolog \
                     -l /var/log/httpd/vhosts/system-act.com/mono/error_log \
                        /var/log/httpd/vhosts/system-act.com/mono/error_log-%Y%m%d"
  CustomLog     "| /usr/sbin/cronolog \
                     -l /var/log/httpd/vhosts/system-act.com/mono/access_log \
                        /var/log/httpd/vhosts/system-act.com/mono/access_log-%Y%m%d" combined env=!nolog
  Include       "conf/extra/vhosts/mono.system-act.com.conf"
</VirtualHost>

ASP.NETのアプリケーション用の仮想ホスト mono.system-act.comの定義ファイルを作成します。
※ ディレクトリや設定は当サイトの環境のもので、Apacheをソースからインストールしています。
/usr/local/apache2/conf/extra/vhosts/mono.system-act.com.conf ...《root権限で編集しています》
# ==========================================================================================
# File    : /usr/local/apache2/conf/extra/vhosts/mono.system-act.com.conf
# Author  : System House ACT
#
# HTTPサーバー Apache 仮想ホスト mono.system-act.com の定義ファイル
#
# Copyright 2013 System House ACT All rights reserved.
# ==========================================================================================

# ASP.NETのプロジェクトファイルによる自動実行機能を無効にしています
MonoAutoApplication disabled

# アプリケーションサーバー XSP のパスを指定しています
MonoServerPath     "/usr/local/bin/mod-mono-server4"

# アプリケーションの配置情報を指定しています
# アプリケーション /helloworld は /var/mono/app/mvc/helloworld に配置されています
MonoApplications default "/application:/var/mono/app/mvc/helloworld"

# Monoとの連携を定義しています
# http://[ホスト名]/helloworld でアクセスした場合に Mono で動作させます
# 配置情報名 default の配置情報定義を使用します
<Location /helloworld>
  SetHandler         mono
  MonoSetServerAlias default
</Location>

Mono 3.x / XSP 2.10 / Mod_Mono 2.10の組み合わせで MVCアプリケーションにアクセスすると発生するエラーの対応を行います。
※ ディレクトリや設定は当サイトの環境のものです。
《先頭文字 \:rootユーザー、$:一般ユーザーでの実行になります》
# 下記のエラーに対応します
# Could not load file or assembly 'System.Web.Extensions, Version=4.0.0.0

$ sudo vi /usr/local/bin/mod-mono-server4
----------(vi ここから)----------
#!/bin/sh
exec /usr/local/bin/mono $MONO_OPTIONS "/usr/local/lib/mono/4.5/mod-mono-server4.exe" "$@"
----------(vi ここまで)----------

$ sudo ln -s /usr/local/lib/mono/4.0/mod-mono-server4.exe \
>            /usr/local/lib/mono/4.5/mod-mono-server4.exe
 7行目:4.0 → 4.5

《先頭文字 \:rootユーザー、$:一般ユーザーでの実行になります》
ln -s /usr/local/lib/mono/4.0/mod-mono-server4.exe /usr/local/lib/mono/4.5/mod-mono-server4.exe

HTTPサーバー Apacheを再起動します。
※ ディレクトリや設定は当サイトの環境のものです。
《先頭文字 \:rootユーザー、$:一般ユーザーでの実行になります》
# ログファイルのディレクトリを作成します
$ sudo mkdir -p /var/log/httpd/vhosts/system-act.com/mono

# HTTPサーバー Apacheを再起動します
$ sudo service httpd restart

ブラウザから http://[ホスト名]/helloworld にアクセスして Hello World! が表示されれば、インストールは正常に行われています。

謝辞

当コンテンツの作成にあたり、下記のサイトを参考にさせていただきました。
この場を借りてお礼申し上げます。

@IT MonoでOSSなASP.NET MVCアプリ 東京情報大学 ネットワークシステム研究室 Wiki - mono

フィードバック

記事の内容についてのご質問、ご指摘、その他ご意見等は下記にてお願いいたします。
System House ACT公式ブログ内記事 :
.NET互換Framework Mono, XSP

トラックバックまたはコメントにてお寄せください。