BlackJumboDogの.NET Core版をMacで動かしてみた。

2016.02.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

私は、BlackJumboDogというフリーソフト(Windowsで動作するサーバーソフト)を公開しているのですが、ソース公開しているおかげで、これを.NET Coreへの移植して下さっている方がおられます。 (まだ作業中ですが、かなり進んでいます)

BlackJumboDog

GutHub(bjd5)

CorePlex(BlackJumboDog)

CoreCLR版のBlackJumboDog

GitHub darkcrash/bjd5

MicrosoftAzureと.NetFramework好きなメモ帳

BlackJumboDogをCoreCLRで動かしてみた

今回は、これを手元のMacで動作させてみましたので、その様子を紹介させてください。

2 .NET Core

.NET Coreとは、マイクロソフトが、従来の.NET Frameworkの代わりになるものとして、オープンソースとして公開している新しいフレームワークです。 そして、これは、現状、LinuxOS Xで動作します。

001

(1) DNVMとDNX

.NET Coreでアプリケーションを動作させるためには、次の2つが必要です。

  • DNVM(.NET Version Manager)
  • DNX(.NET Core Execution Environment)

DNVMとは、バージョンマネージャーです。そして、DNXが、.NET Coreの実行環境です。 DNVMを使用して、必要なバージョンのDNXを管理する仕組みです。

それでは、それぞれインストールの手順を見ていきます。

(2) DNVM のインストール

最初に、Homebrewをインストールします。 既にインストールされている場合は、この作業は必要ありません。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

続いて、Homebrewを使用して、DNVMをインストールします。

brew tap aspnet/dnx
brew update
brew install dnvm

インストール完了後に作成される、/usr/local/bin/dnvm.shを読み込むことで、使用可能になります。

$ source dnvm.sh

毎回、読み込む必要が無いように、.bash_profileあたりに上記の行を追加しておくことをお勧めし ます。

ここまで来れば、次のコマンドでインストールされていることを確認できます。

$ dnvm

002

(3) DNX のインストール

次に、先のDNVMを使用して、DNXをインストールします。dnvmのコマンドを確認して頂くと、特定のバージョンをインストールしたり、アンインストールしたりできることが、分かりますが、最新の安定板のDNX for .NET Coreをインストールする場合は、次のようになります。

$dnvm upgrade -r coreclr

デフォルトでmonoがインストールされますので、-r coreclrは必須です。

現在、インストールされているバージョンは、次のコマンドで確認できます。

$ dnvm list

Active Version Runtime Architecture OperatingSystem Alias
------ ------- ------- ------------ --------------- -----
* 1.0.0-rc1-update1 coreclr x64 darwin default

3 クローン・コンパイル・実行

(1) コンパイル

それでは、GitHubからcloneしてみます。

$ git clone https://github.com/darkcrash/bjd5
Cloning into 'bjd5'...
remote: Counting objects: 7690, done.
remote: Total 7690 (delta 0), reused 0 (delta 0), pack-reused 7690
Receiving objects: 100% (7690/7690), 6.11 MiB | 1.07 MiB/s, done.
Resolving deltas: 100% (4899/4899), done.
Checking connectivity... done.
2016/02/21_09:09:38 hirauchishinichi.local:~/tmp
$

続いて、コンパイルと実行です。 なお、コンパイル中、フレームワークをダウンロードする必用がありますので、オンラインでしかコンパイルはできません。

$ cd bjd5
$ run restore
$ cd Bjd.CoreCLR
$ dnx bjd

コマンドラインとして動作するので、UIはありませんので、Option.iniを編集して起動する感じです。 cloneした状態では、現状、幾つかのプロキシが上がってきました。

(2) 起動前のLISTEN状態

とりあえず、起動前のLISTEN状態を確認しておきます。

$ lsof -nP -iTCP | grep LISTEN
2BUA8C4S2 13891 username 12u IPv4 0x47eab89191f15f09 0t0 TCP 127.0.0.1:6258 (LISTEN)
2BUA8C4S2 13891 username 13u IPv6 0x47eab891833fc129 0t0 TCP [::1]:6258 (LISTEN)
2BUA8C4S2 13891 username 14u IPv4 0x47eab89181541f09 0t0 TCP 127.0.0.1:6263 (LISTEN)
2BUA8C4S2 13891 username 15u IPv6 0x47eab891833fc689 0t0 TCP [::1]:6263 (LISTEN)
BetterTou 35914 username 11u IPv4 0x47eab89191635811 0t0 TCP *:63504 (LISTEN)
BetterTou 35914 username 12u IPv6 0x47eab89191a76b69 0t0 TCP *:63504 (LISTEN)

(3) BlackJumboDog起動

BlackJumboDog for .NET Coreを起動します。

