47
Snappy Ubuntu Coreで遊んでみる Ubuntu 15.04リリースパーティ兼オフラインミーティング15.06 2015-06-20 Nobuto Murata <[email protected]>

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

Embed Size (px)

Citation preview

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

Snappy Ubuntu Coreで遊んでみるUbuntu 15.04リリースパーティ兼オフラインミーティング15.062015-06-20

Nobuto Murata <[email protected]>

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

Snappy試してみました?

ubuntu.com/snappy

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

“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

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

IoT時代のご家庭ではUbuntu搭載機器が多数?

スマートホームコントローラー手をかざして照明を操作したり、Uberを呼んだり。

“Ninja Blocks”https://insights.ubuntu.com/2015/02/17/internet-of-things-ninja-blocks/

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

IoT時代のご家庭ではUbuntu搭載機器が多数?

IoTゲートウェイご家庭用ブロードバンドルーターでSnappyとSnapアプリストアが使えるようになったり。

“Intel and Canonical collaborate around IoT gateways”https://insights.ubuntu.com/2015/06/02/intel-and-canonical-collaborate-around-iot-gateways/

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

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/

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

1 2 3

Ubuntuがどこでも使えるようになるSnappy

「トランザクショナルアップデート」問題があったとしてもロールバックできる。

より速く、より高い信頼性を。そしてより強固なセキュリティを。

新世代の、よりシンプルなアプリケーション構造、パッケージシステム。

ですが、次のことを実現するために少し作法が異なります

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

Snappyを実際に試してみる

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

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はいろいろな場所で試せます

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

本日使うのはこちら

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

The Orange Matchbox

● Raspberry Pi 2 Model B

● PiGlow - 18個のLEDが搭載されているボード(※)● Pibowケース - オレンジ色、Ubuntuロゴ入り(非売品)● microSDカード - Snappy Ubuntu Core入り

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

1 2 3

Raspberry Pi 2でSnappyを動かすには

イメージのダウンロード“Get Started”からRaspberry Pi 2用イメージをダウンロード

SDカードへ書き込みイメージを展開して別PCからSDカードへ流し込み

起動SDカードを挿して電源オン!

ubuntu.com/snappy

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

apt-get “ではなく snappy”コマンド$ sudo apt-get update

Ubuntu Core does not use apt-get, see 'snappy --help'!

$ type apt-get apt-cacheapt-get is /usr/local/bin/apt-getapt-cache is /usr/local/bin/apt-cache

## dpkgコマンドでイメージ内のパッケージバージョンは## 確認できる$ dpkg-query -W base-filesbase-files 7.2ubuntu9

apt-get …を実行しようとすると

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

パーティション構成を見てみる$ lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINTNAME FSTYPE LABEL MOUNTPOINTmmcblk0├─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”(書き込み可能)パーティション?

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

Snappy構成とパーティションの対応Core部分を読み込み専用にすることでアプリとシステムの分離、トランザクショナルアップデートを実現

“/” (読み込み専用) system-aとsystem-bを丸ごと切り替えることでロールバック可能に

追加でインストールしたアプリやその設定/writable/system-data/writable/user-data

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

“snappy”コマンドでも見てみる$ snappy list -vName Date Version Developerwebdm 2015-06-11 0.9 * ## app/frameworkubuntu-core 2015-06-11 3 ubuntu* ## system-aubuntu-core 2015-06-11 3 ubuntu ## system-bpi2 2015-06-11 0.13 * ## hardware

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

Snappyデバイスマネージャー(webdm)

http://SNAPPY_HOST:4200/

$ sudo snappy install webdm

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

Docker “ ” も 動く

$ sudo snappy install docker

$ docker pull armv7/armhf-ubuntu ## unofficial repo

$ docker run -i -t armv7/armhf-ubuntu /bin/bash

そのまま使ったり、Dockerを使ったアプリを動かしたりできる

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

Snappyの主なコマンドinfo システム情報の表示list インストールされているコンポーネントの表示search パッケージの検索install パッケージのインストールconfig パッケージごとの設定の変更update システムのアップデートrollback ロールバック

$ snappy --help で表示

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

Hello world

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

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をインストール

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

Hello worldでSnappyの動きを見てみる$ hello-world.env...SNAP_APP_PATH=/apps/hello-world.canonical/1.0.17SNAP_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

アプリ実行時に専用の環境変数がセットされる

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

Hello worldでSnappyの動きを見てみる$ hello-world.usehwHello 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

デフォルトではアプリからデバイスへアクセスできない

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

アプリを作ってみる

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

やりたいこと

● モバイル接続など、ネットワークが不安定な場合は受け取れないメッセージがある● オンラインに復帰したら再送してもらうような仕組みがない

IRC …はシンプルかつオープンでいいのだがIRCクライアント IRCサーバー

スタンバイ 圏外

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

やりたいこと

● 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クライアント

受け取れなかったメッセージを再送

クラウド 経由で 携帯に も通知

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

アプリを作ってみる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パッケージを流用するのではなく一から作る方法

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

アプリを作ってみる$ cd ~/znc-snap/

$ cat meta/package.yamlname: zncversion: 1.6.0vendor: nobutoarchitecture: armhftype: appbinaries: - exec: znc name: bin/znc

$ cat meta/readme.md

advanced modular IRC bouncer

必要なメタデータを記述

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

アプリを作ってみる$ 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アプリとして固める

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

と、ここでLEDの点灯確認でもしておくか、と。

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

LED は /dev/i2c-1 …経由で操作して

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

/dev/i2c-1 …がない、出てこない

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

調べる

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

さらに調べる

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

すごく調べる

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

「Raspberry Pi 2用Snappyイメージでは今ちょっと一時的に使えないんだ」

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

!!!

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

こんなこともあろうかと

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

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のインストールとモジュールの用意

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

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クライアントから、モジュールの読み込みと設定

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

デモ

/msg nobuto_pi2 <MESSAGE>

freenodeに今つないでいる方、プライベートメッセージを送ってみてください。

無事LED光りました!

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

個人的にもっとやりたいこと● ちゃんとしたSnap化(まだ途中)● `snappy config`でZNCユーザー、IRCネットワークの初期設定● コマンドから起動するのではなく、デーモン化● メッセージの種類や内容でLEDの色や光り方を変える● ZNCパッケージをアプリストアに置いてみるなどなど

…今回のデモではまだまだなので

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

Snappyの開発はどんどん進んでいますsnappy-develhttps://lists.ubuntu.com/mailman/listinfo/snappy-devel

snappy-app-develhttps://lists.ubuntu.com/mailman/listinfo/snappy-app-devel

メーリングリストで情報を取得、開発に参加!

ubuntu.com/snappy

Page 44: Snappy Ubuntu Coreで遊んでみる 2015-06-20
Page 45: Snappy Ubuntu Coreで遊んでみる 2015-06-20

We are the company behind Ubuntu.

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

EMPLOYEES

London

BostonShanghai

Taipei

600+COUNTRIES

30+FOUNDATION

2004

Beijing

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

canonical.comubuntu.com

We are hiring!

canonical.com/careers

● Home based - Asia Pacific● Home based - Japan● Office based - Tokyo Japan