ラズパイでUbuntu Core を試してみよう(前編)

ふと、Nano Pi K2 に Ubuntu を入れて .NET Core を使ってあれこれしようと思ったのですが、何やらこの OS がちょっと Ubuntu とは違う。Raspberry Pi に Ubuntu Mate を入れたときと挙動がちがう。そもそも CPU は同じ Cortex-A53 なのだから、GPIO まわりが違うとはいえ、Hello world 位は動くのではないか?

http://wiki.friendlyarm.com/wiki/index.php/NanoPi_K2#UbuntuCore

image

と思って、何の OS だか再確認すると「UbuntuCore」と書いてあります。これは、普通の Ubuntu とはどう違うのか?ってのが発端です。

そもそも Nano Pi K2 って何?

Friendly ARM で購入できるラズパイ互換機です。Nano Pi にはいくつか種類があって、メモリや USB の数などで選ぶわけですが、Nano Pi K2 は、Android が動作して歌マクロスを動かすために購入しました。Raspberry Pi 3 よりも安く購入ができます。ちなみに、このボードでは歌マクロスは動きませんでした orz どうやら、タッチパネルが必須みたいですね。ただし、マギレコは動きます。これは後日。

image

現在のところ動作できる OS は、Android 5.1 と Ubuntu Core だけです。Raspbian のような Debian 系はありません。購入時には、赤外線のコントローラーとケースが付属しているので、Android を入れると Fire TV のように動作できます。というか、その目的で売っているみたいですね。これも後日。

Ubuntu Core とは何か

そういえば、Docker を勉強した頃に、CentOS の Atomic というのがあって、Docker 専用のコンテナ OS でした、ってのをやっと思い出しました。

コンテナホスト向けOS環境「CentOS Atomic Host」や「Snappy Ubuntu Core」を試す – さくらのナレッジ
http://knowledge.sakura.ad.jp/knowledge/4217/

元の OS に apt-get やらで色々インストールすると環境が汚れるので、Docker を入れて動かします。Docker のコンテナとしての機能しか要らないので、機能が相当削ってあり vi すら動かない状態だった、とかなんとか。そんな訳で、素の状態の OS として使う訳ではありません。

当時、Raspberry Pi でも Docker が動かないかとかいう話があったのですが、当時のラズパイは、まだ 32bit で、Docker を動かすには 64bit CPU が必須だったという状態だった、というのを覚えています。

で、現在のラズパイ3は、64bit なので、Docker が動きます。なので、それのコンテナ用としての Ubuntu Core も動作する、という状況な訳ですね。www.raspberrypi.org でも「Snappy Ubuntu Core」と言う形でダウンロードできます。これをクリックすると、Ubuntu developer の https://developer.ubuntu.com/core/get-started/raspberry-pi-2-3 にジャンプするので、「Ubuntu Core」のことです。

image

さて、Ubuntu Core が動作する環境は、 https://developer.ubuntu.com/core/get-started で見れるわけですが、ここには Intel x86/64 系や Mac はありません。通常の PC で試したい場合は、KVM 版の仮想環境で動くものを使います。

となると、CentOS の Atomic のように複数の Docker を載せて動かすというよりも、Ubuntu mate よりもメモリが少ない環境/ストレージが少ない環境の組み込み用 Linux として動作させる、という形にシフトしたようです。2016年頃の記事を見ると「snappy ubuntu core」としてラズパイ上で docker を動かす記事が多いのですが、先のダウンロード先が Ubuntu core になっていることから内部構成が変わっています。そもそも、snappy と言うコマンドが無くなって、snap というコマンドに変わっています。

image

目的も Docker のコンテナとしてではなく(snap find docker で見つかるので、インストールはできる模様)、小メモリで IoT 機器が扱えるというスタイルみたいですね。

Ubuntu Core をインストール

まずは、Raspberry Pi 3 にインストールします。Raspberry Pi 2 でも CPU が 64ビット版であればインストールできます。

Raspberry Pi 2 or 3 | Developer
https://developer.ubuntu.com/core/get-started/raspberry-pi-2-3

普通の Raspbian と同じように micro SD に焼き込みます。色々な機能は削られているみたいで、8GB 以下でも大丈夫な感じです。限られた処理しか使わないのであれば、安価な 8GB を大量に買って入れ込むということもできそうですね。16GB はまだそこそこ高いので。

