Hi everyone,
I am the author of this issue https://github.com/systemd/systemd/issues/37876,
trying to allow the persistent storage and use of lease under certain
conditions. You can read to catch up on the discussion there. I have been
making some headway through implementing this and was hoping to get some
feedback on pitfalls I’ve encountered. I will also have a draft/review PR up in
this issue by the time you see this, just to ascertain if this is the correct
approach.
1. In storing on persistent storage; /var is the most obvious location for
this, systemd already has a /var/lib/systemd/network, so I am including a
similar ../lease directory in this location to mimic how it is done in the
runtime (/run) location to write the lease file there. However, I can see the
service is seemingly not allowed to write to this location even if it’s owned
by “systemd-network” user. The only way I have been able to achieve write to
this directory is by creating a drop in for the service with
ReadWritePaths=”directory”. This all hinges on creating the directory with the
system-tmpfiles service.
* Is this a safe approach to handling this problem? I assume that
systemd has protection against services (with ProtectSystem=strict) unless
specified but would It be possible to have the lease writing be implemented in
code without having to manually edit the service? Since this would be an opt-in
option, It would be beneficial to have system manage location permissions when
the option is invoked. i.e Can the protection for networkd be lifted or would
additional services need to be made to make this work?
1. This next point is more on an intended DHCP functionality when it comes
to reusing these leases. As @Pottering said in the above issue, “We should be
able to use the lease as long as it is valid, and if a reboot happens in the
middle that's just a small greyout zone we can ignore. Of course, even if the
lease from the previous boot is immediately applied, we should also immediately
refresh it just in case”. Currently, leases are not stored with any timestamp
info (or indication when it was acquired, since most timing operations work
within runtime scope), which means that during reboots, links established with
any saved leases are treated as a fresh lease instead of maybe deducting the
already expired time from the lease and running on the rest of the lease
lifetime.
* In the spirit of somewhat adhering to the DHCP protocols, for an
option where you want to use a saved valid lease (during greyout zone), would
storing the Realtime (UTC) timestamp in the lease file be effective? Or is
there some other way to go about it?
* As far as I am aware, Lease renewals are invoked into about halfway
the lease time and rebinding about 90% through. If the greyout happens just
before the renewal time but comes back just after, we would have to wait till
the remainder time to get to rebinding. Is this an acceptable outcome when it
comes to doing refresh for persisted leases? Is there a way for to do
timed/periodic requests when using this option, so that we can try to establish
something new in the event that the server comes back before rebinding time?
Apologies, this is my first contribution to this mailing list, so it might not
be formatted correctly.
Merci,
Rahman