# kas - A Tool for Setting Up Yocto Projects Quickly

kas is a tool developed by Siemens that aims to simplify and speed up the process of setting up Yocto projects. It achieves this by:

* Cloning and checking out Yocto layers specified in a YAML configuration file
    
* Generating default `bblayers.conf` and `local.conf` files
    
* Running builds inside a Docker container to isolate the host system
    
* Initiating BitBake builds based on the configuration
    

The main advantage of kas is that it allows you to define all the necessary configurations for a Yocto project in a single YAML file. This includes:

```yaml
repos:
  poky:
    url: "https://git.yoctoproject.org/git/poky"
    refspec: "kirkstone" 
    layers:
      meta:
      meta-poky:
```

kas then takes care of cloning the layers, checking out the correct revisions, and generating the `bblayers.conf` file.

You can run kas using:

```bash
kas build your_config.yaml
```

The `checkout` command clones and checks out the layers, and the `build` command runs a BitBake build.

You can also define a custom layer that you can use to tailor to your needs:

```bash
repos:  
  meta-custom:
    path: sources/meta-custom
```

In this case you do not specify an `url` to fetch it from.

## Overview

Here is an example of a `kas` manifest from [meta-raspberrypi](https://github.com/agherzan/meta-raspberrypi):

```bash
header:
  version: 8

machine: raspberrypi4
distro: poky
target:
  - core-image-base

repos:
  meta-raspberry:

  poky:
    url: https://git.yoctoproject.org/git/poky
    path: layers/poky
    refspec: master
    layers:
      meta:
      meta-poky:
      meta-yocto-bsp:

  meta-openembedded:
    url: http://git.openembedded.org/meta-openembedded
    path: layers/meta-openembedded
    refspec: master
    layers:
      meta-oe:
      meta-python:
      meta-networking:
      meta-perl:

bblayers_conf_header:
  standard: |
    POKY_BBLAYERS_CONF_VERSION = "2"
    BBPATH = "${TOPDIR}"
    BBFILES ?= ""
local_conf_header:
  debug-tweaks: |
    EXTRA_IMAGE_FEATURES = "debug-tweaks"
```

This is the usual workflow that happens when you call:

`kas build config_file.yml`

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1693936145637/8437576c-3ae0-4d24-9fa5-566ad205d160.gif align="center")

Before this tool existed you would need to create shell scripts to do the configuration of `local.conf` where you would enable features depending on conditions that would need to be parsed with the use of `sed` or `awk`.

Inside the `local.conf` file you can easily point out the pieces that you have added with the configuration fragments that you inserted in your `config_file.yml`. For example we have a tag here called `debug-tweaks` let's check `local.conf` for the match:

```bash
# base
CONF_VERSION = "2"
PACKAGE_CLASSES = "package_ipk"
INIT_MANAGER = "systemd"

# debug-tweaks
EXTRA_IMAGE_FEATURES = " debug-tweaks"
```

In summary, kas allows you to:

* Define all Yocto project configurations in a single YAML file
    
* Quickly setup new Yocto projects by running a single command
    
* Avoid manual tasks like cloning layers and generating `bblayers.conf`
    

However, kas does not currently validate the integrity of fetched repositories, so you need to ensure you are pulling from trusted sources.

#### Be sure to check the project documentation for more details regarding how to setup things. -&gt; [Project Docs](https://kas.readthedocs.io/en/0.19.0/userguide.html#project-configuration)

### References

[https://github.com/siemens/kas](https://github.com/siemens/kas)

[https://blog.3mdeb.com/2019/2019-02-07-kas/](https://blog.3mdeb.com/2019/2019-02-07-kas/)

[https://hub.mender.io/t/using-kas-to-reproduce-your-yocto-builds/6020](https://hub.mender.io/t/using-kas-to-reproduce-your-yocto-builds/6020)
