Chrome OS Internals Josh Triplett josh@joshtriplett.org LinuxCon - - PowerPoint PPT Presentation

chrome os internals
SMART_READER_LITE
LIVE PREVIEW

Chrome OS Internals Josh Triplett josh@joshtriplett.org LinuxCon - - PowerPoint PPT Presentation

Chrome OS Internals Josh Triplett josh@joshtriplett.org LinuxCon Europe 2014 Josh Triplett Chrome OS Internals LinuxCon Europe 2014 1 / 43 Overview Intro to Chrome OS Architecture of Chrome OS Verified boot and developer mode Security


slide-1
SLIDE 1

Chrome OS Internals

Josh Triplett josh@joshtriplett.org LinuxCon Europe 2014

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 1 / 43

slide-2
SLIDE 2

Overview

Intro to Chrome OS Architecture of Chrome OS Verified boot and developer mode Security Build a bootable Chromium OS image from source Develop Chrome OS

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 2 / 43

slide-3
SLIDE 3

Chrome OS

Operating system from Google based on the Chrome browser Designed around web apps Browser, Gmail, Google Docs, YouTube, Netflix, games Google Drive, Chrome Sync, and persistent app state Synced, backed up, and updated automatically

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 3 / 43

slide-4
SLIDE 4

Chromium OS and Chrome OS

Built from publically available Open Source code Only runs on devices in developer mode Allows shell and root access No Flash, Netflix, DRM

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 4 / 43

slide-5
SLIDE 5

Chromium OS and Chrome OS

Built from publically available Open Source code Only runs on devices in developer mode Allows shell and root access No Flash, Netflix, DRM Digital signature from Google Runs on systems in production mode Branding Flash, Netflix, and DRM

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 4 / 43

slide-6
SLIDE 6

Architecture

HTML5 Websites Chrome Apps Browser Extensions Blink engine, V8 JavaScript, Native Client Chromium browser Userspace: init, libraries, services, graphics, 3D Linux kernel Customized firmware (coreboot) Chrome OS hardware

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 5 / 43

slide-7
SLIDE 7

Chrome OS Hardware

Chromebook laptops Chromebox desktops Chromebase “all-in-ones” (built into a monitor)

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 6 / 43

slide-8
SLIDE 8

Chrome OS Hardware

Chromebook laptops Chromebox desktops Chromebase “all-in-ones” (built into a monitor) Arbitrary Linux-compatible PC hardware

Always effectively in developer mode

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 6 / 43

slide-9
SLIDE 9

Hardware codenames

Popular video game series for each hardware family Character for each model in that family

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 7 / 43

slide-10
SLIDE 10

Hardware codenames

Popular video game series for each hardware family Character for each model in that family Haswell: Star Fox

fox, slippy, falco, peppy

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 7 / 43

slide-11
SLIDE 11

Hardware codenames

Popular video game series for each hardware family Character for each model in that family Haswell: Star Fox

fox, slippy, falco, peppy

Baytrail: Donkey Kong

rambi, squawks, quawks, swanky

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 7 / 43

slide-12
SLIDE 12

Key differences in Chrome OS hardware

Developer-mode switch (physical or keyboard-based) Custom keyboard and keyboard controller Hardware on Google compatibility list Embedded controller with Open Source firmware Uses coreboot-based Chrome OS firmware

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 8 / 43

slide-13
SLIDE 13

Chrome OS firmware

Based on coreboot and u-boot

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 9 / 43

slide-14
SLIDE 14

Chrome OS firmware

Based on coreboot and u-boot Coreboot provides the framework for hardware initialization “depthcharge”: u-boot as coreboot payload

Provides flexible boot of Linux from various media

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 9 / 43

slide-15
SLIDE 15

Chrome OS firmware

Based on coreboot and u-boot Coreboot provides the framework for hardware initialization “depthcharge”: u-boot as coreboot payload

Provides flexible boot of Linux from various media

Read-only firmware for root of trust and recovery mode A/B read-write firmware available for fallbacks during updates Includes SeaBIOS to boot arbitrary OSes

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 9 / 43

slide-16
SLIDE 16

Chrome OS firmware

Based on coreboot and u-boot Coreboot provides the framework for hardware initialization “depthcharge”: u-boot as coreboot payload

Provides flexible boot of Linux from various media

Read-only firmware for root of trust and recovery mode A/B read-write firmware available for fallbacks during updates Includes SeaBIOS to boot arbitrary OSes Open Source firmware for embedded controller

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 9 / 43

