CentOS6.7でASP.NETを動かす

木曜日 , 22, 10月 2015 Leave a comment

 うまく動いたので備忘録。

 この内容は2015年10月24日に.NETラボ 勉強会で話す内容と重複するので、参加予定の人は見ないでください(または、私のセッションのこの個所は他の勉強をしてください・・・)。

 

 Hyper-V上のCentOSでASP.NET(dnx-mono.1.0.0-beta8)を動かすまでの手順を遭遇したエラーも含めて紹介します。

 基本的には公式の説明をやってみた日本語レポートです。

 

 

まずはOS側の準備

 

 OS側でiptableをoffにしたりSELinuxをoffにしたりします。

 ASP.NETとは関係ないので、不要の方は「.NET Version Manager (DNVM)の導入」まで読み飛ばしてください。

 

 iptableをoffに

 

# /etc/rc.d/init.d/iptables stop
# chkconfig iptables off

 

 SELinuxをoffに

 

#vi /etc/sysconfig/network-scripts/ifcfg-eth0

 

 以下を書き換え、

 

SELINUX=disabled

 

 eh01を有効に、

 

#vi /etc/sysconfig/network-scripts/ifcfg-eth0

 

 以下を書き換え

 

ONBOOT=”yes”

 

 OSを再起動。

 

.NET Version Manager (DNVM)の導入

 

 これはサイトの説明通りですんなりインストール完了。

 

curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh

 

  動作を確認してみます。

 

#dnvm

 

001

 

 こんな感じに表示されればOK。

 

Monoのインストール(yum失敗編)

 

 次はMacやLinuxで.NETを動かすMonoのインストール。

 CentOS6にはyum-utilsがデフォルトでインストールされていないのでyum-comfig-managerする前に導入しておきます。

 

#rpm –import “http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF”

#yum -y install yum-utils

#yum-config-manager –add-repo http://download.mono-project.com/repo/centos/

 

 で、yumでmono-completeを導入・・・

 

#yum -y install mono-complete

 

エラー: パッケージ: libgdiplus0-3.12-1.x86_64 (download.mono-project.com_repo_centos_)
要求: libpng15.so.15(PNG15_0)(64bit)
エラー: パッケージ: libgdiplus0-3.12-1.x86_64 (download.mono-project.com_repo_centos_)
要求: libpng15.so.15()(64bit)
エラー: パッケージ: libgdiplus0-3.12-1.x86_64 (download.mono-project.com_repo_centos_)
要求: libtiff.so.5()(64bit)
エラー: パッケージ: mono-core-4.0.4.1-0.xamarin.1.x86_64 (download.mono-project.com_repo_centos_)
要求: libc.so.6(GLIBC_2.16)(64bit)
エラー: パッケージ: libgdiplus0-3.12-1.x86_64 (download.mono-project.com_repo_centos_)
要求: libtiff.so.5(LIBTIFF_4.0)(64bit)
エラー: パッケージ: libmonosgen-2_0-1-4.0.4.1-0.xamarin.1.x86_64 (download.mono-project.com_repo_centos_)
要求: libc.so.6(GLIBC_2.15)(64bit)
エラー: パッケージ: libgdiplus0-3.12-1.x86_64 (download.mono-project.com_repo_centos_)
要求: libc.so.6(GLIBC_2.14)(64bit)
エラー: パッケージ: mono-devel-4.0.4.1-0.xamarin.1.x86_64 (download.mono-project.com_repo_centos_)
要求: libc.so.6(GLIBC_2.15)(64bit)
問題を回避するために –skip-broken を用いることができません
これらを試行できます: rpm -Va –nofiles –nodigest

 

 依存関係で問題が色々出たよ・・・。

 手間取りそうだったのでyumからの導入はやめてソースからコンパイルすることに。

 

 一応mono-completeのバージョンだけ確認。

# yum info mono-complete
・・・
利用可能なパッケージ
名前 : mono-complete
アーキテクチャ : x86_64
バージョン : 4.0.4.1

 

Monoインストール(ソースから成功編)

 

 ソースからMonoを入れる前に必要になりそうなライブラリを諸々インストール。

