<<

Chrome OS Internals

Josh Triplett [email protected]

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 Build a bootable OS image from source Develop Chrome OS

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 2 / 43 Chrome OS

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 3 / 43 Digital signature from Google Runs on systems in production mode Branding Flash, Netflix, and DRM

Chromium OS and Chrome OS

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 4 / 43 Chromium OS and Chrome OS

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 4 / 43 Architecture

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 5 / 43 Arbitrary Linux-compatible PC hardware Always effectively in developer mode

Chrome OS Hardware

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 6 / 43 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 Haswell: Star Fox fox, slippy, falco, peppy Baytrail: Donkey Kong rambi, squawks, quawks, swanky

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 Baytrail: Donkey Kong rambi, squawks, quawks, swanky

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 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 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 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

Chrome OS firmware

Based on coreboot and u-boot

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 9 / 43 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

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 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

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 Implements verified boot procedure Enforces developer-mode switch requirements Physical presence (switch or keyboard) Wiping local state when switching

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 Enforces developer-mode switch requirements Physical presence (switch or keyboard) Wiping local state when switching

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 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 All third-party code runs in a sandbox.

Verified Boot

Modules Userspace Browser

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 10 / 43 Verified Boot

Modules Userspace Browser

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

All third-party code runs in a sandbox.

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 10 / 43 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 USB or BIOS

Developer mode

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 11 / 43 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

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 Wipes stateful partition, after enforced delay Allows booting USB or BIOS

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 Allows booting USB or BIOS

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 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 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 Backported drivers and improvements Security enhancements and hardening Not new 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

Chrome OS kernel

Extensively patched

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 13 / 43 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

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 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

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 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 Uses the 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:

Chrome OS userspace

Linux distribution Based on Gentoo -O99 -funroll-loops -fomit-instructions -ftw

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 14 / 43 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

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 Notable divergence from Gentoo: Upstart

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 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 Chrome OS userspace stack

Upstart and system daemons (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 X, Ozone, Freon

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 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 Chrome OS graphics

Chrome GPU sandbox to Mesa Runs on X or GBM Talks to graphics hardware /dev/dri/card0 GPU sandbox provides virtual GLES contexts Validated Isolated , 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 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 ://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

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 . 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 Native Client

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 20 / 43 Security

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 21 / 43 Chrome OS threat model

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 22 / 43 Verified boot, developer mode, and stateful wipe Per- 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

Chrome OS security

Extensive kernel and userspace hardening

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 23 / 43 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

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 namespaces seccomp Most daemons run via “minijail” No installable OS components or packages Only changes via Chrome OS updates Browser sandboxed

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 seccomp Most daemons run via “minijail” No installable OS components or packages Only changes via Chrome OS updates Browser sandboxed

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 Most daemons run via “minijail” No installable OS components or packages Only changes via Chrome OS updates Browser sandboxed

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 No installable OS components or packages Only changes via Chrome OS updates Browser sandboxed

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 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 hardening, including stack protection glibc checks Restricted kernel-module loading Restricted device permissions and capabilities Compiled out unnecessary security-sensitive components

Additional hardening measures

ASLR, user and kernel Hiding kernel pointers

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 24 / 43 Restricted kernel-module loading Restricted device permissions and capabilities Compiled out unnecessary security-sensitive components

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 Restricted device permissions and capabilities Compiled out unnecessary security-sensitive components

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 Compiled out unnecessary security-sensitive components

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 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 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 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.

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 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 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 on Chrome OS

Chrome

JavaScript sandboxing

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 27 / 43 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 on Chrome OS

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 Sandboxed processes use seccomp BPF for syscall filtering Many features used opportunistically on Linux exist unconditionally on Chrome OS

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 Many features used opportunistically on Linux exist unconditionally on Chrome OS

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 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 on Chrome OS

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 27 / 43 Building

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 28 / 43 A whole lot of Hundreds of repositories Specific directory layout repo repo init -u $manifest repo sync repo start repo upload

Getting Chrome OS Source

Most of Chrome OS is tracked via git

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 29 / 43 repo repo init -u $manifest url repo sync repo start repo upload

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 repo init -u $manifest url repo sync repo start repo upload

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 repo start repo upload

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 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 depot_tools cros_sdk Downloads initial binary 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

Bootstrapping via chroot

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 30 / 43 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

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 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

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 namespaces Can run shell in chroot or act as command prefix cros_sdk --nousepkg -- build_command Mounts source tree as $HOME/trunk in chroot

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 Can run shell in chroot or act as command prefix cros_sdk --nousepkg -- build_command Mounts source tree as $HOME/trunk in chroot

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 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 cros_sdk --nousepkg -- ./setup_board --board=$BOARD

setup_board

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 31 / 43 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 cros_sdk --nousepkg -- \ ./build_packages --board=$BOARD --nousepkg

build_packages

Build Gentoo packages from source Save the resulting binary packages

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 32 / 43 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 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

build_image

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 33 / 43 base, dev, test Based on metapackages in src/third_party/chromiumos-overlay/chromeos-base

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 Based on metapackages in src/third_party/chromiumos-overlay/chromeos-base

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 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 ext4 feature flags Disable build time with --noenable_rootfs_verification Disable on existing image with /usr/share/vboot/bin/make_dev_ssh.sh --remove_rootfs_verification

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 Disable at build time with --noenable_rootfs_verification Disable on existing image with /usr/share/vboot/bin/make_dev_ssh.sh --remove_rootfs_verification

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 Disable on existing image with /usr/share/vboot/bin/make_dev_ssh.sh --remove_rootfs_verification

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 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 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 Booting

./image_to_usb.sh ./image_to_vm.sh

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 36 / 43 Developing

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 37 / 43 repo start, repo upload Uses 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

Chrome OS development

Uses repo to manage several hundred git repositories

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 38 / 43 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

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 All changes require code review before merging Changes built and tested on numerous Chrome OS platforms before merging Continous integration via buildbot

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 Changes built and tested on numerous Chrome OS platforms before merging Continous integration via buildbot

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 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 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

Developing the Chrome browser

Download source separately

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 39 / 43 chromeos-base/chromeos-chrome CHROME_ORIGIN=LOCAL_SOURCE

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 CHROME_ORIGIN=LOCAL_SOURCE

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 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 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

Modifying packages

ebuild src/third_party/chromiumos-overlay

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 40 / 43 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

Modifying packages

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 40 / 43 Some packages download tarballs and apply patches Some packages clone git repositories (and apply patches) Some packages use cros_workon

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 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 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)

cros_workon

ebuild uses cros_workon eclass

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 41 / 43 cros_workon start unmasks ebuild version 9999 9999 ebuild builds the checked-out version (including local changes)

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 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 Can install individual packages in developer mode Use emerge-${BOARD} to build Use cros deploy (formerly gmerge) to remotely deploy

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 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 Questions?

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

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 43 / 43 Come work on Chrome OS! https://01.org/jobs

Questions?

Josh Triplett Chrome OS Internals LinuxCon Europe 2014 43 / 43