You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: share LF_KICKSTART_VERSION across all cfg files and quiet restorecon
* Extend the LF_KICKSTART_VERSION stamp (format YYYYMMDDNN) to
lf-debian.cfg and lf-ubuntu.cfg, so all three installer configs
share the same repo-wide build marker. Debian logs it via
logger(1) in preseed/early_command; Ubuntu logs it via logger in
autoinstall early-commands. Both write /root/lf-install-version
on the installed system, mirroring the RHEL behaviour. RHEL now
also writes the same /root/lf-install-version marker directly in
the generated dynamic.ks %post. Bump stamp from 2026041501 to
2026041502.
* CONTRIBUTING "Versioning the Kickstart File" section now covers
all three cfg files and documents the per-file locations where
the literal must be kept in lockstep.
* README: each of the RHEL / Debian / Ubuntu "Log Files" sections
now documents /root/lf-install-version as the canonical
cross-distro fleet identification, plus a grep hint for the
installer-time log line that carries the same stamp.
* lf-rhel.cfg: exclude /boot/efi from `fixfiles -R -a restore` via
the `-e` flag. The EFI system partition is vfat and cannot carry
SELinux contexts, so every install was producing a stream of
harmless but alarming "Operation not supported" messages on
/boot/efi/EFI/... The functional `|| true` safety net stays in
place.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,12 +10,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
10
10
11
11
### Added
12
12
13
-
*`lf-rhel.cfg`: Add a running `LF_KICKSTART_VERSION` build stamp (format `YYYYMMDDNN`) declared at the top of `%pre`. The stamp is echoed during install (ends up in `/tmp/kickstart.install.pre.log`, `/var/log/anaconda/anaconda.log`, and the `%post``ks-script-*.log`) and embedded as a comment at the top of the rendered `dynamic.ks`, which is archived as `/root/dynamic.ks` on the installed system. This lets admins trace any installed host back to the exact `lf-rhel.cfg` variant that built it. CONTRIBUTING documents when and how to bump the stamp; the README documents where to read it on an installed system
13
+
* Add a running `LF_KICKSTART_VERSION` build stamp (format `YYYYMMDDNN`) shared across `lf-rhel.cfg`, `lf-debian.cfg` and `lf-ubuntu.cfg`. The stamp is logged at install time (to `/tmp/kickstart.install.pre.log` and `/var/log/anaconda/ks-script-*.log` on RHEL, to `/var/log/installer/syslog` on Debian, and to `/var/log/installer/installer-journal.txt` on Ubuntu) and written to `/root/lf-install-version` on every installed host — a single distro-independent fleet marker that lets admins trace any installed host back to the exact installer build that produced it. On RHEL the stamp is additionally embedded as a comment at the top of the rendered `dynamic.ks` (archived as `/root/dynamic.ks`). CONTRIBUTING documents when and how to bump the stamp; the README documents where to read it on an installed system
14
14
15
15
### Fixed
16
16
17
17
*`lf-rhel.cfg`: Fix `grub2-mkconfig` being silently skipped on every target version. The `%pre` script was built via an unquoted heredoc (`cat << EOT`), which let bash eat every `"$var"` and `$(cmd)` reference embedded in the generated shell code before the Python helper was even written. As a result the grub finder always ran with empty variables and printed "Could not find a grub.cfg in /boot" — hiding the fact that `/etc/default/grub` edits had not been regenerated since the first release. The heredoc is now quoted (`cat << 'EOT'`), the finder targets `/boot/grub2/grub.cfg` directly (which is the right target on RHEL/Rocky 8/9/10 for both BIOS and UEFI — on 9+ UEFI the `/boot/efi/EFI/<vendor>/grub.cfg` is only a thin wrapper that `configfile`s `/boot/grub2/grub.cfg`), and the console-ordering change in `/etc/default/grub` is actually reflected in the generated `grub.cfg`
18
18
*`lf-rhel.cfg`: Fix post-install failure on RHEL 10 / Rocky 10 cloud installs. The previous `%post --nochroot` block copied `dynamic.ks` and `70-install-ssh-keys.ks` into `/root` of the installed system for auditing and kept breaking across Anaconda versions (first `/proc/mounts` parsing, then mount-point layout). The archival is now performed by a chrooted `%post` hook generated in `%pre` under `/usr/share/anaconda/post-scripts/`, with the content embedded via base64-decoded heredoc. The same kickstart now works on RHEL/Rocky 8, 9 and 10
19
+
*`lf-rhel.cfg`: Exclude `/boot/efi` from `fixfiles -R -a restore` via the `-e` flag. The EFI system partition is vfat and cannot carry SELinux contexts, so previously every install produced a stream of harmless but alarming-looking `Could not set context for /boot/efi/EFI/...: Operation not supported` messages in the `%post` log. The functional `|| true` safety net is still in place
19
20
*`lf-rhel.cfg`: Fix `sed: can't read /etc/systemd/logind.conf` on RHEL/Rocky 10 cloud installs. Recent systemd versions no longer ship `logind.conf` under `/etc/`; the `NAutoVTs=0` override is now applied via a drop-in at `/etc/systemd/logind.conf.d/10-lf-no-auto-vts.conf`, which works on all supported systemd versions
20
21
*`lf-rhel.cfg`: The "Only touch" comment in the archived `dynamic.ks` now renders the actual target disk path (e.g. `# Only touch vda.`) instead of a literal `$lfdisk`. The Python code was using a shell-style variable reference inside a plain string where a Python format substitution was needed
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+12-4Lines changed: 12 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -73,15 +73,23 @@ Python packages installed via `pip` inside workflows follow a two-tier policy:
73
73
74
74
### Versioning the Kickstart File
75
75
76
-
`lf-rhel.cfg` carries a running build stamp in the shell variable `LF_KICKSTART_VERSION` at the top of the `%pre` section. The value is logged at install time (to `/tmp/kickstart.install.pre.log`, the Anaconda logs, and the `%post``ks-script-*.log`) and embedded as a comment in the `dynamic.ks` archived under `/root/dynamic.ks` on the installed system, so the origin of any installed host can be traced back to a specific build.
76
+
All three installer config files (`lf-rhel.cfg`, `lf-debian.cfg`, `lf-ubuntu.cfg`) carry a shared running build stamp under the name `LF_KICKSTART_VERSION`. The same stamp value applies to all three files at any given time — it is a repo-wide build marker, not a per-file version.
77
77
78
78
The format is `YYYYMMDDNN`, where `YYYYMMDD` is the build date and `NN` is a two-digit daily sequence number starting at `01`. Example: `2026041501` for the first build on 2026-04-15, `2026041502` for the second on the same day.
79
79
80
+
On every supported target, the stamp lands in two places: the installer-time logs and the file `/root/lf-install-version` on the installed system. The installer-time logs differ by target:
81
+
82
+
-`lf-rhel.cfg`: exported as a shell variable in `%pre`, echoed into `/tmp/kickstart.install.pre.log`, re-echoed by the generated `%post` (so it shows up in `/var/log/anaconda/ks-script-*.log`), and embedded as a comment in `/root/dynamic.ks`.
83
+
-`lf-debian.cfg`: logged via `logger(1)` in `d-i preseed/early_command`, which lands in `/var/log/syslog` during install and later in `/var/log/installer/syslog`.
84
+
-`lf-ubuntu.cfg`: logged via `logger(1)` in `early-commands`, which lands in the live installer journal and later in `/var/log/installer/installer-journal.txt`.
85
+
86
+
The stamp appears as a literal in multiple places within each of the three files (header comment, early/late commands, and for `lf-rhel.cfg` the `%pre` shell variable). All occurrences must be kept in lockstep when bumping — `grep -n LF_KICKSTART_VERSION lf-*.cfg` is a quick way to find them.
87
+
80
88
Rules:
81
89
82
-
- Bump `LF_KICKSTART_VERSION` in every commit that changes the effective content of `lf-rhel.cfg`(kickstart logic, embedded shell/Python, comments that end up in the generated output).
83
-
- Pure documentation commits (`README.md`, `CONTRIBUTING.md`, `CHANGELOG.md`) and commits that only touch `lf-debian.cfg` or `lf-ubuntu.cfg`do not bump the RHEL kickstart version.
84
-
- If multiple commits on the same day change `lf-rhel.cfg`, increment `NN` accordingly.
90
+
- Bump `LF_KICKSTART_VERSION` in every commit that changes the effective content of `lf-rhel.cfg`, `lf-debian.cfg` or `lf-ubuntu.cfg`(kickstart/preseed/autoinstall logic, embedded shell/Python, comments that end up in the generated output).
91
+
- Pure documentation commits (`README.md`, `CONTRIBUTING.md`, `CHANGELOG.md`) do not bump the version.
92
+
- If multiple content-changing commits happen on the same day, increment `NN` accordingly.
85
93
- Releases (as described in the `Changelog` section) also imply a version bump, because they are also content changes.
Copy file name to clipboardExpand all lines: README.md
+11-2Lines changed: 11 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -176,6 +176,7 @@ During and after an Anaconda install, the following log files are the fastest pa
176
176
177
177
*`/root/anaconda-ks.cfg`: Anaconda's generated copy of the effective kickstart. Not present on targets where `can_save_output_kickstart=False` (including Rocky 10 cloud).
178
178
*`/root/dynamic.ks`: The kickstart fragment Linuxfabrik archived on the installed system. The first comment line reads `# Linuxfabrik Kickstart version: YYYYMMDDNN`, which attributes the host to a specific `lf-rhel.cfg` build.
179
+
*`/root/lf-install-version`: Distro-independent fleet marker file containing just the `YYYYMMDDNN` build stamp. Same value for equivalent files on Debian and Ubuntu hosts, making `cat /root/lf-install-version` a uniform cross-distro identification across the fleet.
179
180
*`/root/original-ks.cfg`: Anaconda's verbatim copy of the `lf-rhel.cfg` served from the `inst.ks=` URL.
180
181
181
182
**For `cloud-init` problems on `lftype=cloud` and `lftype=cloud-cis` (after first boot):**
@@ -268,7 +269,11 @@ During and after a Debian Installer (d-i) preseed run, the following log files a
268
269
*`lsb-release`, `media-info`: Base distribution and installation media metadata.
269
270
*`partman`: Partition manager log, persisted from the install.
270
271
*`status`: `apt`/`dpkg` status of every package installed during the install phase.
271
-
*`syslog`: Main installer narrative for the whole install.
272
+
*`syslog`: Main installer narrative for the whole install. `grep 'Linuxfabrik Kickstart version' /var/log/installer/syslog` surfaces the `YYYYMMDDNN` build stamp logged by the preseed `early_command`.
273
+
274
+
**On the installed system, outside `/var/log/installer/`:**
275
+
276
+
*`/root/lf-install-version`: Distro-independent fleet marker file containing just the `YYYYMMDDNN` build stamp of the `lf-debian.cfg` variant that was applied during installation. Same value for equivalent files on RHEL and Ubuntu hosts, making `cat /root/lf-install-version` a uniform cross-distro identification across the fleet.
272
277
273
278
274
279
### References
@@ -342,9 +347,13 @@ During and after a subiquity autoinstall run, the following log files are the fa
342
347
*`autoinstall-user-data`: The autoinstall YAML subiquity consumed, persisted.
343
348
*`cloud-init-output.log`, `cloud-init.log`: Cloud-init logs from inside the installer — subiquity uses cloud-init internally to fetch `user-data` and apply some steps.
344
349
*`curtin-install-cfg.yaml`, `curtin-install.log`: Curtin (the actual installer under subiquity) effective config and run log. First stop for partitioning, LVM or grub issues.
345
-
*`installer-journal.txt`: Journal snapshot from the installer environment.
350
+
*`installer-journal.txt`: Journal snapshot from the installer environment.`grep 'Linuxfabrik Kickstart version' /var/log/installer/installer-journal.txt` surfaces the `YYYYMMDDNN` build stamp logged by the autoinstall `early-commands`.
346
351
*`subiquity-client-debug.log`, `subiquity-server-debug.log`: Subiquity's full debug logs.
347
352
353
+
**On the installed system, outside `/var/log/installer/`:**
354
+
355
+
*`/root/lf-install-version`: Distro-independent fleet marker file containing just the `YYYYMMDDNN` build stamp of the `lf-ubuntu.cfg` variant that was applied during installation. Same value for equivalent files on RHEL and Debian hosts, making `cat /root/lf-install-version` a uniform cross-distro identification across the fleet.
0 commit comments