slide-17
SLIDE 17

Chrome OS firmware

Based on coreboot and u-boot Coreboot provides the framework for hardware initialization “depthcharge”: u-boot as coreboot payload

Provides flexible boot of Linux from various media

Read-only firmware for root of trust and recovery mode A/B read-write firmware available for fallbacks during updates Includes SeaBIOS to boot arbitrary OSes Open Source firmware for embedded controller Implements verified boot procedure

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 9 / 43

slide-18
SLIDE 18

Chrome OS firmware

Based on coreboot and u-boot Coreboot provides the framework for hardware initialization “depthcharge”: u-boot as coreboot payload

Provides flexible boot of Linux from various media

Read-only firmware for root of trust and recovery mode A/B read-write firmware available for fallbacks during updates Includes SeaBIOS to boot arbitrary OSes Open Source firmware for embedded controller Implements verified boot procedure Enforces developer-mode switch requirements

Physical presence (switch or keyboard) Wiping local state when switching

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 9 / 43

slide-19
SLIDE 19

Verified Boot

Modules Userspace Browser Root filesystem (A/B) Kernel and kernel arguments (A/B) Updatable firmware and bootloader (A/B) Root of trust: Read-only firmware Signature Signature Hash (dm-verity)

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 10 / 43

slide-20
SLIDE 20

Verified Boot

Modules Userspace Browser Root filesystem (A/B) Kernel and kernel arguments (A/B) Updatable firmware and bootloader (A/B) Root of trust: Read-only firmware Signature Signature Hash (dm-verity)

All third-party code runs in a sandbox.

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 10 / 43

slide-21
SLIDE 21

Developer mode

Physical switch on older hardware Esc-Refresh-Power on newer hardware

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 11 / 43

slide-22
SLIDE 22

Developer mode

Physical switch on older hardware Esc-Refresh-Power on newer hardware

Tip: Refresh-Power is instant hard reset

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 11 / 43

slide-23
SLIDE 23

Developer mode

Physical switch on older hardware Esc-Refresh-Power on newer hardware

Tip: Refresh-Power is instant hard reset

Allows bypassing verified boot via explicit keyboard interaction Enforced in firmware or embedded controller Not changeable from OS

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 11 / 43

slide-24
SLIDE 24

Developer mode

Physical switch on older hardware Esc-Refresh-Power on newer hardware

Tip: Refresh-Power is instant hard reset

Allows bypassing verified boot via explicit keyboard interaction Enforced in firmware or embedded controller Not changeable from OS Wipes stateful partition, after enforced delay

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 11 / 43

slide-25
SLIDE 25

Developer mode

Physical switch on older hardware Esc-Refresh-Power on newer hardware

Tip: Refresh-Power is instant hard reset

Allows bypassing verified boot via explicit keyboard interaction Enforced in firmware or embedded controller Not changeable from OS Wipes stateful partition, after enforced delay Allows booting USB or BIOS

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 11 / 43

slide-26
SLIDE 26

Updates

Chrome OS downloads and installs signed updates from Google Includes new firmware, kernel, and OS root Chrome OS keeps an A and B firmware, kernel, and root filesystem Flag un-booted versions, fall back to previously successful version if new version fails

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 12 / 43

slide-27
SLIDE 27

Chrome OS kernel

Extensively patched Linux kernel

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 13 / 43

slide-28
SLIDE 28

Chrome OS kernel

Extensively patched Linux kernel

Backported drivers and improvements Security enhancements and hardening Not new APIs

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 13 / 43

slide-29
SLIDE 29

Chrome OS kernel

Extensively patched Linux kernel

Backported drivers and improvements Security enhancements and hardening Not new APIs

A/B copies for redundancy during updates

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 13 / 43

slide-30
SLIDE 30

Chrome OS kernel

Extensively patched Linux kernel

Backported drivers and improvements Security enhancements and hardening Not new APIs

A/B copies for redundancy during updates Stored on dedicated partitions to simplify depthcharge Wrapped in verified boot container, with kernel command line Verification information for dm-verity on kernel command line Edit formatted kernel and command line via vbutil_kernel

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 13 / 43

slide-31
SLIDE 31

Chrome OS userspace

Linux distribution Based on Gentoo

  • O99 -funroll-loops -fomit-instructions -ftw

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 14 / 43

slide-32
SLIDE 32

Chrome OS userspace

