Skip to content

Two-stage initrd drops custom OEM content from appended initrds #2023

@boebu

Description

@boebu

Description

With the introduction of the minimal initrd / two-stage initrd process in Flatcar (see flatcar/bootengine#110), custom OEM content provided via an additional initrd is no longer propagated into the full (stage-2) initrd. This breaks the documented workflow for supplying a custom OEM via initrd extension (https://www.flatcar.org/docs/latest/installing/bare-metal/booting-with-pxe/#adding-a-custom-oem)

Previously, additional initrds appended during PXE boot were merged and their contents (e.g., /usr/share/oem) were available to Ignition. After the minimal-init change, the additional initrd contents are not preserved when switching from stage-1 to stage-2.

Impact

Providing custom OEM content via initrd extension is no longer possible.

We rely on this mechanism to supply per-machine Ignition configurations when booting stateless bare-metal systems. In our environment, using ignition.config.url is not an option due to security constraints (no external config fetch allowed).

As a result, existing PXE-based provisioning workflows that depend on custom initrd overlays no longer function.

Environment and Steps to Reproduce

  1. Boot the Flatcar PXE image.
  2. Append a custom initrd containing /usr/share/oem/config.ign, as described in:
    https://www.flatcar.org/docs/latest/installing/bare-metal/booting-with-pxe/#adding-a-custom-oem
  3. After boot, check: ls -la /usr/share/oem
  4. Ignition does not process the supplied config.

Expected behavior

The introduction of the minimal-init / two-stage initrd process should not break the documented mechanism for supplying custom OEM content via additional initrds.

Additional information

I experimented with placing the custom files under /oem instead of /usr/share/oem, based on the bind-mount logic in minimal-init
However, this approach does not work with the current dracut implementation, and the contents still do not survive into stage-2.

A quick fix would be to cp -rp /usr/share/oem /realinit/usr/share to avoid breaking any existing /usr/share/oem overlays with the 2-stage initrd process (https://github.com/flatcar/bootengine/blob/7d9895ce55617b18a78294975197975ac17b5bc3/minimal-init#L193-L196)

Metadata

Metadata

Assignees

Labels

channel/alphaIssue concerns the Alpha channel.channel/betaIssue concerns the Beta channel.kind/bugSomething isn't working

Type

Projects

Status

📝 Needs Triage

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions