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」に関するものがあるか「yum list」でチェック。
# yum list | grep mono
先ほど、remiリポジトリの依存性関連として登録したepelリポジトリにMonoが含まれています。
では、epelリポジトリを指定してインストールしてみましょう。
# yum install --enablerepo=epel 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-util"はインストールされていたようです。 まぁ、更新できるっぽいので、更新しておきます。
完了。 続いて、RPMコマンドで公開鍵をインポートします。 コマンドが長いので、CentOS内でFireFox起動してコマンドをコピーし、端末に貼り付けました。
# 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 Projectからの指示はとりあえずここまでですね。
「yum list」でもう一度Monoを検索してみます。
# yum list | grep mono
おぉ、なんかすっごい増えてる。 リポジトリの登録はOKっぽい。
Mono Projectのページには「インストール方法はUsageを参照」って書いてある。 んで、そこには「『アセンブリが見つかりません』というエラーを出したくなければ mono-complete をインストールしろ」と書いてあるような気がする。 つまり、Monoのすべての機能(というかパッケージ?)をインストールしておけば、アセンブリが見つからなくなることはない、ということですね。 はい、そうします。
# yum install mono-complete
つまり、これでいいんだよね? 実行してみよ~。
お、今度はうまくいった。 mono-completeのVersion 4.6がインストールされます。 これって、.NET Framework 4.6ってことかな?
完了しました。 順調順調~♪
「mono」ってコマンドで動くのかな? 実行したらコマンドラインのヘルプが出た。 「mono -V」でバージョン情報が表示されるっぽい。 [V]は大文字ね。
"Mono JIT compiler version 4.6.2"と出ました。 これって、コンパイラの役割になるんだ。
さて、Monoのインストールはこれで完了。 次は、ASP.NETを動かすためのWebサーバー「XSP」のインストール。
この時はまだ、この後に起こる困難な道のりを知る由もなかった。 次ページに続く...
この章のまとめ
- Linuxで.NET Frameworkのアセンブリを実行するんは、Monoを使う。
- ASP.NETを動かすにはXSP(簡易WebServer)へリクエストを通す必要がある。
- rpmコマンド:RPMパッケージをインストールする。公開鍵のインポートでも使用する。
- yum-config-managerコマンド:yumの設定を変更する。リポジトリの追加などができる。
- monoコマンド:-Vでバージョンが確認できる。