$ dnx bjd
Not allowed change Console.WindowWidth
[14:36:23.607][ 7][0] Service.ServiceMain Start
[14:36:23.650][ 7][0] Define.Initialize Start
[14:36:23.650][ 7][0] ----------------------------------------------------------------
[14:36:23.650][ 7][0] - Bjd.CoreCLR - 1.0.0
[14:36:23.650][ 7][0] - DNXCore,Version=v5.0
[14:36:23.650][ 7][0] ----------------------------------------------------------------
[14:36:23.650][ 7][0] RuntimeServices
[14:36:23.650][ 7][0] Microsoft.Dnx.Compilation.ILibraryExporter
[14:36:23.650][ 7][0] Microsoft.Extensions.PlatformAbstractions.IApplicationShutdown
[14:36:23.650][ 7][0] Microsoft.Extensions.PlatformAbstractions.IApplicationEnvironment
[14:36:23.650][ 7][0] Microsoft.Extensions.PlatformAbstractions.IRuntimeEnvironment
[14:36:23.650][ 7][0] Microsoft.Extensions.PlatformAbstractions.ILibraryManager

...

(4) 起動後のLISTEN状態

起動後に、複数のLISTENが増えていることが確認できます。

$ lsof -nP -iTCP | grep LISTEN
2BUA8C4S2 13891 username 12u IPv4 0x47eab89191f15f09 0t0 TCP 127.0.0.1:6258 (LISTEN)
2BUA8C4S2 13891 username 13u IPv6 0x47eab891833fc129 0t0 TCP [::1]:6258 (LISTEN)
2BUA8C4S2 13891 username 14u IPv4 0x47eab89181541f09 0t0 TCP 127.0.0.1:6263 (LISTEN)
2BUA8C4S2 13891 username 15u IPv6 0x47eab891833fc689 0t0 TCP [::1]:6263 (LISTEN)
BetterTou 35914 username 11u IPv4 0x47eab89191635811 0t0 TCP *:63504 (LISTEN)
BetterTou 35914 username 12u IPv6 0x47eab89191a76b69 0t0 TCP *:63504 (LISTEN)
dnx 36424 username 72u IPv4 0x47eab891914a9a21 0t0 TCP *:8021 (LISTEN)
dnx 36424 username 73u IPv6 0x47eab891921d7ba9 0t0 TCP *:8080 (LISTEN)
dnx 36424 username 78u IPv4 0x47eab891914a7f09 0t0 TCP *:8080 (LISTEN)
dnx 36424 username 79u IPv6 0x47eab891968d0ba9 0t0 TCP *:8110 (LISTEN)
dnx 36424 username 80u IPv4 0x47eab891914aa329 0t0 TCP *:8110 (LISTEN)
dnx 36424 username 81u IPv6 0x47eab89191a77629 0t0 TCP *:8025 (LISTEN)
dnx 36424 username 82u IPv4 0x47eab8918ed52329 0t0 TCP *:8025 (LISTEN)
dnx 36424 username 83u IPv6 0x47eab89191a79bc9 0t0 TCP *:8023 (LISTEN)
dnx 36424 username 84u IPv4 0x47eab89190787c31 0t0 TCP *:8023 (LISTEN)
dnx 36424 username 85u IPv4 0x47eab891924bbc31 0t0 TCP *:10001 (LISTEN)
dnx 36424 username 86u IPv6 0x47eab89191a770c9 0t0 TCP *:5060 (LISTEN)
dnx 36424 username 87u IPv4 0x47eab89185785a21 0t0 TCP *:5060 (LISTEN)
dnx 36424 username 88u IPv6 0x47eab89191a7abe9 0t0 TCP *:8090 (LISTEN)
dnx 36424 username 89u IPv4 0x47eab8918ed53539 0t0 TCP *:8090 (LISTEN)
dnx 36424 username 90u IPv6 0x47eab891961f8be9 0t0 TCP *:5050 (LISTEN)
dnx 36424 username 91u IPv4 0x47eab8918c449c31 0t0 TCP *:5050 (LISTEN)
dnx 36424 username 92u IPv4 0x47eab8918c447811 0t0 TCP *:1080 (LISTEN)

(5) 動作確認

次の絵は、telnetでローカルのBlackJumboDogにポート8080で接続し、HTTPプロキシを経由して、外部のサーバにアクセスしている様子です。

$ telnet localhost 8080
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET http://www.sapporoworks.ne.jp/ HTTP/1.1
host:127.0.0.1

HTTP/1.1 200 OK
Date: Sun, 21 Feb 2016 05:53:41 GMT
Server: Apache/2.2.29
Accept-Ranges: bytes
Transfer-Encoding: chunked
Content-Type: text/html

5a8

4 最後に

今回は、@DarkCrash3氏が作業されているものをコンパイルしてみただけですが、Mac(OS X)でも、綺麗に動作している事が見れて、非常に嬉しいです。

これを機会に、このリポジトリのコミッター目指そうw