[PATCH] Yggdrasil package and accompanying shepherd service (mesh network)

  • Done
  • quality assurance status badge
Details
2 participants
  • Julien Lepiller
  • raingloom
Owner
unassigned
Submitted by
raingloom
Severity
normal
R
R
raingloom wrote on 11 Jun 2020 15:56
(name . Guix Patches)(address . guix-patches@gnu.org)
20200611155656.7ece9c24@riseup.net
"Yggdrasil is an early-stage implementation of a fully end-to-end
encrypted IPv6 network."

I spent the last few days packaging it and now it's in a state where I
think it's usable.

The configuration can include private keys, so that part should NOT go
in the operating system config, because it would get stored in the
world-readable Guix store. Nix works around this by merging the
generated config with a JSON file and sending it to yggdrasil over its
stdin.

I chose not to do that because I couldn't figure out how to open a
service's stdin and because I think the way I did it is much more
elegant in the long run.

The package is lightly patched to take not one but two config files,
and it simply merges them internally. The patch is completely backwards
compatible and unobtrusive. It took me about an hour to write and debug
and most of that was just figuring out Go's syntax and type system.
I will try to get upstream to accept it, or implement similar
functionality.

Still TODO:
documenting the service as an info page.

The gist of using it is:
1. look at example operating system
2. see yggdrasil -genconf -json for config options
(3.) optional: save output as /etc/yggdrasil-secret.conf
(4.) chmod 600 /etc/yggdrasil-secret.conf
(5.) delete everything but the signing and encryption keys
6. add peers as needed, or set autoconf? to #t to connect through a
local peer

It seems to work fine. I could connect to open peers from one
machine and another one could auto-configure itself to connect through
the first one over the LAN. It's pretty nifty.
From e40f06bd1c11569d84cc00b92b0cf3ca4f989d9a Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Sat, 30 May 2020 12:52:00 +0200
Subject: [PATCH 1/5] gnu: go-golang-org-x-sys: update to
05986578812163b26672dabd9b425240ae2bb0ad

