Deby - Reproducible and Maintainable Embedded Linux Environment with Poky

Similar documents
Building Debian-Based Products: Experiences in Collaboration

CE Workgroup Shared Embedded Linux Distribution Project

Debian & Yocto: State of the Art

Yocto Overview. Dexuan Cui Intel Corporation

Isar. Build Debian-Based Products with BitBake. Baurzhan Ismagulov. Embedded Linux Conference Europe Oct 11-13, 2016 Berlin, Germany

Meeting the Yocto Project

Poky Linux & OpenEmbedded based environment

Building RT image with Yocto

Dandified way to package management in Yocto Project

Customizing with Yocto. Dexuan Cui Intel Corporation

Delivering Predictability: The Yocto Project Autobuilder, Automated Sanity Testing, License Collection, and Build Statistics Tracking

Yocto Project components

Introduction to the Yocto Project. Developer s perspective

Using the Yocto Autobuilder for Build and Release Management. Jate Sujjavanich Syntech Systems, Inc <jatedev -at- gmail.com> February 22, 2016

Developing using C on imx Developer s Kits

Using Openembedded with Snapdragon Flight

SPDX with Yocto Project

Introduction to Supercomputing

Yocto Project: A Vehicle for Embedded Qt Development

KHEM RAJ YOCTO PROJECT/OPEN EMBEDDED

Introduction to the Yocto Project

Customizing the Yocto-Based Linux Distribution for Production

A Smart Way to Manage Packages in Yocto Project

The Yocto Project. Chris Young S/W Specialist SILICA Europe. Harmonising Software Development across multiple Embedded ARM SOC targets

Yocto Project and OpenEmbedded training 3-day session

D1 - Embedded Linux. Building and installing an embedded and real-time Linux platform. Objectives. Course environment.

Digi Embedded Yocto 1.6. First Steps Guide

Part A: Setup your kernel development environment

NFV in the Embedded World: Yocto Project and OpenStack

IOTIVITY AND EMBEDDED LINUX SUPPORT. Kishen Maloor Intel Open Source Technology Center

IoT usecase for Yocto Project

YumaPro Yocto Linux Quickstart Guide

February 2 nd Jean Parpaillon

RZ/G Verified Linux Package V2.1.0-RT

Industrial-grade Open Source Base Layer. Yoshitake Kobayashi, Toshiba Corporation Embedded Linux Conference North America, March 12-14, 2018

OpenEmbedded in the Real World

PetaLinux SDK User Guide. Application Development Guide

Embedded Linux. A Tour inside ARM's Kernel

Prototyping IoT with. Pierre Ficheux 02/2017. Prototyping IoT with Yocto

How we added software updates to AGL

meta-raspberrypi Documentation

Travis Cardwell Technical Meeting

Lab 6: OS Security for the Internet of Things

Tool installation for PMC-MC-X2/X4 with P2020 series processor

Lab 6: OS Security for the Internet of Things

Laboratorio di Programmazione. Prof. Marco Bertini

Improving the Yocto Project Developer Experience. How New Tools Will Enable a Better Workflow October 2016 Henry Bruce

New Contributor Tutorial and Best Practices

Adding hardware support to Buildroot

Exercise 1: Basic Tools

Formatting 1. Commands starting with $ are Linux console commands on the host PC:

An Operating System Tailored for Containers and Built for the Embedded World

Zedboard Documentation

Zephyr Kernel Installation & Setup Manual

LotOS Framework. Getting Started Guide for Banana Pi. Copyright (C) 2015 ilbers GmbH Revision 1.1,

Cross platform enablement for the yocto project with containers. ELC 2017 Randy Witt Intel Open Source Technology Center

It s not an embedded Linux distribution It creates a custom one for you. David Stewart Intel Corporation April 11, 2011

Introduction to Supercomputing

Industrial-grade Open Source Base Layer Development

Contributing to Automotive Grade Linux and GENIVI Development Platform

Yocto Project internal tools

Singularity: container formats

Qt5 & Yocto: SDK and app migration. Denys Dmytriyenko LCPD, Arago Project Texas Instruments

Embedded Linux development made easier. User s manual. Version:

The Yocto GENIVI Baseline Overview. Automotive Linux Summit, Fall 2013 Holger Behrens, Wind River Automotive Solutions

dh-virtualenv Documentation

Version Control. Software Carpentry Github s Hello World Git For Ages 4 And Up You need source code control now

Building Container Images with OpenEmbedded and the Yocto Project. Scott Murray

e2 factory the emlix Embedded Build Framework

