Commit 27a5d42
feat(driver): bootc switch + reboot at end so MiOS-DEV ≡ MiOS
Operator's contract (cap-locks earned by my prior partial implementations):
> "podman-MiOS-DEV includes EVERYTHING all MiOS images contain -- I said
> fucking everything!!! MiOS is self replicating and needs EVERYTHING
> in all Deployment types -- ESPECIALLY THE DEVELOPMENT ENVIRONMENT
> FOR MIOS!!!!!!!!! podman-MiOS-DEV!!!!!"
Codified as durable feedback memory (feedback_mios_dev_equals_mios.md):
podman-MiOS-DEV is MiOS. Same image, same packages, same containers,
same flatpaks, same models, same units. The only thing that
distinguishes MiOS-DEV from a deployed MiOS host is its role as the
*development substrate* for the project itself.
Symptom that surfaced this gap: operator inside MiOS-DEV ran `epiphany`
and `nautilus` (canonical SSOT toml/html editor + file manager); both
fell through to `/usr/libexec/mios/flatpak-launch` which exec'd
`flatpak` -- which isn't installed on the bare podman-machine-os base.
The MiOS file overlay is in place (operator confirmed `ls /` showed
the full MiOS root + dashboard banner rendered correctly), but the
package layer, the flatpak layer, the container-image-pulled layer,
and the model-baked layer are all missing.
This commit closes the self-replication loop in the build-driver:
After `podman build -t localhost/mios:latest ...` succeeds:
sudo bootc switch --transport containers-storage \
localhost/mios:latest
sudo systemctl reboot
The bootc switch consumes the image directly from local podman
storage (no registry round-trip, no signature ceremony for a local
build). After reboot, MiOS-DEV reboots INTO the just-built MiOS
image -- every layered RPM, every flatpak runtime+app (incl.
Epiphany for SSOT editing), every Quadlet container image pulled,
every ollama model baked, every systemd unit registered.
Three branches by capability detection:
bootc present + switch succeeds:
* stages the switch
* shows a summary box
* prompts operator to press Enter to reboot now
bootc present + switch fails:
* logs the failure with WARN
* shows a summary box noting parity is NOT yet applied
* preserves the just-built OCI image for re-attempts
bootc not installed (bare podman-machine-os never had it):
* logs WARN
* shows a summary box with the recovery recipe:
sudo rpm-ostree install bootc
sudo systemctl reboot
# re-invoke /usr/libexec/mios/mios-build-driver
The third branch is what the operator will hit on the FIRST run of
the driver against a fresh MiOS-DEV (because the bare podman-machine-
os doesn't ship bootc). After they install bootc + reboot + re-run,
the driver closes the loop and MiOS-DEV becomes MiOS for keeps.
A subsequent migration chunk will make Phase 3's quadlet-overlay
auto-install bootc + run mios-build-driver itself, so the operator
doesn't need a manual rpm-ostree dance on first ignition. For now,
documenting the recovery path in the summary box keeps the contract
visible to anyone hitting this state.
Bash syntax validated with `bash -n`: 0 errors.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>1 parent c1b7693 commit 27a5d42
1 file changed
Lines changed: 81 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
134 | 134 | | |
135 | 135 | | |
136 | 136 | | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
137 | 218 | | |
138 | | - | |
139 | | - | |
140 | | - | |
141 | | - | |
142 | | - | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
| |||
0 commit comments