---
gnu/packages/golang.scm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Toggle diff (26 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index d95e195ba5..de76b99039 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -723,8 +723,8 @@ processing.")
(license license:bsd-3))))
(define-public go-golang-org-x-sys
- (let ((commit "c709ea063b76879dc9915358f55d4d77c16ab6d5")
- (revision "6"))
+ (let ((commit "05986578812163b26672dabd9b425240ae2bb0ad")
+ (revision "7"))
(package
(name "go-golang-org-x-sys")
(version (git-version "0.0.0" revision commit))
@@ -736,7 +736,7 @@ processing.")
(file-name (git-file-name name version))
(sha256
(base32
- "15nq53a6kcqchng4j0d1pjw0m6hny6126nhjdwqw5n9dzh6a226d"))))
+ "1q2rxb6z5l6pmlckjsz2l0b8lw7bqgk6frhzbmi1dv0y5irb2ka7"))))
(build-system go-build-system)
(arguments
`(#:import-path "golang.org/x/sys"
--
2.26.2
From d2d9ad6c3402924edd6090ffcad50e2c9d2bd448 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@protonmail.com>
Date: Thu, 11 Jun 2020 14:16:42 +0200
Subject: [PATCH 5/5] gnu: system: add example with yggdrasil

* gnu/system/examples/yggdrasil.tmpl: New file.
---
gnu/system/examples/yggdrasil.tmpl | 61 ++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
create mode 100644 gnu/system/examples/yggdrasil.tmpl

Toggle diff (69 lines)
diff --git a/gnu/system/examples/yggdrasil.tmpl b/gnu/system/examples/yggdrasil.tmpl
new file mode 100644
index 0000000000..244a899bd0
--- /dev/null
+++ b/gnu/system/examples/yggdrasil.tmpl
@@ -0,0 +1,61 @@
+;; This is an operating system configuration template
+;; for a "bare bones" setup, with no X11 display server.
+
+(use-modules (gnu))
+(use-service-modules networking ssh)
+(use-package-modules admin networking screen)
+
+(operating-system
+ (host-name "ruby-guard-5545")
+ (timezone "Europe/Budapest")
+ (locale "en_US.utf8")
+
+ ;; Boot in "legacy" BIOS mode, assuming /dev/sdX is the
+ ;; target hard disk, and "my-root" is the label of the target
+ ;; root file system.
+ (bootloader (bootloader-configuration
+ (bootloader grub-bootloader)
+ (target "/dev/sdX")))
+ (file-systems (cons (file-system
+ (device (file-system-label "my-root"))
+ (mount-point "/")
+ (type "ext4"))
+ %base-file-systems))
+
+ ;; This is where user accounts are specified. The "root"
+ ;; account is implicit, and is initially created with the
+ ;; empty password.
+ (users (cons (user-account
+ (name "alice")
+ (comment "Bob's sister")
+ (group "users")
+
+ ;; Adding the account to the "wheel" group
+ ;; makes it a sudoer. Adding it to "audio"
+ ;; and "video" allows the user to play sound
+ ;; and access the webcam.
+ (supplementary-groups '("wheel"
+ "audio" "video")))
+ %base-user-accounts))
+
+ ;; Globally-installed packages.
+ (packages (cons* screen yggdrasil htop %base-packages))
+
+ ;; Add services to the baseline: a DHCP client and
+ ;; an SSH server.
+ (services
+ (append
+ (list
+ (service dhcp-client-service-type)
+ (service yggdrasil-service-type
+ (yggdrasil-configuration
+ (log-to 'stdout)
+ (log-level 'debug)
+ (autoconf? #f)
+ (json-config
+ ;; choose one from https://github.com/yggdrasil-network/public-peers
+ '((peers . #("tcp://1.2.3.4:1337"))))))
+ (service openssh-service-type
+ (openssh-configuration
+ (port-number 2222))))
+ %base-services)))
--
2.26.2
R
R
raingloom wrote on 14 Jun 2020 03:35
[PATCH] Yggdrasil package and accompanying shepherd service (mesh network)
(address . 41803@debbugs.gnu.org)
20200614033547.01691604@riseup.net
Bump.

Could someone look at this?
J
J
Julien Lepiller wrote on 12 Jul 2020 00:12
Re: [bug#41803] [PATCH] Yggdrasil package and accompanying shepherd service (mesh network)
(name . raingloom)(address . raingloom@riseup.net)(address . 41803@debbugs.gnu.org)
20200712001206.760aee62@tachikoma.lepiller.eu
Le Thu, 11 Jun 2020 15:56:56 +0200,
raingloom <raingloom@riseup.net> a écrit :

Toggle quote (40 lines)
> "Yggdrasil is an early-stage implementation of a fully end-to-end
> encrypted IPv6 network."
>
> I spent the last few days packaging it and now it's in a state where I
> think it's usable.
>
> The configuration can include private keys, so that part should NOT go
> in the operating system config, because it would get stored in the
> world-readable Guix store. Nix works around this by merging the
> generated config with a JSON file and sending it to yggdrasil over its
> stdin.
>
> I chose not to do that because I couldn't figure out how to open a
> service's stdin and because I think the way I did it is much more
> elegant in the long run.
>
> The package is lightly patched to take not one but two config files,
> and it simply merges them internally. The patch is completely
> backwards compatible and unobtrusive. It took me about an hour to
> write and debug and most of that was just figuring out Go's syntax
> and type system. I will try to get upstream to accept it, or
> implement similar functionality.
>
> Still TODO:
> documenting the service as an info page.
>
> The gist of using it is:
> 1. look at example operating system
> 2. see yggdrasil -genconf -json for config options
> (3.) optional: save output as /etc/yggdrasil-secret.conf
> (4.) chmod 600 /etc/yggdrasil-secret.conf
> (5.) delete everything but the signing and encryption keys
> 6. add peers as needed, or set autoconf? to #t to connect through a
> local peer
>
> It seems to work fine. I could connect to open peers from one
> machine and another one could auto-configure itself to connect through
> the first one over the LAN. It's pretty nifty.

Hi,

this is more of a quick review.

First patch LGTM.

You should split every package you add in the second patch in separate
patches. Also the commit message should say "new variable", no need to
say it's public.

You left a comment about the license for go-github-com-gologme-log.
Have you contacted upstream to tell them about that, what was their
reaction? I think the fact that the readme says bsd implies the
intention is that it is free software, but better safe than sorry.

Otherwise, these packages lgtm.

In the third patch again, the commit message should say "new variable".
You should not use the past tense either, so "Add it".

Is the licenes lgpl3, or lgpl3+?

Not a go programmer, so I'm not reading the patch, but I'm trusting you
that it works :)

For the fourth patch, I don't think you need to list new private
variables in the commit message, nor new dependencies. Only list public
variables, as "New variables".

As you noted, could you add something about it to the manual?

In the system example, should Yggdrasil really be installed in the
system profile? If so, I think you can add a profile-service-type
extension to the service so the package is automatically available. Then
you don't need to specify the package in the os configuration, and it
ensures you install the same package (declared in the service
configuration) for the service and in the system.

Thanks for working on this!
R
R
raingloom wrote on 13 Jul 2020 16:23
(address . 41803@debbugs.gnu.org)
20200713162330.79213853@riseup.net
On Sun, 12 Jul 2020 00:12:06 +0200
Julien Lepiller <julien@lepiller.eu> wrote:

Toggle quote (11 lines)
>
> Hi,
>
> this is more of a quick review.
>
> First patch LGTM.
>
> You should split every package you add in the second patch in separate
> patches. Also the commit message should say "new variable", no need to
> say it's public.

Done!

Toggle quote (5 lines)
> You left a comment about the license for go-github-com-gologme-log.
> Have you contacted upstream to tell them about that, what was their
> reaction? I think the fact that the readme says bsd implies the
> intention is that it is free software, but better safe than sorry.

Heck, I forgot to do that, but I have contacted them yesterday and they
fixed it.

Toggle quote (7 lines)
> Otherwise, these packages lgtm.
>
> In the third patch again, the commit message should say "new
> variable". You should not use the past tense either, so "Add it".
>
> Is the licenes lgpl3, or lgpl3+?

Looks like (custom) lgpl3. The readme says so and I couldn't find
anything to indicate that a later version would also be acceptable.

Toggle quote (9 lines)
> Not a go programmer, so I'm not reading the patch, but I'm trusting
> you that it works :)
>
> For the fourth patch, I don't think you need to list new private
> variables in the commit message, nor new dependencies. Only list
> public variables, as "New variables".
>
> As you noted, could you add something about it to the manual?

On it, but I've never used texinfo, so this might take a while. Gonna
send it in a later mail.

Toggle quote (7 lines)
> In the system example, should Yggdrasil really be installed in the
> system profile? If so, I think you can add a profile-service-type
> extension to the service so the package is automatically available.
> Then you don't need to specify the package in the os configuration,
> and it ensures you install the same package (declared in the service
> configuration) for the service and in the system.

Technically it can be used without it, but yggdrasilctl is a useful
tool. I added it with the profile-service-type extension and removed
it from the packages field in the example.

Toggle quote (2 lines)
> Thanks for working on this!

UwU
From 2eb7385753610d2bf2998ea094e417091abf3e53 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Sat, 30 May 2020 12:52:00 +0200
Subject: [PATCH 01/10] gnu: go-golang-org-x-sys: update to
05986578812163b26672dabd9b425240ae2bb0ad

---
gnu/packages/golang.scm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Toggle diff (26 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 2c31632db6..8043a162b2 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -740,8 +740,8 @@ processing.")
(license license:bsd-3))))
(define-public go-golang-org-x-sys
- (let ((commit "c709ea063b76879dc9915358f55d4d77c16ab6d5")
- (revision "6"))
+ (let ((commit "05986578812163b26672dabd9b425240ae2bb0ad")
+ (revision "7"))
(package
(name "go-golang-org-x-sys")
(version (git-version "0.0.0" revision commit))
@@ -753,7 +753,7 @@ processing.")
(file-name (git-file-name name version))
(sha256
(base32
- "15nq53a6kcqchng4j0d1pjw0m6hny6126nhjdwqw5n9dzh6a226d"))))
+ "1q2rxb6z5l6pmlckjsz2l0b8lw7bqgk6frhzbmi1dv0y5irb2ka7"))))
(build-system go-build-system)
(arguments
`(#:import-path "golang.org/x/sys"
--
2.27.0
From 87e8150b1249f911e1d948ed22f85c2ca807d786 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:15:28 +0200
Subject: [PATCH 02/10] gnu: Add go-github-com-arceliar-phony

* gnu/packages/golang.scm (go-github-com-arceliar-phony): New variable.
---
gnu/packages/golang.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)

Toggle diff (34 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 8043a162b2..7b27fe8265 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -4263,3 +4263,27 @@ used by other processes.")
Porter2 stemmer}. It is written completely using finite state machines to do
suffix comparison, rather than the string-based or tree-based approaches.")
(license license:asl2.0))))
+
+(define-public go-github-com-arceliar-phony
+ (let ((commit "d0c68492aca0bd4b5c5c8e0452c9b4c8af923eaf")
+ (revision "0"))
+ (package
+ (name "go-github-com-arceliar-phony")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Arceliar/phony")
+ (commit commit)))
+ (sha256
+ (base32
+ "0876y0hlb1zh8hn0pxrb5zfdadvaqmqwlr66p19yl2a76galz992"))))
+ (arguments
+ '(#:import-path "github.com/Arceliar/phony"))
+ (build-system go-build-system)
+ (home-page "https://github.com/Arceliar/phony")
+ (synopsis "A very minimal actor model library")
+ (description "Phony is a very minimal actor model library for Go,
+inspired by the causal messaging system in the Pony programming language")
+ (license license:expat))))
--
2.27.0
From 6fe6ebab4e380639d7f6862c7acc1f677581d318 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:21:11 +0200
Subject: [PATCH 03/10] gnu: Add go-github-com-cheggaaa-pb at version 3.0.4

* gnu/packages/golang.scm (go-github-com-cheggaaa-pb): New variable.
---
gnu/packages/golang.scm | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)

Toggle diff (38 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 7b27fe8265..57aea6ddef 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -4287,3 +4287,31 @@ suffix comparison, rather than the string-based or tree-based approaches.")
(description "Phony is a very minimal actor model library for Go,
inspired by the causal messaging system in the Pony programming language")
(license license:expat))))
+
+(define-public go-github-com-cheggaaa-pb
+ (package
+ (name "go-github-com-cheggaaa-pb")
+ (version "3.0.4")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/cheggaaa/pb/")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0xhsv9yf3fz918ay6w0d87jnb3hk9vxvi16jk172kqq26x7jixd0"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/cheggaaa/pb/"))
+ (propagated-inputs
+ `(("go-github-com-fatih-color" ,go-github-com-fatih-color)
+ ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable)
+ ("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
+ ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+ (native-inputs
+ `(("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)))
+ (home-page "https://github.com/cheggaaa/pb/")
+ (synopsis "Console progress bar for Golang")
+ (description "")
+ (license license:bsd-3)))
--
2.27.0
From ea456cd7bcb301ca3fd850248b6bd9eda9e9bad1 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:22:46 +0200
Subject: [PATCH 04/10] gnu: Add go-github-com-gologme-log at version 1.2.0

* gnu/packages/golang.scm (go-github-com-gologme-log): New variable.
See comment about license.
---
gnu/packages/golang.scm | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)

Toggle diff (40 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 57aea6ddef..7f8e08446a 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -4315,3 +4315,33 @@ inspired by the causal messaging system in the Pony programming language")
(synopsis "Console progress bar for Golang")
(description "")
(license license:bsd-3)))
+
+(define-public go-github-com-gologme-log
+ (package
+ (name "go-github-com-gologme-log")
+ (version "1.2.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/gologme/log")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0shjbf52xh57bx6xka7h00yjvldjl5wwnim530xxbaragqj0cg8f"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/gologme/log"))
+ (home-page "https://github.com/gologme/log/")
+ (synopsis
+ "A fork of the golang built in log package to add support for levels")
+ (description "This package is a drop in replacement for the built-in Go log
+package. All the functionality of the built-in package still exists and is
+unchanged. In addition, this package contains a series of small enhancements
+and additions.")
+ ;; TODO: does this even qualify as a license? the LICENSE file is empty
+ ;; all it has is this paragraph in the README
+ ;; "This is free software, licensed under the same BSD license that the
+ ;; original Go log package was licensed."
+ ;; Relevant issue: https://github.com/gologme/log/issues/2
+ (license license:bsd-3)))
--
2.27.0
From 8162850815d8385e5c6ba88f6d7e4c9affd65dd2 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:26:00 +0200
Subject: [PATCH 05/10] gnu: Add go-github-com-hashicorp-go-syslog at version
1.0.0

