うまく動いたので備忘録。
この内容は2015年10月24日に.NETラボ 勉強会で話す内容と重複するので、参加予定の人は見ないでください(または、私のセッションのこの個所は他の勉強をしてください・・・)。
Hyper-V上のCentOSでASP.NET(dnx-mono.1.0.0-beta8)を動かすまでの手順を遭遇したエラーも含めて紹介します。
基本的には公式の説明をやってみた日本語レポートです。
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を再起動。
これはサイトの説明通りですんなりインストール完了。
curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
動作を確認してみます。
#dnvm
こんな感じに表示されればOK。
次は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を入れる前に必要になりそうなライブラリを諸々インストール。
(ここで先ほど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
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パッケージをインストールすることらしい。
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に公開されているものを利用します。
上記の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のページが表示されました!!
Please give us your valuable comment