(ここで先ほどyum-config-manager –add-repoしたhttp://download.mono-project.com/repo/centos/を使うと同じ依存関係がでるのでyum-config-manager –disableでデフォルトのリポジトリを使うようにしておく)

 

#yum install bison gettext glib2 freetype fontconfig libpng libpng-devel libX11 libX11-devel glib2-devel libgdi* libexif glibc-devel urw-fonts java unzip gcc gcc-c++ automake autoconf libtool make bzip2 wget

 

続いてMonoを導入。バージョンはyumで入れた場合に合わせて4.0.4.1を選択。

 

#wget http://origin-download.mono-project.com/sources/mono/mono-4.0.4.1.tar.bz2
# tar jxf mono-4.0.4.1.tar.bz2

# cd mono-4.0.4
#./configure –prefix=/opt/mono
#make && make install

#export PATH=$PATH:/opt/mono/bin
#export PKG_CONFIG_PATH=/opt/mono/lib/pkgconfig

 

DNVMでDNXを導入

 

 DNXは .NET Execution Environmentの略で.NETを実行する環境という感じでしょうか。

 

#dnvm upgrade -r mono

 

 実行ログはこんな感じ。

 

Determining latest version
Latest version is 1.0.0-beta8
Downloading dnx-mono.1.0.0-beta8 from https://www.nuget.org/api/v2
Download: https://www.nuget.org/api/v2/package/dnx-mono/1.0.0-beta8
######################################################################## 100.0%
Installing to /root/.dnx/runtimes/dnx-mono.1.0.0-beta8
Adding /root/.dnx/runtimes/dnx-mono.1.0.0-beta8/bin to process PATH
Setting alias ‘default’ to ‘dnx-mono.1.0.0-beta8’

 

 後述しますが、ここで以下のコマンドを実行しておかないとdnx restoreでこける

 

#mozroots –import –sync

 

 dnx restoreで 「HTTP request timed out. Retrying.」が出る場合の解放は上記のコマンドか、MONO_THREADS_PER_CPUを以下のように設定するか

 

#export MONO_THREADS_PER_CPU=2000

 

 試してないけどca-certificates-monoパッケージをインストールすることらしい。

 

Libuvを導入

 

 Kestrel(というWebサーバー)を利用する場合はLibuvが必要になります。

 

#wget http://dist.libuv.org/dist/v1.4.2/libuv-v1.4.2.tar.gz
#tar -zxf libuv-v1.4.2.tar.gz
#cd libuv-v1.4.2
#sh autogen.sh
#./configure
#make && make install

#ln -s /usr/lib64/libdl.so.2 /usr/lib64/libdl
#ln -s /usr/local/lib/libuv.so /usr/lib64/libuv.so.1

 

サンプルをGitHubから持ってくる

 

 サンプルはGitHubに公開されているものを利用します。

 上記のURLから/samples/1.0.0-beta8/HelloMvcをサーバー上にアップロードします。

 

 HelloMvcのproject.jsonが配置された場所で以下のコマンドを実行します。

 

#dnu restore

 

 動作に必要なライブラリがダウンロードされます。

 以下のようにhttps通信がタイムアウトする場合は、先述の解法を試してみてください。

 

HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.AspNet.Diagnostics’
Warning: FindPackagesById: Microsoft.AspNet.Mvc
HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.AspNet.Mvc’
Warning: FindPackagesById: Microsoft.AspNet.Mvc.TagHelpers
HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.AspNet.Mvc.TagHelpers’
Warning: FindPackagesById: Microsoft.AspNet.Server.IIS
HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.AspNet.Server.IIS’
Warning: FindPackagesById: Microsoft.AspNet.Server.WebListener
HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.AspNet.Server.WebListener’
Warning: FindPackagesById: Microsoft.AspNet.StaticFiles
HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.AspNet.StaticFiles’
Warning: FindPackagesById: Microsoft.AspNet.Tooling.Razor
HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.AspNet.Tooling.Razor’
Warning: FindPackagesById: Microsoft.Framework.Configuration.Json
HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.Framework.Configuration.Json’
Warning: FindPackagesById: Microsoft.Framework.Logging
HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.Framework.Logging’
Warning: FindPackagesById: Microsoft.Framework.Logging.Console
HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.Framework.Logging.Console’
Warning: FindPackagesById: Microsoft.VisualStudio.Web.BrowserLink.Loader
HTTP request timed out. Retrying.
GET https://api.nuget.org/v3/index.jsonFindPackagesById()?id=’Microsoft.VisualStudio.Web.BrowserLink.Loader’
Error: FindPackagesById: Microsoft.AspNet.Diagnostics
HTTP request timed out. Exiting.

 

 restoreがすんだらKestrelを起動します。

 

#dnx kestrel

 

 起動時のログで5004ポートで起動していることがわかります。

 

Hosting environment: Production
Now listening on: http://*:5004
Application started. Press Ctrl+C to shut down.

 

 Webブラウザでアクセスすると以下のようにASP.NETのページが表示されました!!

002


Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です