* gnu/packages/golang.scm (go-github-com-hashicorp-go-syslog): New variable.
---
gnu/packages/golang.scm | 71 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)

Toggle diff (81 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 7f8e08446a..2e964cf961 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -4345,3 +4345,74 @@ and additions.")
;; original Go log package was licensed."
;; Relevant issue: https://github.com/gologme/log/issues/2
(license license:bsd-3)))
+
+(define-public go-github-com-hashicorp-go-syslog
+ (package
+ (name "go-github-com-hashicorp-go-syslog")
+ (version "1.0.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hashicorp/go-syslog")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "09vccqggz212cg0jir6vv708d6mx0f9w5bxrcdah3h6chgmal6v1"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/hashicorp/go-syslog"))
+ (home-page "https://github.com/hashicorp/go-syslog")
+ (synopsis "Golang syslog wrapper, cross-compile friendly")
+ (description "A very simple wrapper around log/syslog")
+ (license license:expat)))
+
+(define-public go-github-com-hjson-hjson-go
+ (package
+ (name "go-github-com-hjson-hjson-go")
+ (version "3.0.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hjson/hjson-go")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0q340mddapq0lxrdrzkjnw7xdwdn1lzifcf564wrmj8rggh7rl81"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/hjson/hjson-go"))
+ (home-page "https://hjson.org/")
+ (synopsis "Human JSON implementation for Go")
+ (description "Hjson is a syntax extension to JSON.
+It's intended to be used like a user interface for humans, to read and edit
+before passing the JSON data to the machine.")
+ (license license:expat)))
+
+(define-public go-github-com-mitchellh-mapstructure
+ (package
+ (name "go-github-com-mitchellh-mapstructure")
+ (version "1.3.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/mitchellh/mapstructure")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0l3qyskfx9bwh0b17zv8yk15rrdhjmj482jsp09f9bp0d4g9k87j"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/mitchellh/mapstructure"))
+ (home-page "https://github.com/mitchellh/mapstructure/")
+ (synopsis
+ "Go library for decoding generic map values to and from native Go structures")
+ (description
+ "Mapstructure is a Go library for decoding generic map values to structures
+and vice versa, while providing helpful error handling.
+This library is most useful when decoding values from some data stream
+(JSON, Gob, etc.) where you don't quite know the structure of the underlying
+data until you read a part of it.")
+ (license license:expat)))
--
2.27.0
From fef2fe8108383db2f77f01c1ad505357db46fb7a Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:27:01 +0200
Subject: [PATCH 06/10] gnu: Add go-golang-zx2c4-com-wireguard at version
0.0.20200320

* gnu/packages/golang.scm (go-golang-zx2c4-com-wireguard): New variable.
---
gnu/packages/golang.scm | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)