Linux distribution Based on Gentoo

  • O99 -funroll-loops -fomit-instructions -ftw

Uses the Portage build system and packaging infrastructure Pulls in many packages from Gentoo, and adds patches

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 14 / 43

slide-33
SLIDE 33

Chrome OS userspace

Linux distribution Based on Gentoo

  • O99 -funroll-loops -fomit-instructions -ftw

Uses the Portage build system and packaging infrastructure Pulls in many packages from Gentoo, and adds patches Adds its own chromiumos-overlay with the Chrome OS core and additional packages Adds board-specific overlay for each target board

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 14 / 43

slide-34
SLIDE 34

Chrome OS userspace

Linux distribution Based on Gentoo

  • O99 -funroll-loops -fomit-instructions -ftw

Uses the Portage build system and packaging infrastructure Pulls in many packages from Gentoo, and adds patches Adds its own chromiumos-overlay with the Chrome OS core and additional packages Adds board-specific overlay for each target board Notable divergence from Gentoo: Upstart

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 14 / 43

slide-35
SLIDE 35

Chrome OS userspace stack

Upstart and system daemons X Window System (for now) Mesa, libdrm, etc. Forks of ConnMan and ModemManager Custom audio server, cras Chrome browser, running Aura window manager Chrome browser windows

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 15 / 43

slide-36
SLIDE 36

Chrome OS UI

“Aura” Traditional window management Panel with fast-access app icons and app menu System tray, clock, notifications Designed with the Chrome OS keyboard in mind Runs in Chrome itself

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 16 / 43

slide-37
SLIDE 37

Chrome OS UI

“Aura” Traditional window management Panel with fast-access app icons and app menu System tray, clock, notifications Designed with the Chrome OS keyboard in mind Runs in Chrome itself X, Ozone, Freon

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 16 / 43

slide-38
SLIDE 38

Chrome OS graphics

Chrome GPU sandbox links to Mesa

Runs on X or GBM Talks to graphics hardware /dev/dri/card0

GPU sandbox provides virtual GLES contexts

Validated Isolated

Browser engine, WebGL, and NaCl each get a GLES context

Communicate with GPU sandbox via command buffer

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 17 / 43

slide-39
SLIDE 39

Chrome browser

Almost all system components exist to support the browser Shares significant code with Chrome for Linux, but separate target Many different sandboxes Supports HTML5 and JavaScript with additional APIs Supports applications and extensions written in JavaScript

https://developer.chrome.com/apps/api_index https://developer.chrome.com/extensions/api_index

Supports native code via Native Client (NaCl)

https://developer.chrome.com/native-client/pepper_dev/c Can port code from other platforms

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 18 / 43

slide-40
SLIDE 40

Chrome Web Store

Chrome OS’s “app store” Most apps run on Chrome for Windows, Linux, or Chrome OS Apps runnable via system menu Apps and app data synced between Chrome browsers App format: .crx , a modified .zip

Same package used for all platforms Prepended header includes signature via RSA and SHA-1 For more information: https://developer.chrome.com/extensions/crx

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 19 / 43

slide-41
SLIDE 41

Native Client

Sandboxed native code execution Uses seccomp BPF Based on Linux ELF file format C toolchain based on GCC and newlib or glibc Support for non-C languages Extensive Chrome-specific API Completely event driven; main thread may not block Ports of numerous major POSIX libraries

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 20 / 43

slide-42
SLIDE 42

Security

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 21 / 43

slide-43
SLIDE 43

Chrome OS threat model

root = kernel Enable local developers Protect against malware, especially persistent malware Protect against theft Slow down local attacks Defense in depth

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 22 / 43

slide-44
SLIDE 44

Chrome OS security

Extensive kernel and userspace hardening

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 23 / 43

slide-45
SLIDE 45

Chrome OS security

Extensive kernel and userspace hardening Verified boot, developer mode, and stateful wipe

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 23 / 43

slide-46
SLIDE 46

Chrome OS security

Extensive kernel and userspace hardening Verified boot, developer mode, and stateful wipe Per-user and per-system encrypted partitions (uses TPM, eCryptFS)

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 23 / 43

slide-47
SLIDE 47

Chrome OS security

Extensive kernel and userspace hardening Verified boot, developer mode, and stateful wipe Per-user and per-system encrypted partitions (uses TPM, eCryptFS) namespaces

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 23 / 43

slide-48
SLIDE 48

Chrome OS security

