CanonicalがSnappy Ubuntu CoreのIoTバージョンとして、BeagleBone Black用のイメージを公開しました。IoTとUbuntuとDockerとNinja SphereとBeagleBone Blackとワクワクがとまらないので、SDカードに焼いてBeagleBone Blackで動かしてみます。
Ninja Sphere
Ninja Shield for BeagleBone Blackを買おうか悩んでいますが、Ninja Sphereは、Snappy Ubuntu CoreをベースにしているのでPRE-ORDERしてしまいそうです。Snappy appsを配布するアプリストアも用意しているようです。IoT用アプリの配布としてDockerイメージを使うのはおもしろいアイデアです。
イメージのビルド
Snappy for Devices porting guideの手順でセットアップしていきます。
Beaglebone Black用のイメージをビルドするため、Linux Mint 17 MATEにログインします。
$ cat /etc/lsb-release
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=17
DISTRIB_CODENAME=qiana
DISTRIB_DESCRIPTION="Linux Mint 17 Qiana"
ビルドの準備
Snappy用のPPAリポジトリの追加と必要なパッケージをインストールします。
$ sudo add-apt-repository ppa:snappy-dev/beta
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install snappy-tools bzr
Beaglebone Black向けに用意された、デバイス用のtarballをダウンロードします。
$ cd ~/Downloads
$ wget -O ./device.tar.xz http://system-image.ubuntu.com/pool/device-bf0a49e75a3deb99855f186906f17d7668e2dcc3a0b38f5feade3e6f7c75e9b8.tar.xz
Installing Ubuntu for devicesを参考に、ubuntu-device-flashをインストールします。
$ sudo apt-get install ubuntu-device-flash
イメージのビルド
Beaglebone Black用のイメージをビルドします。
$ sudo ubuntu-device-flash core \
-o my-snappy.img \
--size 4 \
--channel ubuntu-core/devel \
--device generic_armhf \
--platform am335x-boneblack \
--enable-ssh \
--device-part=./device.tar.xz
Fetching information from server...
Downloading and setting up...
67.31 MB / 67.31 MB [=========================================================] 100.00 % 63.68 KB/s
Running flashtool-asset commands
dd if=/tmp/device222703919/flashtool-assets/am335x-boneblack/MLO of=my-snappy.img count=1 seek=1 conv=notrunc bs=128k
0+1 レコード入力
0+1 レコード出力
79348 バイト (79 kB) コピーされました、 0.000348669 秒、 228 MB/秒
dd if=/tmp/device222703919/flashtool-assets/am335x-boneblack/u-boot.img of=my-snappy.img count=2 seek=1 conv=notrunc bs=384k
0+1 レコード入力
0+1 レコード出力
373048 バイト (373 kB) コピーされました、 0.000600729 秒、 621 MB/秒
New image complete
イメージをSDカードに焼く
ビルドしたmy-snappy.imgをWindowsにSCP転送します。microSDカードはSD Formatterを使い、論理サイズ調整をON、クイックフォーマットしておきます。
Cygwin64 Terminalを管理者として起動してmicroSDカードに焼きます。
$ dd if=/cygdrive/c/Users/masato/Documents/my-snappy.img of=/dev/sdc bs=32M
119+1 レコード入力
119+1 レコード出力
4000000000 バイト (4.0 GB) コピーされました、 351.876 秒、 11.4 MB/秒
Snappy Ubuntu Core on BeagleBone Black
BeagleBone BlackにSDカードを挿して起動します。電源供給のためUSBケーブルの1本はWindows7に挿します。もう1本はUSB-シリアル接続してコンソールを開きます。ユーザー名とパスワードは以下です。
- user: ubuntu
- passwd: ubuntu
バージョン確認
Ubuntuのバージョンを確認します。Ubuntu Vivid Vervet 15.04がインストールされています。
cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=15.04
DISTRIB_CODENAME=vivid
DISTRIB_DESCRIPTION="Ubuntu Vivid Vervet (development branch)"
ubuntu-coreは、edgeの2がインストールされています。
$ sudo snappy versions
Part Tag Installed Available Fingerprint Active
ubuntu-core edge 2 - f442b1d8d6db3f *
Snappyは0.1です。
$ snappy -v
0.1
ネットワーク設定
Dockerパッケージを検索しようとすると、ホスト名の名前解決に失敗します。
$ snappy search docker
Traceback (most recent call last):
File "/usr/bin/snappy", line 25, in <module>
status = Main().__main__()
File "/usr/lib/python3/dist-packages/snappy/main.py", line 195, in __main__
return callback(args)
File "/usr/lib/python3/dist-packages/snappy/main.py", line 401, in _do_search
results = ClickDataSource().search(args.args)
File "/usr/lib/python3/dist-packages/snappy/click.py", line 100, in search
results = repo.search(",".join(terms))
File "/usr/lib/python3/dist-packages/click/repository.py", line 141, in search
resp, raw_content = http_request(url, headers=get_store_headers())
File "/usr/lib/python3/dist-packages/click/network.py", line 70, in http_request
curl.perform()
pycurl.error: (6, 'Could not resolve host: search.apps.ubuntu.com')
Windows7とはBeagleBone BlackはUSBケーブルで接続していますが、usb0のネットワークはみつかりません。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 90:59:af:58:32:d1 brd ff:ff:ff:ff:ff:ff
Ethernetケーブルをつなげる
eth0はDHCPのインタフェース設定が書いてありました。
$ cat /etc/network/interfaces.d/eth0
allow-hotplug eth0
iface eth0 inet dhcp
Ethernetケーブルを接続してネットワークを再起動すると、DHCPからIPアドレスが取得できました。
$ sudo ifdown eth0
$ sudo ifup eth0
$ ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 90:59:af:58:32:d1 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::9259:afff:fe58:32d1/64 scope link
valid_lft forever preferred_lft forever
名前解決もできるようになりました。
$ ping -c 3 www.yahoo.co.jp
PING www.g.yahoo.co.jp (124.83.203.233) 56(84) bytes of data.
64 bytes from f8.top.vip.ogk.yahoo.co.jp (124.83.203.233): icmp_seq=1 ttl=53 time=15.6 ms
Snappyアプリを使う
[How to Install and Run Snappy Ubuntu Core on the BeagleBone]の動画をみながら使ってみます。
frameworksとappsはまだインストールされていません。
$ snappy info
release: ubuntu-core/devel
frameworks:
apps:
アップデートできるバージョンは今のところありません。
$ snappy update-versions
0 updated components are available with your current stability settings.
WebDMのインストール
frameworksにWebDM(The web device manager)がインストールされていないので検索します。
$ snappy search webdm
Part Version Description
webdm 0.1 WebDM
WebDMをインストールします。
$ sudo snappy install webdm
webdm 5 MB [================================================] OK
Part Tag Installed Available Fingerprint Active
webdm edge 0.1 - c94dd4609de5ba *
WebDMのポートは4200のようです。
$ sudo netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 624/sshd
tcp6 0 0 :::4200 :::* LISTEN 893/snappyd
tcp6 0 0 :::22 :::* LISTEN 624/sshd
ブラウザを起動してWebDMの画面を表示します。
Dockerが見つからない
Dockerをインストールしたかったのですが見つかりませんでした。
$ sudo snappy install docker
No package 'docker' for ubuntu-core/devel