CentOSにMonoでASP.NET環境を構築:yumは使えない


CentOSでyumを使ってASP.NET環境を構築する!
と思っていたのですが、2012年10月15日現在、CentOSからyumでASP.NET環境を構築することはできません。

2012年3月ころまでは、以下のようにリポジトリを追加することで、yumでインストールすることができていたようです。

vi /etc/yum.repos.d/mono.repo
[mono]
name = novell-mono
baseurl=http://ftp.novell.com/pub/mono/download-stable/RHEL_5/
enabled=0
gpgcheck=0

しかし、現在monoはNovellから離れてXamarinにて開発を行なっているため、Novellを利用することができません。

そうなると、MonoがサポートしているOpenSUSEやUbuntuにしようかと思ったのですが、仕事でも使っているCentOSのほうが良いので、ソースからコンパイルすることにしました。

■ インストール方法
以下のサイトを参考にCentOS 6.3にインストールしました。
http://jharitesh.blogspot.jp/2012/06/aspnet-apache-setup-on-centos.html

まずSELinuxをOFF

vi /etc/sysconfig/selinux
SELINUX=disabled

yumで関係パッケージをインストール

yum install gcc bison pkgconfig glib2-devel gettext make

monoの最新ソースコードを取得してインストール

wget http://download.mono-project.com/sources/mono/mono-2.10.8.tar.gz
tar zxvf mono-2.10.8.tar.gz
cd mono-2.10.8
./configure --prefix=/opt/mono; make; make install

pathを通して?からバージョン確認

echo export PKG_CONFIG_PATH=/opt/mono/lib/pkgconfig:$PKG_CONFIG_PATH>>~/.bash_profile
echo export PATH=/opt/mono/bin:$PATH>>~/.bash_profile
source ~/.bash_profile
mono --version
cd ..

続いてXSPのインストール

wget http://download.mono-project.com/sources/xsp/xsp-2.10.2.tar.bz2
tar jxvf xsp-2.10.2.tar.bz2
cd xsp-2.10.2
./configure --prefix=/opt/mono; make; make install
cd ..

Apacheの関係パッケージインストール

yum install httpd-devel

Apacheとmonoを連携させるためのmod_monoをインストール

wget http://download.mono-project.com/sources/mod_mono/mod_mono-2.10.tar.bz2
tar jxvf mod_mono-2.10.tar.bz2
cd  mod_mono-2.10
./configure --prefix=/opt/mono; make; make install
cd ..

その次に、Apacheのconf設定ですが、結構ハマりました。色んなサイトを見て、いろいろ設定してみたのですが、うまくいきません。
以下のようなエラーがでました。

[crit] The unix daemon module not initialized yet.
Please make sure that your mod_mono module is loaded after the User/Group
directives have been parsed. Not initializing the dashboard.

上記は httpd.conf の「Include conf.d/*.conf」をhttpd.confの最終行に移動することでOKでした。

そして、以下のようなエラーログも。

There's already a server listening on /tmp/mod_mono_server_global

上記エラーは、conf.dに設置したconfの書き方が間違っていたようです。Mono公式ページには、Apacheのconfを生成してくれる便利なページがあります。
Apache mod_mono configuration tool
このページで内容を入力して、conf.dに設置したところ上手くいく・・・、と思ったのですが、そんなに甘くなく、こんどは下記のエラーがでました。

Invalid command 'MonoServerPath', perhaps misspelled or defined by a module not included in the server configuration

Apache mod_mono configuration toolで生成したconfに下記の1行を加えてエラーは消えました。

Include /etc/httpd/conf/mod_mono.conf

そして、ホームディレクトリに Hello World を設置します。

<%
    HelloWorldLabel.Text = "Hello, world!";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label runat="server" id="HelloWorldLabel"></asp:Label>
    </div>
    </form>
</body>
</html>

これで、アクセスすると見事にHello worldが表示されました!

■ まとめ
Monoは2.8系から使い勝手が良くなった。と聞きます。業務用途に利用できるかどうかは、テスト的に運用してみないとわかりません。

それと、ASP.NETって、いろんな用語があって、色んなモジュールもあるので、インストールする段階でも、何がどんな役割で、どう関係していて、どのバージョンが関係しているのか、もう何がなんだか、わけワカメ状態ですよ!

というわけで、ASP.NETとMono回りで理解した情報をまとめました。
CentOSにMonoでASP.NET環境を構築した時の参考サイト

The following two tabs change content below.

いしかわ

まだまだ広く浅く勉強中のエンジニア。得意分野はラーメン。

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>