きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

Ubuntu Desktop で ASP.NET 5 Beta7 を CoreCLR で動かす

ASP.NET 5 Beta7がリリースされました。

Announcing Availability of ASP.NET 5 Beta7 – .NET Web Development and Tools Blog – Site Home – MSDN Blogs

そして注目したいのはここ。

"This release also includes the first public preview of the .NET Execution Environment (DNX) for Mac and Linux based on .NET Core – no Mono required."

ついにLinuxMacOSXでもMonoじゃなくて .NET Coreで動く、と。

 

ということで、試してみました。

 

前提とか環境とか

OSはUbuntu Desktop 15.04。 この前段階として、ASP.NET 5 beta6が動く環境が整っていることが前提です。

LinuxでのASP.NET 5の環境構築はまだまだ罠とか嵌りどころが多く、現時点では公式ドキュメントだけ見ていても構築不可能な感じです。 これから設定される場合は、以下の牛尾さんのポストが大変参考になるとおもいます。

ASP.NET5 クロスプラットフォームでアプリケーションの動作環境を構築する

 

coreclrをインストール

さっそく、coreclrをインストールしてみましょう。dnvmコマンドで次のようにすればOKです。

dnvm install latest -r coreclr

以下のSSではmono版のbeta7も入っていますが、これは上記の前に素で「dnvm upgdade」を走らせてしまったためですので、気にせなさらず。

f:id:kiyokura:20150904011159p:plain

 

最新のサンプルプロジェクトを取ってくる

次に、最新のサンプルプロジェクトを取ってきておきます。 GithubにあるASP.NETのサンプルプロジェクト( https://github.com/aspnet/home )を適当にCloneしてきます。

git clone https://github.com/aspnet/Home.git

Cloneが終わったら、サンプルのMVC Webアプリケーションのディレクトリに降りておきましょう。

cd Home/sample/1.0.0-beta7/HelloMVC

 

依存パッケージの取得(NG編)

あとはNuGetで依存パッケージを取得しれくればOKのはずです。やってみます

dnu restore

が、結果は失敗。

エラーを見ると、"libcurlが無い"といわれてるようです。CoreCLRではlibcurlが必要な模様。

 ----------
System.TypeInitializationException: The type initializer for 'System.Net.Http.CurlHandler' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'libcurl': The specified module could not be found.(Exception from HRESULT: 0x8007007E)
 at Interop.libcurl.curl_global_init(Int64 flags)
 at System.Net.Http.CurlHandler..cctor()
 --- End of inner exception stack trace ---
 at System.Net.Http.CurlHandler..ctor()
 at System.Net.Http.HttpClientHandler..ctor()
 at System.Net.Http.HttpClient..ctor()
 at Microsoft.Dnx.Tooling.Restore.NuGet.HttpSource..ctor(String baseUri, String userName, String password, Reports reports)
 at Microsoft.Dnx.Tooling.PackageFeedCache.CreatePackageFeed(PackageSource source, Boolean noCache, Boolean ignoreFailedSources, Reports reports)
 at Microsoft.Dnx.Tooling.PackageFeedCache.<>c__DisplayClass1_0.<GetPackageFeed>b__0(PackageSource _)
 at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
 at Microsoft.Dnx.Tooling.PackageFeedCache.GetPackageFeed(PackageSource source, Boolean noCache, Boolean ignoreFailedSources, Reports reports)
 at Microsoft.Dnx.Tooling.RestoreCommand.AddRemoteProvidersFromSources(List`1 remoteProviders, List`1 effectiveSources, PackageFeedCache packageFeeds, SummaryContext summary)
 at Microsoft.Dnx.Tooling.RestoreCommand.<Execute>d__60.MoveNext()
 ----------
 Restore failedThe type initializer for 'System.Net.Http.CurlHandler' threw an exception.

 

libcurlのインストール

ということで、素直にapt-getでlibcurlを入れてやります。が、普通にapt-get install libcurl-dev とやると、 libcurl-devは以下のパッケージで提供されている仮想パッケージです といわれました。

f:id:kiyokura:20150904011200p:plain

どれを入れるのが一番いいのかよくわからなかったのですが、とりあえずリストの一番上にあるlibcurl4-openssl-devをインストールすることにしました。

sudo apt-get install libcurl4-openssl-dev

依存パッケージの取得(リトライ編)

ということで、再度dnu restoreを実行。

dnu restore

すると、こんどはパッケージの復元に成功しました

 

webサーバを実行

あとは実行するだけです。kestrelで動かしてみましょう。 今回から微妙にdnxコマンドが変わってて(…というか、間に「.」が要らなくなっただけですが)、以下で実行できます。

dnx kestrel

落としてきたサンプルプロジェクトのkestrelがポート5004をlistenするようになっているので、ブラウザで以下のアドレスにアクセスしてみます。

http://localhost:5004/

無事、表示されました! f:id:kiyokura:20150904011201p:plain (囲みは、dnu restoreした時のメッセージで、ちゃんとCoreCLRで実行されるっぽいことが分かります。)