# ks2 decommission — final checklist Status: **prepared — execute only when every gate in [plan.md](plan.md) is ticked.** Rental ends **Sep 30, 2026**; leave a few days of margin. ## Preconditions (the plan's release gates) - [ ] restic S3 leg running nightly for ≥ a week, `done (rc=0)`, restore test passed ([restic-backup.md](../ks4/restic-backup.md) §7) - [ ] nuc pull leg seeded and one instance test-restored ([nuc-seed.md](nuc-seed.md)) - [ ] local leg (sdb5) cron green in `/var/log/incus-copy.log` ## 1. Cut the last flows to ks2 (root on ks4) ```sh crontab -e # remove any remaining ks2 line (the 02:00 push, if it was # re-enabled; the 04:00 incus-backup.sh line is long gone) incus remote list # if a "ks2" remote is still defined: incus remote remove ks2 # drop the rsyncbackup SSH key if it exists only for ks2: ls /root/.ssh/id_rsyncbackup* && rm -i /root/.ssh/id_rsyncbackup* ``` ## 2. Last look at ks2 before wiping (root on ks2) ```sh # anything in the rsync tree newer than the S3 cutover? find /backup/ns3061243 -newermt '2026-08-23' | head # pre-2023 dirs (catc, mythoughts, qcm, scripts): instances still # exist stopped on ks4 — spot-check nothing unique remains: ls /backup/ns3061243/{catc,mythoughts,qcm,scripts} ``` Archive anything unique into the restic dump dir on ks4 (`/backup/dumps`) — it then rides the nightly S3 snapshot for free. ## 3. Wipe and terminate ```sh # on ks2 — destroy the data (both pools hold copies of personal data): zpool destroy backup && zpool destroy data # optional: shred the OS disks via OVH rescue mode / reinstall ``` Then in the OVH manager: cancel the ks2 (Kimsufi) server before the renewal date. ## 4. Post-mortem cleanup - [ ] Update [doc/README.md](../README.md): remove ks2 from the ks4 durability bullet and the index line for `ks2/`s "being decommissioned" wording (keep the folder as history) - [ ] Retire `scripts/incus-backup.sh` + `incus-backup.db` in the repo (superseded by [`restic-backup.sh`](https://git.lutran.fr/julien/scripts/src/branch/main/restic-backup.sh)) — keep for reference, note the retirement in their headers - [ ] `login` container cleanup: its **native** postgres still holds the pre-migration `outline` database (live Outline uses the dockerised `outline-postgres-1`) — `dropdb outline` and remove the native postgres package - [ ] Mark the ks2 line in `plan.md` done, date it