image build and composition scripts for Flatcar Container Linux
Go to file
Flatcar Buildbot fae449fadf sys-kernel/coreos-sources: Update from 6.6.100 to 6.6.101
Signed-off-by: Flatcar Buildbot <buildbot@flatcar-linux.org>
2025-08-02 07:06:08 +00:00
.github/workflows .github: sign commits from common scripts 2025-07-28 15:36:47 +02:00
build_library set_lsb_release: Update OS_CODENAME to LTS 2024 2025-01-17 14:23:55 +05:30
changelog sys-kernel/coreos-sources: Update from 6.6.100 to 6.6.101 2025-08-02 07:06:08 +00:00
ci-automation ci_automation_common.sh: use long option name 2025-07-25 09:44:01 +02:00
contrib Use new website flatcar.org 2022-09-14 14:32:49 +02:00
data sdk: add download_payloads 2024-01-23 17:09:49 +01:00
jenkins Migrate release AMI gc to ci-automation 2024-04-24 16:52:11 +09:00
lib/shflags Move cros_vm_constants to build_library 2021-08-27 14:20:54 +02:00
oem 2345.0.0 2019-12-04 14:59:11 +01:00
sdk_container sys-kernel/coreos-sources: Update from 6.6.100 to 6.6.101 2025-08-02 07:06:08 +00:00
sdk_lib Fix up SDK repo configuration to use new coreos-overlay name on startup 2024-07-15 14:28:04 +01:00
signing Drop coreos-devel/fero-client and any usage of it 2024-06-17 10:44:40 +01:00
workon Drop cros-workon.eclass and replace with git-r3.eclass 2024-06-21 10:47:50 +01:00
.dockerignore sdk-container: add scripts for containerised SDK 2021-11-26 17:54:43 +01:00
.gitignore .gitignore: Ignore ci-cleanup.sh 2023-07-17 17:08:26 +02:00
bash_completion Drop cros-workon.eclass and replace with git-r3.eclass 2024-06-21 10:47:50 +01:00
boot_nspawn
bootstrap_sdk Drop obsolete comments about how Catalyst stage 1 is built 2024-08-01 13:31:57 +01:00
bootstrap_sdk_container bootstrap_sdk_container: Fix a check for an official build 2022-09-08 14:57:21 +02:00
build_dev_binpkgs build_dev_binpkgs: Limit scope of ROOT env var 2023-12-18 17:33:07 +01:00
build_image build_image,ci-automation: Add app-containers/docker-buildx to docker-flatcar sysext 2024-09-02 14:05:56 +02:00
build_packages Drop cros-workon.eclass and replace with git-r3.eclass 2024-06-21 10:47:50 +01:00
build_sdk_container_image build_sdk_container_image: force removal of running container 2022-01-06 21:28:30 +01:00
build_sysext build_sysext: override FLATCAR_VERSION only for non-official builds 2024-09-04 16:12:15 +02:00
build_toolchains Upgrade to Catalyst 4 2024-07-15 14:27:59 +01:00
CHANGELOG.md changelog: Add placeholder directory to add the changelogs 2021-11-24 22:50:02 +05:30
checkout checkout: omit checking for tags in submodules 2022-01-10 15:23:25 +01:00
clean_loopback_devices
code-of-conduct.md Update code-of-conduct.md 2023-07-24 18:20:39 +02:00
common.sh common: Print debugging info along the backtrace 2023-11-29 13:15:13 +01:00
CONTRIBUTING.md
core_date 2317.0.1 2019-11-07 19:40:01 +01:00
core_dev_sign_update torcx: remove from scripts, use docker+containerd sysexts 2023-10-23 16:05:45 +02:00
core_pre_alpha 2317.0.1 2019-11-07 19:40:01 +01:00
core_roller_upload 2317.0.1 2019-11-07 19:40:01 +01:00
core_sign_update Drop coreos-devel/fero-client and any usage of it 2024-06-17 10:44:40 +01:00
DCO
find_overlay_dups *: add script to check for duplicate pkgs 2018-03-07 14:25:45 -08:00
flatcar_workon flatcar_workon: Simplify condition 2024-07-02 12:51:32 +02:00
generate_payload generate_payload: handle the downloading of releases 2024-01-23 17:09:49 +01:00
get_latest_image.sh
get_package_list
image_inject_bootchain 2345.0.0 2019-12-04 14:59:11 +01:00
image_set_group 2317.0.1 2019-11-07 19:40:01 +01:00
image_to_vm.sh Remove ACI image building bits 2024-04-03 16:18:56 +09:00
LICENSE ROADMAP: add initial overall CoreOS roadmap document 2015-04-30 16:58:53 -07:00
MAINTAINERS.md Sync maintainers file from flatcar/flatcar repository 2022-11-03 15:37:25 +01:00
NOTICE
PREFIX.md Apply suggestions from code review 2023-09-29 15:22:45 +02:00
prune_images prune_images: keep newer-than-latest builds 2015-11-24 13:40:09 -08:00
README.md scripts, CI, workflows: remove submodule handling (main) 2023-04-13 12:26:36 +02:00
rebuild_packages *: Make catalyst and emerge verbose by default 2023-02-16 13:57:05 +01:00
retag-for-jenkins scripts, CI, workflows: remove submodule handling (main) 2023-04-13 12:26:36 +02:00
run_local_tests.sh run_local_tests.sh: unquote tests var so lists and kola options can pass 2023-11-10 18:11:14 +01:00
run_sdk_container run_sdk_container: Allow mounting custom volumes into SDK container 2023-10-25 14:51:51 +02:00
set_official *: Expand short emerge flags and use bash arrays 2023-02-16 13:57:05 +01:00
set_shared_user_password.sh
set_version ci-automation + setup_board: publish and use binpkgs 2022-01-07 17:16:44 +01:00
settings.env settings / ci-automation: remove "binpkg" prefix 2022-01-11 09:56:21 +01:00
setup_board Upgrade to Catalyst 4 2024-07-15 14:27:59 +01:00
setup_prefix Flatcar SDK: add experimental prefix builds 2023-09-29 15:22:45 +02:00
tag_release 2317.0.1 2019-11-07 19:40:01 +01:00
test-nightly-tagging.sh test-nightly-tagging: new script for testing nightly tagging 2025-07-11 20:05:49 +02:00
update_chroot dev-lang/rust: Drop our custom package in favour of upstream Gentoo's 2024-08-15 16:54:11 +01:00
update_distfiles Fix distfiles mirror by writing to coreos as before, not coreos-overlay 2024-07-23 14:20:30 +01:00
update_ebuilds update_ebuilds: Fix support for rsync of eclass 2024-03-11 11:57:45 +00:00
update_metadata Upgrade to Catalyst 4 2024-07-15 14:27:59 +01:00
update_sdk_container_image pr-comment-build-dispatcher.yaml: dispatch SDK and OS image builds 2023-05-09 17:29:31 +02:00

