fix: atomicWriteFile falls back to direct write on bind mounts

Rename fails with EBUSY on Docker bind-mounted files (e.g. controller.yaml).
Fall back to os.WriteFile when os.Rename fails.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-26 14:13:23 +01:00
parent eec1afae23
commit 8f49bcc4cc
2 changed files with 5 additions and 1 deletions
+3
View File
@@ -11,6 +11,9 @@
- **Hub mode welcome page**: Shows three options instead of two — "Visszaállítás a Hub-ról" (auto-connects to Hub), "Helyi mentés keresése" (local drive scan), "Friss telepítés" (fresh config download) - **Hub mode welcome page**: Shows three options instead of two — "Visszaállítás a Hub-ról" (auto-connects to Hub), "Helyi mentés keresése" (local drive scan), "Friss telepítés" (fresh config download)
- **Auto-process fallback**: If Hub auto-connect fails, the wizard clears the pre-seeded password and falls back to the manual form with the error displayed - **Auto-process fallback**: If Hub auto-connect fails, the wizard clears the pre-seeded password and falls back to the manual form with the error displayed
#### Fixed
- **Bind mount write**: `atomicWriteFile()` now falls back to direct write when rename fails (fixes "device or resource busy" on Docker bind-mounted `controller.yaml`)
### v0.31.6 — UI: Brand-consistent button & card styling (2026-02-25) ### v0.31.6 — UI: Brand-consistent button & card styling (2026-02-25)
#### Changed #### Changed
+2 -1
View File
@@ -1032,7 +1032,8 @@ func atomicWriteFile(path string, data []byte, perm os.FileMode) error {
} }
if err := os.Rename(tmp, path); err != nil { if err := os.Rename(tmp, path); err != nil {
os.Remove(tmp) os.Remove(tmp)
return err // Rename fails on bind-mounted files (EBUSY). Fall back to direct write.
return os.WriteFile(path, data, perm)
} }
return nil return nil
} }