Toggle diff (39 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 2e964cf961..a3d984d864 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -4416,3 +4416,32 @@ This library is most useful when decoding values from some data stream
(JSON, Gob, etc.) where you don't quite know the structure of the underlying
data until you read a part of it.")
(license license:expat)))
+
+(define-public go-golang-zx2c4-com-wireguard
+ (package
+ (name "go-golang-zx2c4-com-wireguard")
+ (version "0.0.20200320")
+ (source
+ (origin
+ (method git-fetch)
+ ;; NOTE: module URL is a redirect
+ ;; target: git.zx2c4.com/wireguard-go
+ ;; source: golang.zx2c4.com/wireguard
+ (uri (git-reference
+ (url "https://git.zx2c4.com/wireguard-go/")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0fy4qsss3i3pkq1rpgjds4aipbwlh1dr9hbbf7jn2a1c63kfks0r"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "golang.zx2c4.com/wireguard"))
+ (propagated-inputs
+ `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
+ ("go-golang-org-x-net" ,go-golang-org-x-net)
+ ("go-golang-org-x-sys" ,go-golang-org-x-sys)
+ ("go-golang-org-x-text" ,go-golang-org-x-text)))
+ (home-page "https://git.zx2c4.com/wireguard")
+ (synopsis "This is an implementation of WireGuard in Go")
+ (description "Go Implementation of [WireGuard](https://www.wireguard.com/)")
+ (license license:expat)))
--
2.27.0
From cb9255fd2a8f5c6f4aa9f899a00575d7141c2b87 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:28:15 +0200
Subject: [PATCH 07/10] gnu: Add go-github-com-kardianos-minwinsvc.

* gnu/packages/golang.scm (go-github-com-kardianos-minwinsvc): New variable.
---
gnu/packages/golang.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)

Toggle diff (37 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index a3d984d864..d69474fcf9 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -4445,3 +4445,30 @@ data until you read a part of it.")
(synopsis "This is an implementation of WireGuard in Go")
(description "Go Implementation of [WireGuard](https://www.wireguard.com/)")
(license license:expat)))
+
+(define-public go-github-com-kardianos-minwinsvc
+ (let ((commit "cad6b2b879b0970e4245a20ebf1a81a756e2bb70")
+ (revision "0"))
+ (package
+ (name "go-github-com-kardianos-minwinsvc")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/kardianos/minwinsvc")
+ (commit commit)))
+ (sha256
+ (base32
+ "000fk0b1ff7m6dd2n3am1l39hzl6nsl1a9p7zmq78qn6h3glabdl"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/kardianos/minwinsvc"))
+ (home-page "https://github.com/kardianos/minwinsvc/")
+ ;; some packages (Yggdrasil) need it to compile
+ ;; it's a tiny package and it's easier to bundle it than to patch it out
+ (synopsis "A minimal windows only service stub for Go")
+ (description "Go programs designed to run from most *nix style operating
+systems can import this package to enable running programs as services without
+modifying them.")
+ (license license:zlib))))
--
2.27.0
From 1f947b42acdf2aa20ae0421081c959a8faebaacf Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@protonmail.com>
Date: Thu, 11 Jun 2020 14:16:42 +0200
Subject: [PATCH 10/10] gnu: system: add example with yggdrasil

* gnu/system/examples/yggdrasil.tmpl: New file.
---
gnu/system/examples/yggdrasil.tmpl | 61 ++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
create mode 100644 gnu/system/examples/yggdrasil.tmpl

Toggle diff (69 lines)
diff --git a/gnu/system/examples/yggdrasil.tmpl b/gnu/system/examples/yggdrasil.tmpl
new file mode 100644
index 0000000000..be222e9223
--- /dev/null
+++ b/gnu/system/examples/yggdrasil.tmpl
@@ -0,0 +1,61 @@
+;; This is an operating system configuration template
+;; for a "bare bones" setup, with no X11 display server.
+
+(use-modules (gnu))
+(use-service-modules networking ssh)
+(use-package-modules admin networking screen)
+
+(operating-system
+ (host-name "ruby-guard-5545")
+ (timezone "Europe/Budapest")
+ (locale "en_US.utf8")
+
+ ;; Boot in "legacy" BIOS mode, assuming /dev/sdX is the
+ ;; target hard disk, and "my-root" is the label of the target
+ ;; root file system.
+ (bootloader (bootloader-configuration
+ (bootloader grub-bootloader)
+ (target "/dev/sdX")))
+ (file-systems (cons (file-system
+ (device (file-system-label "my-root"))
+ (mount-point "/")
+ (type "ext4"))
+ %base-file-systems))
+
+ ;; This is where user accounts are specified. The "root"
+ ;; account is implicit, and is initially created with the
+ ;; empty password.
+ (users (cons (user-account
+ (name "alice")
+ (comment "Bob's sister")
+ (group "users")
+
+ ;; Adding the account to the "wheel" group
+ ;; makes it a sudoer. Adding it to "audio"
+ ;; and "video" allows the user to play sound
+ ;; and access the webcam.
+ (supplementary-groups '("wheel"
+ "audio" "video")))
+ %base-user-accounts))
+
+ ;; Globally-installed packages.
+ (packages (cons* screen %base-packages))
+
+ ;; Add services to the baseline: a DHCP client and
+ ;; an SSH server.
+ (services
+ (append
+ (list
+ (service dhcp-client-service-type)
+ (service yggdrasil-service-type
+ (yggdrasil-configuration
+ (log-to 'stdout)
+ (log-level 'debug)
+ (autoconf? #f)
+ (json-config
+ ;; choose one from https://github.com/yggdrasil-network/public-peers
+ '((peers . #("tcp://1.2.3.4:1337"))))))
+ (service openssh-service-type
+ (openssh-configuration
+ (port-number 2222))))
+ %base-services)))
--
2.27.0
R
R
raingloom wrote on 3 Sep 2020 19:59
(address . 41803@debbugs.gnu.org)
20200903195947.7b4e10c8@riseup.net
On Mon, 13 Jul 2020 16:23:30 +0200
raingloom <raingloom@riseup.net> wrote:

Toggle quote (8 lines)
> On Sun, 12 Jul 2020 00:12:06 +0200
> Julien Lepiller <julien@lepiller.eu> wrote:
> > As you noted, could you add something about it to the manual?
>
> On it, but I've never used texinfo, so this might take a while. Gonna
> send it in a later mail.
>

Finally got around to documenting it.
Also exported all the accessors for the service.

Is it mergeable in this form?

ps.: i'm not sure if i should include all patches or only the ones i
changed. to be safe i rebased it again on the current main branch and
attached all patches.
From 0fe7ec1dec27c206b1a6d854067a4319d67ea1e7 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Sat, 30 May 2020 12:52:00 +0200
Subject: [PATCH 01/11] gnu: go-golang-org-x-sys: update to
05986578812163b26672dabd9b425240ae2bb0ad

---
gnu/packages/golang.scm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Toggle diff (26 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 78bf4fff87..91f0db02a9 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -741,8 +741,8 @@ processing.")
(license license:bsd-3))))
(define-public go-golang-org-x-sys
- (let ((commit "c709ea063b76879dc9915358f55d4d77c16ab6d5")
- (revision "6"))
+ (let ((commit "05986578812163b26672dabd9b425240ae2bb0ad")
+ (revision "7"))
(package
(name "go-golang-org-x-sys")
(version (git-version "0.0.0" revision commit))
@@ -754,7 +754,7 @@ processing.")
(file-name (git-file-name name version))
(sha256
(base32
- "15nq53a6kcqchng4j0d1pjw0m6hny6126nhjdwqw5n9dzh6a226d"))))
+ "1q2rxb6z5l6pmlckjsz2l0b8lw7bqgk6frhzbmi1dv0y5irb2ka7"))))
(build-system go-build-system)
(arguments
`(#:import-path "golang.org/x/sys"
--
2.28.0
From 7a93c6168e69fddeafcdf237bb66eb6a121b7ffe Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:15:28 +0200
Subject: [PATCH 02/11] gnu: Add go-github-com-arceliar-phony

* gnu/packages/golang.scm (go-github-com-arceliar-phony): New variable.
---
gnu/packages/golang.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)

Toggle diff (34 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 91f0db02a9..b843652459 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5631,3 +5631,27 @@ Included are the following:
except that it adds convenience functions that use the fmt package to format
error messages.")
(license license:bsd-3)))
+
+(define-public go-github-com-arceliar-phony
+ (let ((commit "d0c68492aca0bd4b5c5c8e0452c9b4c8af923eaf")
+ (revision "0"))
+ (package
+ (name "go-github-com-arceliar-phony")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/Arceliar/phony")
+ (commit commit)))
+ (sha256
+ (base32
+ "0876y0hlb1zh8hn0pxrb5zfdadvaqmqwlr66p19yl2a76galz992"))))
+ (arguments
+ '(#:import-path "github.com/Arceliar/phony"))
+ (build-system go-build-system)
+ (home-page "https://github.com/Arceliar/phony")
+ (synopsis "A very minimal actor model library")
+ (description "Phony is a very minimal actor model library for Go,
+inspired by the causal messaging system in the Pony programming language")
+ (license license:expat))))
--
2.28.0
From 48c9c437d18e6c3d5f4dd82cc93f3331c23f7ce4 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:21:11 +0200
Subject: [PATCH 03/11] gnu: Add go-github-com-cheggaaa-pb at version 3.0.4

* gnu/packages/golang.scm (go-github-com-cheggaaa-pb): New variable.
---
gnu/packages/golang.scm | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)

Toggle diff (38 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index b843652459..7aacaa7bc1 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5655,3 +5655,31 @@ error messages.")
(description "Phony is a very minimal actor model library for Go,
inspired by the causal messaging system in the Pony programming language")
(license license:expat))))
+
+(define-public go-github-com-cheggaaa-pb
+ (package
+ (name "go-github-com-cheggaaa-pb")
+ (version "3.0.4")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/cheggaaa/pb/")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0xhsv9yf3fz918ay6w0d87jnb3hk9vxvi16jk172kqq26x7jixd0"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/cheggaaa/pb/"))
+ (propagated-inputs
+ `(("go-github-com-fatih-color" ,go-github-com-fatih-color)
+ ("go-github-com-mattn-go-colorable" ,go-github-com-mattn-go-colorable)
+ ("go-github.com-mattn-go-runewidth" ,go-github.com-mattn-go-runewidth)
+ ("go-golang-org-x-sys" ,go-golang-org-x-sys)))
+ (native-inputs
+ `(("go-github-com-mattn-go-isatty" ,go-github-com-mattn-go-isatty)))
+ (home-page "https://github.com/cheggaaa/pb/")
+ (synopsis "Console progress bar for Golang")
+ (description "")
+ (license license:bsd-3)))
--
2.28.0
From d9e586f4548ed85b0a557e9f527cf59e180f877f Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:22:46 +0200
Subject: [PATCH 04/11] gnu: Add go-github-com-gologme-log at version 1.2.0

* gnu/packages/golang.scm (go-github-com-gologme-log): New variable.
See comment about license.
---
gnu/packages/golang.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)

Toggle diff (37 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 7aacaa7bc1..38654de97a 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5683,3 +5683,30 @@ inspired by the causal messaging system in the Pony programming language")
(synopsis "Console progress bar for Golang")
(description "")
(license license:bsd-3)))
+
+(define-public go-github-com-gologme-log
+ ;; this is the same as v1.2.0, only the LICENSE file changed
+ (let ((commit "720ba0b3ccf0a91bc6018c9967a2479f93f56a55"))
+ (package
+ (name "go-github-com-gologme-log")
+ (version "1.2.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/gologme/log")
+ (commit commit)))
+ (sha256
+ (base32
+ "0z3gs5ngv2jszp42ypp3ai0pn410v3b2m674g73ma7vsbn2yjk1n"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/gologme/log"))
+ (home-page "https://github.com/gologme/log/")
+ (synopsis
+ "A fork of the golang built in log package to add support for levels")
+ (description "This package is a drop in replacement for the built-in Go log
+package. All the functionality of the built-in package still exists and is
+unchanged. In addition, this package contains a series of small enhancements
+and additions.")
+ (license license:bsd-3))))
--
2.28.0
From f0915d5917399a4ed0549c7b346738c759653531 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 16:14:35 +0200
Subject: [PATCH 05/11] gnu: Add go-github-com-hashicorp-go-syslog at version
1.0.0

* gnu/packages/golang.scm (go-github-com-hashicorp-go-syslog): New variable.
---
gnu/packages/golang.scm | 71 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)

