Help us understand the problem. What is going on with this article?

【C#】RaspberryPi 3に.NET Coreを入れてHello World!

More than 1 year has passed since last update.

【C#】RasperryPi 3に.NET Coreを入れてHello World!

ゴール

Raspberry Pi 3 Model B (Raspbean OS)に
.NET Core 2.0 Preview 2を入れ、HelloWorldを表示させる

現在(2017/7/23)時点では、ラズパイが乗っているarm32cpuで.NET Coreのビルドができないので、他マシンでビルドしたものをラズパイで動作させることが出来れば目的達成とする。

試したきっかけ

dotnet core roadmap
https://github.com/dotnet/core/blob/master/roadmap.md
今年のQ3(10月 - 1月くらい?)に.NET Core2.0リリースとなるらしく、
それまでに一回くらい先行して触っておきたいなぁって思ったから。

用意したもの

  • Raspberry Pi 3 Model B
  • ラズパイ接続用のキーボード・マウス・モニタ
  • SDカード(16GB)
  • dotnet core 2.0.0 preview2 インストール済・ビルド可能なPC
    https://www.microsoft.com/net/core/preview ここからダウンロードし、インストールしておきましょう。
    Windows, Macなら簡単です。

手順

1. Raspberry Pi 3 にRaspbianを入れる

まず、ラズパイ上にOSをインストールします。手順はGoogle検索等で調べると詳細なページ等たくさん出てくると思いますので、大まかな流れと注意点のみを記述します。

  1. Raspbian Jessie(NOOBS)を入手
    https://www.raspberrypi.org/downloads/noobs/
    a.PNG
    Raspbean Jessieの入れ方としては、イメージファイル(.img)を入手して自分でSDカードにWriteする方法と、NOOBSを利用してインストールする方法がありますが、個人的にはNOOBSを推奨します。
    NOOBSとは、New Out Of the Box Softwareの略であり、ネットスラングのnoobとは関係ありません。なので、積極的に使っていきましょう。NOOBSを選択してインストールした場合、OS起動前にBIOSのような感じで立ち上がるので、リカバリ等容易に行えるようになります。

  2. SDカードをフォーマット
    https://www.sdcard.org/jp/downloads/formatter_4/
    このあたりのフォーマット用ソフトウェアを使って初期化します。
    単にファイルを削除するだけではなく、必ずフォーマット(上書きフォーマット)を行い、ディスク領域内を完全に初期化してください。

  3. SDカードに書き込み
    1.でダウンロードしたファイルを展開し、SDカードの中に入れてください。

2. Raspbianのインストールと設定修正

これも、手順はネット上にかなり詳しく転がってますので、軽く触れるだけとします。

  1. Raspberry Pi にSDカードを差し込んで起動
  2. NOOBSが立ち上がり、OS選択画面が出るのでRaspbian(Recommended)を選択する。ディスクを上書きしてもよいか警告が出るが、Yesを押して続行。
  3. 大体20分くらいかかってインストールが進行する。インストール終了後、再起動を促す画面が出るので、再起動する。

その後、細かい修正を行います。

  • パスワード変更(piのデフォルトは危険なため変更しましょう)
  • ロケール変更
  • タイムゾーン変更
  • キーボード配列変更
  • 無線LAN利用場所の変更

詳細手順は検索すれば出ますし、検索しなくても設定画面からすべてGUIによる設定が可能です。
最後に、アクセスポイントに接続 or Ethernetケーブルを接続してネットに繋いで、以下のコマンドを実行します。

sudo apt-get update
sudo apt-get upgrade

これで、インストールされているパッケージが最新になり、Raspberry Piの初期設定は完了です。

3. .NET Coreのインストール

Raspberry Piに .NET Core 2.0 Preview をインストールします。
下記操作は全て、Raspberry Piの端末上から行います。

  1. 下記コマンドを実行し、必要な事前取得パッケージをインストールする
    sudo apt-get install curl libunwind8 gettext
    

  2. 下記コマンドを実行し、.NET Core ランタイムをCurlでダウンロードする
    curl -sSL -o dotnet.tar.gz https://dotnetcli.blob.core.windows.net/dotnet/Runtime/release/2.0.0/dotnet-runtime-latest-linux-arm.tar.gz
    

  3. 下記コマンドを実行し、.NET Coreランタイムをインストールする
    sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
    

  4. 下記コマンドを実行し、「dotnet」コマンドを実行可能にする
    sudo ln -s /opt/dotnet/dotnet /usr/local/bin
    

  5. 下記コマンドを実行し、結果を確認する
    dotnet --help.
    

    < 表示結果 >
    z.jpg

    現時点ではarm32上で動作するdotnetのSDKは存在しないため、ビルド・作成は出来ず、「実行」のみのランタイム環境となります。この画面が表示されれば、ラズベリーパイ側の設定は終了です。あとは別PCでプロジェクトを作成し、ラズベリーパイ上で実行するだけです。

    4. テストアプリケーションの作成

    https://www.microsoft.com/net/core/preview
    上記URLから自分のOS環境に合わせた.NET Core 2.0 Preview 2をダウンロードし、インストールされていることを前提とします。

    • 新しくフォルダを作成し、アドレス部分に「dotnet new console」と入力する c.PNG
    • ファイルが作成されることを確認する d.PNG
    Program.cs
    using System;
    
    namespace ConsoleApplication
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
            }
        }
    }
    
    

    HelloWorldをコンソールに表示するだけのシンプルなコードが書いてある、Program.csファイルとプロジェクトファイルが自動生成されます。

    • アドレス部分に「cmd」と入力し、コマンドプロンプトを開く e.PNG
    • 下記のコマンドを入力し、実行結果を確認する
    dotnet restore
    dotnet publish -r linux-arm
    

    < 実行結果 >
    f.PNG

    • 生成されたpublishフォルダの中身を、ラズパイに転送する h.PNG

    SSHでもSCPでもDropboxでもなんでもよいので、raspberry Pi上に転送します。

    5. 実行

    • 下記コマンドを実行し、転送されたpublishフォルダのパーミッションを実行可能に変更する
    chmod 755 -R publish
    
    • publishフォルダ内で下記コマンドを実行する
    ./helloworld
    

    < 実行結果 >
    i.PNG
    お疲れさまでした!

    結果

    ラズパイ上の dotnet core 2.0.0 preview2 で Hello World!が実行できた!

    感想

    ビルド・生成はまだできないものの、C#一つでなんでも出来る時代、そう遠くないように感じます。また、今回色々ハマりながらでしたが、新しいものに触れていく楽しさを感じました。

    今回、Raspbeanで行う前にUbuntu MATEでも同様の実験を行ったのですが…
    大ハマリして挫折しました(apt-get installでMSのリポジトリからdotnetをインストールできなかった)。近いうちにリベンジしたいです。

    coreについてはまだpreviewということなので、遊べる範囲は限られてくるかと思いますが、これからもっとラズパイ上でどんなことが出来るか検証してみたいと思います。

    参考

    https://blogs.msdn.microsoft.com/david/2017/07/20/setting_up_raspian_and_dotnet_core_2_0_on_a_raspberry_pi/
    7月20日の記事です。とても参考になりました。

    https://github.com/dotnet/core/blob/master/Documentation/prereqs.md
    Coreに必要な前提条件が書いてあります。

    https://github.com/dotnet/core/blob/master/roadmap.md
    Coreのロードマップです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away