Work on properly implementing the activation of systemd services.

This commit is contained in:
R-VdP 2023-02-09 15:04:27 +00:00
parent c3be9ceb19
commit 9aa059887b
No known key found for this signature in database
10 changed files with 205 additions and 86 deletions

38
README.md Normal file
View file

@ -0,0 +1,38 @@
## Profile generation
## Activation strategy
The activation script calls `system-manager activate`,
which will perform the following actions.
### Systemd services
The info about services (name and store path of the service file) is found
in a file called `services/services.json` in the system-manager configuration directory.
The info about the services that were part of the previous generation is stored
in a state file at `/var/lib/system-manager`.
We then:
1. Compare the list of services present in the current configuration with the
ones stored in the state file from the previous generation.
1. For all services in the new generation,
create a symlink from `/etc/systemd/system/<service name>` to the service file
in the nix store.
1. For all services present in the old generation but not in the new one:
1. Stop the service.
1. Remove the symlink from `/etc/systemd/system`.
1. Perform a systemd daemon-reload
1. Start the services that are present in this generation and not in the previous one
1. Restart services that are present in both
This approach basically ignores the `wantedBy` option.
A future version might improve upon this, but one of the complexities is that
NixOS does not encode the `wantedBy` option in the generated unit files, but
rather produces `<unit name>.wants` directories in the directory that
`/etc/systemd/system` gets linked to.
Supporting this properly would mean that we need to find a way to register
the `wantedBy` option on a non-NixOS system in a way such that we can use it.
### Udev rules
### Files under `/etc`