Flatcar Container Linux SDK scripts

Welcome to the scripts repo, your starting place for most things here in the Flatcar Container Linux SDK. To get started you can find our documentation on the Flatcar docs website.

The SDK can be used to

  • Patch or update applications or libraries included in the Flatcar OS image
  • Add or remove applications and / or libraries
  • Modify the kernel configuration and add or remove kernel modules included with Flatcar
  • Build OS images for a variety of targets (qemu, bare metal, AWS, Azure, VMWare, etc.)
  • And lastly, the SDK can be used to upgrade SDK packages and to build new SDKs

Using the scripts repository

The repository is meant to be the entry point for Flatcar builds and development. Ebuilds for all packages reside in one of 2 subdirectories - coreos-overlay and portage-stable:

scripts
   +--sdk_container
          +---------src
                     +--third_party
                             +------coreos-overlay
                             +------portage-stable

portage-stable is kept in alignment with upstream Gentoo and should not contain any modifications (with only minor, well-justified exceptions). Consider it a small sub-set of Gentoo.

coreos-overlay contains significantly modified or even entirely self-written ebuilds.

The scripts repository makes ample use of tags to mark releases. Sometimes, local and origin tags can diverge (e.g. when re-tagging something locally to test a build). Also, git pull and git fetch do not automatically pull new tags, so long-standing local sourcetrees may lack newer versions. To fetch and update all tags and to remove tags locally which have been deleted upstream, do

$ git pull --all --tags --prune --prune-tags

If upstream retagged (of if a tag was changed locally) the corresponding upstream tag will not be pulled so the local tag remains. In order to override local tags with upstream, run

$ git pull --all --tags --prune --prune-tags --force

Using the SDK container

We provide a containerised SDK via https://github.com/orgs/flatcar/packages. The container comes in 3 flavours:

  • Full SDK initialised with both architectures supported by Flatcar (amd64 and arm64). This is the largest container, it's about 8GB in size (~3 GB compressed).
  • AMD64 SDK initialised for building AMD64 OS images. About 6GB in size (2GB compressed).
  • ARM64 SDK initialised for building ARM64 OS images on AMD64 hosts. Also about 6GB in size. While work on a native ARM64 native SDK is ongoing, it's unfortunately not ready yet. If you want to help, patches are welcome!