User Guide Yocto Linux. Board Support Package For Intel Quark

Oxalis Getting Started

Fosdem Feb/2018. Frederic Marec Embedded Engineer

D1Y - Embedded Linux with Yocto

AMM Feb/2018. Frederic Marec Embedded Engineer

DEVELOPMENT GUIDE AMOS-820. Linux BSP v

Intel Do-It-Yourself Challenge Compile C/C++ for Galileo Nicolas Vailliet

Industrial-grade Open Source Base Layer Development

1. Install a Virtual Machine Download Ubuntu Create a New Virtual Machine Seamless Operation between Windows an Linux...

syscall_intercept A user space library for intercepting system calls Author Name, Company Krzysztof Czuryło, Intel

Intel Do-It-Yourself Challenge Rebuild (with) Yocto Nicolas Vailliet

Building a Remote Control Robot with Automotive Grade Linux

Platform Specific Guides. Release

Customize your Mainline or LTSI Linux Kernel using the Yocto Project

A JAVA VIRTUAL MACHINE FOR RISC-V PORTING THE JIKES RESEARCH VM

manifold Documentation

Itron Riva Dev Software Development Getting Started Guide

Kernel hacking su Android. Better Embedded Andrea Righi

Git. Ľubomír Prda. IT4Innovations.

2013 Toshiba Corporation

Contribute To Linux Mainline

Proview on Raspberry PI

Singularity CRI User Documentation

Installing Scratchbox

Infoblox Kubernetes1.0.0 IPAM Plugin

National Aeronautics and Space and Administration Space Administration. CFE CMake Build System

Building CircuitPython

Using Subversion for Source Code Control

The Scratchbox development environment

WORKING WITH THE LINUX KERNEL IN THE YOCTO PROJECT SEAN HUDSON EMBEDDED LINUX ARCHITECT

Yocto or Debian for Embedded Systems. White Paper

Transcription:

Deby - Reproducible and Maintainable Embedded Linux Environment with Poky Kazuhiro Hayashi CE Workgroup, The Linux Foundation (TOSHIBA Corporation) Embedded Linux Conference Europe 2016 Oct 12, 2016

About this project Shared Embedded Linux Distribution Project One of the activities of CEWG project Goals: Create an industry-supported distribution of embedded Linux and provide support for long term For more information about this project Shared Embedded Linux Distribution http://elinux.org/shared_embedded_linux_distribution CE Workgroup Linux Foundation http://www.linuxfoundation.org/collaborate/workgroups/celf 2

Motivation Linux is running on many kind of embedded systems Including the systems in civil infrastructure Things to be considered to choose a base distribution The number of supported packages Package versions Supported hardware Stability, number of bugs were fixed The frequency of security updates and supported timespan How to compile and customize packages 3

In our case What we want to do Make custom embedded Linux environments What we need Wider hardware support Stability Well tested packages are required Many embedded developer are still want to use stable version Long-term support Over 10 years support required, especially for security fixes (This is what we would like to contribute something) Fully customizable build system 4

Our solution Yocto Project "poky" One of the most popular reference distributions for embedded Linux Fully customizable build system Supports numerous embedded boards including modern ones Can be extended by meta-layer Debian GNU/Linux Support many kind of CPUs: x86, ARM, PowerPC, MIPS (32bit/64bit) Release a stable version after two years of testing Long-term support for 5 years by Debian-LTS project 5

Our solution Yocto Project "poky" One of the most popular reference distributions for embedded Linux Debian GNU/Linux Support many kind of CPUs: x86, ARM, PowerPC, MIPS (32bit/64bit) Fully customizable build system Supports numerous embedded boards including modern ones Can be extended by meta-layer meta-debian Release a stable version after two years of testing Long-term support for 5 years by Debian-LTS project Deby 6

Definitions of the terms meta-debian A meta layer for the poky build system Completely separated from OpenEmbedded-Core and other layers Allows cross-building Linux images using Debian source packages Source code https://github.com/meta-debian/meta-debian.git Deby A reference distribution built with poky+meta-debian Deby = Debian + poky Deby = Debian-like Cross-built from Debian source, but not same as Debian binary 7

Build system structure (poky) Upstream source code Fetch poky build system meta (OpenEmbedded-Core) Board-specific metadata A B C Build Poky A Poky B Poky C 8

Build system structure (poky + meta-debian) Upstream source code Debian source packages poky build system meta-debian meta (OpenEmbedded-Core) Board-specific metadata A B C Fetch Build Deby A Deby B Deby C 9

