disko/disk-deactivate
Jason Yundt 810eccbad2 Allow Disko to be run in a systemd service
Before this change, if you created a systemd service that ran
“disko --mode disko <path-to-config>”, then you would (probably) get
this error:

    disk-deactivate: line 6: /dev/stderr: No such device or address

Since disk-deactivate uses “set -e”, that error would prevent
disk-deactivate from actually deactivating any disks. The problem is
that disk-deactivate tries to print text to stderr by doing this:

    echo "Text" >/dev/stderr

systemd.exec(5) explains why that doesn’t work and goes on to say [1]:

> This means when executing shell scripts the construct
> **echo "hello" > /dev/stderr** for writing text to stderr will not
> work. To mitigate this use the construct **echo "hello" >&2** instead,
> which is mostly equivalent and avoids this pitfall.

[1]: <https://www.freedesktop.org/software/systemd/man/latest/systemd.exec.html#StandardOutput=>

---

You can test this commit by doing the following:

1. Download a copy of this gist:
   <https://gist.github.com/Jayman2000/60b483659e89283716582ac38856dca6>

2.  Build a custom NixOS installation ISO that contains a systemd service
    that runs disko:

        nix-build --arg diskoDir <path-to-disko-repo> <path-to-gist>

    Once that command finishes, the ISO will be in ./result/iso/.

3. Create a VM. Make sure that it has a VirtIO disk that’s more than
   500M large. Also make sure that it has an optical disc drive.

4. Put the ISO file from step 2 into the VM’s optical disc drive.

5. Turn on the VM and boot into the installation ISO.

6. Start the systemd service:

    sudo systemctl start disko-test

7. Check journalctl to see if there are any errors related to
   disk-deactivate.
2024-02-15 20:31:41 +00:00
..
disk-deactivate Allow Disko to be run in a systemd service 2024-02-15 20:31:41 +00:00
disk-deactivate.jq Rework Hybrid MBR https://github.com/nix-community/disko/pull/168 (#508) 2024-01-26 21:59:23 +01:00