United Statesからアクセスのようです。言語設定をEnglishに切り替えますか?
Switch to English site
Skip to main content

Snapアプリが使える組込み Linux 「Snappy」

Ubuntuの機能を最小限に軽量化させた「Ubuntu Core (Snappy)」OSをご存じだろうか?CoreOSやProject Atomic(CentOS Atomic Host)などと同様にコンテナ型仮想化「Docker」を実現するOSだ。この「Ubuntu Core」を組込みLinuxとして活用するメリットは大きい。トランザクション処理が行えたり、セキュリティが強化できたり、さらにはSnapアプリを手軽にデプロイ(インストール)できるようになる。

この記事では、まずSnapパッケージとUbuntu Coreについて説明する。その後、Intel Joule (123-9801)ボード上にUbuntu Coreをセットアップし、アプリストアからNode-REDをインストールして、付属のLimeSDRで使用できるサンプルアプリケーションを構築してみる。なおUbuntu Coreは、Raspberry PiやIntel NUCなどのハードウェアプラットフォームにもインストールすることができる。

(訳者注:コンテナやDockerについてはこちらを、Snapアプリについてはこちらを、Ubuntu Core snappyについてはこちらを、Docker向けOSについてはこちらを それぞれ参照することをお勧めする。)

Snapアプリと Ubuntu Core (Snappy)

通常アプリケーションは、高度になればなるほど、OSやサーバプロセスへの依存度がたかくなったり、お互いのアプリの関係性が複雑になったりする。

Snapは、アプリケーションに依存する全てをパッケージングする技術で、上記のような複雑な依存関係を解決することができる。例えば、複数アプリで同一ライブラリを使用しているような場合、アプリ毎にライブラリをインストールしている。これは一見システムリソースを2重に使用していて無駄であるように思えるかもしれない。しかし、アプリ毎に別Verのライブラリを使用できるなど、依存関係の問題を無視することができるようになる。さらに、Snapは独自の読取専用ファイルシステムで安全にコンテナ化されるため、データストアを分離して管理できる。

この「データ分離」は、SnapとSnapの間だけではなく、SnapとLinux OSプロセスの間でも行われる。これにより、アプリとOSの処理を完全に分断でき、デバイスのセキュリティと安定性を実現きる。明確に定義されたプラグ及びスロットインターフェイスのプロビジョニングにより、必要な場所でスナップを統合できる。

limesdr-serverスナップの設定ファイルの断片化

上記の例では、アプリケーションのGitHubリポジトリと指定された依存性とともに、ビルドメカニズム、設定オプション、ビルドオーダーの詳細を確認できる。

Snapは「ユニバーサルLinuxパッケージ」として使用できる。つまり Ubuntu、Debian、Yocto Project、Fedoraなどのデスクトップディストリビューションとして一般的なあらゆるLinuxで使用することができる。今回の記事では組込みやIoTといったデバイスを念頭に設計された「Ubuntu Core」上で使用することにする。

Ubuntu CoreはSnapの原理・考え方をOSレベルにまで拡大した。トランザクションのアップデートに加え、カーネル、デバイスドライバ、さまざまなOS、アプリケーションを厳格にリソース分離し動作させる。

ファームウェアのアップデート

Intel JouleのUbuntuの「入門ガイド」では、BIOSをバージョン174にアップデートする必要があると記載されている。このバージョン以降はIntelからダウンロード可能で、BIOSフラッシュの手順が提供されている。

OSのインストール

デバイスはUbuntuシングルサインオン(SSO)アカウントにリンクする必要がある。アカウントがない場合は、ここで登録が必要だ。

Snappy Ubuntu Coreは、現時点ではIntel Jouleのセルフホストインストーラとして提供されていないため、まず従来のUbuntuデスクトップライブ/インストーライメージを記述してから起動し、コマンドラインを使用してUbuntu Coreファイルシステムを内部のMMCストレージに展開する必要がある。

ただし、Ubuntuを使用してライブ/インストーライメージを記述しない場合は、Startup Disk Creatorを使用して記述する必要がある。この時、UNetbootinは使用しない事に注意UNetbootinを使用すると、デバイスが起動しません。Ubuntu、Windows、Mac OS Xの使用してインストールが可能。

最初の起動時には、Intel JouleでUSBフラッシュドライブが認識されない場合がある。これは、使用されているUSBハブなどに互換性がないためと考えられます。そのため、拡張ボードのMicro SDカードから、ライブ/インストーライメージを起動できることを確認する必要がある。

ここではMicro SDから起動し、USBドライブにSnappy Ubuntu Coreイメージを配置した。SDが/dev/mmcblk0として列挙されており、Jouleの内部ストレージが/dev/mmcblk1になっていることを確認する。コマンドにより、修正されたCoreファイルシステムが適切に展開される。

