Files
Hydra-OS/docs/legacy-runtime-update.md

3.3 KiB

Legacy development bundle recovery

This procedure applies only to the early local development .pyz bundles. They are not the signed public update mechanism. Do not download and execute an untrusted bundle. New installations use signed runtime updates. The following instructions are retained for recovering an already applied old bundle and its existing backup.

The first ISO predates this interface. A runtime bundle updates the Hydra program and branding files while retaining the original image manifest and backing up replaced files under /var/lib/hydra/updates. It leaves VM profiles, disks, the kernel and network configuration in place. To build one from a trusted checkout:

python3 dev/guest-update.py --build . --output /tmp/hydra-os-update.pyz

Copy the resulting file into Hydra, then inspect and apply it inside Hydra:

python3 hydra-os-update.pyz
sudo python3 hydra-os-update.pyz --apply

The first command only prints the file inventory. After applying, open the current Hydra recovery terminal with Ctrl+Alt+Shift+Escape, enter :shell, then run this command inside that installed Hydra graphical session:

labwc --exit

At the login screen, log in again as the same Hydra user. This restarts the long-running session process with the updated code. Use this from the recovery shell, not an SSH login or the outer host terminal. Reopening a terminal alone cannot reload that process. Running VMs remain independent of the graphical session.

To reverse a successful update, or finish recovery after a reported partial rollback, use the exact retained backup path printed by the updater. Correct the reported filesystem problem first. Inspect its records inside Hydra:

backup='/var/lib/hydra/updates/REPLACE_WITH_THE_REPORTED_BACKUP'
sudo python3 -m json.tool "$backup/backup.json"

Process every listed path relative to /. For an entry with "existed": true, restore that path from the same relative location in the backup. For example, after confirming the CLI entry originally existed:

relative='usr/lib/hydra/hydra/cli.py'
sudo cp --no-dereference --remove-destination --preserve=mode,timestamps -- "$backup/$relative" "/$relative"

Use the same operation for other originally existing files. When "symlink" is recorded, restore the symlink itself with this command; do not copy its referent. In particular, restoring etc/os-release must recreate its recorded vendor symlink while leaving /usr/lib/os-release intact. Check the restored link with readlink /etc/os-release and compare it to backup.json.

For each entry with "existed": false, remove only that exact installed file using sudo rm -f -- /THE_RECORDED_RELATIVE_PATH; no backup copy exists for it. This includes newly added modules, logos or the runtime-update receipt when listed as originally absent. Copying the backup directory over / alone will leave these additions behind. Confirm restored regular-file modes and SHA-256 values against their records, retain the backup, then exit the Hydra graphical session and log in again as described above.

This bundle contains the Fastfetch configuration and logo, but no executable packages. If the old installation lacks Fastfetch, install it inside Hydra:

sudo emerge --getbinpkg --noreplace app-misc/fastfetch