Azure Sphereテナントの作成(雑記版)

そろそろMT3620開発キットが手元に届いたころですね。
すぐにデバイスの電源を入れて動かしたいところではありますが、その前にAzure Sphereテナントを用意しておく必要があります。
MCU、OS、Cloudとあった3つのうちの、Cloudの部分です。 下図の赤マルのところ。
f:id:matsujirushix:20180926204703p:plain

今回は、このAzure Sphereテナントの紹介と作り方を書こうと思います。

Azure Sphereテナント

MCUバイス(Azure Sphere対応MCU)のセキュリティ更新やプログラムアップデートなど、いくつかの機能を実現するために、マイクロソフトからAzure Sphereセキュリティサービスが提供されています。
Azure Sphereでは、このAzure Sphereセキュリティサービスの使用が必須です。MCUバイスをインターネットに接続してAzure Sphereセキュリティサービスと紐づけしない限り、MCUバイスにプログラムを入れることさえできません!!
そして、Azure Sphereセキュリティサービスを使えるようにするには、「Azure Sphereテナントを作成する」という作業になります。

Azure SphereテナントAzure ADテナントに紐づいて作成します。これは、Azure SphereセキュリティサービスMCUバイスを追加したり、プログラムをOver-the-Airで配布したりするときの認証に組織アカウントを使うためです。

あー、ややこしい、、、

ざっくりと言うと、

  1. Azure ADテナントに、組織アカウントを用意した上で、
  2. (Azure ADテナントに紐づいた)Azure Sphereテナントを作成、
  3. (するとAzure Sphereセキュリティサービスが使えるようになって、)
  4. Azure SphereテナントMCUバイスを割り当てる ←Claim your device
  5. (と、MCUバイスの操作が可能になる)

です。

