flymanはVisualStudio 2015 Community(VS)を使ってのWEBアプリ開発を勉強中だ。いや、勉強を始めようと悪戦苦闘している。
VSには作ったアプリをテストランさせる機能が備わっている。が、それとは別にASP.NETアプリのトライアル環境が欲しい。
ふつうは、Windowsサーバー+IISで構築する。が、flymanはIISなど知らない。例えWindowsサーバーのライセンスが余っていようとも、ここはLinuxで何とかしたい。
ということで、CentOS+Apache環境で.NETアプリを動かせないか、やってみた。
ベースになるシステムは CentOS 6.5 (7.2でも動いた)、Apache (ディストリビューションのデフォルトバージョン)だ。
これに、次のソフトをインストールする。これらをソースからコンパイルする。
※ libgdiplus
GDI+コンパチブルなAPIを提供する mono用ライブラリ
※ mono
非Windows環境で.NETアプリを動かすためのプラットホーム
※ xsp
mono用簡易Webサーバー(mod_monoとmonoの接続にも必要。アプリサーバーとして動く)
※ mod_mono
apacheでmonoを使うためのモジュール
これらを入れて、最終的には ナンタラ.aspx が走るようにする。
なお、flymanは内輪のテストサーバー構築なので、以下のコマンドはすべてroot権限で実行している。
もし公開サーバーを建てるなら、それなりのユーザーで実行し、必要なときだけ sudo してほしい。
CentOSに開発環境が入っていないときは、以下のようにして先にそれを入れる。
# yum -y groupinstall ‘Development tools’
また、トラブルを避けるためSELinuxは無効化しておく。F/Wも無効化しておく。
では最初に libgdiplus を入れよう。
# cd /usr/local/src
前提となるパッケージを入れる。
# yum install -y cairo-devel libexif-devel freetype-devel fontconfig-devel glib2-devel libjpeg-devel libpng-devel libtiff-devel giflib-devel libX11-devel libXrender-devel
# wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-4.2.tar.gz
# tar xzvf libgdiplus-4.2.tar.gz
# cd libgdiplus-4.2
# ./configure
# make
# make install
無事にインストールできたら、/etc/ld.so.conf ファイルの末尾に次の一行を追加する。
/usr/local/lib
これで libgdiplus のインストールは終わりだ。続いて mono を入れる。
# cd /usr/local/src
前提となるパッケージを入れる。
# yum -y install bison gettext glib2 freetype fontconfig libpng libpng-devel libX11 libX11-devel glib2-devel libexif glibc-devel urw-fonts java unzip gcc gcc-c++ automake autoconf libtool make bzip2 wget
# wget http://download.mono-project.com/sources/mono/mono-4.4.0.40.tar.bz2
# tar jxf mono-4.4.0.40.tar.bz2
# cd mono-4.4.0
# ./configure –prefix=/opt/mono
# make
# make install
# export PATH=$PATH:/opt/mono/bin
# export PKG_CONFIG_PATH=/opt/mono/lib/pkgconfig
exportの二行は、~/.bash_profile なり /etc/profile なりに追記しておくといいだろう。
続いて xsp を入れる。
# cd /usr/local/src
# wget http://download.mono-project.com/sources/xsp/xsp-4.2.tar.gz
# tar xzvf xsp-4.2.tar.gz
# cd xsp-4.2
# ./configure –prefix=/opt/mono
# make
# make install
ここまでできたら、.NETアプリの動作テストをしておく。
まず、hello.cs ファイルを以下のように作る。
class Test
{
public static void Main()
{
System.Console.WriteLine("Hello World!");
}
}
コンパイルと実行は次の通り。
# mcs hello.cs
# mono hello.exe
これで Hello World! と表示されれば、OKだ。次のテストに移ろう。
もし CentOS 7にインストールしているなら、ここで
# ln -s /usr/lib64/libMonoPosixHelper.so /usr/lib/libMonoPosixHelper.so
と、リンクを張っておく。
テストの続きだ。以下の要領で form.cs ファイルを作る。
class Test
{
public static void Main()
{
System.Windows.Forms.MessageBox.Show("WinForms in Mono", "Hello World!");
}
}
# mcs mb.cs -r:System.Windows.Forms
# mono mb.exe
で、フォームウィンドウが表示されれば成功だ。
では mod_mono のインストールにかかろう。
# cd /usr/local/src
# yum -y install httpd-devel
# wget http://download.mono-project.com/sources/mod_mono/mod_mono-3.12.tar.gz
# tar xzvf mod_mono-3.12.tar.gz
# cd mod_mono-3.12
# ./configure –prefix=/opt/mono –with-mono-prefix=/opt/mono
# make
# make install
このサイトでConfigファイルを生成する。
http://go-mono.com/config-mod-mono/
生成されたConfigファイルを /etc/httpd/conf.d/z01_mod_mono.conf として保存する。
保存したConfファイルを開いて、
MonoServerPath your.host.name "/usr/bin/mod-mono-server2"
を
MonoServerPath your.host.name "/opt/mono/bin/mod-mono-server4"
に変更する。
/etc/httpd/conf/mod_mono.conf ファイルが出来ているので、これを
/etc/httpd/conf.d/z00_mod_mono.conf とし、apache起動時に読まれるようにする。
/etc/httpd/conf/httpd.confを開いて、以下のように編集する。
Include conf.d/*.conf
を
User apache
Group apache
の後に移動させる。
以上でインストールは完了だ。Apacheを起動させる。
# chkconfig httpd on
# service httpd start
ではテストしてみよう。
設定ファイルで指定したASP.NETのドキュメントルートに hello.aspx を以下のように作成する。
<%@ Page Language="C#" %>
<html>
<body>
<p>
<%
Response.Write("Hello, World!");
%>
</p>
</body>
</html>
ブラウザで表示されればOKだ。
さらに、
/opt/mono/lib/xsp/test 以下にテストコードがあるので、これらをすべてASP.NETドキュメントルート直下に入れて、index.aspx を表示させてみよう。
[Welcome to Mono XSP!] ページが表示されるはずだ。リンクも試してほしい。うまく動けば完了だ。
flymanは、ここまではうまくいったものの、VSで作った簡単なアプリをデプロイしてみたところ、まったく動かなかった。あらかじめmono用に作らないと難しいのかも。どうも簡単には行かないようだ。
……動作テストだけなら、Windows10 ProにIISをインストールするのが簡単だ、とあらためて思ったflymanであった……