マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

...と言う事で、以下、Rasbian上で、.NET Coreの開発を行う。

詳細

手順

実際にやったログ

準備

コチラ(Windows 10 IoT Core)で思い出す。

インストール

  • Rasbianをインストールする。
  • RaspbianにDockerGitをインストールする。
    • アカウント系は開発環境でのみ設定。
    • 本番環境ではアカウントなしでpullするのみ。

参考:インストール手順

.NET Core

以下を参考に、Raspberry Pi 3 MODEL Bに.NET 5をインストール。

  • 手順
  • インストール
    RasbianはDebian系)
  • ダウンロード
    wget https://download.visualstudio.microsoft.com/download/pr/fada9b0c-202a-4720-817b-b8b92dddad99/fa6ace43156b7f73e5f7fb3cdfb5c302/dotnet-sdk-5.0.202-linux-arm.tar.gz
  • 解凍
    mkdir -p "$HOME/dotnet" && tar zxf dotnet-sdk-5.0.202-linux-arm.tar.gz -C "$HOME/dotnet"
  • 環境変数を設定
  • 最下行に追加
    export DOTNET_ROOT=$HOME/dotnet
    export PATH=$PATH:$DOTNET_ROOT
  • 動作確認
  • バージョン確認
    $ dotnet -v
    Unknown option: -v
    .NET SDK (5.0.202)
    使用法: dotnet [runtime-options] [path-to-application] [arguments]
    ...
  • 開発実行確認
    dotnet new console -o helloworld
    cd helloworld
    dotnet run

.NET Core On Rasbian On Docker

.NET CoreのDockerコンテナのhelloworldをやってみる(た)。

  • 以下、試行錯誤の上に解ったこと。
    dotnet/dotnet-dockerをそのまま使用して動作確認をすると、
    Dockerfile.debian-arm32がRasbian上で動作したので切り分けができた。
  • *.csprojファイルやDockerfileがあるフォルダに、
    binやobjフォルダがあると原因不明のエラーが発生するので、
    コレ等のフォルダを削除してから作業を行う必要がある。
  • helloworldディレクトリに移動(CD)し、
  • 初めに、binやobjフォルダを削除する。
  • 上記の、.NET用の Dockerfileを配置する。
    (この際、エントリポイントのプロジェクト名のみ書き直す。)
  • 変更前
    dotnetapp
  • 変更後
    helloworld
  • ビルドしたコンテナを実行してみる。
  • コンテナの確認
    >docker images
    REPOSITORY    TAG     IMAGE ID ...
    helloworld    latest  XXXXXXXX ...
  • コンテナの実行
    docker run helloworld
    Hello World!
  • コンテナをDocker Hubにプッシュして、Rasbian上で実行してみる。
  • Docker Hubにプッシュ
  • リネーム
    docker tag XXXXXXXX osscjpdevinfra/helloworld:latest
  • ログイン
    >docker login
    Authenticating with existing credentials...
    Login Succeeded
  • プッシュ
    >docker push osscjpdevinfra/helloworld:latest
  • コンテナの実行
  • PC上で実行
    ・ローカルのイメージを消しておく。
    >docker rmi XXXXXXXX -f
    ...
    Deleted: sha256:...
    ・Docker Hubからプルして実行。
    >docker run osscjpdevinfra/helloworld:latest
    Unable to find image 'osscjpdevinfra/helloworld:latest' locally
    latest: Pulling from osscjpdevinfra/helloworld
    ...
    Status: Downloaded newer image for osscjpdevinfra/helloworld:latest
    Hello World!
  • Rasbian上で実行
    以下のように、exec format errorが起きる。
    (イメージは、linux/amd64だが、Rasbianはlinux/arm/v7と表示される)。
    $ docker run osscjpdevinfra/helloworld:latest
    Unable to find image 'osscjpdevinfra/helloworld:latest' locally
    latest: Pulling from osscjpdevinfra/helloworld
    ...
    Status: Downloaded newer image for osscjpdevinfra/helloworld:latest
    WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm/v7) and no specific platform was requested
    standard_init_linux.go:219: exec user process caused: exec format error
  • PC上で実行
    動かない(イメージは、linux/armだが、PCはlinux/amd64と表示される)。
    >docker run osscjpdevinfra/helloworld:net50-debian-arm32
    WARNING: The requested image's platform (linux/arm) does not match the detected host platform (linux/amd64) and no specific platform was requested
    A fatal error occurred, the folder [/usr/share/dotnet/host/fxr] does not contain any version-numbered child folders
  • Rasbian上で実行(Docker Hub経由)
    動いた(なお、debian-arm64だとPC上で動いて、Rasbian上で動かない)。
    $ docker run osscjpdevinfra/helloworld:net50-debian-arm32
    Unable to find image 'osscjpdevinfra/helloworld:net50-debian-arm32' locally
    net50-debian-arm32: Pulling from osscjpdevinfra/helloworld
    ...
    Digest: sha256:558763682161963dfc72879e17220ae62e0767b7727261a4219de840cf3c1439
    Status: Downloaded newer image for osscjpdevinfra/helloworld:net50-debian-arm32
    Hello World!

Rasbian上でDockerビルド

  • 同様に、Dockerfile.debian-arm32を使用してDockerビルド
    $ docker build -t helloworld:hoge .
    ...
    Successfully tagged helloworld:hoge
  • Rasbian上で実行(ローカル実行)
    $ docker run helloworld:hoge
    Hello World!

Visual Studio Code

  • が、ダメ。確かに、ARM32だしね。...と言う事で、ググると以下が出てくる。
  • 無事インストールできたので、
    前述のhelloworldをデバック実行できるようにする。
  • SSHからではなく、デスクトップかVNCからアクセスする。
  • ブレークポイントを設定して、[F5]実行を行ってみようと、
    [create a launch. json file]を押下したが、以下が出てダメ。
    The C# extension for Visual Studio Code (powered by OmniSharp) is incompatible on linux armv7l

オプション

リモートデバッグ

GUIサポート

GUIに関しては、

参考

Qiita

CodeZine?(コードジン)

ラズベリーパイをつかったセンサープログラミング超入門連載一覧

https://codezine.jp/article/corner/606

C#ではじめるラズパイIoTプログラミング連載一覧

https://codezine.jp/article/corner/792

開発基盤部会 Wiki

Rasbian

Docker On Rasbian


Tags: :インフラストラクチャ, :IoT, :Linux, :.NET開発, :.NET Core


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-04-15 (木) 21:08:55 (11h)