んー、図にしないと分かりにくい(汗

Azure ADテナント

現状、2のAzure ADテナントAzure Sphereテナントの紐づけをあとから変更したり、4のAzure SphereテナントMCUバイスの割り当て変更ができません。
そのため、どのAzure ADテナントを使うかを考えて決断が必要です。
さらに、、、このAzure ADテナントがまた理解し辛い。
どのAzure ADテナントを使うかは、次の3シナリオのいずれかになると思います。

  1. 個人アカウントのAzureで、デフォルトで作られたAzure ADテナント
  2. 個人アカウントのAzureで、新たに作成した(する)Azure ADテナント
  3. 組織アカウントのAzureで、組織のAzure ADテナント
  4. 組織アカウントのAzureで、新たに作成した(する)Azure ADテナント

推奨は、個人アカウントのAzureは2、組織アカウントのAzureは3のようです。

1のケースは公式ドキュメントに書かれていないため、本当に可能かは不明です。

個人アカウントと組織アカウント

これも良く話題になることですが、自分が使用しているのが個人アカウント組織アカウントか判断がつきにくいです。

Azureにログインするときに、「ひとアイコン」は個人アカウント、「ネームタグアイコン」は組織アカウントです。

(下図の上2つが個人アカウント、3つ目が組織アカウント
f:id:matsujirushix:20180926213343p:plain

個人アカウントのAzureで、新たに作成した(する)Azure ADテナント

さきほどの2のケースが多数だと思うので、これについて手順をサラッと書いておきます。

Azure ADテナントを作成

Azure Sphereテナントと紐づけるAzure ADテナントを作成します。
手順はこちら。

docs.microsoft.com

組織アカウントの作成

セキュリティポリシー的に?Azure Sphereテナントは組織アカウントが必須なので、組織アカウントを作成します。

こちらの3と4。

https://docs.microsoft.com/ja-jp/azure-sphere/quickstart/qs-azure-directory-account#create-a-new-account-and-directory-that-are-associated-with-an-existing-accountdocs.microsoft.com

Azure Sphereテナントを作成

azsphere loginして(このときに使用するアカウントはさきほど作成した組織アカウント)、azsphere tenant create -n ホゲホゲ で。

こちらの2と3。

https://docs.microsoft.com/ja-jp/azure-sphere/quickstart/claim-devicedocs.microsoft.com

Azure Sphereテナントを確認

azsphere tenant list で、作成したテナントを確認することができます。

最後に

わたし一人ではさまざまなケースをテストできないので、、、
みなさんのやってみた結果をコメントいただけると嬉しいです。

Azure Sphere開発ツール

Azure Sphereのアプリケーションは、Visual Studio + Azure Sphere SDKで開発します。

  1. Windows 10 Anniversary Update以降(1607以降)
  2. Visual Studio 2017 Enterprise/Professional/Community 15.7以降
  3. Azure Sphere SDK Preview for Visual Studio

1と2を事前に準備しておき、Azure Sphere SDK Preview for Visual Studioをネットからダウンロードして実行、インストールすればOKです。

Azure Sphere SDKインストール前

Windows 10を1607以降にアップデートしておきます。
winverコマンドでバージョンを確認しておきましょう。
現在の最新は1803です。

f:id:matsujirushix:20180924184817p:plain

Visual Studioは15.7以降にアップデートしておきます。
現在の最新は15.8.5です。

f:id:matsujirushix:20180924190256p:plain

Azure Sphere SDKインストール

Azure Sphere SDK Preview for Visual Studioをダウンロードして実行します。

f:id:matsujirushix:20180924190411p:plain

OpenVPN TAP driverを入れぞ!と赤字で協調されていてドキドキしますが、気にせずInstallボタンをクリックしてインストールを進めます。

f:id:matsujirushix:20180924190552p:plain

あとは待つだけ、、、

f:id:matsujirushix:20180924190615p:plain

f:id:matsujirushix:20180924190711p:plain

インストール後

インストールされた結果をいくつか確認しましょう。

プログラムの一覧に、Visual Studio Tools Preview for Azure Sphereが追加されました。

f:id:matsujirushix:20180924190922p:plain

メニューに、Azure Sphere > Azure Sphere Developer Command Prompt Previewが追加されました。
今後、このコマンドプロンプトで「azsphere」というコマンドを実行することが多々あります。

f:id:matsujirushix:20180924191238p:plain

Visual Studioには、Visual Studio Tools Preview for Azure Sphere拡張が追加されました。

f:id:matsujirushix:20180924191403p:plain

このVisual Studio拡張によって、新規プロジェクトのVIsual C++ > クロスプラットフォーム に、Azure Sphere が追加されました。

f:id:matsujirushix:20180924192635p:plain

以上、終了。

一般的な組み込み系のツールと比較して、Azure Sphere SDKを実行するだけのあっさりとした仕組みになっています。
EXE、1個を実行するだけの簡単インストールで良いですね♪

以下、余談

赤字で表示されていたOpenVPN TAP driverって何ぞ?ですが、、、
Visual Studioやazsphereコマンドはパソコン内の仮想ネットワークを経由してMCUバイスと通信する仕組みになっています。

Visual Studio, azsphere <-> TAP driver <-> Azure Sphere Device Communication Service <-> USB <-> MCUバイス

そんなわけなので、ネットワーク接続にAzure Sphereという接続(これがTAP driver)と、

f:id:matsujirushix:20180924191902p:plain

WindowsサービスにAzure Sphere Device Communication Serviceが追加されています。

f:id:matsujirushix:20180924192135p:plain

MT3620開発キットを買う前に知っておくべきこと

Seeedが販売するAzure Sphere MT3620開発キットを購入する前に、知っておくべきことを書いておきます。
購入してから「あー、買って失敗だった。使えねー。」とならないためにも。

Search results for: 'Azure Sphere MT3620'

はじめに

本文書はマイクロソフト、Seeedの正式な文書ではありません。
マツジルシ個人のメモです。
ライセンスなど、デリケートな部分は各社の文書をご確認ください。

Azure Sphere MT3620開発キット

Azure Sphere対応MCUMediaTek MT3620が載った、Azure Sphereの開発用キットです。
内容物は、

  1. Azure Sphere MT3620開発ボード
  2. USBケーブル

の2つ。

取扱説明書といった類は一切入っていません!(キッパリ

f:id:matsujirushix:20180924115546p:plain

Wi-Fi電波などの都合で、製品が { US, EU, JP } の3種類あります。
日本で使うなら JP(SKU 102991100)を。

f:id:matsujirushix:20180924120232p:plain

開発ツール

MT3620のアプリケーションは、Windowsパソコン上のVisual Studio 2017で開発します。

パソコンの要件はこちら。

  1. Windows 10 Anniversary Update以降(1607以降)
  2. Visual Studio 2017 Enterprise/Professional/Community 15.7以降
  3. Azure Sphere SDK Preview for Visual Studio

MacLinuxでは開発できません!

3のSDKはネットからダウンロード可能なので、MT3620開発キット購入前にコンパイルまで出来るか確認しておくと安心です。(MCUバイスが無くてもコンパイルまでは可能です。)

(情報ソース)

Azure

ここがややこしい!

MCUバイスをUSBからプログラム可能にするには、

  • Azure ADを用意して、
  • Azure Sphereテナントを作成して、(& 紐づけ)
  • Azure ADにADユーザーを作成して、
  • MCUバイスをADユーザーに割当てして、(クレーム)(←ちょっと間違っているかも?)
  • MCUバイスをUSBからプログラム可能にする。(サイドローディング)

と操作します。

そのため、Azureアカウントが必要です。

Azure Sphereテナントなどは、Azureアカウントで費用は一切かかりません。

ライセンス

製品ページに注意事項があります。

  • 出荷国に制限あり。(日本はオッケー)
  • 返品不可。
  • プロトタイプ用途に制限。製品に組み込んではダメ。

さらに、End User Lisense Termsがあるので、こちらもご確認を。

返品、所有権の移動

MCUバイスとAzure Sphereテナントの割当て(クレーム)は1度しかできません。
割り当ての変更や解除はできません。

使えない機能

9/24 20:30に加筆

現在はAzure Sphere SDKPreviewということもあり、ハードウェアの一部機能が使用できません。

これらの機能をサポートするスケジュールは公開されていませんが、早く使えるようになって欲しいですね。

最後に

後半、気が滅入るような内容が続きましたが、、、
最新テクノロジーをちょこっと試してみよう!といった感覚で使ってもらえると嬉しいです。

配線が苦手な人向けにMT3620 Groveシールドとか、センサーなどがセットになったAzure Sphere Grove Starter Kitという製品もありますので、時間を短縮したい方は一緒にどうぞ。

Azure Sphereとは?

まもなく、SeeedからAzure Sphere MT3620開発キットが出荷になるぞい!ってことで、Azure Sphereについて整理してみました。

Azure Sphereとは?

azure.microsoft.com

Azure Sphere は、極めてセキュリティの高いインターネット接続マイクロコントローラー (MCU) デバイスを開発するための新しいソリューションです。このソリューションで提供されるセキュリティと接続の基盤を利用すれば、大規模なモノのインターネット (IoT) 実装が可能な価格で、顧客に愛されるインテリジェントな製品とエクスペリエンスを開発できます。そして、それらの製品をすばやく市場に投入できます。

ポイントを抜き出すと、

  1. MCUバイスを開発するためのソリューション
  2. インターネットに接続するMCUバイス
  3. 極めてセキュリティの高いMCUバイス
  4. 大規模なIoT実装が可能な価格
  5. 製品をすばやく市場に投入

大雑把にいえば、Azure SphereMCUバイスを開発するために、MCUOSCloud(と開発ツール)のすべてを提供するソリューションです。 対象のMCUバイスインターネット接続するのが特徴で、ネットからの攻撃、侵入に耐えられるよう極めて高いセキュリティを実現することができるよう設計されています。また、この手のMCUバイスでは珍しく、自動OSアップデートが提供されており、新たな脅威に対しても防御することができます。

MCU

MCUがAzure Sphereに対応するには特定の要件を満たす必要があります。要件が明記された文書は見つかりませんが、ほぼこちらに書かれています。

f:id:matsujirushix:20180924104300p:plain

推測ですが、FLASH 4MB, SRAM 4MB, Microsoft Pluton, ARM Cortex-AとNetwork Connectionは必須と思います。

現在入手可能な唯一のAzure Sphere対応MCUは、台湾MediaTekが製造するMT3620です。
Product Briefが公開されていますが、、、ペリフェラルレジスタ操作など詳細は公開されていません。

www.mediatek.com

f:id:matsujirushix:20180924104943p:plain

”現在入手可能”と書きましたが、個人ではMT3620単体を購入することは(たぶん)無理です。
Seeedから開発キット「Azure Sphere MT3620開発キット」が販売されているので、開発初期はこれを使うことになります。

Search results for: 'Azure Sphere MT3620'

OS

コアが複数載っており、各コアの役割が別々なので、、、OSは1種類では無いようです。
OSというより、サブシステム毎に考えたほうが良さそうです。 このあたり、今後、用語を整理していきたいところではあります。

今の時点で認識しておいたほうが良さそうなサブシステムは次の3つです。

  1. Microsoft Pluton security サブシステム
  2. Application processor サブシステム
  3. Wi-Fi サブシステム

1と3は、マイクロソフト?が開発、保守する部分なので気にしなくて良いでしょう。(おぃ
ここのOSが何なのかはハッキリ分かりません、、、

2は、我々が開発したアプリケーションが動くサブシステムで、ARM Cortex-A上で実行されます。ここがカスタムLinuxカーネルで動いています。

f:id:matsujirushix:20180924112047p:plain

Linuxと聞くと、Shellが立ち上がってlsとか操作するんでしょ?と思いがちですが、、、Application processorサブシステムにはShellが無いです。

さらに、これ。

Only one A7 application runs on the device at a time.

同時に1つのアプリケーションしか動かないです。

(このあたりの詳細については、引き続きブログで紹介できたらと思っています。)

Cloud

AzureにAzure Sphereセキュリティサービスが動いて、MCUバイスとネットワーク連携します。
Azure Sphereセキュリティサービスから、MCUバイスのアプリケーションを配布(Over-the-Air)できます。

f:id:matsujirushix:20180924113904p:plain

つづき

次は「MT3620開発キットを買う前に知っておくべきこと」を書こうと思います。

宣伝

Azure Sphereセミナーやります。 (すでに満席ですが、、、 キャンセル待ちに並んでおけば繰り上がるかも?) algyan.connpass.com

RasPi+IoTCoreでAzure IoT Edgeは動くのか!?→動かない

一般提供開始(GA)したAzure IoT Edgeが動作するOSの一覧がこれです。

docs.microsoft.com

マイクロソフトが正式にサポートするものがTier 1というカテゴリになっていて、

  • 一般提供開始(GA)
  • パブリックプレビュー
    • Windows 10 Server 1803
    • Windows 10 IoT Enterprise (with April 2018 update)
    • Windows 10 IoT Core (with April 2018 update)

と、現時点で安心して使えるのはUbuntu Server 18.04/16.04とRaspbian-stretchだけのようです。用途によって注意が必要ですね。

ラズパイのWindows 10 IoT Coreでも動くのかな?
ということで、やってみることに。

環境

まだRasPi3B+、買っていないので、、、
Raspberry Pi Model B(RasPi3B)を使います。

Windows 10 IoT CoreのイメージをマイクロSDに書き込んで、RasPi3Bで起動。
OSバージョンはv.10.0.17134.1でした。Build 17134はVersion 1803なので、April 2018 updateに該当。(あぁ、ややこしい)

f:id:matsujirushix:20180722142214p:plain

IoT Edgeサービスをインストール

手順はこちら。

docs.microsoft.com

おっと、いきなりPowerShell
コンソール出し方を忘れた、、、のでググります。

これっぽい。

docs.microsoft.com

PowerShellを接続

PCでWindows PowerShellを管理者で実行してから、net start WinRMコマンドでWinRMサービスを有効にします。

f:id:matsujirushix:20180722143229p:plain

良さげ。

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.0.4コマンドでIoT Coreラズパイを信頼します。

f:id:matsujirushix:20180722143457p:plain

Enter-PSSession -ComputerName 192.168.0.4 -Credential 192.168.0.4\AdministratorコマンドでIoT CoreラズパイのPowerShellに接続します。

f:id:matsujirushix:20180722143800p:plain

繋がりました!

IoT Edgeサービスパッケージをダウンロード

手順に従って、バシバシとコマンドを実行します。

Invoke-WebRequest https://aka.ms/iotedged-windows-latest -o .\iotedged-windows.zip
Expand-Archive .\iotedged-windows.zip C:\ProgramData\iotedge -f
Move-Item c:\ProgramData\iotedge\iotedged-windows\* C:\ProgramData\iotedge\ -Force
rmdir C:\ProgramData\iotedge\iotedged-windows
$env:Path += ";C:\ProgramData\iotedge"
SETX /M PATH "$env:Path"

f:id:matsujirushix:20180722144300p:plain

C:\ProgramData\iotedgeフォルダに放り込んだみたいなので確認すると、iotedgeやiotedged(デーモンかな?)が入っていました。

f:id:matsujirushix:20180722144626p:plain

vcruntimeをインストール

手順に従って(ry

Invoke-WebRequest -useb https://download.microsoft.com/download/0/6/4/064F84EA-D1DB-4EAA-9A5C-CC2F0FF6A638/vc_redist.x64.exe -o vc_redist.exe
.\vc_redist.exe /quiet /norestart

f:id:matsujirushix:20180722144933p:plain

vc_redistを実行したところでエラー。
OSプラットフォームが違うぞコラ!ってことですが、、、
よく見ると、ダウンロードしているファイル名がvc_redist.x64.exeとx64ぽい。

途中経過

現時点は動かない。
なんとなく予想はしていたが、、、ArmのIoTCoreは対応していないんだろうか??

一般提供開始(GA)したAzure IoT Edgeをインストールしてみた

6/27にAzure IoT EdgeがGA(一般提供開始)しましたが、なかなかまとまった時間が取れず、、、3週間ほど遅れましたが、動かしてみました。というか、入れてみました程度。

azure.microsoft.com

みんな大好きラズパイで試すことにします。
最新はRaspberry Pi Model B+(RasPi3B+)ですが、今回は少しスペックの低いRaspberry Pi Model B(RasPi3B)で。
深い理由があるわけではなく、、、まだRasPi3B+、買っていないものですから。(焦

RasPi3B + Raspbian

いつものように、マイクロSDをSDFormatterでイレースしてから、Win32DiskImagerでRaspbianイメージをマイクロSDに書き込みます。
Raspbianイメージは現時点最新のLite、2018-06-27-raspbian-stretch-lite.imgにしました。

f:id:matsujirushix:20180715203131p:plain

f:id:matsujirushix:20180715203343p:plain

あと、忘れずにbootにsshファイルを作っておきます。 Raspbian起動後、パソコンのTeraTermからSSH接続で操作したいので。

RasPiにマイクロSDを差して起動、無事、TeraTermから接続できました。

f:id:matsujirushix:20180715203800p:plain

この時点のディスク使用量はこちら。

$ df -k
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       15471088 1072076  13737812   8% /
devtmpfs          470116       0    470116   0% /dev
tmpfs             474724       0    474724   0% /dev/shm
tmpfs             474724    6300    468424   2% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs             474724       0    474724   0% /sys/fs/cgroup
/dev/mmcblk0p1     43539   22192     21347  51% /boot
tmpfs              94944       0     94944   0% /run/user/1000

IoT Edgeランタイムをインストール

最初にやるべきチュートリアルはこちら。クイックスタート。
LinuxWindowsの2種類あるので、Linuxの方を参照します。

docs.microsoft.com

本文にも書かれていますが、IoT Edgeラインタイムをインストールする部分はUbuntu 16.04を想定して書かれています。
RasPiの手順はこちらです。

docs.microsoft.com

手順に沿ってコマンドを実行していきましょう。

mobyのエンジンとCLIをインストールします。(CLIは必須ではありません。)

$ curl -L https://aka.ms/moby-engine-armhf-latest -o moby_engine.deb && sudo dpkg -i ./moby_engine.deb
$ curl -L https://aka.ms/moby-cli-armhf-latest -o moby_cli.deb && sudo dpkg -i ./moby_cli.deb
$ sudo apt-get install -f

次に、IoT Edgeセキュリティデーモンをインストールします。
(これ、Previewのときは無かったような)

$ curl -L https://aka.ms/libiothsm-std-linux-armhf-latest -o libiothsm-std.deb && sudo dpkg -i ./libiothsm-std.deb
$ curl -L https://aka.ms/iotedged-linux-armhf-latest -o iotedge.deb && sudo dpkg -i ./iotedge.deb
$ sudo apt-get install -f

IoT Edgeランタイムをセットアップ

/etc/iotedge/config.yaml<ADD DEVICE CONNECTION STRING HERE>に、IoT Hubに作成したIoT Edgeの接続文字列(Connection string)を記入して、IoT Edgeセキュリティデーモンを再起動します。

$ sudo vi /etc/iotedge/config.yaml
$ sudo systemctl restart iotedge

この時点のディスク使用量はこちら。

$ df -k
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       15471088 1328336  13481552   9% /
devtmpfs          470116       0    470116   0% /dev
tmpfs             474724       0    474724   0% /dev/shm
tmpfs             474724    6324    468400   2% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs             474724       0    474724   0% /sys/fs/cgroup
/dev/mmcblk0p1     43539   22192     21347  51% /boot
tmpfs              94944       0     94944   0% /run/user/1000

IoT Edgeランタイムの稼働確認

いくつかのコマンドで、IoT Edgeランタイムの稼働状況を確認することができます。

コマンド 説明
systemctl status iotedge IoT Edgeデーモンの稼働状況
sudo iotedge list 稼働しているIoT Edgeモジュールの一覧
sudo iotedge logs edgeAgent IoT Edgeエージェントのログ表示

従来の(?)、Dockerコマンドも使えます。

$ sudo docker ps
CONTAINER ID        IMAGE                                      COMMAND                   CREATED             STATUS              PORTS               NAMES
ffca46f992c6        mcr.microsoft.com/azureiotedge-agent:1.0   "/bin/sh -c 'echo \"$…"   7 minutes ago       Up 7 minutes                            edgeAgent
$ sudo docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
mcr.microsoft.com/azureiotedge-agent   1.0                 b4496705558b        2 weeks ago         229MB

まとめ

  • Previewと比べ、IoT Edgeランタイムを動かすまでがチョー簡単になった。所要時間、約20分。
  • ディスク使用量は+250MB。
  • IoT Edgeの接続文字列がコマンドライン引数からファイル設定に変わった。このほうが便利。
  • Azure IoT Edgeの公式サポートはDockerではなくmoby。(mobyってなんだろう、、、)
  • IoT Edgeのソースはこちら

.NET Core 2.1 SDKをRaspberry Pi 3で動かしてみた

.NET Core SDKRaspberry Piに対応したようなので試してみました。

blogs.msdn.microsoft.com

ラズパイとOS

サポートしているのはRaspberry Pi 2以降で、ARMv6を使ったRaspberry Pi ZeroシリーズはNG。

また、Release NotesにあるSupported OS versionsのLinuxを見ると、Debian 9 / Ubuntu 18.04 のようです。

ARM32 support starts with Debian 9 and Ubuntu 18.04.

なので、

  • Raspberry Pi3 Model B
  • Ubuntu 18.04

でやってみることにしました。

OSインストール

ラズパイ向けのUbuntu 18.04イメージはUbuntu公式からは配布されていないようです。orz
ここに手間をかけたくないなぁ、、、ということで探し回ってみたところ、ここにありました。感謝。

SDFormatterで削除したマイクロSDに、Win32DiskImagerでubuntu-18.04-preinstalled-server-armhf+raspi3.img.xzを書き込んで、ラズパイで起動します。

起動時にサービスがFailしているような、、、気がしましたが、見なかったことにw

無事、OSが動きだしました。

ubuntu@ubuntu:~$ uname -a
Linux ubuntu 4.15.0-1010-raspi2 #11-Ubuntu SMP PREEMPT Tue Apr 24 06:27:17 UTC 2018 armv7l armv7l armv7l GNU/Linux
ubuntu@ubuntu:~$

.NET Core SDKインストール

Installing .NET Core on LinuxのUbuntu 18.04のとおりコマンドを実行します。

ubuntu@ubuntu:~$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
ubuntu@ubuntu:~$ sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
ubuntu@ubuntu:~$ wget -q https://packages.microsoft.com/config/ubuntu/18.04/prod.list
ubuntu@ubuntu:~$ sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
ubuntu@ubuntu:~$
ubuntu@ubuntu:~$ sudo apt-get install apt-transport-https
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  apt-transport-https
0 upgraded, 1 newly installed, 0 to remove and 81 not upgraded.
Need to get 1692 B of archives.
After this operation, 152 kB of additional disk space will be used.
Get:1 http://ports.ubuntu.com/ubuntu-ports bionic/universe armhf apt-transport-https all 1.6.1 [1692 B]
Fetched 1692 B in 1s (2880 B/s)
Selecting previously unselected package apt-transport-https.
(Reading database ... 61793 files and directories currently installed.)
Preparing to unpack .../apt-transport-https_1.6.1_all.deb ...
Unpacking apt-transport-https (1.6.1) ...
Setting up apt-transport-https (1.6.1) ...
ubuntu@ubuntu:~$ sudo apt-get update
Get:1 https://packages.microsoft.com/ubuntu/18.04/prod bionic InRelease [2846 B]
Hit:2 http://ppa.launchpad.net/ubuntu-raspi2/ppa-rpi3/ubuntu bionic InRelease
Hit:3 http://ports.ubuntu.com/ubuntu-ports bionic InRelease
Hit:4 http://ports.ubuntu.com/ubuntu-ports bionic-updates InRelease
Get:5 https://packages.microsoft.com/ubuntu/18.04/prod bionic/main amd64 Packages [10.1 kB]
Hit:6 http://ppa.launchpad.net/ubuntu-raspi2/ppa/ubuntu bionic InRelease
Hit:7 http://ports.ubuntu.com/ubuntu-ports bionic-backports InRelease
Hit:8 http://ports.ubuntu.com/ubuntu-ports bionic-security InRelease
Fetched 13.0 kB in 5s (2569 B/s)
Reading package lists... Done
ubuntu@ubuntu:~$ sudo apt-get install dotnet-sdk-2.1
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package dotnet-sdk-2.1
E: Couldn't find any package by glob 'dotnet-sdk-2.1'
E: Couldn't find any package by regex 'dotnet-sdk-2.1'
ubuntu@ubuntu:~$

E: Unable to locate package dotnet-sdk-2.1と、dotnet-sdk-2.1が見つからないエラーになってしまいました。

ログを見ると気になる表記が。

Get:5 https://packages.microsoft.com/ubuntu/18.04/prod bionic/main amd64 Packages [10.1 kB]

おや?

cat /etc/apt/sources.list.d/microsoft-prod.list
deb [arch=amd64] https://packages.microsoft.com/ubuntu/18.04/prod bionic main

おやおや??

仕組みを理解しないまま、漁ってみるが、、、

f:id:matsujirushix:20180617110406p:plain

f:id:matsujirushix:20180617110518p:plain

arm向けのパッケージが見つからない。

どうやら、リポジトリにアップされていないようなので、、、
バイナリをダウンロードして、Installing .NET Core on LinuxのInstallation from a binary archiveのとおり、解凍とパス設定しました。

ubuntu@ubuntu:~$ wget https://download.microsoft.com/download/8/8/5/88544F33-836A-49A5-8B67-451C24709A8F/dotnet-sdk-2.1.300-linux-arm.tar.gz
ubuntu@ubuntu:~$ mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-2.1.300-linux-arm.tar.gz -C $HOME/dotnet
ubuntu@ubuntu:~$ export PATH=$PATH:$HOME/dotnet

dotnetコマンドが使えるか確認。

ubuntu@ubuntu:~$ dotnet

Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET Core information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.
ubuntu@ubuntu:~$ cd
ubuntu@ubuntu:~$ dotnet

Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET Core information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.
ubuntu@ubuntu:~$

サンプルプログラムを実行してみる

ここ2. Create your app3. Run your appをやってみます。

ubuntu@ubuntu:~$ dotnet new console -o myApp
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on myApp/myApp.csproj...
  Restoring packages for /home/ubuntu/myApp/myApp.csproj...
  Installing Microsoft.NETCore.DotNetAppHost 2.1.0.
  Installing Microsoft.NETCore.DotNetHostResolver 2.1.0.
  Installing Microsoft.NETCore.DotNetHostPolicy 2.1.0.
  Installing NETStandard.Library 2.0.3.
  Installing Microsoft.NETCore.Targets 2.1.0.
  Installing Microsoft.NETCore.Platforms 2.1.0.
  Installing Microsoft.NETCore.App 2.1.0.
  Generating MSBuild file /home/ubuntu/myApp/obj/myApp.csproj.nuget.g.props.
  Generating MSBuild file /home/ubuntu/myApp/obj/myApp.csproj.nuget.g.targets.
  Restore completed in 15.86 sec for /home/ubuntu/myApp/myApp.csproj.

Restore succeeded.

ubuntu@ubuntu:~$ cd myApp
ubuntu@ubuntu:~/myApp$ cat Program.cs
using System;

namespace myApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
ubuntu@ubuntu:~/myApp$ dotnet run
Hello World!
ubuntu@ubuntu:~/myApp$

おぉー
動いた♪

動いたけど、、、起動するまでに結構時間かかるなぁw