Subject: [bug#51440] [PATCH 00/10] Declarative static networking interface

From: Julien Lepiller <[email-masked]>
Date: Wed, 27 Oct 2021 11:29:47 -0400

Le 27 octobre 2021 09:59:18 GMT-04:00, "Ludovic Courtès" <[email-masked]> a écrit :
>Hi!
>
>This patch set builds on Julien’s neat Guile-Netlink to finally
>provide a proper static networking configuration interface.  One
>can now write things like:
>
>  (service static-networking-service-type
>           ;; Network configuration for one NIC, IPv4 + IPv6.
>           (static-networking
>            (addresses (list (network-address
>                              (device "eno1")
>                              (value "10.0.2.15/24"))
>                             (network-address
>                              (device "eno1")
>                              (value "2001:123:4567:101::1"))))
>            (routes (list (network-route
>                           (destination "default")
>                           (gateway "10.0.2.2"))
>                          (network-route
>                           (destination "default")
>                           (gateway "2020:321:4567:42::1"))))
>            (name-servers '("10.0.2.3"))))
>
>For the record, the ‘static-networking-service’ procedure currently
>in ‘master’ is IPv4-only and would not allow you to assign more
>than one address to an interface anyway, among other limitations.
>These long-overdue patches close an embarrassing gap.
>
>The interface provided here is a direct mapping of that of Guile-Netlink,
>which is the same as that of the ‘ip’ command, itself closely
>modeled after Linux’s internal interfaces AIUI.  Thus, it should be
>roughly as expressive as ‘ip’, but declarative.
>
>I’m not a network person though, so I’d appreciate if more
>knowledgeable people would take a look at the interface.  In particular,
>I’d like to have examples of ‘links’ to include in the manual—I’m not
>quite sure how to use that.  Ideas?
>
>This patches preserve backward-compatibility: the
>‘static-networking-service’ procedure still works the same.  There’s
>one observable difference though: there’s only one ‘networking’
>Shepherd service now; you no longer get ‘networking-eno1’ and similar.
>The ‘static-networking’ constructor was public since commit
>c9436025a90b86047ba2203d58bbf238f8f9b2f9 but undocumented; thus I
>changed the fields of <static-networking> without worrying about
>compatibility.
>
>I tested this with:
>
>  make check-system \
>    TESTS="static-networking openvswitch ganeti-kvm dhcpd childhurd"
>
>I would appreciate more testing, including tests on the bare metal
>for IPv6 support.
>
>Ensuring portability to GNU/Hurd took me more time than I’d have
>thought, but it works.  “Links” are not supported there, and only
>“default” routes are supported.
>
>I took a detour in commit “Use Guile-Netlink on GNU/Linux”: that
>patch shows that I was blissfully hoping to use good’ol ioctls
>on GNU/Hurd, but that turned out to be a dead end because they
>don’t support IPv6 (which really isn’t a surprise but I don’t know,
>I must have been lacking focus at that point of my journey!).
>
>With all this I think we should be able to do “cool things with
>containers”, but again, that’s not my area of expertise so please
>do chime in if you container networking is your thing.
>
>Feedback welcome!
>
>Ludo’.
>
>Ludovic Courtès (10):
>  tests: Add 'static-networking' test.
>  tests: openvswitch: Check whether ovs0 is up.
>  doc: Add new "Networking Setup" node for the main setup options.
>  gnu: guile-netlink: Allow cross-compilation.
>  services: static-networking: Use Guile-Netlink on GNU/Linux.
>  services: secret-service: Turn into a Shepherd service.
>  services: static-networking: Change interface to mimic netlink.
>  services: Define '%qemu-static-networking'.
>  services: Define '%loopback-static-networking'.
>  tests: Replace uses of deprecated 'static-networking-service'.
>
> doc/guix.texi                   | 505 ++++++++++++++++++++++----------
> gnu/build/hurd-boot.scm         |  10 +-
> gnu/build/secret-service.scm    |  17 +-
> gnu/packages/guile-xyz.scm      |  11 +-
> gnu/services/base.scm           | 391 +++++++++++++++++++------
> gnu/services/virtualization.scm |  45 ++-
> gnu/system/hurd.scm             |  12 +-
> gnu/system/install.scm          |   5 +-
> gnu/tests/ganeti.scm            |   7 +-
> gnu/tests/networking.scm        | 141 ++++++++-
> 10 files changed, 851 insertions(+), 293 deletions(-)
>
>
>base-commit: 0a42998a50e8bbe9e49142b21a570db00efe7491

Looks good at first glance. I noticed a few typos in the manual, so I'll send you more details after I read it more carefully. I'll try that on my hardware, although again I'm not sure how I can run reconfigure from my checkout exactly? (Where do I use sudo, and what options do I need)