Target versions of Deby Upstream source code Debian source packages Debian 8 jessie poky build system meta-debian Yocto Project Stable version: 2.0 meta jethro (OpenEmbedded-Core) Development version: Board-specific 2.2 morty metadata A B C Fetch Build Deby A Deby B Deby C 10

Purpose of Deby Create embedded Linux environments with Wide embedded CPU support Stability Long-term support Fully customizable build system With Debian stable release + LTS With poky build system Contribute to upstream Debian, Debian LTS, and Yocto Project 11

Development policies of Deby Follow Debian s packaging (debian/rules) Use the same configure/compile commands and options, install paths, binary package name, and dependencies as Debian Add patches for supporting cross-compile Usually imported from OE-Core Customize for embedded system if necessary Remove unneeded features, dependencies and packages Ex: udeb packages for Debian installer See also http://events.linuxfoundation.org/sites/events/files/slides/linuxcon2 015_meta-debian_r7.pdf 12

Quick start 1. Download the build tools 2. Setup build directory 3. Build minimal Linux image 4. Run minimal Linux image on QEMU 5. Build & install minimal SDK 6. Build application with SDK 7. Run application on QEMU See also meta-debian/readme.md https://github.com/meta-debian/meta-debian/blob/jethro/readme.md 13

Download build tools Download poky $ git clone git://git.yoctoproject.org/poky.git $ cd poky $ git checkout jethro Download meta-debian into the poky directory $ cd poky $ git clone https://github.com/meta-debian/meta-debian.git $ cd meta-debian $ git checkout jethro meta-debian specific step 14

Setup build directory Change the default configuration Enable meta-debian layer Enable "deby" distro (DISTRO = "deby") The default target machine is "qemux86" (MACHINE = "qemux86") TEMPLATECONF is used by oe-init-build-env script $ export TEMPLATECONF=meta-debian/conf Run startup script This setup a build directory and environment variables automatically (builddir): name of build directory (optional) $ source /path/to/poky/oe-init-build-env (builddir) 15

Build minimal Linux image Run bitbake $ bitbake core-image-minimal Built images (case of qemux86) Output directly /path/to/builddir/tmp/deploy/images/qemux86 Kernel bzimage-qemux86.bin Root filesystem core-image-minimal-qemux86.ext4 core-image-minimal-qemux86.tar.gz 16

Run minimal Linux image on QEMU Run built images on QEMU environment qemux86 / qemux86-64 / qemuppc / qemumips $ runqemu qemux86 nographic $ runqemu qemux86-64 nographic $ runqemu qemuppc nographic $ runqemu qemumips nographic qemuarm $ runqemu qemuarm nographic bootparams="console=ttyama0" 17

Build & install minimal SDK Run bitbake $ bitbake meta-toolchain Output (Host: x86_64, Target: qemux86) /path/to/builddir/tmp/deploy/sdk/qemux86/deby-glibc-x86_64- meta-toolchain-i586-toolchain-8.0.sh Self-extracting script Install SDK to host environment $ sh deby-glibc-x86_64-meta-toolchain-i586-toolchain-8.0.sh 18

Build application with SDK Create hello.c and Makefile /* hello.c */ #include <stdio.h> int main(int argc, char **argv) { printf("hello world\n"); return 0; } # Makefile hello: hello.o Export SDK environment variables and make $ source /opt/deby/8.0/environment-setup-i586-deby-linux $ make See also Yocto Project Application Developer s Guide http://www.yoctoproject.org/docs/2.0/adt-manual/adtmanual.html#using-the-command-line 19

Run application on QEMU Copy hello to the filesystem image $ cd /path/to/builddir/tmp/deploy/images/qemux86 $ sudo mount o loop \ core-image-minimal-qemux86.ext4 /mnt $ sudo cp /path/to/hello /mnt $ sudo umount /mnt Run application on QEMU $ runqemu qemux86 nographic... 192.168.7.2 login: root # /hello hello world 20

New features Supported Yocto Project version 2.0 jethro (Stable) 2.2 morty (Development) Kernel 4.4 LTS 4.1 LTSI The number of available recipes Approx. 500 Newly supported target machine BeagleBoard, PandaBoard 21

New features Package management Run-time dpkg / apt Tag based source code fetch and build Rebuild the Linux image that was built at the specific time Summary generation Generate summary information of packages included in rootfs and SDK 22

Package management This feature is available in OE-Core How to enable package management feature Package management feature is disabled by default Add the following definition into local.conf EXTRA_IMAGE_FEATURES += "package-management" With package management feature, we can... Add binary packages into run-time environment Temporally install/uninstall packages for system evaluation Temporally install -dbg pacakges for debugging Upgrade packages without stopping system Install / upgrade packages without building & installing rootfs again 23

