From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6451845424769662976 X-Received: by 10.101.86.13 with SMTP id l13mr2399094pgs.32.1502187323741; Tue, 08 Aug 2017 03:15:23 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 10.36.29.85 with SMTP id 82ls7218017itj.21.canary-gmail; Tue, 08 Aug 2017 03:15:23 -0700 (PDT) X-Received: by 10.13.226.14 with SMTP id l14mr2473770ywe.50.1502187323467; Tue, 08 Aug 2017 03:15:23 -0700 (PDT) Received: by 10.55.168.80 with SMTP id r77msqke; Tue, 8 Aug 2017 03:06:18 -0700 (PDT) X-Received: by 10.46.5.9 with SMTP id 9mr438307ljf.28.1502186778466; Tue, 08 Aug 2017 03:06:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1502186778; cv=none; d=google.com; s=arc-20160816; b=P706ahpZ9CEl+iMTLZjKhHgTnVMuDlwFUVAuxiQi5Y85xRJMOruS12oHM98swfvjC7 xxhNun1OilEhl2lGsPGeOqg68pDJwZ2YPy7iKJcw4nuRmW7Oo90xr4tghil4Hqc3Fm0B FomOF6UlwTubCGfJyCwoVpWih+mcRQrioQYC31xbdj4HTlxrCWoKH5/UksNA+INkWkiu nF7hCiCtKtYfAWWjzJoCxosYb2GFemftCJ/XkozPI0BOQ4Zf2wSHJ27gz6gttf9rxMhL B4OCMWgWxIin86IGGszi1Y1Ug4es22NPpBR+m6jE/VC5FmRJEeOruvsBS31mMYcaro6s 6fQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:arc-authentication-results; bh=xjdJzLHsmpxajYw5gsBBQNvtyp743BRgoAJhX6azvmA=; b=fPblRVYske916qT3x6wcahr0LK8NObtgE+VgkRqSvP9AWcGJLTXCr/IrpLhOi/JUhz 8YL62eykf/u+4moG2Yhu0F0KGaTVGwezyK7LpSrg0E3vCCBJ0ASqquzBshXDcOTRP9OF cEHurwv/UkzYllpLLCnjR8zANePw4K1azX7uAZouDlpcFBeqgJco7yg9VRaAK/y1GMRg dh4cw/RG1FLigmgd1k2jsETp3tm7W3YpyxPH/FdrN3Hu50W1LZFOaD1SH18+K1QYh46L vQmeiFNlJ/qhJRP6nmHFTTTM3UrNipGBB3OJ0hmgYqZ9eQp2wsvr23TbJOO1xsYhBqqk OU+g== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: best guess record for domain of asmirnov@ilbers.de designates 85.214.62.211 as permitted sender) smtp.mailfrom=asmirnov@ilbers.de Return-Path: Received: from aqmola.ilbers.de (aqmola.ilbers.de. [85.214.62.211]) by gmr-mx.google.com with ESMTPS id 187si387652wmj.0.2017.08.08.03.06.18 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 Aug 2017 03:06:18 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of asmirnov@ilbers.de designates 85.214.62.211 as permitted sender) client-ip=85.214.62.211; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: best guess record for domain of asmirnov@ilbers.de designates 85.214.62.211 as permitted sender) smtp.mailfrom=asmirnov@ilbers.de Received: from localhost.localdomain ([188.227.110.165]) (authenticated bits=0) by aqmola.ilbers.de (8.14.4/8.14.4/Debian-4+deb7u1) with ESMTP id v78A68EP021448 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 8 Aug 2017 12:06:10 +0200 From: Alexander Smirnov To: isar-users@googlegroups.com Cc: Alexander Smirnov Subject: [PATCH] doc: Add technical overview Date: Tue, 8 Aug 2017 13:05:59 +0300 Message-Id: <20170808100559.19682-1-asmirnov@ilbers.de> X-Mailer: git-send-email 2.9.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-TUID: yJzA6jJG+lAD Add initial Isar technical overview. Signed-off-by: Alexander Smirnov --- doc/technical_overview.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 doc/technical_overview.md diff --git a/doc/technical_overview.md b/doc/technical_overview.md new file mode 100644 index 0000000..f65fc08 --- /dev/null +++ b/doc/technical_overview.md @@ -0,0 +1,110 @@ +# 1 Introduction + +Isar can be shortly described as a set of bitbake recipes that implement main build system logic. To simplify overall Isar understanding, this document is split into two main parts: + - Isar logical components + - Isar internal processes + +# 2 Isar Logical Components + +In this chapter the most important Isar components are considered in details. In this text component doesn't especially mean some self-contained single entity of something, it's just an attempt to split Isar internals by various criteria. + +### 2.1 Bitbake and Recipes + +All the processes in Isar are started by bitbake, so it manages general build executing process. Recipes in Isar can be split in two categories: + + - System recipes and classes: they are responsible for setting up Debian-like infrastructure, manages Debian tools execution for package building and installation, generation root file system images + - User recipes: custom user applications, that should be builе from sources + +There are two types of dependencies in Isar: + - Dependency between bitbake recipes + - Dependencies in Debian filesystem + +**NOTE:** Isar doesn't manage dependencies in Debian file systems. User can only list specific Debian dependencies in recipe, so they eventually will be passed to apt-get or multistrap. Dependency installation is managed by Debian tools. + +### 2.2 Stamps + +Each task managed by bitbake uses stamp to notify that it has been completed. Due to Isar supports various Debian distributions and parallel builds for multiple machines and architectures, the stamps for tasks use special suffixes that include: + - Debian distro name + - Architecture + - Machine + +Typical example, when Isar builds the following configurations: + - Debian Jessie, amd64 + - Debian Jessie, i386 + - Debian Stretch, i386 + +In this case there will be 3 different buildchroots, so standard hello demo application should be processed 3 times for each environment. Three different sets of stamps should be used for correct bitbake operating. + +### 2.3 Buildchroot + +One of the key aspect of Debian philosophy claims the fact, that everything in Debian should be built within Debian environment. Moreover native compilation is more preferable than cross-compilation. To follow this rules, Isar introduces the new component - buildchroot. Bulidchroot is typical Debian filesystem that is created using standard Debian tools: multistrap, apt. The source of packages can be either official Debian repositories or custom repositories created by user. + +Buildchroot lifecycle can be described as following: + - Buildchroot has initial configuration file which is passed to multistrap tool. This configuration file is generated by bitbake recipe from patterns and values defined by user. Based on this configuration file, multistrap generates initial filesystem. + - During building custom Debian package, list of its build dependencies is installed to buildchroot. + - When package has been built, it's installed to current buildchroot to satisfy further packages build dependencies. + +### 2.4 Target Root Filesystem + +Target filesystem is quite similar to buildchroot. The only difference is that it doesn't have development packages installed. + +Target filesystem lifecycle can be described as following: + - Target filesystem has initial configuration file which is passed to multistrap tool. This configuration file is generated by bitbake recipe from patterns and values defined by user. Based on this configuration file, multistrap generates initial filesystem. + - According to the list of custom packages in bitbake recipes, the initial filesystem will be populated by successfully built packages. + +# 3 Isar Internal Processes + +### 3.1 General Overview + +Whole Isar build process can be split into the following steps: + - Generation of initial buildchroots for each configuration (Debian distro, machine and architecture) requested by user. + - Generation of initial target filesystems for each configuration. + - Building custom packages. + - Populate target filesystems. + - Generate bootable images. + +All these steps are described in details below. + +### 3.2 Initial Buildchroot Generation + +As mentioned above, initial buildchroot is generated using multistrap. The bitbake recipe which is responsible for buildchroot can be found here: `meta/recipes-devtools/buildchroot/buildchroot.bb` + +This recipe implementes `do_build` task which performs the following: +1. Generates multistrap config from template: `meta/recipes-devtools/buildchroot/files/multistrap.conf.in` +2. Install pre/post scripts for multistrap: `meta/recipes-devtools/buildchroot/files/configscript.sh` and `meta/recipes-devtools/buildchroot/files/setup.sh` +3. Run multistrap +4. Install script for building custom Debian packages: `meta/recipes-devtools/buildchroot/files/build.sh` + +The single stamp is created for each user buildchroot configuration. + +### 3.3 Initial Target Filesystem Generation + +Initial target filesystem generation process is very similar to buildchroot creating, the difference is only in initial packages list. + +Target image recipes are the part of Isar core. There is a sample of typical Isar image that can be customized according to the user requirements: `meta-isar/recipes-core/images/isar-image-base.bb` +Like for buildchroot, the multistrap configuration files for image can be found here: `meta-isar/recipes-core/images/files`, and it implements `do_build` task. + +### 3.4 Building Custom Packages + +Isar provides possibility to build Debian packages from sources. This features works with Debian-like source packages, i.e. the source code tree should contain debian folder. The build process is implemented in `meta/classes/dpkg.bbclass` and consists from the following steps: +1. Task `do_fetch`: fetch source code from external link +2. Task `do_unpack`: unpack source code to `${BUILDCHROOT_DIR}/home/build/${PN}` +3. Task `do_build`: switch to buildchroot using chroot command and run `build.sh` script. The `build.sh` script performs the following: + 1. Go to `/home/build/${PN}` + 2. Get list of dependencies from debian/control and install them using apt. + 3. Run dpkg-buildpackage +4. Task `do_install`: install successfully built packages `${BUILDCHROOT_DIR}/home/build/${PN}/*.deb` to deploy directory `${DEPLOY_DIR_DEB}` + +### 3.5 Populate Target Filesystem + +Each target image can be extended by custom packages listed in IMAGE_INSTALL variable. Task `do_populate` performs the following: +1. Parse IMAGE_INSTALL variable +2. Find respective packages in `${DEPLOY_DIR_DEB}` +3. Copy them to deb folder in dedicated target filesystem +4. Execute dpkg command in chroot for all the copied packages + +### 3.6 Generate Bootable Image + +This process contains the following steps: +1. Task `do_ext4_image`: target filesystem is packed to extfs image +2. wic tool generates bootable image for dedicated platform -- 2.1.4