Toggle diff (81 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 38654de97a..97db5c7b7b 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5710,3 +5710,74 @@ package. All the functionality of the built-in package still exists and is
unchanged. In addition, this package contains a series of small enhancements
and additions.")
(license license:bsd-3))))
+
+(define-public go-github-com-hashicorp-go-syslog
+ (package
+ (name "go-github-com-hashicorp-go-syslog")
+ (version "1.0.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hashicorp/go-syslog")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "09vccqggz212cg0jir6vv708d6mx0f9w5bxrcdah3h6chgmal6v1"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/hashicorp/go-syslog"))
+ (home-page "https://github.com/hashicorp/go-syslog")
+ (synopsis "Golang syslog wrapper, cross-compile friendly")
+ (description "A very simple wrapper around log/syslog")
+ (license license:expat)))
+
+(define-public go-github-com-hjson-hjson-go
+ (package
+ (name "go-github-com-hjson-hjson-go")
+ (version "3.0.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hjson/hjson-go")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0q340mddapq0lxrdrzkjnw7xdwdn1lzifcf564wrmj8rggh7rl81"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/hjson/hjson-go"))
+ (home-page "https://hjson.org/")
+ (synopsis "Human JSON implementation for Go")
+ (description "Hjson is a syntax extension to JSON.
+It's intended to be used like a user interface for humans, to read and edit
+before passing the JSON data to the machine.")
+ (license license:expat)))
+
+(define-public go-github-com-mitchellh-mapstructure
+ (package
+ (name "go-github-com-mitchellh-mapstructure")
+ (version "1.3.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/mitchellh/mapstructure")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0l3qyskfx9bwh0b17zv8yk15rrdhjmj482jsp09f9bp0d4g9k87j"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/mitchellh/mapstructure"))
+ (home-page "https://github.com/mitchellh/mapstructure/")
+ (synopsis
+ "Go library for decoding generic map values to and from native Go structures")
+ (description
+ "Mapstructure is a Go library for decoding generic map values to structures
+and vice versa, while providing helpful error handling.
+This library is most useful when decoding values from some data stream
+(JSON, Gob, etc.) where you don't quite know the structure of the underlying
+data until you read a part of it.")
+ (license license:expat)))
--
2.28.0
From 713cb77af81843dd3d582363177b68091a1d8310 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:27:01 +0200
Subject: [PATCH 06/11] gnu: Add go-golang-zx2c4-com-wireguard at version
0.0.20200320

* gnu/packages/golang.scm (go-golang-zx2c4-com-wireguard): New variable.
---
gnu/packages/golang.scm | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)

