Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

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

Snappyの構成を解説。Hello worldアプリでSnappyの動きを解説。

Nobuto Murata

June 20, 2015
Tweet

More Decks by Nobuto Murata

Other Decks in Technology

Transcript

  1. “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
  2. 1 2 3 Ubuntuがどこでも使えるようになる Snappy 「トランザクショナル アップデート」 問題があったとしても ロールバックできる。 より速く、より高い信頼

    性を。そしてより強固な セキュリティを。 新世代の、よりシンプ ルなアプリケーション構 造、パッケージシステ ム。 ですが、次のことを実現するために少し作法が異なります
  3. 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はいろいろな場所で試せます
  4. The Orange Matchbox • Raspberry Pi 2 Model B •

    PiGlow - 18個のLEDが搭載されているボード(※) • Pibowケース - オレンジ色、Ubuntuロゴ入り(非売品) • microSDカード - Snappy Ubuntu Core入り
  5. 1 2 3 Raspberry Pi 2でSnappyを動かすには イメージのダウン ロード “Get Started”から

    Raspberry Pi 2用 イメージをダウン ロード SDカードへ書き込み イメージを展開して 別PCからSDカード へ流し込み 起動 SDカードを挿して電 源オン! ubuntu.com/snappy
  6. 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 を実行しようとすると…
  7. パーティション構成を見てみる $ 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”(書き込み可能)パーティション?
  8. “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
  9. Docker “も” 動く $ sudo snappy install docker $ docker

    pull armv7/armhf-ubuntu ## unofficial repo $ docker run -i -t armv7/armhf-ubuntu /bin/bash そのまま使ったり、 Dockerを使ったアプリを動かしたりできる
  10. 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をインストール
  11. 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 デフォルトではアプリからデバイスへアクセスできない
  12. やりたいこと • 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クライアント 受け取れなかった メッセージを再送 クラウド 経由で 携帯に も通知
  13. アプリを作ってみる 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パッケージを流用するのではなく一から作る方法
  14. アプリを作ってみる $ 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 必要なメタデータを記述
  15. アプリを作ってみる $ 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アプリとして固める
  16. 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のインストールとモジュールの用意
  17. 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クライアントから、モジュールの読み込みと設定
  18. canonical.com ubuntu.com We are hiring! canonical.com/careers • Home based -

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