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.
this is useful in cases where the target machine has
a pre-configured RAID setup, as otherwise disko would
wipe the partition tables and create new ones but would
not be able to inform the kernel about it, as the old
raid was still in use.