guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: It's time to build "guix deploy"


From: Pjotr Prins
Subject: Re: It's time to build "guix deploy"
Date: Thu, 14 Feb 2019 09:17:09 +0100
User-agent: NeoMutt/20170113 (1.7.2)

On Thu, Feb 14, 2019 at 08:14:15AM +0100, swedebugia wrote:
>    I understand most parts of it ;)
>    It is a real beauty and a testiment to the power of Guix and Guile.
> 
>    actually mainenance.git is full of treasures :-)
> 
>      Berlin consists of a head node and many almost identical servers.
> 
>    AFAIU remote servers could be completely different each other for your
>    script to do its job, or am I missing something?

So, essentially, the tools login via ssh and control guix remotely and
copy files which will also work on an underlying Debian. 

This looks a lot like the Python automation system I used in the past
with cloudbiolinux:

  https://github.com/pjotrp/cloudbiolinux

Later I created a simple Ruby system that takes YAML files as input and runs
*locally* . A remote invocation called that local system. The advantage
is that is does not lean on ssh too heavily (one login required and
you could move to a different client-server protocol easily - even
over http). I am still using that setup today, to configure web, mail
servers and home directory. The tool is here

  https://github.com/pjotrp/deploy

An example of use for emacs is emacs.yaml:

---
- copy-file:
    emacs:
      dest: .emacs
      mode: "400"
- dir:
    .emacs.d:
      source: emacs.d
      recursive: true

and the emacs files sit in a git directory in the same tree and get
copied across running 'deploy emacs.yaml'. It is not fancy, but it
works well. Of course we should not use YAML with guile ;). WISP would
work fine.

Note that I have used Cfengine extensively (even wrote my own clone),
Also used Chef and Puppet. 

After all that I ended up with writing a *simple* system that does not
keep track of state but simply copies files. Guix would do this better
by providing transactions and isolation. 

I think my preferred way to do this is to copy files into the store
and use guix deploy so symlink them from $HOME and /etc - i.e., a
profile with another layer of symlinks. This means that when a
profile goes out of scope the symlinks stop working too. They dangle,
that is all, but should be easy to harvest since you know what
directory you are linking in. 

Guix deploy runs locally on a machine and can be invoked
remotely. One advantage of running locally is that it is fast and much
easier to test.

That would work on Debian+Guix too.

Pj.

PS I like the logo :)

https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/hydra/berlin.scm#n50

(though not used there).  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]