Howdy! Christopher Allan Webber <cweb...@dustycloud.org> skribis:
> So yeah, I'm going to start playing around with building some on some of > these ideas soonish. I could use some advice, though. Assume I'm able > to build the right scheme representation of the system I want to be run > remotely on another machine (whether it's a gexp, whatever). What's the > right way to go about this? Assume for the moment that I have a remote > "target" machine already running GuixSD and I can ssh into it. > > - Should I write out an sexp of the system I want to be built, write it > to a scheme file I copy over, and then invoke the guile command line > tools to start it up? No! > - Should I write out an sexp of the script I want to run and execute it > as a normal guile program? No! > - Should I build the entire derivation of the system I want to run on > the remote machine locally first, then copy that over? (I assume > this is possible, and eventually desirable, especially if doing > mass deployments? But it might not be desirable in every case.) > Would that use the substitute mechanism? Yes! :-) Essentially deployment would work like this: 1. Compute the system derivation and build it locally (i.e., on the machine where ‘guix deploy’ is running.) As a user, you can choose to have offloading setup such that the actual build will take place on (some of) the target machines, but that’s completely orthogonal. 2. Send the derivation out to the target(s) that are real machines. For targets that are local containers or VMs, there’s nothing to do. 3. On targets that are real machines, perform the equivalent of ‘guix system reconfigure’—i.e., update the /run/current-system symlink, restart Shepherd services that can be restarted, etc. IIRC David was testing using VMs and containers as the targets (the <platform> record¹) because it’s easier. Does that make sense? Hopefully David will correct me. :-) Ludo’. ¹ https://lists.gnu.org/archive/html/guix-devel/2015-07/msg00320.html