Toggle diff (39 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 97db5c7b7b..961600ad8f 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5781,3 +5781,32 @@ This library is most useful when decoding values from some data stream
(JSON, Gob, etc.) where you don't quite know the structure of the underlying
data until you read a part of it.")
(license license:expat)))
+
+(define-public go-golang-zx2c4-com-wireguard
+ (package
+ (name "go-golang-zx2c4-com-wireguard")
+ (version "0.0.20200320")
+ (source
+ (origin
+ (method git-fetch)
+ ;; NOTE: module URL is a redirect
+ ;; target: git.zx2c4.com/wireguard-go
+ ;; source: golang.zx2c4.com/wireguard
+ (uri (git-reference
+ (url "https://git.zx2c4.com/wireguard-go/")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0fy4qsss3i3pkq1rpgjds4aipbwlh1dr9hbbf7jn2a1c63kfks0r"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "golang.zx2c4.com/wireguard"))
+ (propagated-inputs
+ `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
+ ("go-golang-org-x-net" ,go-golang-org-x-net)
+ ("go-golang-org-x-sys" ,go-golang-org-x-sys)
+ ("go-golang-org-x-text" ,go-golang-org-x-text)))
+ (home-page "https://git.zx2c4.com/wireguard")
+ (synopsis "This is an implementation of WireGuard in Go")
+ (description "Go Implementation of [WireGuard](https://www.wireguard.com/)")
+ (license license:expat)))
--
2.28.0
From 63cf4ec66588027516b9d69e989f29daefb3176b Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:28:15 +0200
Subject: [PATCH 07/11] gnu: Add go-github-com-kardianos-minwinsvc.

* gnu/packages/golang.scm (go-github-com-kardianos-minwinsvc): New variable.
---
gnu/packages/golang.scm | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)

Toggle diff (37 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 961600ad8f..744ddadaa1 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5810,3 +5810,30 @@ data until you read a part of it.")
(synopsis "This is an implementation of WireGuard in Go")
(description "Go Implementation of [WireGuard](https://www.wireguard.com/)")
(license license:expat)))
+
+(define-public go-github-com-kardianos-minwinsvc
+ (let ((commit "cad6b2b879b0970e4245a20ebf1a81a756e2bb70")
+ (revision "0"))
+ (package
+ (name "go-github-com-kardianos-minwinsvc")
+ (version (git-version "0.0.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/kardianos/minwinsvc")
+ (commit commit)))
+ (sha256
+ (base32
+ "000fk0b1ff7m6dd2n3am1l39hzl6nsl1a9p7zmq78qn6h3glabdl"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/kardianos/minwinsvc"))
+ (home-page "https://github.com/kardianos/minwinsvc/")
+ ;; some packages (Yggdrasil) need it to compile
+ ;; it's a tiny package and it's easier to bundle it than to patch it out
+ (synopsis "A minimal windows only service stub for Go")
+ (description "Go programs designed to run from most *nix style operating
+systems can import this package to enable running programs as services without
+modifying them.")
+ (license license:zlib))))
--
2.28.0
From 26a591e6a1483acd713b44bed6b0cd53ab50c4c5 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@protonmail.com>
Date: Thu, 11 Jun 2020 14:16:42 +0200
Subject: [PATCH 10/11] gnu: system: add example with yggdrasil

* gnu/system/examples/yggdrasil.tmpl: New file.
---
gnu/system/examples/yggdrasil.tmpl | 61 ++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
create mode 100644 gnu/system/examples/yggdrasil.tmpl

Toggle diff (69 lines)
diff --git a/gnu/system/examples/yggdrasil.tmpl b/gnu/system/examples/yggdrasil.tmpl
new file mode 100644
index 0000000000..be222e9223
--- /dev/null
+++ b/gnu/system/examples/yggdrasil.tmpl
@@ -0,0 +1,61 @@
+;; This is an operating system configuration template
+;; for a "bare bones" setup, with no X11 display server.
+
+(use-modules (gnu))
+(use-service-modules networking ssh)
+(use-package-modules admin networking screen)
+
+(operating-system
+ (host-name "ruby-guard-5545")
+ (timezone "Europe/Budapest")
+ (locale "en_US.utf8")
+
+ ;; Boot in "legacy" BIOS mode, assuming /dev/sdX is the
+ ;; target hard disk, and "my-root" is the label of the target
+ ;; root file system.
+ (bootloader (bootloader-configuration
+ (bootloader grub-bootloader)
+ (target "/dev/sdX")))
+ (file-systems (cons (file-system
+ (device (file-system-label "my-root"))
+ (mount-point "/")
+ (type "ext4"))
+ %base-file-systems))
+
+ ;; This is where user accounts are specified. The "root"
+ ;; account is implicit, and is initially created with the
+ ;; empty password.
+ (users (cons (user-account
+ (name "alice")
+ (comment "Bob's sister")
+ (group "users")
+
+ ;; Adding the account to the "wheel" group
+ ;; makes it a sudoer. Adding it to "audio"
+ ;; and "video" allows the user to play sound
+ ;; and access the webcam.
+ (supplementary-groups '("wheel"
+ "audio" "video")))
+ %base-user-accounts))
+
+ ;; Globally-installed packages.
+ (packages (cons* screen %base-packages))
+
+ ;; Add services to the baseline: a DHCP client and
+ ;; an SSH server.
+ (services
+ (append
+ (list
+ (service dhcp-client-service-type)
+ (service yggdrasil-service-type
+ (yggdrasil-configuration
+ (log-to 'stdout)
+ (log-level 'debug)
+ (autoconf? #f)
+ (json-config
+ ;; choose one from https://github.com/yggdrasil-network/public-peers
+ '((peers . #("tcp://1.2.3.4:1337"))))))
+ (service openssh-service-type
+ (openssh-configuration
+ (port-number 2222))))
+ %base-services)))
--
2.28.0
From f9bf4bd3af7ef114b54d67155bc3a568194d8f5e Mon Sep 17 00:00:00 2001
From: your friendly localhost admin <raingloom@riseup.net>
Date: Thu, 3 Sep 2020 19:43:44 +0200
Subject: [PATCH 11/11] doc: document Yggdrasil service

* doc/guix.texi
(yggdrasil-service-type, yggdrasil-configuration): Newly documented.
---
doc/guix.texi | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)

Toggle diff (74 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index d3f0f729ec..308dedfcb3 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -80,6 +80,7 @@ Copyright @copyright{} 2020 Brice Waegeneire@*
Copyright @copyright{} 2020 R Veera Kumar@*
Copyright @copyright{} 2020 Pierre Langlois@*
Copyright @copyright{} 2020 pinoaffe@*
+Copyright @copyright{} 2020 raingloom@*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -15324,6 +15325,59 @@ Use this to add additional options and manage shared secrets out-of-band.
@end table
@end deftp
+@defvr {Scheme Variable} yggdrasil-service-type
+The service type for connecting to the @uref{https://yggdrasil-network.github.io/, Yggdrasil network}, an early-stage implementation of a fully end-to-end encrypted IPv6 network.
+Pass it a value of @code{yggdrasil-configuration} to connect it to public peers and/or local peers.
+
+Here is an example using public peers and private configuration from @file{/etc/yggdrasil-private.conf} (the default value for @code{config-file}).
+See below for which options should go to @code{json-config} and which to @code{config-file}.
+
+@lisp
+(service yggdrasil-service-type
+ (yggdrasil-configuration
+ (autoconf? #f)
+ (json-config
+ ;; choose one from https://github.com/yggdrasil-network/public-peers
+ '((peers . #("tcp://1.2.3.4:1337"))))))
+@end lisp
+@end defvr
+
+@deftp {Data Type} yggdrasil-configuration
+Data type representing the configuration of Yggdrasil. Note that these settings are stored in the Guix store, which is readable to all users.
+
+@table @asis
+@item @code{package} (default: @code{yggdrasil})
+Package object of Yggdrasil.
+
+@item @code{json-config} (default: @code{'()})
+Contents of @file{/etc/yggdrasil.conf}. Will be merged with @file{/etc/yggdrasil-private.conf}.
+Do not store sensitive data (like private keys) in this.
+See the output of @code{yggdrasil -genconf} for a quick overview of valid keys and their default values.
+
+@item @code{autoconf?} (default: @code{#f})
+Whether to automatically configure an address and join through local peers.
+
+@item @code{log-level} (default: @code{'info})
+How much detail to include in logs. Use @code{'debug} for more detail.
+
+@item @code{log-to} (default: @code{'stdout})
+Where to send logs. By default, the service logs standard output to @file{/var/log/yggdrasil.log}.
+The alternative is @code{'syslog}.
+
+@item @code{config-file} (default: @code{"/etc/yggdrasil-private.conf"})
+What HJSON file to load sensitive data from. This is where private keys should be stored, which are necessary to specify if you don't want a randomized address after each restart.
+Use @code{"/dev/null"} if you don't need it.
+Options defined in this file take precedence over @code{json-config}.
+Use the output of @code{yggdrasil -genconf} as a starting point. You most likely only need these keys:
+@itemize
+@item @code{EncryptionPublicKey}
+@item @code{EncryptionPrivateKey}
+@item @code{SigningPublicKey}
+@item @code{SigningPrivateKey}
+@end itemize
+@end table
+@end deftp
+
@node Unattended Upgrades
@subsection Unattended Upgrades
--
2.28.0
R
R
raingloom wrote on 8 Oct 2020 00:15
(address . 41803@debbugs.gnu.org)
20201008001552.2d51fbbe@riseup.net
On Mon, 13 Jul 2020 16:23:30 +0200
raingloom <raingloom@riseup.net> wrote:

Toggle quote (61 lines)
> On Sun, 12 Jul 2020 00:12:06 +0200
> Julien Lepiller <julien@lepiller.eu> wrote:
>
> >
> > Hi,
> >
> > this is more of a quick review.
> >
> > First patch LGTM.
> >
> > You should split every package you add in the second patch in
> > separate patches. Also the commit message should say "new
> > variable", no need to say it's public.
>
> Done!
>
> > You left a comment about the license for go-github-com-gologme-log.
> > Have you contacted upstream to tell them about that, what was their
> > reaction? I think the fact that the readme says bsd implies the
> > intention is that it is free software, but better safe than sorry.
>
> Heck, I forgot to do that, but I have contacted them yesterday and
> they fixed it.
>
> > Otherwise, these packages lgtm.
> >
> > In the third patch again, the commit message should say "new
> > variable". You should not use the past tense either, so "Add it".
> >
> > Is the licenes lgpl3, or lgpl3+?
>
> Looks like (custom) lgpl3. The readme says so and I couldn't find
> anything to indicate that a later version would also be acceptable.
>
> > Not a go programmer, so I'm not reading the patch, but I'm trusting
> > you that it works :)
> >
> > For the fourth patch, I don't think you need to list new private
> > variables in the commit message, nor new dependencies. Only list
> > public variables, as "New variables".
> >
> > As you noted, could you add something about it to the manual?
>
> On it, but I've never used texinfo, so this might take a while. Gonna
> send it in a later mail.
>
> > In the system example, should Yggdrasil really be installed in the
> > system profile? If so, I think you can add a profile-service-type
> > extension to the service so the package is automatically available.
> > Then you don't need to specify the package in the os configuration,
> > and it ensures you install the same package (declared in the service
> > configuration) for the service and in the system.
>
> Technically it can be used without it, but yggdrasilctl is a useful
> tool. I added it with the profile-service-type extension and removed
> it from the packages field in the example.
>
> > Thanks for working on this!
>
> UwU

Bump.

Could someone please test this?

Others have expressed interest in usin Yggdrasil with Guix, so I really
think these patches would be useful.

New versions of the packages are already coming out though, so if
necessary I could send a new patch series with the updated versions.
J
J
Julien Lepiller wrote on 14 Oct 2020 01:09
[PATCH] Yggdrasil package and accompanying shepherd service (mesh network)
(address . 41803@debbugs.gnu.org)
20201014010942.59e16051@tachikoma
Hi,

I went ahead and pushed your first four patches with changes. I'll need
you to work a bit more before I can push the rest.

I've added a copyright line for you in golang.scm.

For the rest of the packages, could you split all your patches into
one patch per package? For each package, please run "guix lint" and
fix any issue (except for archival, you can't do anything about it).
This includes: using (file-name (git-file-name name version)) inside
the origin record, making sure the synopsis doesn't start with "A", and
the description ends with a full stop.

I also changed you commit messages: don't include the version number
for added packages and add a full stop at the end of messages.

For yggdrasil, please grep for dist_PATCH_DATA in the git log, you'll
find examples of good commit messages :)

For the service, changes to the documentation are usually made in the
same patch, so could you please merge your last three patches? I don't
know if we can use guile-json directly in a service definition without
causing troubles for people who have different versions of guile-json
in their profile already. I'll have to ask people who are more
knowledgeable than me!

To chown the socket, you'll need an activation service type (if the
socket survives restarts of yggdrasil), or to change the start action
of the shepherd service type.

Your changes to the documentation look good, but incomplete.

Could you rebase and send updated patches for the rest of this series?

Thank you!
R
R
raingloom wrote on 29 Oct 2020 01:20
(address . 41803@debbugs.gnu.org)
20201029012056.058afac6@riseup.net
I didn't get the last reply for some reason, only saw it on the issue
tracker. Would be nice if i could import it somehow, but the issue
tracker GUI doesn't seem to have an option for that.
In any case, thanks for the feedback! ^u^

Attached is an improved patch list.

I'm pretty sure I incorporated all feedback, except for the guile-json
part. I have no idea how it'd pose any issue in practice and if it
does, that seems like a deeper design issue. Reimplementing JSON
encoding because Guix can't find its libraries doesn't seem like the
right solution in any scenario.

The docs were indeed lacking, I added a more information and fixed some
plain badly written parts.

The solution to the socket ownership issue turned out to be much
simpler: Shepherd has a #:group option.

One issue I encountered while guix lint-ing the packages is that it and
refresh could both identify what the new release is but refresh
--update seemingly never worked. Not sure what's up with that.
From ae338395cbd8b8a1a3347b8d39cf6f660ac47dcc Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Fri, 23 Oct 2020 02:02:20 +0200
Subject: [PATCH 1/6] gnu: Added go-github-com-hashicorp-go-syslog.

* gnu/packages/golang.scm (go-github-com-hashicorp-go-syslog): New variable.
---
gnu/packages/golang.scm | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)

Toggle diff (33 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index bf99fd2d07..6518c5b1b9 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5821,3 +5821,26 @@ log package. All the functionality of the built-in package still exists and
is unchanged. This package contains a series of small enhancements and
additions.")
(license license:bsd-3))))
+
+(define-public go-github-com-hashicorp-go-syslog
+ (package
+ (name "go-github-com-hashicorp-go-syslog")
+ (version "1.0.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hashicorp/go-syslog")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "09vccqggz212cg0jir6vv708d6mx0f9w5bxrcdah3h6chgmal6v1"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/hashicorp/go-syslog"))
+ (home-page "https://github.com/hashicorp/go-syslog")
+ (synopsis "Golang syslog wrapper, cross-compile friendly")
+ (description "A very simple wrapper around log/syslog")
+ (license license:expat)))
+
--
2.28.0
From fcae37f77fd2db01d61bd5162c854de0de7bdba7 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Fri, 23 Oct 2020 02:03:41 +0200
Subject: [PATCH 2/6] gnu: Added go-github-com-hjson-hjson-go.

* gnu/packages/golang.scm (go-github-com-hjson-hjson-go): New variable.
---
gnu/packages/golang.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)

Toggle diff (34 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 6518c5b1b9..bc65f3ed32 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5844,3 +5844,27 @@ additions.")
(description "A very simple wrapper around log/syslog")
(license license:expat)))
+(define-public go-github-com-hjson-hjson-go
+ (package
+ (name "go-github-com-hjson-hjson-go")
+ (version "3.1.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hjson/hjson-go")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1dfdiahimg6z9idg8jiqxwnlwjnmasbjccx8gnag49cz4yfqskaz"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/hjson/hjson-go"))
+ (home-page "https://hjson.org/")
+ (synopsis "Human JSON implementation for Go")
+ (description "Hjson is a syntax extension to JSON.
+It's intended to be used like a user interface for humans, to read and edit
+before passing the JSON data to the machine.")
+ (license license:expat)))
+
--
2.28.0
From fb4e950f98f5cf5feb96d0935ec92cc0f77cef67 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Mon, 13 Jul 2020 04:27:01 +0200
Subject: [PATCH 3/6] gnu: Added go-golang-zx2c4-com-wireguard.

* gnu/packages/golang.scm (go-golang-zx2c4-com-wireguard): New variable.
---
gnu/packages/golang.scm | 56 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)

Toggle diff (66 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index bc65f3ed32..7450021d33 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5868,3 +5868,59 @@ It's intended to be used like a user interface for humans, to read and edit
before passing the JSON data to the machine.")
(license license:expat)))
+(define-public go-github-com-mitchellh-mapstructure
+ (package
+ (name "go-github-com-mitchellh-mapstructure")
+ (version "1.3.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/mitchellh/mapstructure")
+ (commit (string-append "v" version))))
+ (sha256
+ (base32
+ "0l3qyskfx9bwh0b17zv8yk15rrdhjmj482jsp09f9bp0d4g9k87j"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/mitchellh/mapstructure"))
+ (home-page "https://github.com/mitchellh/mapstructure/")
+ (synopsis
+ "Go library for decoding generic map values to and from native Go structures")
+ (description
+ "Mapstructure is a Go library for decoding generic map values to structures
+and vice versa, while providing helpful error handling.
+This library is most useful when decoding values from some data stream
+(JSON, Gob, etc.) where you don't quite know the structure of the underlying
+data until you read a part of it.")
+ (license license:expat)))
+
+(define-public go-golang-zx2c4-com-wireguard
+ (package
+ (name "go-golang-zx2c4-com-wireguard")
+ (version "0.0.20200320")
+ (source
+ (origin
+ (method git-fetch)
+ ;; NOTE: module URL is a redirect
+ ;; target: git.zx2c4.com/wireguard-go
+ ;; source: golang.zx2c4.com/wireguard
+ (uri (git-reference
+ (url "https://git.zx2c4.com/wireguard-go/")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0fy4qsss3i3pkq1rpgjds4aipbwlh1dr9hbbf7jn2a1c63kfks0r"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "golang.zx2c4.com/wireguard"))
+ (propagated-inputs
+ `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
+ ("go-golang-org-x-net" ,go-golang-org-x-net)
+ ("go-golang-org-x-sys" ,go-golang-org-x-sys)
+ ("go-golang-org-x-text" ,go-golang-org-x-text)))
+ (home-page "https://git.zx2c4.com/wireguard")
+ (synopsis "This is an implementation of WireGuard in Go")
+ (description "Go Implementation of [WireGuard](https://www.wireguard.com/)")
+ (license license:expat)))
--
2.28.0
From f7d450d046fa9218b4afb8a7b1d525e735207dfa Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Sat, 17 Oct 2020 20:56:53 +0200
Subject: [PATCH 4/6] gnu: Add go-github-com-kardianos-minwinsvc.

* gnu/packages/golang.scm (go-github-com-kardianos-minwinsvc): New variable.
---
gnu/packages/golang.scm | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)

Toggle diff (36 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 7450021d33..26acf4f8d5 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5924,3 +5924,29 @@ data until you read a part of it.")
(synopsis "This is an implementation of WireGuard in Go")
(description "Go Implementation of [WireGuard](https://www.wireguard.com/)")
(license license:expat)))
+
+(define-public go-github-com-kardianos-minwinsvc
+ (package
+ (name "go-github-com-kardianos-minwinsvc")
+ (version "1.0.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/kardianos/minwinsvc")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0z941cxymkjcsj3p5l3g4wm2da3smz7iyqk2wbs5y8lmxd4kfzd8"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/kardianos/minwinsvc"))
+ (home-page "https://github.com/kardianos/minwinsvc/")
+ ;; some packages (Yggdrasil) need it to compile
+ ;; it's a tiny package and it's easier to bundle it than to patch it out
+ (synopsis "Minimal windows only service stub for Go")
+ (description "Go programs designed to run from most *nix style operating
+systems can import this package to enable running programs as services without
+modifying them.")
+ (license license:zlib)))
--
2.28.0
R
R
raingloom wrote on 5 Nov 2020 15:43
(address . 41803@debbugs.gnu.org)
20201105154341.174e5029@riseup.net
Final version, hopefully.
Slight upgrade to system example to make testing easier. (added curl to
packages)
From 2b13fad52d5aeb4c5d2b700cd906b53c98b239ec Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Thu, 29 Oct 2020 17:10:25 +0100
Subject: [PATCH 1/6] gnu: Added go-github-com-hashicorp-go-syslog.

