getting started with sota in agl...4.make sure you control mutable state in your system. already...
TRANSCRIPT
![Page 1: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/1.jpg)
© 2017 ATS Advanced Telematic Systems GmbH – Confidential –
Getting started with SOTA in AGL2017-06-01Phil Wise
![Page 2: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/2.jpg)
Page / 2
Introduction
AGL Automotive Grade Linux supports SOTA today
Overview of OSTree technology
Security
Getting started walk-through
![Page 3: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/3.jpg)
Page / 3
Introduction
I’m a senior software engineer at ATS Advanced Telematic Systems
Open source and open standard for connected mobility.
Happy user of AGL and OSTree, but these aren’t official viewpoints of either project :)
![Page 4: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/4.jpg)
Page
Goals
4
AGL isn’t a single product/platform
Lots of products
Lots of boards
Must meet people where they are
Simple adoptionGOALS
![Page 5: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/5.jpg)
Page
Portability
To get benefits of collaboration
More than just OSS/on github
Needs to be portable to lots of applications
5
Must be shareable
![Page 6: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/6.jpg)
Page
Update methods
Package-based(rpm, dpkg etc.)
6
Atomic differential (OSTree)
+ Simple
— Unsafe for power-off
— Dependency resolution can get suck
Full file system update
+ Combines robustness with minimal bandwidth consumption
+ Modern approach
+ Easy to make reusable
+ Robust
— Tends to end up device-specific
— Need rsync or similar
![Page 7: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/7.jpg)
Page
OSTree Background
7
Not developed by me
Colin Walters / Gnome
Originally designed for Gnome CI
“Like git but for a root file system”OSTree
![Page 8: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/8.jpg)
Page 8
OSTree
- Like git for a filesystem
- Commits are a rootfs
- 1 flash partition
- Multiple systems (chroots)
OSTree
“It’s like git for a filesystem”
![Page 9: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/9.jpg)
Page 9
OSTree
OSTree
“It’s like git for a filesystem”
- Incremental fetches (like git pull)
- Hardlink identical files
- Not actually git: Extended Attributes for
selinux/smack
![Page 10: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/10.jpg)
Page /10
Update Security
Update security important
More details in Arthur Taylor’s talk
UPTANE framework provides defence in depth
Developed by security researchers and OEMs
Compliance Q2 2017
![Page 11: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/11.jpg)
Page 11
Integration Part 1/2
Yocto / OE Integration
Added image_types_ostree to bitbake
Modifies rootfs to be updatable
Moves R/W data to var
Usrmove
Commits result to an OSTree repo
Uploads to Software Update Server
Creates initial bootable flash image
...all from ‘bitbake myimage’
![Page 12: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/12.jpg)
Page 12
Integration Part 2/2
Also need some per-board work
Mostly bootloader
Today:
- Renesas R-Car Porter
- Renesas R-Car M3
- Qemu (U-Boot)
- Minnowboard Max (EFI)
- R-Pi (chain load U-Boot)
Other bootloaders straightforward
Yocto / OE Integration
![Page 13: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/13.jpg)
Page /
Demo Time
13
Demo Time
![Page 14: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/14.jpg)
Page /14
Getting the software
OpenEmbedded
Include meta-updater layer from
github.com/advancedtelematic/m
eta-updater
Create sota_mymachine.bbclass
from examples in
meta-updater/classes
AGL
Include ‘agl-sota’ feature in
aglsetup.sh
=> Done
Raspberry Pi 3 / Poky
Small, fully functioning example
built from Poky at
docs.atsgarage.com
![Page 15: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/15.jpg)
Page /
Questions?
Questions
15
![Page 16: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/16.jpg)
Page
Why software updates are needed
16
?
![Page 17: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/17.jpg)
Page
Why software updates are needed early in the release cycle
17
You obviously need it eventually
But having it early is great:
- Battle harden the process
- Test fleets
- Sales demos
- If the development team have to use it daily,
it will magically improve
?
![Page 18: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/18.jpg)
Contact Us.
© 2017 ATS Advanced Telematic Systems GmbH
ATS Advanced Telematic Systems GmbHadvancedtelematic.com
Phil Wise
+49 (0)30 95 99 97 54 11
– Confidential –
Thank you!
![Page 19: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/19.jpg)
Page /
Backup
Backup Slides
19
![Page 20: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/20.jpg)
Page
OSTree basics
20
mmcblk0p1
MLOu-boot.binuEnv.txt
/boot/loader/uEnv.txt
/ostree/repo/objects/…
/ostree/deploy/myos/a3c83…/ /usr/bin/bash /usr/bin/echo
/ostree/deploy/myos/29ff9…/ /usr/bin/bash /usr/bin/echo
mmcblk0p2
1 ph
ysic
al s
ysro
ot Multiple deployment sysroots
Rootfs #1
Rootfs #2
![Page 21: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/21.jpg)
OSTree Hard link trees
Files shared using hard links:
/ostree/repo/4b/cdef… /b2/…
/ostree/deploy/osname/v1/etc/… /usr/bin/bash …
/ostree/deploy/osname/v2/etc/… /usr/bin/bash
bash
![Page 22: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/22.jpg)
Page
OSTree basics.
22
● Physical sysroot - just one per device. Contains OSTree repo, OSTree deployments and /boot directory with information about current deployment sysroot. Device never boots into physical sysroot.
● Deployment sysroots - one device can contain multiple deployments (two by default). They are stored in /ostree/deploy under physical sysroot. Physical sysroot is mounted to /sysroot mountpoint of deployment sysroot so that OSTree can access its repository.
mmcblk0p1MLOu-boot.binuEnv.txt
/boot/loader/uEnv.txt
/ostree/repo/objects/…
/ostree/deploy/my_os/a3c386d83…
/ostree/deploy/my_os/29ff96760…
mmcblk0p2
![Page 23: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/23.jpg)
Page
OSTree basics: sysroot
23
/boot/
/loader/uEnv.txt
/ostree
/deploy/os/deploy/da3045…
/deploy/os/deploy/4eda05…
/deploy/os/var
/ostree/repo/objects/4eda...4.commit
/ostree/repo/objects/c4b5...5.dirtree
/ostree/repo/objects/805d...a.file
/ostree/repo/objects/7d11…0.file
bootargs=ostree=/ostree/deploy/os/deploy/4eda...4/
Deployment sysroot
/bin -> /usr/bin /lib -> /usr/lib /var /usr /lib /libostree-1.so.1
![Page 24: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/24.jpg)
Page 24
Boot Process
- Bootloader picks deployment
- Boot kernel
- initrd chroots to correct deploymentU-BootKernelOSTree initrd/sbin/init
![Page 25: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/25.jpg)
Page 25
Integration Part 1/2
Yocto / OE Integration
Added image_types_ostree to bitbake
Modifies rootfs to be updatable
Moves R/W data to var
Usrmove
Commits result to an OSTree repo
Uploads to Software Update Server
Creates initial bootable flash image
...all from ‘bitbake myimage’
![Page 26: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/26.jpg)
Page 26
Integration Part 2/2
Also need some per-board work
Mostly bootloader
Today:
- Renesas R-Car Porter
- Qemu (U-Boot)
- Minnowboard Max (U-Boot!)
- R-Pi (chain load U-Boot)
Other bootloaders straightforward
Yocto / OE Integration
![Page 27: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/27.jpg)
Page 27
RO / RW Split
OSTree uses hardlinks to share files
Must not modify them mounted RO
Writable files in /var
User data in /var
![Page 28: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/28.jpg)
Page 28
Case of AGL Application Framework (1).
Two updatedomains.
1. Full file system updates with OSTree.
2. Application updates with Application Framework.
Application database is located in /var/lib/afm. Some applications come pre-installed in the file system, while others can be installed in runtime.
How do we manage /var/lib/afm?
![Page 29: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/29.jpg)
Page
Case of AGL Application Framework (2).
Just ignore initial database.
29
Populate /var/lib/afm from /usr/afm just once.
+ Almost zero integration effort
— No pre-installed apps
Merge initial database in /usr/afm with the one generated runtime.
+ Applications can be updated both with OSTree and AppFW
— A lot of integration effort, merger can fail or give unexpected results.
+ Moderate integration effort, very robust.
— Pre-installed apps are populated just once, can’t update apps with OSTree.
![Page 30: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/30.jpg)
Page 30
Getting Started with AGL and SOTA
The ‘Charming Chinook’ release of AGL
comes with SOTA.
Pass ‘agl-sota’ to aglsetup.sh to enable
it
=> Done
Code is in meta-agl-extra/meta-sota
Getting Started (AGL)
https://wiki.automotivelinux.org/subsystem/agl-sota/ostree
![Page 31: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/31.jpg)
Page
OSTree integration.
31
1. Prepare physical sysroot.
2. Prepare deployment sysroot.
3. Make bootloader and initramfs work together to boot the deployment.
4. Make sure you control mutable state in your system.
Already done in meta-updater
![Page 32: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/32.jpg)
Page
OSTree basics: boot procedure.
32
● Bootloader reads kernel, initramfs and deployment sysroot location from /boot/loader/uEnv.txt and boots into initramfs.
● Initramfs prepares deployment sysroot: mounts /var, /home and /sysroot, remounts /usr as read only.
● After the sysroot is prepared, initramfs boots into it.
![Page 33: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/33.jpg)
Page 33
What if I just commit my rootfs to OSTree?
Deployed files are hardlinks to objects in OSTree repo and are shared between deployments. Therefore they can’t be modified by running system.
● All files managed by OSTree should reside in /usr that is mounted read-only.
● Writable files should reside in /var, but software should be aware of how to populate it with initial data.
● OSTree already manages /etc. Not really fit for embedded systems.
![Page 34: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/34.jpg)
Page 34
Meta-updater: Yocto/OE layer for OSTree updates.
Implements
● Seamless integration into Yocto build process.● Deployment sysroot as an OSTree commit.● Physical sysroot and bootable images for supported platforms.● Pushing OSTree commits to a server through a well-documented protocol.
Does not implement
● Population of /var. It is really application-dependent.● Support for arbitrary board. Currently Raspberry Pi 2/3, Minnowboard Turbot,
Renesas RCar Porter board and qemux86-64 are supported.
![Page 35: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/35.jpg)
Page 35
Open issues.
● /etc merger. The way it is implemented in OSTree doesn’t work well for embedded systems.
● File system stability. Physically there is only one file system, and if it gets corrupted due to hardware bugs, driver bugs etc. the system becomes unbootable.
● OSTree itself is a part of deployment sysroot => system can be bricked.
● Rollback logic is not a part of OSTree. Ideally it should be implemented in the bootloader.
![Page 36: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/36.jpg)
Page 36
Links.
● OSTree: https://github.com/ostreedev/ostree
● AGL: https://www.automotivelinux.org/
● Meta-updater: https://github.com/advancedtelematic/meta-updater
● Quickstart with meta-updater and Raspberry Pi: https://github.com/advancedtelematic/garage-quickstart-rpi
![Page 37: Getting started with SOTA in AGL...4.Make sure you control mutable state in your system. Already done in meta-updater. Page OSTree basics: boot procedure. 32 Bootloader reads kernel,](https://reader033.vdocument.in/reader033/viewer/2022042416/5f3233879377ae098b4e113c/html5/thumbnails/37.jpg)
Page /37
Lorem Ipsum Dolor.