Extensive kernel and userspace hardening Verified boot, developer mode, and stateful wipe Per-user and per-system encrypted partitions (uses TPM, eCryptFS) namespaces seccomp

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 23 / 43

slide-49
SLIDE 49

Chrome OS security

Extensive kernel and userspace hardening Verified boot, developer mode, and stateful wipe Per-user and per-system encrypted partitions (uses TPM, eCryptFS) namespaces seccomp Most daemons run via “minijail”

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 23 / 43

slide-50
SLIDE 50

Chrome OS security

Extensive kernel and userspace hardening Verified boot, developer mode, and stateful wipe Per-user and per-system encrypted partitions (uses TPM, eCryptFS) namespaces seccomp Most daemons run via “minijail” No installable OS components or packages

Only changes via Chrome OS updates Browser sandboxed

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 23 / 43

slide-51
SLIDE 51

Additional hardening measures

ASLR, user and kernel Hiding kernel pointers

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 24 / 43

slide-52
SLIDE 52

Additional hardening measures

ASLR, user and kernel Hiding kernel pointers Compiler hardening, including stack protection glibc checks

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 24 / 43

slide-53
SLIDE 53

Additional hardening measures

ASLR, user and kernel Hiding kernel pointers Compiler hardening, including stack protection glibc checks Restricted kernel-module loading

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 24 / 43

slide-54
SLIDE 54

Additional hardening measures

ASLR, user and kernel Hiding kernel pointers Compiler hardening, including stack protection glibc checks Restricted kernel-module loading Restricted device permissions and capabilities

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 24 / 43

slide-55
SLIDE 55

Additional hardening measures

ASLR, user and kernel Hiding kernel pointers Compiler hardening, including stack protection glibc checks Restricted kernel-module loading Restricted device permissions and capabilities Compiled out unnecessary security-sensitive components

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 24 / 43

slide-56
SLIDE 56

Security policy

With a normal Chrome OS image, and developer mode off, it should not be possible to run any user-supplied native Linux executable or script.

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 25 / 43

slide-57
SLIDE 57

User separation

Chrome OS supports multiple users, and a “guest” Users tied to Google accounts Accounts theoretically identical across devices Each account has its own data, apps, etc

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 26 / 43

slide-58
SLIDE 58

User separation

Chrome OS supports multiple users, and a “guest” Users tied to Google accounts Accounts theoretically identical across devices Each account has its own data, apps, etc Accounts share networking and other system resources

Results in some confusing issues: need network to log in, and want to share networks among users, but cannot allow users to control the network used to log in.

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 26 / 43

slide-59
SLIDE 59

Chrome browser security

JavaScript sandboxing

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 27 / 43

slide-60
SLIDE 60

Chrome browser security

JavaScript sandboxing Native Client sandboxing

Code verification and analysis Effectively native speed

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 27 / 43

slide-61
SLIDE 61

Chrome browser security

JavaScript sandboxing Native Client sandboxing

Code verification and analysis Effectively native speed

Tabs in separate, locked-down processes Media decoding and graphics in separate, locked-down processes

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 27 / 43

slide-62
SLIDE 62

Chrome browser security

JavaScript sandboxing Native Client sandboxing

Code verification and analysis Effectively native speed

Tabs in separate, locked-down processes Media decoding and graphics in separate, locked-down processes Sandboxed processes use seccomp BPF for syscall filtering

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 27 / 43

slide-63
SLIDE 63

Chrome browser security

JavaScript sandboxing Native Client sandboxing

Code verification and analysis Effectively native speed

Tabs in separate, locked-down processes Media decoding and graphics in separate, locked-down processes Sandboxed processes use seccomp BPF for syscall filtering Many features used opportunistically on Linux exist unconditionally

  • n Chrome OS

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 27 / 43

slide-64
SLIDE 64

Building

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 28 / 43

slide-65
SLIDE 65

Getting Chrome OS Source

Most of Chrome OS is tracked via git

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 29 / 43

slide-66
SLIDE 66

Getting Chrome OS Source

Most of Chrome OS is tracked via git A whole lot of git

Hundreds of repositories Specific directory layout

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 29 / 43

slide-67
SLIDE 67

Getting Chrome OS Source

Most of Chrome OS is tracked via git A whole lot of git

Hundreds of repositories Specific directory layout

repo

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 29 / 43

slide-68
SLIDE 68

Getting Chrome OS Source

Most of Chrome OS is tracked via git A whole lot of git

