<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Developer Guides on Flatcar Container Linux</title>
    <link>/docs/latest/reference/developer-guides/</link>
    <description>Recent content in Developer Guides on Flatcar Container Linux</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <copyright>Copyright © The Flatcar Project Contributors.

Copyright © Flatcar a Series of LF Projects, LLC.

For website terms of use, trademark policy and other project policies please see &lt;a href=&#34;https://lfprojects.org/policies/&#34;&gt;lfprojects.org/policies&lt;/a&gt;.
</copyright>
    <atom:link href="/docs/latest/reference/developer-guides/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Building custom kernel modules</title>
      <link>/docs/latest/reference/developer-guides/kernel-modules/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/latest/reference/developer-guides/kernel-modules/</guid>
      <description>&lt;h2 id=&#34;create-a-writable-overlay&#34;&gt;Create a writable overlay&lt;/h2&gt;&#xA;&lt;p&gt;The kernel modules directory &lt;code&gt;/usr/lib/modules&lt;/code&gt; is read-only on Flatcar Container Linux. A writable overlay can be mounted over it to allow installing new modules.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; On older releases - 3115.0.0 and before, published before April 2022 - &lt;code&gt;/usr/lib64/modules&lt;/code&gt; was used instead.&#xA;To build for these releases, please use &lt;code&gt;/usr/lib64/modules&lt;/code&gt; instead of &lt;code&gt;/usr/lib/modules&lt;/code&gt; (but ideally, update to a more recent version).&lt;/p&gt;&#xA;&lt;h3 id=&#34;local-test-environment&#34;&gt;Local test environment&lt;/h3&gt;&#xA;&lt;p&gt;To test the steps below in a local QEmu instance, you&amp;rsquo;ll need to add extra storage to that instance.&#xA;The default 6GB rootfs won&amp;rsquo;t suffice as the devcontainer itself is ~6GB (uncompressed; compressed it&amp;rsquo;s ~480MB).&#xA;The simplest way to do this is to forward the local host directory to qemu via 9p.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building production images</title>
      <link>/docs/latest/reference/developer-guides/sdk-building-production-images/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/latest/reference/developer-guides/sdk-building-production-images/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This guide discusses automating the OS build process and is aimed at audiences comfortable with producing, testing, and distributing their very own Flatcar releases. For this purpose we&amp;rsquo;ll have a closer look at the CI automation stubs provided in the &#xA;&#xA;&#xA;&lt;a href=&#34;https://github.com/flatcar/scripts/tree/main/ci-automation&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;scripts repository&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&lt;p&gt;It is assumed that readers are familiar with the &#xA;&#xA;&#xA;&lt;a href=&#34;/docs/latest/reference/developer-guides/sdk-modifying-flatcar/&#34;&gt;SDK&lt;/a&gt;&#xA; and the general build process outlined in the &#xA;&#xA;&#xA;&lt;a href=&#34;https://github.com/flatcar/scripts/tree/main/ci-automation&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CI automation&lt;/a&gt;&#xA;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;stabilisation-process-and-versioning&#34;&gt;Stabilisation process and versioning&lt;/h2&gt;&#xA;&lt;p&gt;The Flatcar OS version number follows the pattern MMMM.m.p[ppp] - &amp;ldquo;M&amp;rdquo; being the major number, &amp;ldquo;m&amp;rdquo; the minor, and &amp;ldquo;p&amp;rdquo; the patch level.&#xA;Specifically:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flatcar Container Linux disk layout</title>
      <link>/docs/latest/reference/developer-guides/sdk-disk-partitions/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/latest/reference/developer-guides/sdk-disk-partitions/</guid>
      <description>&lt;p&gt;Flatcar Container Linux is designed to be reliably updated via a continuous stream of updates. The operating system has 9 different disk partitions, utilizing a subset of those to make each update safe and enable a roll-back to a previous version if anything goes wrong.&lt;/p&gt;&#xA;&lt;h2 id=&#34;partition-table&#34;&gt;Partition table&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;Number&lt;/th&gt;&#xA;          &lt;th&gt;Label&lt;/th&gt;&#xA;          &lt;th&gt;Description&lt;/th&gt;&#xA;          &lt;th&gt;Partition Type&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td&gt;EFI-SYSTEM&lt;/td&gt;&#xA;          &lt;td&gt;Contains the bootloader&lt;/td&gt;&#xA;          &lt;td&gt;FAT32&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td&gt;BIOS-BOOT&lt;/td&gt;&#xA;          &lt;td&gt;Contains the second stages of GRUB for use when booting from BIOS&lt;/td&gt;&#xA;          &lt;td&gt;grub core.img&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td&gt;USR-A&lt;/td&gt;&#xA;          &lt;td&gt;One of two active/passive partitions holding Flatcar Container Linux&lt;/td&gt;&#xA;          &lt;td&gt;EXT2&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;4&lt;/td&gt;&#xA;          &lt;td&gt;USR-B&lt;/td&gt;&#xA;          &lt;td&gt;One of two active/passive partitions holding Flatcar Container Linux&lt;/td&gt;&#xA;          &lt;td&gt;(empty on first boot)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;5&lt;/td&gt;&#xA;          &lt;td&gt;ROOT-C&lt;/td&gt;&#xA;          &lt;td&gt;This partition is reserved for future use&lt;/td&gt;&#xA;          &lt;td&gt;(none)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;6&lt;/td&gt;&#xA;          &lt;td&gt;OEM&lt;/td&gt;&#xA;          &lt;td&gt;Stores configuration data specific to an &#xA;&#xA;&#xA;&lt;a href=&#34;/docs/latest/installing/community-platforms/notes-for-distributors/&#34;&gt;OEM platform&lt;/a&gt;&#xA;&lt;/td&gt;&#xA;          &lt;td&gt;BTRFS&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;7&lt;/td&gt;&#xA;          &lt;td&gt;OEM-CONFIG&lt;/td&gt;&#xA;          &lt;td&gt;Optional storage for an OEM&lt;/td&gt;&#xA;          &lt;td&gt;(defined by OEM)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;8&lt;/td&gt;&#xA;          &lt;td&gt;(unused)&lt;/td&gt;&#xA;          &lt;td&gt;This partition is reserved for future use&lt;/td&gt;&#xA;          &lt;td&gt;(none)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;9&lt;/td&gt;&#xA;          &lt;td&gt;ROOT&lt;/td&gt;&#xA;          &lt;td&gt;Stateful partition for storing persistent data&lt;/td&gt;&#xA;          &lt;td&gt;EXT4, BTRFS, or XFS&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;For more information, &#xA;&#xA;&#xA;&lt;a href=&#34;https://www.chromium.org/chromium-os/developer-library/reference/device/disk-format/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;read more about the disk layout&lt;/a&gt;&#xA; used by Chromium and ChromeOS, which inspired the layout used by Flatcar Container Linux.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Guide to building custom Flatcar images from source</title>
      <link>/docs/latest/reference/developer-guides/sdk-modifying-flatcar/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/latest/reference/developer-guides/sdk-modifying-flatcar/</guid>
      <description>&lt;p&gt;The guides in this document aim to enable engineers to update, and to extend, packages in both the Flatcar OS image as well as the SDK, to suit their own needs.&#xA;Overarching goal of this collection of how-tos is to help you to scratch your own itch, to set you up to play with Flatcar.&#xA;We’ll cover everything you need to make the changes you want, and to produce an image for the runtime environment(s) you want to use Flatcar in (e.g. AWS, qemu, Packet, etc).&#xA;By the end of the guide you will build a developer image that you can run under qemu and have tools for making changes to the OS image like adding or removing packages, or shipping custom kernels.&#xA;Note that we chose this guide&amp;rsquo;s &amp;ldquo;qemu&amp;rdquo; image target solely to enable local testing; the same process can be used to produce images for any and all targets (cloud providers etc.) supported by Flatcar.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SDK bootstrap process</title>
      <link>/docs/latest/reference/developer-guides/sdk-bootstrapping/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/latest/reference/developer-guides/sdk-bootstrapping/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This document aims to provide a high-level overview of the SDK build (&amp;ldquo;bootstrap&amp;rdquo;) process.&lt;/p&gt;&#xA;&lt;p&gt;SDK bootstrapping is implemented in &lt;code&gt;bootstrap_sdk&lt;/code&gt; and happens in 4 stages.  Gentoo&amp;rsquo;s catalyst is used to run each of the stages in an isolated chroot. Each stage requires a &amp;ldquo;seed&amp;rdquo; tarball which contains the root filesystem used by that stage. The first stage will use an existing SDK as its seed (i.e. root FS); stages 2 to 4 will use the output of the previous stage as its seed (root FS).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tips and tricks</title>
      <link>/docs/latest/reference/developer-guides/sdk-tips-and-tricks/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/latest/reference/developer-guides/sdk-tips-and-tricks/</guid>
      <description>&lt;h2 id=&#34;finding-all-open-pull-requests-and-issues&#34;&gt;Finding all open pull requests and issues&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&#xA;&#xA;&lt;a href=&#34;https://github.com/issues?user=flatcar-linux&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Flatcar Container Linux Issues&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&#xA;&#xA;&lt;a href=&#34;https://github.com/pulls?user=flatcar-linux&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Flatcar Container Linux Pull Requests&lt;/a&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;searching-all-repo-code&#34;&gt;Searching all repo code&lt;/h2&gt;&#xA;&lt;p&gt;Using &lt;code&gt;repo grep&lt;/code&gt; you can search across all of the Git repos at once:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;repo grep CONFIG_EXTRA_FIRMWARE&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note: this could take some time.&lt;/p&gt;&#xA;&lt;h3 id=&#34;base-system-dependency-graph&#34;&gt;Base system dependency graph&lt;/h3&gt;&#xA;&lt;p&gt;Get a view into what the base system will contain and why it will contain those things with the emerge tree view:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;equery-amd64-usr depgraph --depth 1 coreos-base/coreos-dev&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Get a tree view of the SDK dependencies:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Release guide</title>
      <link>/docs/latest/reference/developer-guides/release-guide/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/docs/latest/reference/developer-guides/release-guide/</guid>
      <description>&lt;p&gt;This guide covers the complete Flatcar Container Linux release process from preparation through publication.&#xA;It is intended for Flatcar maintainers and contributors who need to prepare and execute official releases.&lt;/p&gt;&#xA;&lt;h2 id=&#34;quick-reference&#34;&gt;Quick Reference&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Key Dependencies:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;WireGuard access to Jenkins&lt;/li&gt;&#xA;&lt;li&gt;HSM key for update payload signing&lt;/li&gt;&#xA;&lt;li&gt;GitHub repository access (flatcar-linux, flatcar-nebraska)&lt;/li&gt;&#xA;&lt;li&gt;GPG key in Jenkins keyring&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Critical Path:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;mermaid&#34;&gt;&#xA;  flowchart LR&#xA;    A[Tag Preparation] --&amp;gt; B[Jenkins Build]&#xA;    B --&amp;gt; C[Testing]&#xA;    C --&amp;gt; D[Go/No-go Meeting]&#xA;    D --&amp;gt; E[Release Job]&#xA;    E --&amp;gt; F[Artifact Distribution]&#xA;    E --&amp;gt; G[Update Payloads]&#xA;    F --&amp;gt; H[Nebraska Promotion]&#xA;    G --&amp;gt; H&#xA;    H --&amp;gt; I[Public Announcements]&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;&#xA;&lt;p&gt;Ensure the following requirements are satisfied before starting the release process:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
