wiz.code

CentOSでASP.NETに挑戦

Linux(CentOS)でASP.NETを動かす

wiz.の一番得意なプログラム言語はC#です。 .NET Frameworkのライブラリや、Visual Studioの使い勝手の良さなどから、WebサイトもASP.NETで作ることが多いので、CentOSでもASP.NETを動かせるようにしたいと思います。

ASP.NETを動かすには、Windows Serverに装備されているIISを使うのが一般的です。 しかし、.NET Frameworkのアセンブリ自体は実行環境さえ整えばWindows機以外でも動かすことが出来る。 Linuxの場合、その環境が最も進んでいるのが「Mono Project」です。 つまり、ApacheからMonoへリクエストを通すことで、Linux上でASP.NETを動かすことが出来る、ということです。

と、ここまでは推察できるのですが、実際にどのようにすればいいかは分からないので「centos aspnet」で検索。

調べてみると「Mono」というキーワードのほかに「XSP」というキーワードをよく見かけます。

XSPとは何か

毎度おなじみ、WikipediaのXSPの項から抜粋です。

XSPとは、MonoプロジェクトおよびGNOMEプロジェクトによりオープンソースで開発が行われているWebサーバ用ソフトウェア(またはWebサーバサービス)である。

XSPは安定して動作するため単体のWebサーバーとして用いることも可能である。 ただし、マイクロソフトのInternet Information ServicesほどWebサーバーとしての汎用性は追求していない。 このため別途Webサーバーなどと連携させて動作させることができ、例えばApache HTTP Serverではmod_monoモジュールを用いて連携を行う。

なるほど。 「XSP」自体がASP.NETを動かすためのWebサーバーとして動作するわけですね。 今回の場合、WebサーバーにはApacheを選択したので、引用の後半のように「mod_mono」モジュールを使ってApacheからXSPに処理をパスする、という流れになるようです。

すなわち、「mono」と「xsp」をインストールして、Apacheにモジュールを追加し、「.aspx」拡張子を「xsp」が処理するように構成すればよさそうです。

Monoをインストール

それでは、Monoをインストールしましょう。

リポジトリからmonoを検索

現在のリポジトリの中に「mono」に関するものがあるか「yum list」でチェック。

# yum list | grep mono
"mono"の検索結果

先ほど、remiリポジトリの依存性関連として登録したepelリポジトリにMonoが含まれています。

monoをインストール

では、epelリポジトリを指定してインストールしてみましょう。

# yum install --enablerepo=epel mono
monoインストール失敗

「monoは利用できません」だと? ん~…、ということは別のリポジトリを登録しないといけないのかな。

ここは、Mono Projectの公式サイトで導入方法を調べてみましょう。 ダウンロードから辿ると、Linuxでのインストール方法らしい解説ページがあります。 当然ながら全文英語…。 果たして英検4級のwiz.に読めるのだろうか!?

"Linux distribution packages"というセクションを発見。 その中に"CentOS EPEL"という項目があります。 あれ?EPELからインストールできるの?

その先に行ってみたけど、Mono全体の、というよりは個別のパッケージが並んでた。 こっちじゃないっぽい。

"Xamarin packages"の方かな。 「Xamarin」ってなんだ? ...検索中...。 Xamarin(ザマリン)はMonoの開発者が設立した会社で、2016年にマイクロソフトが買収して、今はMSの子会社だって。 ということは、外見上は「Microsoft(の子会社)が作ったMonoパッケージ」ってことになるんだ。

Xamarin packagesの中に"CentOS, Fedora, and derivatives"がある。 CentOSとFedoraと…derivativesはその「派生」ってことらしい。 このリンクを開いた中に、yumコマンドが載ってた。

Add the Mono Project GPG signing key and the package repository in a root shell with:

yum install yum-utils
rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
yum-config-manager --add-repo http://download.mono-project.com/repo/centos/

「Mono ProjectnのGPG署名鍵とパッケージリポジトリを追加するには、ルート権限のシェルで次のコマンドを実行しろ」と英検4級が訳しましたよ。

このまま従えばよいのだろうけど、ひとつずつ何をやっているか調べてみよう。

まず「yum install yum-utils」。 「yum-utils」をインストールするってことだけど、「yum-utils」ってなんだ? yumのユーティリティっぽいけど。 これを追加すると、いろんなことが出来るようになるらしい。 多分、インストール途中でユーティリティを使う場面があるんだろうな。

次。 「rpm」コマンド。 ここには「--import」が引数として指定されている。 URLはUbuntuのサイトだな。 パスの中に「PKS」があるから、これはGPGの暗号鍵かな? rpmコマンド自体は、RPMパッケージのインストールやアンインストールを行うコマンド。 「--import」は、公開鍵をインポートするオプションスイッチらしい。

最後の「yum-config-manager」。 「--add-repo」という引数があるので、これはリポジトリの追加ですね。

およそ、やろうとしていことが分かったので、コマンドを実行してみましょう。

# yum install yum-utils
yum-utilsのインストール(更新)

おや。 「更新します」と出てきました。 "yum-util"はインストールされていたようです。 まぁ、更新できるっぽいので、更新しておきます。

公開鍵のインポート

完了。 続いて、RPMコマンドで公開鍵をインポートします。 コマンドが長いので、CentOS内でFireFox起動してコマンドをコピーし、端末に貼り付けました。

# rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
インポート完了?

ん? 何も言われない。 エラーも出てないのでこれでいいのかな?

Mono Projectのリポジトリ登録

最後。 リポジトリの追加です。

# yum-config-manager --add-repo http://download.mono-project.com/repo/centos/
リポジトリ登録完了

リポジトリが追加されたようです。 Mono Projectからの指示はとりあえずここまでですね。

monoパッケージを検索

「yum list」でもう一度Monoを検索してみます。

# yum list | grep mono

おぉ、なんかすっごい増えてる。 リポジトリの登録はOKっぽい。

Mono Projectのページには「インストール方法はUsageを参照」って書いてある。 んで、そこには「『アセンブリが見つかりません』というエラーを出したくなければ mono-complete をインストールしろ」と書いてあるような気がする。 つまり、Monoのすべての機能(というかパッケージ?)をインストールしておけば、アセンブリが見つからなくなることはない、ということですね。 はい、そうします。

mono-completeをインストール
# yum install mono-complete

つまり、これでいいんだよね? 実行してみよ~。

monoをインストール中

お、今度はうまくいった。 mono-completeのVersion 4.6がインストールされます。 これって、.NET Framework 4.6ってことかな?

monoインストール完了

完了しました。 順調順調~♪

monoのバージョン情報

「mono」ってコマンドで動くのかな? 実行したらコマンドラインのヘルプが出た。 「mono -V」でバージョン情報が表示されるっぽい。 [V]は大文字ね。

"Mono JIT compiler version 4.6.2"と出ました。 これって、コンパイラの役割になるんだ。

さて、Monoのインストールはこれで完了。 次は、ASP.NETを動かすためのWebサーバー「XSP」のインストール。

この時はまだ、この後に起こる困難な道のりを知る由もなかった。 次ページに続く...

この章のまとめ