Hundreds of repositories Specific directory layout

repo repo init -u $manifest url repo sync

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 29 / 43

slide-69
SLIDE 69

Getting Chrome OS Source

Most of Chrome OS is tracked via git A whole lot of git

Hundreds of repositories Specific directory layout

repo repo init -u $manifest url repo sync repo start repo upload

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 29 / 43

slide-70
SLIDE 70

Bootstrapping via chroot

Self-hosted build environment Avoids reliance on host tools and distribution

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 30 / 43

slide-71
SLIDE 71

Bootstrapping via chroot

Self-hosted build environment Avoids reliance on host tools and distribution depot_tools

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 30 / 43

slide-72
SLIDE 72

Bootstrapping via chroot

Self-hosted build environment Avoids reliance on host tools and distribution depot_tools cros_sdk

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 30 / 43

slide-73
SLIDE 73

Bootstrapping via chroot

Self-hosted build environment Avoids reliance on host tools and distribution depot_tools cros_sdk

Downloads initial binary chroot Can rebuild from source

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 30 / 43

slide-74
SLIDE 74

Bootstrapping via chroot

Self-hosted build environment Avoids reliance on host tools and distribution depot_tools cros_sdk

Downloads initial binary chroot Can rebuild from source namespaces

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 30 / 43

slide-75
SLIDE 75

Bootstrapping via chroot

Self-hosted build environment Avoids reliance on host tools and distribution depot_tools cros_sdk

Downloads initial binary chroot Can rebuild from source namespaces

Can run shell in chroot or act as command prefix

cros_sdk --nousepkg -- build_command

Mounts source tree as $HOME/trunk in chroot

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 30 / 43

slide-76
SLIDE 76

setup_board

Set up build environment for each new target board Hardware codenames as mentioned earlier Generic target boards: amd64-generic, x86-generic Based on overlays in src/overlays

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 31 / 43

slide-77
SLIDE 77

setup_board

Set up build environment for each new target board Hardware codenames as mentioned earlier Generic target boards: amd64-generic, x86-generic Based on overlays in src/overlays cros_sdk --nousepkg -- ./setup_board --board=$BOARD

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 31 / 43

slide-78
SLIDE 78

build_packages

Build Gentoo packages from source Save the resulting binary packages

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 32 / 43

slide-79
SLIDE 79

build_packages

Build Gentoo packages from source Save the resulting binary packages cros_sdk --nousepkg -- \ ./build_packages --board=$BOARD --nousepkg

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 32 / 43

slide-80
SLIDE 80

build_image

Create root filesystem Install compiled binary packages onto it Construct disk image

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 33 / 43

slide-81
SLIDE 81

build_image

Create root filesystem Install compiled binary packages onto it Construct disk image cros_sdk --nousepkg -- \ ./build_image --board=$BOARD \

  • -noenable_rootfs_verification dev

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 33 / 43

slide-82
SLIDE 82

build_image

Create root filesystem Install compiled binary packages onto it Construct disk image cros_sdk --nousepkg -- \ ./build_image --board=$BOARD \

  • -noenable_rootfs_verification dev

base, dev, test

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 33 / 43

slide-83
SLIDE 83

build_image

Create root filesystem Install compiled binary packages onto it Construct disk image cros_sdk --nousepkg -- \ ./build_image --board=$BOARD \

  • -noenable_rootfs_verification dev

base, dev, test Based on metapackages in src/third_party/chromiumos-overlay/chromeos-base

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 33 / 43

slide-84
SLIDE 84

rootfs verification

Linux verifies root filesystem with dm-verity Mounting root read-write will break the hash

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 34 / 43

slide-85
SLIDE 85

rootfs verification

Linux verifies root filesystem with dm-verity Mounting root read-write will break the hash ext4 feature flags

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 34 / 43

slide-86
SLIDE 86

rootfs verification

Linux verifies root filesystem with dm-verity Mounting root read-write will break the hash ext4 feature flags Disable at build time with --noenable_rootfs_verification

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 34 / 43

slide-87
SLIDE 87

rootfs verification

Linux verifies root filesystem with dm-verity Mounting root read-write will break the hash ext4 feature flags Disable at build time with --noenable_rootfs_verification Disable on existing image with /usr/share/vboot/bin/make_dev_ssh.sh

  • -remove_rootfs_verification

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 34 / 43

slide-88
SLIDE 88

Image format

GPT with 12 partitions

