Subject: bug#72686: Impossible to remove all offload machines

From: Maxim Cournoyer <[email-masked]>
Date: Fri, 03 Jan 2025 00:02:09 +0900

Hi Ian,

Ian Eure <[email-masked]> writes:

[...]

> Apologies for the silence, life stuff has been eating most of my free
> time, but I have a bit of bandwidth to spend on this problem again.

As you can see, you are not alone :-).

> I took a swing at this, it wasn’t as difficult as I expected. While
> this approach gives a smooth upgrade path for those who’ve configured
> channels in a stateful way switching to declarative configuration,
> it’s possibly bumpy for those already using a declarative config.  If
> a machine with declarative channels is reconfigured, the channels will
> be duplicated from /etc/guix/channels.scm to
> /etc/guix/channels-declarative.scm. Using `delete-duplicates' on the
> merged channels should avoid major problems, but I think it still
> needs a loud entry in news and manual action (deleting
> /etc/guix/channels.scm) to upgrade. Given that both approaches will
> require manual action, I’m a bit inclined to go with the simpler, and
> take over the existing file. That said, I think the failure mode of
> the simpler approach (stomping on channels a user may have configured)
> is undeniably worse than potentially duplicating channels or
> continuing to pull in old ones unexpectedly.  Do either of you have a
> strong opinion or more information which would help guide this
> decision?

I still like the option to leave a handcrafted channels.scm alone; I
don't think this imperative variant will be obsolete in the future; it's
still useful to experiment quickly, avoiding costly reconfigure just to
change some bits about a new offload machine.

> The root issue at work behind all these problems is that activation
> code only sees the desired target config, rather than the current and
> target configs.  Comparing the current and target configs would allow
> the code to more precisely compute the needd change to move from one
> state to the next.  I think that could be a good change to make,
> though it’s obviously going to be much more involved, and IMO will
> require discussion outside the scope of this specific bug.

The activation is just a script, so if it's useful to check
the current value, it should be OK to do so.

> I have a draft patch series I hope to send up soon, but need to get
> Guix System up in a VM to test first.  It does separate declarative
> channels into their own config, but doesn’t do the same for build
> machines.  While I think many fewer users configure build machines
> than channels, it’s probably a good idea to use the same approach for
> both channels and machines.

Yes, it'd be nice to have a uniform approach.  The acl file could
benefit from the same treatment, I believe (that, and 'guix authorize'
should validate that we're not adding the same key multiple times --
warn something along "key XXXX is already authorized".

-- 
Thanks,
Maxim