Snappy Ubuntu Coreで遊んでみる 2015-06-20
-
Upload
nobuto-murata -
Category
Technology
-
view
1.972 -
download
1
Transcript of Snappy Ubuntu Coreで遊んでみる 2015-06-20
Snappy Ubuntu Coreで遊んでみるUbuntu 15.04リリースパーティ兼オフラインミーティング15.062015-06-20
Nobuto Murata <[email protected]>
“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-blocks/
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/
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-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 …を実行しようとすると
パーティション構成を見てみる$ 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”(書き込み可能)パーティション?
Snappy構成とパーティションの対応Core部分を読み込み専用にすることでアプリとシステムの分離、トランザクショナルアップデートを実現
“/” (読み込み専用) system-aとsystem-bを丸ごと切り替えることでロールバック可能に
追加でインストールしたアプリやその設定/writable/system-data/writable/user-data
“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
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.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
アプリ実行時に専用の環境変数がセットされる
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
デフォルトではアプリからデバイスへアクセスできない
アプリを作ってみる
やりたいこと
● モバイル接続など、ネットワークが不安定な場合は受け取れないメッセージがある● オンラインに復帰したら再送してもらうような仕組みがない
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.yamlname: zncversion: 1.6.0vendor: nobutoarchitecture: armhftype: appbinaries: - 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-develhttps://lists.ubuntu.com/mailman/listinfo/snappy-devel
snappy-app-develhttps://lists.ubuntu.com/mailman/listinfo/snappy-app-devel
メーリングリストで情報を取得、開発に参加!
ubuntu.com/snappy
We are the company behind Ubuntu.
EMPLOYEES
London
BostonShanghai
Taipei
600+COUNTRIES
30+FOUNDATION
2004
Beijing
canonical.comubuntu.com
We are hiring!
canonical.com/careers
● Home based - Asia Pacific● Home based - Japan● Office based - Tokyo Japan