再起動したら、Ubuntu CoreがJouleの内部ストレージから起動されることが確認できる。

次に、ネットワーク設定のプロンプトが表示されるため、このデバイスを関連付ける必要のあるUbuntu SSOアカウントの電子メールアドレスを入力する。

SSHログイン

ネットワーク上のデバイスでUbuntu SSO IDを使用してログインできたため、プロビジョニング後に付属のモニタ経由でIPアドレスが表示される。

SSHでログインしたら、デフォルトスナップがインストールされていることを確認するために、以下を入力。

$ snap list

>

この時点から、コマンドラインを使用してスナップをインストールできる。又は使いやすいWebインターフェイスを使用できるように、アクセストークンを作成できる。

Snapweb

httpsプレフィックスと末尾が4201のポートを使用してデバイスIPのWebブラウザをポイントしたら、SnapwebアプリケーションのAccess Controlページが表示される。

Webインターフェイスにログインするためのトークンを作成するには、コマンドラインで以下を入力する必要がある。

$ sudo snapweb.generate-token

ログインしたら、インストールされているSnapを再度一覧表示。IoTやNode-REDの接続に優れたSnapを検索したりインストールできる。

その後ワンクリックで、端末に戻ったり、psを使用してNode-REDが動作していることを確認したりすることができる。

デバイスのブラウザとポート1880で接続すると、使い慣れたエディタが表示される。

この時点から、新しいNode-REDのフロー(アプリケーション)の作成を開始できる。

従来のUbuntuをSnapとして使用

従来のUbuntu OSをSnapとしてインストール。特にターゲットデバイス自体での開発を可能にするために使用できる。必要なことは、以下を入力するだけだ。

snap install classic --edge --devmode

$ sudo classic

chroot環境を入力し、/etc/os-releaseファイルのコンテンツ調査で、Ubuntu のバージョン、16.04.02が表示される。

ただし、記述する時点では、従来のスナップの現行リリースに問題があるように見えるかもしれない。これは、パッケージをインストールするコマンドを実行すると、署名の確認エラーが表示されるためだ。この場合は、従来のUbuntuを実行しているデスクトップシステムに、サンプルSnapが構築される。

Snapの作成

Snap作成は簡単ではない。Snapクラフトソフトウェアによって行われます。これは、snapdとともにインストールでき、従来のUbuntuでSnapを実行する際に必要なソフトウェアだ。インストールは以下から可能。

$ sudo apt-get install snapcraft snapd

snapdを含めると、最初にデスクトップシステムでSnapアウトをテストしてから、Snappy Ubuntu Coreを実行しているターゲットデバイスにSnapアウトをコピーし、インストールできる。

GitHubでは、LimeSDR USB 3.0ソフトウェア無線(SDR)プラットフォーム用のSnapのサンプルがいくつか提供されている。リポジトリのクローンが作成され、limesdr-server Snapが構築されている。そのため、ネットワーク経由でLimeSDRボードに透過的にアクセスでる。

$ git clone https://github.com/myriadrf/snapcraft-sandbox.git

$ cd snapcraft-sandbox/limesdr-server

$ snapcraft

メインのアプリケーションソフトウェアとすべての依存性のクローンがGitHubから作成され、ビルドされて、完全な自己完結型のアプリケーションとしてパッケージングされる。

次に、以下を実行してインストール。

$ sudo snap install --force-dangerous --devmode soapysdr-server_0.5.3.0_amd64.snap

「--force-dangerous」オプションが必要な理由は、スナップが信頼性の低いソースであるファイルシステムからインストールされているためだ。「--devmode」オプションは、スナップがハードウェア周辺機器にアクセスできるようにする一時的な回避策だ(サポートは、ホットプラグ接続された周辺機器に追加され、それらの機器へのアクセスが安全に管理される)。

独自のSnapの作成を開始する方法の詳細については、Snapcraftマニュアルを参照のこと。

カスタムストアやデバイスイメージなど

Ubuntu Core Advanced生産モデル

SnapとUbuntu Coreでできることは、これだけではない。他にも、特定のハードウェアのベンダーサポートを統合するカスタムUbuntu Coreイメージの作成をはじめとした未開発の機能や、デバイスイメージがリンクされるカスタム「ブランド」アプリストアなどがある。

新しいデバイスでのUbuntu Coreの対応状況、カスタムスタックの統合、ブランドストアの設定、生産モデルの詳細については、Ubuntu Coreマニュアルを参照のこと。

— Andrew Back

Open source (hardware and software!) advocate, Treasurer and Director of the Free and Open Source Silicon Foundation, organiser of Wuthering Bytes technology festival and founder of the Open Source Hardware User Group.