“Stateful” read-write partition (expands to disk size) Linux kernel with header (A, B, and C) Root filesystem (A, B, and C) OEM three reserved EFI System Partition

Bootable via coreboot/depthcharge, MBR (syslinux), and EFI (grub2)

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 35 / 43

slide-89
SLIDE 89

Booting

./image_to_usb.sh ./image_to_vm.sh

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 36 / 43

slide-90
SLIDE 90

Developing

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 37 / 43

slide-91
SLIDE 91

Chrome OS development

Uses repo to manage several hundred git repositories

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 38 / 43

slide-92
SLIDE 92

Chrome OS development

Uses repo to manage several hundred git repositories

repo start, repo upload

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 38 / 43

slide-93
SLIDE 93

Chrome OS development

Uses repo to manage several hundred git repositories

repo start, repo upload

Uses gerrit to accept and review contributions

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 38 / 43

slide-94
SLIDE 94

Chrome OS development

Uses repo to manage several hundred git repositories

repo start, repo upload

Uses gerrit to accept and review contributions All changes require code review before merging

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 38 / 43

slide-95
SLIDE 95

Chrome OS development

Uses repo to manage several hundred git repositories

repo start, repo upload

Uses gerrit to accept and review contributions All changes require code review before merging Changes built and tested on numerous Chrome OS platforms before merging Continous integration via buildbot

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 38 / 43

slide-96
SLIDE 96

Developing the Chrome browser

Download source separately

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 39 / 43

slide-97
SLIDE 97

Developing the Chrome browser

Download source separately Similar multi-repository structure Uses gclient in place of repo Uses reitveld in place of gerrit (Both support subversion in addition to git)

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 39 / 43

slide-98
SLIDE 98

Developing the Chrome browser

Download source separately Similar multi-repository structure Uses gclient in place of repo Uses reitveld in place of gerrit (Both support subversion in addition to git) chromeos-base/chromeos-chrome

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 39 / 43

slide-99
SLIDE 99

Developing the Chrome browser

Download source separately Similar multi-repository structure Uses gclient in place of repo Uses reitveld in place of gerrit (Both support subversion in addition to git) chromeos-base/chromeos-chrome CHROME_ORIGIN=LOCAL_SOURCE

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 39 / 43

slide-100
SLIDE 100

Modifying packages

ebuild src/third_party/chromiumos-overlay

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 40 / 43

slide-101
SLIDE 101

Modifying packages

ebuild src/third_party/chromiumos-overlay Extensive use of eclass

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 40 / 43

slide-102
SLIDE 102

Modifying packages

ebuild src/third_party/chromiumos-overlay Extensive use of eclass No universal approach for package modification Many common patterns

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 40 / 43

slide-103
SLIDE 103

Modifying packages

ebuild src/third_party/chromiumos-overlay Extensive use of eclass No universal approach for package modification Many common patterns Some packages download tarballs and apply patches Some packages clone git repositories (and apply patches) Some packages use cros_workon

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 40 / 43

slide-104
SLIDE 104

cros_workon

ebuild uses cros_workon eclass

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 41 / 43

slide-105
SLIDE 105

cros_workon

ebuild uses cros_workon eclass ebuild references existing checked-out git repository (from repo) ebuild specifies git commit and tree hashes Normal build checks out and builds that commit

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 41 / 43

slide-106
SLIDE 106

cros_workon

ebuild uses cros_workon eclass ebuild references existing checked-out git repository (from repo) ebuild specifies git commit and tree hashes Normal build checks out and builds that commit cros_workon start unmasks ebuild version 9999 9999 ebuild builds the checked-out version (including local changes)

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 41 / 43

slide-107
SLIDE 107

Package management

Portage tools provides for host and each board

emerge, equery: for the host chroot emerge-${BOARD}, equery-${BOARD}: for target board

Used during build_packages and build_image

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 42 / 43

slide-108
SLIDE 108

Package management

Portage tools provides for host and each board

emerge, equery: for the host chroot emerge-${BOARD}, equery-${BOARD}: for target board

Used during build_packages and build_image Can install individual packages in developer mode Use emerge-${BOARD} to build Use cros deploy (formerly gmerge) to remotely deploy

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 42 / 43

slide-109
SLIDE 109

Come work on Chrome OS! https://01.org/jobs

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 43 / 43

slide-110
SLIDE 110

Come work on Chrome OS! https://01.org/jobs Questions?

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 43 / 43