Repository navigation
osbuild: component-composed blueprints, Rocky 10 NVIDIA variants, installer kickstart and first-login splash - #3
Conversation
Reformat staged remediation action/callback_utils files with black (line-length=100) and isort import ordering; adjust unit tests to match. 💘 Generated with Crush Assisted-by: Z.ai: GLM 5.3 Flash via Crush <crush@charm.land>
Add Rocky Linux 9 and 10 as first-class supported distributions across the Ansible monorepo, mirroring existing AlmaLinux support with cited upstream configurations. osbuild role: - Add Rocky 9 and 10 to build-host and target asserts, defaults, and meta - Add roles/osbuild/vars/Rocky.yml with dl.rockylinux.org mirrors and cited keys - Add source TOML trees for Rocky 9 and 10 (baseos, appstream, crb, epel, rpmfusion, cuda, nvidia-container-toolkit, docker-ce, vscode, chrome) - Add workstation blueprints: rocky-9-8-workstation (+ NVIDIA) and rocky-10-2-workstation (+ NVIDIA) pinned to live image-builder distros - Replace stale almalinux-10-3-workstation*.toml blueprints with almalinux-10-2-workstation*.toml per live image-builder list confirmation on tinybot (binary defines almalinux-10.2; 10.3 does not exist) - Fix image installer type to image-installer for EL distributions and retain minimal-installer for Fedora - Add repo-config JSON templates for rocky-9 and rocky-10 - Import blueprint preparation in generate_only mode and support standard library tomllib with tomli fallback for TOML syntax checks - Wire osbuild_sources_dir to major version base role: - Refactor tasks/distro/AlmaLinux.yml into shared tasks/distro/EL.yml - Add per-major vars/Rocky-9.yml and vars/Rocky-10.yml - Parameterize epel.repo mirror path with $releasever - Add Rocky 9 and 10 containers to Molecule default scenario parity sweep: - Add vars/Rocky.yml for containerd, desktop, libvirt, nas, and user roles - Update cpupower service template and Yaru theme build conditionals for Rocky - Update meta/main.yml platform declarations across roles - Extend scripts/csv_to_packages.py to model Rocky and generate vars/packages/Rocky.yml
…OS and container images
Replace the 10 duplicated, distro-specific custom-first-boot scripts with one plain bash script in files/firstboot/, injected into every prepared blueprint (static or templated) by tasks/blueprint.yml via blockinfile. At first graphical login the launcher opens a terminal that shows a splash, prompts for the dotfiles URL (default b08x/dots), clones it with yadm as the logged-in user, and runs yadm bootstrap. A per-user marker in ~/.local/state/syncopated/ stops the splash after success or "Never ask again". The script reads NAME/VERSION_ID from /etc/os-release at runtime and no longer sets DNF repo priorities or installs flatpaks. - osbuild_firstboot_enabled (default true) toggles injection - bats suite with stubbed git/yadm/curl/gum/sudo/systemctl (36 tests) - validate_firstboot_injection.yml checks all blueprints, run twice - old snippets/custom-first-boot*.j2 removed Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Prototype produced with the Syncopated Appliance Builder skill. Builds the static rocky-10-2-workstation-nvidia blueprint as an image-installer ISO on gir (Fedora 43 host), passing every EL 10 extra repo explicitly and suppressing the host-derived Fedora source list. Verified 2026-10-01: build finished failed=0; the resulting ISO installed in a libvirt VM and the first-login yadm splash completed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each ISO build playbook now names its output <blueprint>-<short-hash>.iso, using `git describe --always --abbrev=7 --dirty`, so an image can be traced to the commit that built it. A "-dirty" suffix marks builds from a working tree with uncommitted changes. The hash is resolved once in pre_tasks via set_fact so every role task sees the same filename. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…figurable disk layout - Generate-only is the role default: the play writes <blueprint>.toml and build-<blueprint>.sh (image-builder command, copy, podman load/tag for container types); -e osbuild_only_generate=false builds in the play. - Every prepared blueprint embeds files/kickstart/syncopated.ks as [customizations.installer.kickstart] plus a wheel NOPASSWD sudoers drop-in; user/group/unattended/sudo-nopasswd removed from the static blueprints and rejected by an assert. - osbuild_kickstart_partitioning: interactive embeds syncopated-interactive.ks (no storage commands; Anaconda Installation Destination). - %pre disk layout is configurable (osbuild_kickstart_*): / 10 % (min 16 GiB), 10 % of vg00 left unassigned, /usr 80 % of the rest up to 256 GiB, /var the remainder up to 128 GiB, /home only when >= 100 GiB is left above the caps. - Remove 14 defaults nothing reads; declare osbuild_extra_repo_urls and osbuild_container_tag. - README: role variables regrouped by purpose, layout table, and a runbook for a full volume. - Tests: bats for %pre (18, incl. defaults drift check), kickstart injection playbook with checker. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ning ISO - osbuild-rocky-cuda-container.yml + static blueprint: image-builder "container" type with cuda-toolkit (no driver; host supplies it via CDI), output .tar loaded into podman as osbuild_container_tag. - osbuild-rocky-iso-nvidia-interactive.yml: the NVIDIA workstation ISO with osbuild_kickstart_partitioning: interactive. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Clarify questions, playbooks to start from, hard rules from verified failures, role switches (incl. disk layout variables), verification steps, and the expected image-builder --verbose scriptlet noise. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- files/flatpak/flathub.flatpakrepo is appended to each prepared blueprint as /etc/flatpak/remotes.d/flathub.flatpakrepo; flatpak imports it as the system remote "flathub", with no network needed at install. Toggle with osbuild_flathub_enabled (default true; the CUDA container sets false). - No [[packages]] in the fragment: static blueprints define packages as an inline array, which TOML cannot extend. flatpak comes in via gnome-software. - Fix: the TOML syntax check's rescue treated any failure as a missing parser, so invalid blueprints passed. It now skips only when no parser is installed and fails on parse errors. - check_kickstart.py requires exactly one Flathub file per blueprint, identical to the source. - README "Flathub Remote" section; skill rules updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add both packages to system_packages.Development.languages for Fedora, Rocky and AlmaLinux so every build with the default development component ships rbenv with the ruby-build plugin. Fedora resolves them from its base repo; Rocky and AlmaLinux resolve them from EPEL 9/10, which their builds already include. Prettier also normalizes the empty audio list in Rocky and AlmaLinux. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the figlet logo and typewriter intro with a full-screen splash: the brand ASCII art centered and revealed row by row, colored violet (mark) and ember (wordmark) with dim tones for light glyphs, held on a pulsing "press enter to begin" prompt. Uses 24-bit color when COLORTERM reports it, else 256-color indices; a terminal narrower than the art shows the mark only. Theme gum prompts, borders and status messages with the same palette; GUM_* values already set by the user take precedence. Update the non-terminal bats case to match the new art and assert the prompt is not shown without a TTY. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the npm virtual provide with nodejs-npm in the Fedora development language list and the legacy development_packages list. Fedora resolved npm to nodejs-npm already; the blueprint now names the real package. Rocky and AlmaLinux keep npm: their package files serve both EL 9 and EL 10, and EL 9 AppStream ships the package as npm with no nodejs-npm, while EL 10 resolves npm to nodejs-npm. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eady installed - zsh.yml: stat the user and system oh-my-zsh; install as the user with KEEP_ZSHRC=yes CHSH=no RUNZSH=no via a tempfile; skip zoxide when it is on PATH - cargo.yml: skip rustup when ~/.cargo/bin/rustup exists; install only crates missing from `cargo install --list` - defaults: drop exa from user_cargo_packages Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Add osbuild_blueprint_components: component files (packages, services, kernel args, repo URLs, optional TOML fragment) merged with a static frame into one blueprint. Each component's repo_urls feed --extra-repo, so dropping a component drops its repos. Takes precedence over the static and Jinja template paths. Seed Rocky 10 components by splitting the static NVIDIA workstation blueprint; image-builder depsolves the same 1715 RPMs for both. Load the package taxonomy by build target (osbuild_target_distribution, from osbuild_distro) instead of the build host's distribution. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ariants Add osbuild-rocky-iso-nvidia-generate.yml (pins osbuild_only_generate) and osbuild-rocky-iso-nvidia-components.yml (blueprint composed from components). Run the Rocky NVIDIA and CUDA container playbooks on the builder group (gir and tinybot) instead of gir only. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Describe osbuild_blueprint_components, the component file format and the frame, osbuild_target_distribution, and how component repo_urls feed --extra-repo. Blueprint section now lists three sources. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Generated wiki versions; pages 9, 13, 14 and 25 in the current snapshot are hand-edited to cover component-composed blueprints. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
ECC Tools / Security EvidenceCommit: Security scanner evidence required (action_required) Detected 1 security-sensitive predictive risk signal(s) without scanner evidence. Mode: enforce Findings:
Touched security-sensitive paths:
Expected evidence:
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / PR Risk TaxonomyCommit: PR taxonomy review recommended (neutral) Detected 5 PR taxonomy bucket(s): Security Evidence, Harness Drift, CI/CD Recommendation, Reference Set Validation, Agent Config Review. Scanned 218 changed file(s). Roadmap taxonomy buckets: Security EvidenceSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence. Signals:
Paths:
Harness DriftHarness-facing changes can drift across Claude Code, Codex, OpenCode, and shared adapter surfaces. Signals:
Paths:
CI/CD RecommendationCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work. Signals:
Paths:
Reference Set ValidationAI, analyzer, skill, agent, command, and harness guidance changes should be compared against a maintained eval, golden trace, benchmark, or reference set. Signals:
Paths:
Agent Config ReviewAgent, command, skill, MCP, and local instruction changes should be reviewed as executable agent configuration. Signals:
Paths:
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Reference Set ReadinessCommit: Reference set readiness gaps detected (neutral) Reference evidence present for 1/7 areas (14%) across 218 changed file(s). This check is based on files changed in this PR. Repository-level readiness is still reported by
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Hosted Promotion ReadinessCommit: Hosted promotion readiness passed (success) No hosted promotion evidence gaps detected across 218 changed file(s); 0 corpus scenarios had matching evidence. This check compares PR file changes against the evaluator/RAG promotion corpus in No evaluator corpus scenarios matched this PR. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
Summary
developmentis 24 commits ahead ofmain; this PR merges all of it. The newest work (last 5 feature/docs commits):8b17e73): newosbuild_blueprint_components. Component files (packages, services, kernel args, repo URLs, optional TOML fragment) merge with a static frame into one blueprint, and each component'srepo_urlsfeed--extra-repo. Takes precedence over the static and Jinja template paths. Rocky 10 ships 11 components split from the static NVIDIA workstation blueprint.8b17e73):osbuild_target_distribution(fromosbuild_distro) selectsvars/packages/<Name>.ymlinstead of using the build host's distribution.d91342a):osbuild-rocky-iso-nvidia-generate.yml(pins generate-only),osbuild-rocky-iso-nvidia-components.yml; the five cross-distro Rocky playbooks now run on thebuildergroup (gir and tinybot). The three tinybot-only playbooks are unchanged because they assert an EL host.ea1af84,d54f74f,dca993e): README section on components; rbenv and first-login splash notes; zread wiki snapshots with pages 9, 13, 14 and 25 hand-edited.Earlier commits on the branch (installer kickstart and disk layout, first-login yadm splash, Flathub remote, Rocky 9/10 support, CUDA container playbook, skill, remediation formatting) are not described here; see
git log origin/main..development.Verification
image-builder manifestdepsolves the same 1715 RPMs for the static NVIDIA blueprint and the components blueprint; parsed TOML customizations match section by section (232 packages).nvidiafrom the component list drops the CUDA and Container Toolkit repos from--extra-repo.ansible-lintonplaybooksandroles/osbuild: 0 failures, 0 warnings.shellcheckclean on the generated build script.validate_kickstart_injection.ymlandvalidate_build_modes.ymlexit 0;kickstart.bats18/18.Not verified
vars/packages/{Rocky,AlmaLinux}.ymlcontain names that do not resolve on Rocky 10.2 (e.g.NetworkManager-config-connectivity-fedora,@development-tools), so the Jinja template path is not usable for EL 10 yet.roles/osbuild/.zread/is generated output (about 800 KB); say if it should be ignored instead of tracked.🤖 Generated with Claude Code