rootfs without package management Source code A.git B.git C.git X.git Recipe A.bb B.bb C.bb X.bb Build.deb.deb.deb Package pool (apt repo.).deb apt-get install Build environment Run-time environment No package data (Just extracted) rootfs Deby rootfs 24

rootfs with package management Source code A.git B.git C.git X.git Recipe A.bb B.bb C.bb X.bb Published by web server Build.deb.deb.deb Package pool (apt repo.).deb apt-get install Build environment rootfs Run-time environment Keep package data /var/lib/dpkg Deby rootfs dpkg apt install / upgrade / uninstall dynamically with apt-get 25

Tag based source code fetch and build Issues in the default behavior of meta-debian No reproducibility Cannot reproduce rootfs/sdk that was built at the specific time Recipes always fetches the latest source code (the latest git commit) To automatically import all security updates Reproducible build One of the essential features in long-term maintenance Useful for finding the source of issue in the old released image Solution STEP1: Register a release tag in git repositories every release STEP2: Reproduce an old release image by specifying a tag name Add a new global variable: GIT_REBUILD_TAG 26

STEP1: Register a release tag Version number Source code A 1 2 3 4 5 6 7 Time Source code B 1 2 3 Source code C 1 2 Source code D 1 2 3 4 meta-debian 1 2 3 4 git repositories 27

STEP1: Register a release tag Register a common release tag Release1 Source code A 1 2 3 Source code B 1 2 3 Source code C 1 2 Source code D 1 2 3 4 5 6 7 4 Time meta-debian 1 2 3 4 Metadata fetches the latest source code by default 28

STEP1: Register a release tag Release2 r2 Source code A 1 2 3 4 5 6 7 r2 Source code B 1 2 3 Source code C 1 2 r2 r2 Source code D 1 2 3 4 Time r2 meta-debian 1 2 3 4 29

STEP1: Register a release tag Release3 r2 r3 Source code A 1 2 3 4 5 6 7 r2 r3 Source code B 1 2 3 r3 Source code C 1 2 r2 r2 r3 Source code D 1 2 3 4 Time r2 r3 meta-debian 1 2 3 4 30

STEP2: Reproduce an old release "" r2 r3 Source code A 1 2 3 4 5 6 7 r2 r3 Source code B 1 2 3 r3 Source code C 1 2 r2 r2 r3 Source code D 1 2 3 4 Time r2 r3 meta-debian 1 2 3 4 Checkout meta-debian revision "" 31

STEP2: Reproduce an old release "" r2 r3 Source code A 1 2 3 4 5 6 7 r2 r3 Source code B 1 2 3 r3 Source code C 1 2 r2 r2 r3 Source code D 1 2 3 4 Time r2 r3 meta-debian 1 2 3 4 Fetch the latest source codes by default 32

STEP2: Reproduce an old release "" r2 r3 Source code A 1 2 3 4 5 6 7 r2 r3 Source code B 1 2 3 r3 Source code C 1 2 r2 r2 r3 Source code D 1 2 3 4 Time r2 r3 Don t fetch meta-debian 1 2 3 the 4latest version Fetch "" tagged source code by setting GIT_RELEASE_TAG = "" 33

How to register tag and rebuild Create git repository mirrors with docker Follow the instructions in meta-debian-docker/readme.md $ git clone https://github.com/meta-debian/meta-debian-docker.git $ cd meta-debian-docker $./make-docker-image.sh $ sudo docker run -d -p 10022:22 meta-debian:1 /etc/sv/git-daemon/run -D github.com docker (172.17.0.2) mirror 34

How to register tag and rebuild Setup poky + meta-debian $ export TEMPLATECONF=meta-debian/conf $ source./poky/oe-init-build-env Override the git server related variables in local.conf github.com docker (172.17.0.2) mirror fetch Fetches source code from github by default poky meta-debian 35

How to register tag and rebuild Setup poky + meta-debian $ export TEMPLATECONF=meta-debian/conf $ source./poky/oe-init-build-env Override the git server related variables in local.conf github.com docker (172.17.0.2) mirror DEBIAN_GIT_URI = "git://172.17.0.2" DEBIAN_GIT_PROTOCOL = "git" MISC_GIT_URI = "git://172.17.0.2" MISC_GIT_PROTOCOL = "git" LINUX_GIT_URI = "git://172.17.0.2" LINUX_GIT_PROTOCOL = "git" SRC_URI_ALLOWED = "git://172.17.0.2" fetch local.conf poky meta-debian 36

