Snappy Ubuntu Coreで遊んでみる
Ubuntu 15.04リリースパーティ兼オフラインミーティング15.06
2015-06-20
Nobuto Murata <nobuto@ubuntu.com>
Snappy試してみました?
ubuntu.com/snappy
“This is the smallest, safest
Ubuntu ever, on devices and on
the cloud. We’re excited to
unleash a new wave of developer
innovation with snappy Ubuntu
Core!”
Mark Shuttleworth,
founder of Ubuntu and Canonical
IoT時代のご家庭ではUbuntu搭載機器が多数?
スマートホームコントローラー
手をかざして照明を操作したり、Uberを呼んだり。
“Ninja Blocks”
https://insights.ubuntu.com/2015/02/17/internet-of-things-ninja-bloc
ks/
IoT時代のご家庭ではUbuntu搭載機器が多数?
IoTゲートウェイ
ご家庭用ブロードバンドルーターでSnappyとSnapアプリストアが使
えるようになったり。
“Intel and Canonical collaborate around IoT gateways”
https://insights.ubuntu.com/2015/06/02/intel-and-canonical-collabor
ate-around-iot-gateways/
IoT時代のご家庭ではUbuntu搭載機器が多数?
冷蔵庫
外出先から「冷蔵庫の中に牛乳あったっけ?」と確認できたり。
“GE’s First Build is the future of smart home appliances…”
https://insights.ubuntu.com/2015/05/28/ges-first-build-is-the-future
-of-smart-home-appliances/
1 2 3
Ubuntuがどこでも使えるようになる
Snappy
「トランザクショナ
ルアップデート」
問題があったとして
もロールバックでき
る。
より速く、より高い
信頼性を。そしてよ
り強固なセキュリ
ティを。
新世代の、よりシン
プルなアプリケー
ション構造、パッ
ケージシステム。
ですが、次のことを実現するために少し作法が異なります
Snappyを実際に試してみる
1
2
3
4
5
Snappyを実際に試してみる
ARMボード(Beaglebone Black, Raspberry Pi 2)
クラウド(Azure, Google Compute Engine, Amazon EC2)
Vagrant
ローカルKVM
OVAイメージ(VMware, VirtualBox, Citrix XenServer)
Snappyはいろいろな場所で試せます
本日使うのはこちら
The Orange Matchbox
● Raspberry Pi 2 Model B
● PiGlow - 18個のLEDが搭載されているボード(※)
● Pibowケース - オレンジ色、Ubuntuロゴ入り(非売品)
● microSDカード - Snappy Ubuntu Core入り
1 2 3
Raspberry Pi 2でSnappyを動かすには
イメージのダウン
ロード
“Get Started”から
Raspberry Pi 2用
イメージをダウン
ロード
SDカードへ書き込
み
イメージを展開し
て別PCからSDカー
ドへ流し込み
起動
SDカードを挿して
電源オン!
ubuntu.com/snappy
apt-get “ではなく snappy”コマンド
$ sudo apt-get update
Ubuntu Core does not use apt-get, see 'snappy --help'!
$ type apt-get apt-cache
apt-get is /usr/local/bin/apt-get
apt-cache is /usr/local/bin/apt-cache
## dpkgコマンドでイメージ内のパッケージバージョンは
## 確認できる
$ dpkg-query -W base-files
base-files 7.2ubuntu9
apt-get …を実行しようとすると
パーティション構成を見てみる
$ lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT
NAME FSTYPE LABEL MOUNTPOINT
mmcblk0
├─mmcblk0p1 vfat system-boot /boot/uboot
├─mmcblk0p2 ext4 system-a /
├─mmcblk0p3 ext4 system-b /writable/cache/system
└─mmcblk0p4 ext4 writable /writable
$ mount | grep -w /
/dev/mmcblk0p2 on / type ext4 (ro,relatime,data=ordered)
## “/”は原則読み込み専用
“writable”(書き込み可能)パーティション?
Snappy構成とパーティションの対応
Core部分を読み込み専用にすることでアプリとシステムの分
離、トランザクショナルアップデートを実現
“/” (読み込み専用)
system-aとsystem-bを
丸ごと切り替えることで
ロールバック可能に
追加でインストールした
アプリやその設定
/writable/system-data
/writable/user-data
“snappy”コマンドでも見てみる
$ snappy list -v
Name Date Version Developer
webdm 2015-06-11 0.9 * ## app/framework
ubuntu-core 2015-06-11 3 ubuntu* ## system-a
ubuntu-core 2015-06-11 3 ubuntu ## system-b
pi2 2015-06-11 0.13 * ## hardware
Snappyデバイスマネージャー(webdm)
http://SNAPPY_HOST:4200/
$ sudo snappy install webdm
Docker “ ”も 動く
$ sudo snappy install docker
$ docker pull armv7/armhf-ubuntu ## unofficial repo
$ docker run -i -t armv7/armhf-ubuntu /bin/bash
そのまま使ったり、
Dockerを使ったアプリを動かしたりできる
Snappyの主なコマンド
info システム情報の表示
list インストールされているコンポーネントの表示
search パッケージの検索
install パッケージのインストール
config パッケージごとの設定の変更
update システムのアップデート
rollback ロールバック
$ snappy --help で表示
Hello world
Hello worldでSnappyの動きを見てみる
$ sudo snappy install hello-world
パッケージのディレクトリ構成(一部省略)
/apps/hello-world.canonical/
├── 1.0.17
│ ├── bin
│ │ ├── echo
│ │ └── usehw
│ └── meta
│ ├── echo.apparmor
│ ├── package.yaml
│ └── usehw.apparmor
└── current -> 1.0.17
hello-worldをインストール
Hello worldでSnappyの動きを見てみる
$ hello-world.env
...
SNAP_APP_PATH=/apps/hello-world.canonical/1.0.17
SNAP_APP_USER_DATA_PATH=/home/ubuntu/apps/hello-
world.canonical/1.0.17
...
HOME=/home/ubuntu/apps/hello-world.canonical/1.0.17
...
SNAP_ARCH=armhf
...
SNAP_VERSION=1.0.17
アプリ実行時に専用の環境変数がセットされる
Hello worldでSnappyの動きを見てみる
$ hello-world.usehw
Hello hw-assign world!
...
No hardware is assigned for this device.
$ sudo snappy hw-assign hello-world.canonical /dev/kmsg
'hello-world.canonical' is now allowed to access '/dev/kmsg'
$ hello-world.usehw
...
Now try to read a line from /dev/kmsg:
6,0,0,-;Booting Linux on physical CPU 0xf00
デフォルトではアプリからデバイスへアクセスできない
アプリを作ってみる
やりたいこと
● モバイル接続など、ネットワークが不安定な場合は受け取れな
いメッセージがある
● オンラインに復帰したら再送してもらうような仕組みがない
IRC …はシンプルかつオープンでいいのだが
IRCクライアント IRCサーバー
スタンバイ 圏外
やりたいこと
● IRC bouncer - ZNC http://znc.in/
● ZNC plugin - znc-push https://github.com/jreese/znc-push
Raspberry Pi 2とSnappy, ZNC + znc-pushで解決を試みる
常時接続にして
メッセージをためる
IRCサーバーIRCクライアント
受け取れなかった
メッセージを再送
クラウド 経由で
携帯に も通知
アプリを作ってみる
ZNCをビルドするためのvividのarmhf環境を用意
LXC, QEMU, pbuilderなどで。
“/usr/local/”等ではなくSnap用ディレクトリを指定してビルド
$ sudo apt-get build-dep znc
$ tar xf znc-1.6.0.tar.gz && cd znc-1.6.0/
$ ./configure --prefix=$HOME/znc-snap
$ make && make install
既存のdebパッケージを流用するのではなく一から作る方法
アプリを作ってみる
$ cd ~/znc-snap/
$ cat meta/package.yaml
name: znc
version: 1.6.0
vendor: nobuto
architecture: armhf
type: app
binaries:
- exec: znc
name: bin/znc
$ cat meta/readme.md
advanced modular IRC bouncer
必要なメタデータを記述
アプリを作ってみる
$ sudo apt-add-repository ppa:snappy-dev/tools
$ sudo apt update
$ sudo apt install snappy-tools
$ snappy build .
実機にインストール
$ snappy-remote --url=ssh://ubuntu@SNAPPY_HOST 
install znc_1.6.0_armhf.snap
## 本来はZNCが依存するCoreにはないライブラリを同梱する
## 必要はあるが、アプリ作成のイメージとしてはこんな感じ
Snapアプリとして固める
と、ここでLEDの点灯確認でも
しておくか、と。
LEDは /dev/i2c-1 …経由で操作して
/dev/i2c-1 …がない、出てこない
調べる
さらに調べる
すごく調べる
「Raspberry Pi 2用Snappyイメージでは
今ちょっと一時的に使えないんだ」
!!!
こんなこともあろうかと
Ubuntu on Raspberry Pi 2(プランB)
$ sudo apt install znc python3-requests python-smbus git
$ sudo adduser $USER i2c ## logout
$ znc --makeconf
$ git clone https://github.com/pimoroni/piglow
$ sudo cp -v piglow/piglow-test.py /usr/local/bin/
$ git clone https://github.com/nobuto-m/znc-push
$ cd znc-push && git checkout python-piglow
$ cp -v push.py ~/.znc/modules/
ZNCのインストールとモジュールの用意
Ubuntu on Raspberry Pi 2(プランB)
/msg *status loadmod modpython
/msg *status loadmod push
/msg *status saveconfig
/msg *push set service pushbullet
/msg *push set secret <PUSHBULLET_ACCESS_TOKEN>
## /msg *push set message_length 2048
## /msg *push set last_notification 0
IRCクライアントから、モジュールの読み込みと設定
デモ
/msg nobuto_pi2 <MESSAGE>
freenodeに今つないでいる方、
プライベートメッセージを送ってみてください。
無事LED光りました!
個人的にもっとやりたいこと
● ちゃんとしたSnap化(まだ途中)
● `snappy config`でZNCユーザー、IRCネットワークの初期設定
● コマンドから起動するのではなく、デーモン化
● メッセージの種類や内容でLEDの色や光り方を変える
● ZNCパッケージをアプリストアに置いてみる
などなど
…今回のデモではまだまだなので
Snappyの開発はどんどん進んでいます
snappy-devel
https://lists.ubuntu.com/mailman/listinfo/snappy-devel
snappy-app-devel
https://lists.ubuntu.com/mailman/listinfo/snappy-app-devel
メーリングリストで情報を取得、開発に参加!
ubuntu.com/snappy
We are the company
behind Ubuntu.
EMPLOYEES
London
Boston
Shanghai
Taipei
600+
COUNTRIES
30+
FOUNDATION
2004
Beijing
canonical.com
ubuntu.com
We are hiring!
canonical.com/careers
● Home based - Asia Pacific
● Home based - Japan
● Office based - Tokyo Japan

Snappy Ubuntu Coreで遊んでみる 2015-06-20