* gnu/packages/golang.scm (go-github-com-hashicorp-go-syslog): New variable.
---
gnu/packages/golang.scm | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)

Toggle diff (33 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 6ba735c4a2..f9fffadd9d 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5933,3 +5933,26 @@ tests.")
(description
"This package provides SCSS compiler support for Go applications.")
(license license:expat)))
+
+(define-public go-github-com-hashicorp-go-syslog
+ (package
+ (name "go-github-com-hashicorp-go-syslog")
+ (version "1.0.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hashicorp/go-syslog")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "09vccqggz212cg0jir6vv708d6mx0f9w5bxrcdah3h6chgmal6v1"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/hashicorp/go-syslog"))
+ (home-page "https://github.com/hashicorp/go-syslog")
+ (synopsis "Golang syslog wrapper, cross-compile friendly")
+ (description "A very simple wrapper around log/syslog")
+ (license license:expat)))
+
--
2.28.0
From fda7a7767a6c4d18d2b520a77e0e77b32052052f Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Fri, 23 Oct 2020 02:03:41 +0200
Subject: [PATCH 2/6] gnu: Added go-github-com-hjson-hjson-go.

* gnu/packages/golang.scm (go-github-com-hjson-hjson-go): New variable.
---
gnu/packages/golang.scm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)