ひとつ気を付けなければいけないのは、Ubuntu Core に対して SSH するためには「Ubuntu SSO account」を取得して、そのアカウントでログインする必要があります。どうやら、組み込み機器へのインストールを制御するために Ubuntu SSO を使うらしいのですが、

image

  • Ubuntu Core の初回起動時に Ubuntu SSO のアカウントを入力する必要がある。
    • つまり、モニタとキーボードが必須
    • Ubuntu SSO に繋がるために、外部接続が必須になる。
  • Ubuntu Core に SSH するときにRSA公開鍵/秘密鍵が必要になる。
    • これが結構ハマる。ラズパイの英語フォーラムでもハマったまま解決していなかったり。
    • 公開鍵使って SSH している人には当たり前のことなのか?

という制限があります。

Ubuntu Core を起動して、Ubuntu SSO に登録したメールアドレスを入れると、以下のようなアカウントで Ubuntu Core にアクセスできるようになります。私の場合は moonmile というアカウントを取りました。おそらく、早い者勝ちですね。

image

Ubuntu Core は、この写真で分かるように単純なコンソール環境…と言いますか、コンソール環境ですらないです。外部から SSH で繋げてあれこれややるしかありません。WinSCP は繋げたのでファイルのアップロードなどはできます。

Raspberry Pi からだと。

ssh moonmile@172.16.0.16

のようにして SSH で接続できます。このときに、public/private key が必要になります。

SSH/OpenSSH/Keys – Community Help Wiki
https://help.ubuntu.com/community/SSH/OpenSSH/Keys

を見て、ssh-keygen -t rsa で作ります。ラズパイの場合、デフォルトで .ssh フォルダができているのですが、.ssh/id_rsa のパーミッションを chmod 600 id_ras で変えておく必要があります。ここがデフォルトの 644 のままだと、何故か ssh で繋げるときにエラーになって不明な状態に陥ります。

.ssh/id_rsa.pub の内容を、Ubuntu SSO の SSH Keys に貼り付けて、登録しておきます。初回 SSH するときには、秘密鍵のパスフレーズが必要になるので、忘れないでください。その後は、Ubuntu SSO のパスワードと混乱しそうですが、RSA公開鍵を使ってアクセスをするので、自分の秘密鍵のパスフレーズが必要、という訳です。

そうすると、無事 Raspberry Pi から(通常の Linux でも同じです)Ubuntu Core にログインできます。

image

Tera Term でログインする

では、Windows の環境から Tera Term を使って Ubuntu Core にログインしてみましょう。Raspberry Pi 上の .ssh/id_rsa と .ssh/id_rsa.pub を Windows 上の何処かにコピーします。github などで既に、id_rsa を作っている場合は、それを使ってもよいでしょう。

SSH 認証で、「RSA~鍵を使う」を選択して、id_rsa ファイルを指定します。ユーザー名には、Ubuntu SSO のログイン名を入れ、パスフレーズは、id_rsa のパスフレーズを入れます。ややこしいですね。

image

うまくつながると、↓のようにログインができます。

image

WinSCP でファイル転送する

Windows からファイル転送ができるように WinSCP の設定もしておきます。

転送プロトコルで「SCP」を選択して、ユーザー名に Ubuntu SSO のアカウント名を入れます。

image

設定ボタンをクリックして、SSH → 認証で、秘密鍵を指定します。

image

秘密キーのパスフレーズは、接続時に要求されるので入力します。このパスフレーズは保存できないようです。

image

うまくつながると、下記のようにファイル転送が SSH 経由できるようになります。

image

ホスト名の変更と avahi-daemon のインストール

ubuntu core のホスト名は、初期値が localhost になっているので、これを変更します。ホスト名を「raspicore」にするときは、以下のように実行。

sudo hostnamectl set-hostname raspicore

あと、windows からホスト名 raspicore.local でアクセスできるように avahi-daemon も入れておきます。

snap install avahi

でインストールができます。

インストールしたパッケージは snap list で確認ができます。

image

snap 自体は、Unbutu mata でも使えるので、このあたりは普通に使えるのかなと。snapcraft で自前のパッケージも作れます。

と言う訳で Raspberry Pi 上で ubuntu core が動き出したので、お次は GPIO 廻りをどう弄るのか?を調べていきましょう。

カテゴリー: 開発, RaspberryPi パーマリンク