How to register tag and rebuild bitbake something $ bitbake core-image-minimal Get list files that have git repositories used in the build Example: /path/to/builddir/tmp/git.list.172.17.0.2 github.com docker (172.17.0.2) mirror build fetch local.conf poky meta-debian git.list.172.17.0.2 37

How to register tag and rebuild Register a tag "testtag" to the repositories $ git clone https://github.com/meta-debian/meta-debian-scripts.git $ cd meta-debian-scripts $./git-tagger.sh git.list.172.17.0.2 172.17.0.2 testtag github.com docker (172.17.0.2) register tag mirror testtag git-tagger.sh poky local.conf meta-debian git.list.172.17.0.2 38

How to register tag and rebuild Rebuild the old image $ export TEMPLATECONF=meta-debian/conf $ source./poky/oe-init-build-env $ echo 'GIT_REBUILD_TAG = "testtag"' >> conf/local.conf $ bitbake core-image-minimal github.com docker (172.17.0.2) mirror testtag rebuild fetch local.conf GIT_REBUILD_TAG = "testtag" poky meta-debian 39

Summary generation Summary information of OSS is required for products List of installed software Version of each software Source URI where the source code fetched License of each software Issues of the default poky and meta-debian Generate only a list of installed software in rootfs and SDK Solution Add functions (hooks) to automatically generate summary information into rootfs and SDK recipes 40

Summary generation Poky s build flow Source code A.git B.git C.git X.git Recipe A.bb B.bb C.bb X.bb Build.deb Install.deb rootfs.deb Package pool SDK.deb metadata Package: X Version: git0+dae8d9bd7f-r0 PackageArch: i586 Depends: B, C,...... rootfs SDK 41

Summary generation How to collect information for each package Source code A.git B.git C.git X.git Recipe A.bb B.bb C.bb Hook X.bb Build.deb Install.deb rootfs rootfs.deb Package pool SDK SDK STEP1: Embed additional metadata.deb metadata Package: X Version: git0+dae8d9bd7f-r0 PackageArch: i586 Depends: B, C,... DebianSourceName: X DebianSourceVersion: 1.2-3 RemoteSourceURI: git://... License: GPLv2+ 42

Summary generation How to generate summary of each deployment Source code A.git B.git C.git X.git Recipe A.bb Build.deb Install B.bb.deb C.bb Hook.deb Package pool X.bb STEP2: Generate summary from metadata of installed package.deb rootfs summary rootfs Hook SDK SDK summary rootfs SDK 43

Summary generation Format of summary information (CSV) Version with commit ID Recipe name in meta-debian layer Debian s source package name Debian package version number Source URI represents where the source code fetched License information 44

Conclusions What is Shared Embedded Linux distribution Share the work of maintaining long-term support for an embedded distribution, by leveraging the work of the Debian project Metadata for building embedded Linux systems using Debian source packages Implemented as an independent layer of OpenEmbedded-Core Deby is intended to provide Wide embedded CPU support Stability Long-term support Fully customizable Linux 45

Conclusions Several new features Package management dpkg / apt Dynamically install/upgrade/uninstall packages at the run-time Tag based source code fetch and build Reproduce an old release image by setting GIT_REBUILD_TAG Summary generation Automatically generate summary information of rootfs and SDK 46

Current development status Debian version Yocto Project version Kernel BSP init manager 8 jessie (the latest stable) 2.0 jethro (stable) 2.2 morty (development) 4.4 LTS 4.1 LTSI QEMU: x86 (32bit, 64bit), ARM, PowerPC, MIPS VMware Player BeagleBoard PandaBoard MinnowBoard Raspberry Pi 1/2 Intel Edison board busybox, systemd Packages Approx. 500 47

Future works Keep following updates of poky and Debian Yocto Project 2.2 will be released soon (Oct. 28, 2016) Support more embedded boards Improve build time for upgrading target images Related work (Binary package based approaches) Isar ( https://github.com/ilbers/isar ) ELBE ( http://elbe-rfs.org/ ) Smart Package Manager ( https://github.com/ubinux/smart2 ) Efficient recipe creation Add a (semi-)automated recipe generator from debian/rules Integrate with LTSI test environment (Fuego) 48

Please give us feedback E-mail yoshitake.kobayashi@toshiba.co.jp kazuhiro3.hayashi@toshiba.co.jp Repository https://github.com/meta-debian/meta-debian.git 49

Questions? 50