Toggle diff (34 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index f9fffadd9d..4f937baa03 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5956,3 +5956,27 @@ tests.")
(description "A very simple wrapper around log/syslog")
(license license:expat)))
+(define-public go-github-com-hjson-hjson-go
+ (package
+ (name "go-github-com-hjson-hjson-go")
+ (version "3.1.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hjson/hjson-go")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1dfdiahimg6z9idg8jiqxwnlwjnmasbjccx8gnag49cz4yfqskaz"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/hjson/hjson-go"))
+ (home-page "https://hjson.org/")
+ (synopsis "Human JSON implementation for Go")
+ (description "Hjson is a syntax extension to JSON.
+It's intended to be used like a user interface for humans, to read and edit
+before passing the JSON data to the machine.")
+ (license license:expat)))
+
--
2.28.0
From c9538dcf9c8235093b003491f0a542736877ec0c Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Thu, 5 Nov 2020 14:48:39 +0100
Subject: [PATCH 3/6] gnu: Added go-golang-zx2c4-com-wireguard.

* gnu/packages/golang.scm (go-golang-zx2c4-com-wireguard): New variable.
---
gnu/packages/golang.scm | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)

Toggle diff (39 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 4f937baa03..f478aeda91 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -5980,3 +5980,32 @@ It's intended to be used like a user interface for humans, to read and edit
before passing the JSON data to the machine.")
(license license:expat)))
+(define-public go-golang-zx2c4-com-wireguard
+ (package
+ (name "go-golang-zx2c4-com-wireguard")
+ (version "0.0.20200320")
+ (source
+ (origin
+ (method git-fetch)
+ ;; NOTE: module URL is a redirect
+ ;; target: git.zx2c4.com/wireguard-go
+ ;; source: golang.zx2c4.com/wireguard
+ (uri (git-reference
+ (url "https://git.zx2c4.com/wireguard-go/")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0fy4qsss3i3pkq1rpgjds4aipbwlh1dr9hbbf7jn2a1c63kfks0r"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "golang.zx2c4.com/wireguard"))
+ (propagated-inputs
+ `(("go-golang-org-x-crypto" ,go-golang-org-x-crypto)
+ ("go-golang-org-x-net" ,go-golang-org-x-net)
+ ("go-golang-org-x-sys" ,go-golang-org-x-sys)
+ ("go-golang-org-x-text" ,go-golang-org-x-text)))
+ (home-page "https://git.zx2c4.com/wireguard")
+ (synopsis "This is an implementation of WireGuard in Go")
+ (description "Go Implementation of [WireGuard](https://www.wireguard.com/)")
+ (license license:expat)))
--
2.28.0
From 4ef72e6c67df5178fb0f21b1f465492232ddc169 Mon Sep 17 00:00:00 2001
From: raingloom <raingloom@riseup.net>
Date: Sat, 17 Oct 2020 20:56:53 +0200
Subject: [PATCH 4/6] gnu: Add go-github-com-kardianos-minwinsvc.

* gnu/packages/golang.scm (go-github-com-kardianos-minwinsvc): New variable.
---
gnu/packages/golang.scm | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)

Toggle diff (36 lines)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index f478aeda91..524638d212 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -6009,3 +6009,29 @@ before passing the JSON data to the machine.")
(synopsis "This is an implementation of WireGuard in Go")
(description "Go Implementation of [WireGuard](https://www.wireguard.com/)")
(license license:expat)))
+
+(define-public go-github-com-kardianos-minwinsvc
+ (package
+ (name "go-github-com-kardianos-minwinsvc")
+ (version "1.0.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/kardianos/minwinsvc")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0z941cxymkjcsj3p5l3g4wm2da3smz7iyqk2wbs5y8lmxd4kfzd8"))))
+ (build-system go-build-system)
+ (arguments
+ '(#:import-path "github.com/kardianos/minwinsvc"))
+ (home-page "https://github.com/kardianos/minwinsvc/")
+ ;; some packages (Yggdrasil) need it to compile
+ ;; it's a tiny package and it's easier to bundle it than to patch it out
+ (synopsis "Minimal windows only service stub for Go")
+ (description "Go programs designed to run from most *nix style operating
+systems can import this package to enable running programs as services without
+modifying them.")
+ (license license:zlib)))
--
2.28.0
J
J
Julien Lepiller wrote on 5 Nov 2020 18:48
(name . raingloom)(address . raingloom@riseup.net)(address . 41803-done@debbugs.gnu.org)
20201105184808.5464dea4@tachikoma.lepiller.eu
Le Thu, 5 Nov 2020 15:43:41 +0100,
raingloom <raingloom@riseup.net> a écrit :

Toggle quote (4 lines)
> Final version, hopefully.
> Slight upgrade to system example to make testing easier. (added curl
> to packages)

Thank you, finally pushed as 336c9f0a81c9bc0ed0a2d3e0d050a677806c07c0
to fe1cd098d2b83737e96f19438612291f5a9316e4.

I had to change a few things: the commit messages need to be written in
present tense (Added -> Add). I added some line breaks in the manual
and double spacing before periods. I changed the synopsis and
description of one or two packages to match our standards.
Closed
?