The container can be run in one of two ways - "standalone", or integrated with the scripts repo:

  • Standalone mode will use no host volumes and will allow you to play with the SDK in a sandboxed throw-away environment. In standalone mode, you interface with Docker directly to use the SDK container.
  • Integrated mode will closely integrate with the scripts repo directory and bind-mount it as well as the portage-stable and coreos-overlay directories into the container. Integrated mode uses wrapper scripts to interact with the SDK container. This is the recommended way for developing patches for Flatcar.

Standalone mode

In standalone mode, the SDK is just another Docker container. Interaction with the container happens via use of docker directly. Use for experimenting and for throw-away work only, otherwise please use integrated mode (see below).

  • Check the list of available versions and pick a version to use. The SDK Major versions correspond to Flatcar Major release versions. List of images: https://github.com/orgs/flatcar/packages/container/package/flatcar-sdk-all For the purpose of this example we'll use version 3033.0.0.
  • Fetch the container image: docker pull ghcr.io/flatcar/flatcar-sdk-all:3033.0.0
  • Start the image in interactive (tty) mode: docker run -ti ghcr.io/flatcar/flatcar-sdk-all:3033.0.0 You are now inside the SDK container (the hostname will likely differ): sdk@f236fda982a4 ~/trunk/src/scripts $
  • Initialise the SDK in self-contained mode. This needs to be done once per container and will check out the scripts repository into the container. sdk@f236fda982a4 ../sdk_init_selfcontained.sh

You can now work with the SDK container.

Privileged mode when building images

In order to build OS images (via ./build_image and ./image_to_vm) the SDK tooling requires privileged access to /dev. This is necessary because the SDK currently employs loop devices to create and to partition OS images.

To start a container in privileged mode with /dev available use:

  • docker run -ti --privileged -v /dev:/dev ghcr.io/flatcar/flatcar-sdk-all:3033.0.0

Integrated mode

This is the preferred mode of working with the SDK. Interaction with the container happens via wrapper scripts from the scripts repository. Both the host's scripts repo as well as the ebuild paths (portage-stable and coreos-overlay) are made available in the container, allowing for work on these directly. The wrapper scripts will re-use existing containers instead of creating new ones to preserve your work in the container, enabling consistency.

To clone the scripts repo and pick a version:

  • Clone the scripts repo: git clone https://github.com/flatcar/scripts.git
  • Optionally, check out a release tag to base your work on
    • list releases (e.g. all Alpha releases): git tag -l alpha-*
    • check out the release version, e.g. 3033.0.0: git checkout 3033.0.0

To use the SDK container:

  • Fetch image and start the SDK container: ./run_sdk_container -t This will fetch the container image of the "scripts" repo's release version you checked out. The -t command line flag will allocate a TTY, which is preferred for interactive use. The command will put you into the SDK container: sdk@sdk-container ~/trunk/src/scripts $
  • Alternatively, you can run individual commands in the SDK container using ./run_sdk_container <command> (e.g. ./run_sdk_container ./build_packages).

Subsequent calls to ./run_sdk_container will re-use the container (as long as the local release version check-out the scripts repo does not change). Check out docker container ls --all and you'll see something like

CONTAINER ID   IMAGE                                            COMMAND                  CREATED       STATUS                         PORTS     NAMES
19ea3b6d00ad   ghcr.io/flatcar/flatcar-sdk-all:3033.0.0   "/bin/sh -c /home/sd…"   4 hours ago   Exited (0) About an hour ago             flatcar-sdk-all-3033.0.0_os-3033.0.0

Re-use of containers happens on a per-name basis. The above example's container name flatcar-sdk-all-3033.0.0_os-3033.0.0 is generated automatically. Using docker container rm the container can be discarded - a subsequent call to ./run_sdk_container will create a new one. Custom containers can be created by use of the -n <name> command line option; these will be re-used in subsequent calls to ./run_sdk_container when using the same <name>.

The local sourcetree can also be used with an entirely custom SDK container image. Users must ensure that the image is either fetch-able or present locally. The custom image can be specified using -C <custom-image>. This option is useful e.g. for building the local sourcetree with different SDK versions.

Check out ./run_sdk_container -h for more information on command line options.

Building a new SDK container

Building an SDK container is done using ./build_sdk_container_image <tarball>. The tarball input is the result of an SDK bootstrap (see below). Version information for both OS as well as for the SDK will be extracted from the tarball name. The version file will be updated accordingly before the SDK container is built. During the build, toolchain packages will be built and installed into the SDK container image. Both supported boards (amd64-usr and arm64-usr) will be initialised in the container image.

Bootstrapping a new SDK tarball using the SDK container

The script ./bootstrap_sdk_container bootstraps a new SDK tarball using an existing SDK container and seed tarball. Specifying the seed version as well as the designated new SDK version is required for this script.

Automation stubs for continuous integration

Script stubs for various build stages can be found in the ci-automation folder. These are helpful for gluing Flatcar Container Linux builds to a continuous integration system.