Ubuntu+ASP.NET CoreでWebサービス(1)/.Net Coreを動かす

表題の通り。ASP.NETがLinux上で動くと聞いて、Windows系のプログラマでも手が出そうだと思い試してみることに。
まずはASPの前に.NET Coreが動く環境を作るところまで。

[バージョン情報]
Ubuntu Server 18.04.1 LTS
.NET Core 2.1
Windows10(クライアント)
Visual Studio 2017 Community(開発環境)

Ubuntu Serverの準備

最終的にはVPS等を使うつもりだけど、まずはVirtualBox上で構築してみる。

インストールメディアのisoイメージを公式ページ(https://www.ubuntu.com/)からダウンロード。VirtualBoxで新規VMを作り、光学ドライブにisoファイルをマウントしてインストール。なお18.04にはまだ日本語は無いそうで。操作はともかくテキストファイルの中身も読めないのは不都合がありそう。

インストールしたらネットワークの設定だけする。VMに割り当てるのは、外部通信用のNATと、ホストからアクセスする用のホストオンリーアダプターの2つ。

NAT側は自動割り当て、ホストオンリーアダプター側はホストマシンの[VirtualBox Host-Only Network]アダプタと同じネットワークになるように固定IPアドレスを割り振る。ちなみにUbuntu 18.04のネットワークの設定ファイルは[/etc/network/interfaces]ではなく[/etc/netplan/50-cloud-init.yaml]。

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        enp0s3:
            addresses: []
            dhcp4: true
        enp0s8:
            addresses: [192.168.56.101/24]
            dhcp4: false
    version: 2
例)50-cloud-init.yaml

VMからgoogle.comなどにpingが通り、ホストのWindowsからVMの固定IPにpingが通ればOK。

.NET Coreのインストール

以下のコマンドを実行して.NET Coreをインストール。

$ wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ sudo apt install apt-transport-https
$ sudo apt-get update
$ sudo apt-get install dotnet-sdk-2.1

このへんあまり理解してないけれど、上からざっくりと
  1: Microsoftのリポジトリからパッケージファイルをダウンロード
  2: ダウンロードしたパッケージをインストール
  3: apt-transport-https(多分aptでhttpsを使用するためのもの)をインストール
  4: パッケージリストを再取得
  5: .NET CoreのSDKをインストール
というような手順と思われる。

2の実行時点でaptのリポジトリ管理(/etc/apt/sources.list.d/)に microsoft-prod.list が追加されるのだが、1のパッケージはリポジトリを設定するためのパッケージということでいいんだろうか?

余談:apk-key adv

本筋と関係ないがつまづいたので。ネットで検索すると上の1~2の代わりに以下のような手順もヒットする。

$ sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B02C46DF417A0893

1は手動でリポジトリのリストを追加してるとして、2はaptに鍵情報を追加しているらしいが、構文の意味が中々わからなくて困った。特に最後の文字列はどこから出てきたのかと。

結論を言うと apt-key adv は内部で使っている gpg という鍵管理コマンドの引数を指定するオプションらしい。なので --keyserver や --recv-keys については aptコマンドではなくgpgコマンドの説明を探す必要があった。

で何をしているかというと --keyserver の公開鍵サーバから --recv-kyes の鍵IDの情報を取得している。この鍵IDについては gpg の鍵ID検索で探すことができる。

$ gpg --keyserver hkp://keyserver.ubuntu.com:80 --search-keys MS Open tech
(1) MS Open Tech <interop@microsoft.com>
   2048 bit RSA key B02C46DF417A0893, created: 2014-10-08

これでようやく"B02C46DF417A0893"がMSのオープンソースプロジェクトに関連付いてるということが判明した。ネットの情報は前提条件や中間が端折られていることが多いのでこういうとこ難しい。

.NET Coreアプリケーションを動かす

プロジェクトの作成

Windowsに戻って、Visual Studioで.Net Coreプロジェクトを作成する。

既定でHello Worldを出力するMainメソッドが配置されている。そのままビルドするとbin配下にファイルが出来上がる。Linux上で実行に必要なのは以下の二つ。
・TestApp.dll
・TestApp.runtimeconfig.json

Ubuntuに転送して実行

転送方法は何でもいいけど、とりあえず適当なディレクトリを作ってpowershellでscpを使う。

> scp .\TestApp.dll user@192.168.56.101:~/test/.
> scp .\TestApp.runtimeconfig.json user@192.168.56.101:~/test/.

プログラムの実行はdotnetコマンドで実行するdllを指定する。ランタイムも必要ない実行ファイルにパッケージングすることもできるらしいけど今はスルー。

$ dotnet TestApp.dll
Hello World!

できた。完全に余談の方が長かった。次回はASP.NETを動かしてみる。

コメント