diff --git a/BUILD.md b/BUILD.md new file mode 100644 index 0000000..e4d061f --- /dev/null +++ b/BUILD.md @@ -0,0 +1,21 @@ +Image building +============== + +## Notes + +- Gentoo base? +- CentOS/Rocky base? + +## Process + +1. Setup minimal base rootfs +2. Install needed packages +3. Create `/config` directory +4. Setup git repository for config files +5. Initial ansible run with default config +6. Setup symlinks to `/config/*` +7. Run testsuite +8. Export rootfs as btrfs snapshot +9. Release snapshot as new DEVELOP version +10. Run testsuite +11. Once a week: Release snapshot as RELEASE version diff --git a/README.md b/README.md index eb1fc54..939ba9b 100644 --- a/README.md +++ b/README.md @@ -40,11 +40,11 @@ MBR/BIOS: /dev/disk3 btrfs@home /home /dev/disk3 btrfs@root-2021-04-01 / /dev/disk3 btrfs@root-2021-04-20 / - /dev/disk3 btrfs@conf-2021-04-01 /config - /dev/disk3 btrfs@conf-2021-04-20 /config + /dev/disk3 btrfs@config /config ``` -- Every installed release has it's own subvolume for rootfs and config in case a configuration changes with an update +- Every installed release has it's own subvolume for the rootfs +- The `config` subvolumes has a git repository which saves all configuration changes and the used version - The user can choose which one to boot into ### Update flow @@ -69,6 +69,22 @@ Update process: - the system reboots, now with the `last` entry being the default booting into the last known working system - the user gets displayed an error because `last` and `current` is not the pointing to the same version and `last` is booted indicating an error +### Configuration changes + +- User changes current config via HTTP API (Web interface) + - Background process puts changes into ansible variables in `/config` +- When user discards changes git repo under `/config` is reset to original state +- When change is ready and user triggers commit via HTTP API + - Changes form a git commit with name `[$VERSION] $username - $change summary` + - Timer is setup to revert to old config in 600s + - Changes get applied via ansible +- User confirms working state via HTTP API + - Timer get removed +- If new change is not confirmed and Timer gets triggered + - git commit is reverted + - Ansible runs again with old config + - User get an error message + --- Made with ❤️ and 🪄✨.