From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id CBCGKraRDF8fFgAA0tVLHw (envelope-from ) for ; Mon, 13 Jul 2020 16:54:14 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id 2D1uJraRDF/CbwAAB5/wlQ (envelope-from ) for ; Mon, 13 Jul 2020 16:54:14 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 9BA919401CF for ; Mon, 13 Jul 2020 16:54:12 +0000 (UTC) Received: from localhost ([::1]:41810 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jv1iT-00026O-Gx for larch@yhetil.org; Mon, 13 Jul 2020 12:54:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38646) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jv1iM-00026D-S9 for guix-patches@gnu.org; Mon, 13 Jul 2020 12:54:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:37560) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jv1iM-0007QX-Is for guix-patches@gnu.org; Mon, 13 Jul 2020 12:54:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jv1iM-0006PN-Gy for guix-patches@gnu.org; Mon, 13 Jul 2020 12:54:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#41803] [PATCH] Yggdrasil package and accompanying shepherd service (mesh network) Resent-From: raingloom Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 13 Jul 2020 16:54:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 41803 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 41803@debbugs.gnu.org Received: via spool by 41803-submit@debbugs.gnu.org id=B41803.159465923524618 (code B ref 41803); Mon, 13 Jul 2020 16:54:02 +0000 Received: (at 41803) by debbugs.gnu.org; 13 Jul 2020 16:53:55 +0000 Received: from localhost ([127.0.0.1]:49106 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jv1i7-0006Oq-55 for submit@debbugs.gnu.org; Mon, 13 Jul 2020 12:53:55 -0400 Received: from mx1.riseup.net ([198.252.153.129]:50042) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jv1i2-0006Oe-Ci for 41803@debbugs.gnu.org; Mon, 13 Jul 2020 12:53:46 -0400 Received: from bell.riseup.net (bell-pn.riseup.net [10.0.1.178]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client CN "*.riseup.net", Issuer "Sectigo RSA Domain Validation Secure Server CA" (not verified)) by mx1.riseup.net (Postfix) with ESMTPS id 4B58qT220CzFcd0 for <41803@debbugs.gnu.org>; Mon, 13 Jul 2020 09:53:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=riseup.net; s=squak; t=1594659221; bh=rcddmRvCdG8Zr/qRDWG/QNzWhLWBcxHtBz82KaIa75w=; h=Date:From:To:Subject:In-Reply-To:References:From; b=aWBN9zogo0pM/HgWX7BkjC8lLg4i2B9TrHGkV8s3qjfDN6Lcza42W7CHWjlld2zTY EayqoS/btc+tO5CueHpmBOuQE/auKsNL8zQaYzelQNiIww6IOA0DrE98KSpfpOZqM4 krfllNo1VzeNO/f6fuOQBbxKnqx1seswkiH52JxE= X-Riseup-User-ID: 3FD205943F486A4F92594887D8142BE9D1D18AD31B31793E93324CC6F67DD801 Received: from [127.0.0.1] (localhost [127.0.0.1]) by bell.riseup.net (Postfix) with ESMTPSA id 4B58qS3wXwzJn7K for <41803@debbugs.gnu.org>; Mon, 13 Jul 2020 09:53:40 -0700 (PDT) Date: Mon, 13 Jul 2020 16:23:30 +0200 From: raingloom Message-ID: <20200713162330.79213853@riseup.net> In-Reply-To: <20200712001206.760aee62@tachikoma.lepiller.eu> References: <20200611155656.7ece9c24@riseup.net> <20200712001206.760aee62@tachikoma.lepiller.eu> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/c9VKTLvN0NVelvWX/Tjs6+u" X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Spam-Score: -1.0 (-) X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=fail (rsa verify failed) header.d=riseup.net header.s=squak header.b=aWBN9zog; dmarc=fail reason="SPF not aligned (relaxed)" header.from=riseup.net (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Spam-Score: 1.59 X-TUID: TZwG5or2BEli --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline On Sun, 12 Jul 2020 00:12:06 +0200 Julien Lepiller 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 --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0001-gnu-go-golang-org-x-sys-update-to-05986578812163b266.patch >From 2eb7385753610d2bf2998ea094e417091abf3e53 Mon Sep 17 00:00:00 2001 From: raingloom 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(-) 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 --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0002-gnu-Add-go-github-com-arceliar-phony.patch >From 87e8150b1249f911e1d948ed22f85c2ca807d786 Mon Sep 17 00:00:00 2001 From: raingloom 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(+) 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 --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0003-gnu-Add-go-github-com-cheggaaa-pb-at-version-3.0.4.patch >From 6fe6ebab4e380639d7f6862c7acc1f677581d318 Mon Sep 17 00:00:00 2001 From: raingloom 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(+) 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 --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0004-gnu-Add-go-github-com-gologme-log-at-version-1.2.0.patch >From ea456cd7bcb301ca3fd850248b6bd9eda9e9bad1 Mon Sep 17 00:00:00 2001 From: raingloom 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(+) 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 --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0005-gnu-Add-go-github-com-hashicorp-go-syslog-at-version.patch >From 8162850815d8385e5c6ba88f6d7e4c9affd65dd2 Mon Sep 17 00:00:00 2001 From: raingloom 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(+) 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 --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0006-gnu-Add-go-golang-zx2c4-com-wireguard-at-version-0.0.patch >From fef2fe8108383db2f77f01c1ad505357db46fb7a Mon Sep 17 00:00:00 2001 From: raingloom 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(+) 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 --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0007-gnu-Add-go-github-com-kardianos-minwinsvc.patch >From cb9255fd2a8f5c6f4aa9f899a00575d7141c2b87 Mon Sep 17 00:00:00 2001 From: raingloom 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(+) 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 --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0008-gnu-Add-yggdrasil-at-version-0.3.14-plus-patch.patch >From 57768e73adb7fa4717d5a82901f4cc61da478554 Mon Sep 17 00:00:00 2001 From: raingloom Date: Mon, 13 Jul 2020 03:52:56 +0200 Subject: [PATCH 08/10] gnu: Add yggdrasil at version 0.3.14 (plus patch) * gnu/packages/networking.scm: (yggdrasil): New variable. (gnu packages golang): New dependency. * gnu/packages/patches/yggdrasil-extra-config.patch: New file. * gnu/local.mk: (yggdrasil-extra-config.patch): Add to patches. --- gnu/local.mk | 1 + gnu/packages/networking.scm | 90 +++++++++++++++++++ .../patches/yggdrasil-extra-config.patch | 86 ++++++++++++++++++ 3 files changed, 177 insertions(+) create mode 100644 gnu/packages/patches/yggdrasil-extra-config.patch diff --git a/gnu/local.mk b/gnu/local.mk index 57a1d0df84..2228a1407a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1643,6 +1643,7 @@ dist_patch_DATA = \ %D%/packages/patches/xsane-fix-snprintf-buffer-length.patch \ %D%/packages/patches/xsane-support-ipv6.patch \ %D%/packages/patches/xsane-tighten-default-umask.patch \ + %D%/packages/patches/yggdrasil-extra-config.patch \ %D%/packages/patches/zziplib-CVE-2018-16548.patch MISC_DISTRO_FILES = \ diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm index 53599fe191..467e3ee260 100644 --- a/gnu/packages/networking.scm +++ b/gnu/packages/networking.scm @@ -95,6 +95,7 @@ #:use-module (gnu packages glib) #:use-module (gnu packages gnome) #:use-module (gnu packages gnupg) + #:use-module (gnu packages golang) #:use-module (gnu packages gtk) #:use-module (gnu packages image) #:use-module (gnu packages libevent) @@ -3381,3 +3382,92 @@ hashcash stamps efficiently. This package contains a command-line tool for computing and verifying hashcash stamps.") (license license:public-domain))) + +(define-public yggdrasil + (package + (name "yggdrasil") + (version "0.3.14") + (source + (origin + (method git-fetch) + (uri + (git-reference + (url "https://github.com/yggdrasil-network/yggdrasil-go") + (commit (string-append "v" version)) + (recursive? #t))) + (sha256 + (base32 + "0vncf39gqr5hzjn948jlchppf7451a6rcvr962ng97sjdy8mplrw")) + (patches (search-patches "yggdrasil-extra-config.patch")))) + (build-system go-build-system) + (arguments + '(#:import-path "github.com/yggdrasil-network/yggdrasil-go" + ;; TODO: figure out how tests are run + #:tests? #f + #:install-source? #f + #:phases (modify-phases %standard-phases + (replace 'build + (lambda _ + (for-each + (lambda (c) + (invoke "go" "build" "-v" "-ldflags=-s -w" + (string-append + "github.com/yggdrasil-network/yggdrasil-go/cmd/" + c))) + (list "yggdrasil" "yggdrasilctl")) + #t)) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin/")) + (doc (string-append out "/share/doc/yggdrasil/"))) + (mkdir-p bin) + (for-each + (lambda (f) + (install-file f bin)) + (list "yggdrasil" "yggdrasilctl")) + (mkdir-p doc) + (copy-recursively + (string-append + "src/github.com/yggdrasil-network/yggdrasil-go/" + "doc/yggdrasil-network.github.io") + doc))))))) + ;; https://github.com/kardianos/minwinsvc is windows only + (propagated-inputs + `(("go-github-com-arceliar-phony" ,go-github-com-arceliar-phony) + ("go-github-com-cheggaaa-pb" ,go-github-com-cheggaaa-pb) + ("go-github-com-gologme-log" ,go-github-com-gologme-log) + ("go-github-com-hashicorp-go-syslog" ,go-github-com-hashicorp-go-syslog) + ("go-github-com-hjson-hjson-go" ,go-github-com-hjson-hjson-go) + ("go-github-com-kardianos-minwinsvc" ,go-github-com-kardianos-minwinsvc) + ("go-github-com-mitchellh-mapstructure" + ,go-github-com-mitchellh-mapstructure) + ("go-golang-org-x-crypto" ,go-golang-org-x-crypto) + ("go-golang-org-x-net" ,go-golang-org-x-net) + ("go-golang-org-x-text" ,go-golang-org-x-text) + ("go-golang-zx2c4-com-wireguard" ,go-golang-zx2c4-com-wireguard) + ("go-netlink" ,go-netlink) + ("go-netns" ,go-netns))) + (home-page "https://yggdrasil-network.github.io/blog.html") + (synopsis "An experiment in scalable routing as an encrypted IPv6 overlay network") + (description "Yggdrasil is an early-stage implementation of a fully end-to-end encrypted +IPv6 network. It is lightweight, self-arranging, supported on multiple platforms and allows +pretty much any IPv6-capable application to communicate securely with other Yggdrasil nodes. +Yggdrasil does not require you to have IPv6 Internet connectivity - it also works over IPv4.") + (license + ;; As a special exception to the GNU Lesser General Public License version 3 + ;; ("LGPL3"), the copyright holders of this Library give you permission to + ;; convey to a third party a Combined Work that links statically or dynamically + ;; to this Library without providing any Minimal Corresponding Source or + ;; Minimal Application Code as set out in 4d or providing the installation + ;; information set out in section 4e, provided that you comply with the other + ;; provisions of LGPL3 and provided that you meet, for the Application the + ;; terms and conditions of the license(s) which apply to the Application. + ;; Except as stated in this special exception, the provisions of LGPL3 will + ;; continue to comply in full to this Library. If you modify this Library, you + ;; may apply this exception to your version of this Library, but you are not + ;; obliged to do so. If you do not wish to do so, delete this exception + ;; statement from your version. This exception does not (and cannot) modify any + ;; license terms which apply to the Application, with which you must still + ;; comply + license:lgpl3))) diff --git a/gnu/packages/patches/yggdrasil-extra-config.patch b/gnu/packages/patches/yggdrasil-extra-config.patch new file mode 100644 index 0000000000..e3502eb644 --- /dev/null +++ b/gnu/packages/patches/yggdrasil-extra-config.patch @@ -0,0 +1,86 @@ +diff --git a/cmd/yggdrasil/main.go b/cmd/yggdrasil/main.go +index 813e950..08d35cc 100644 +--- a/cmd/yggdrasil/main.go ++++ b/cmd/yggdrasil/main.go +@@ -40,11 +40,12 @@ type node struct { + admin module.Module // admin.AdminSocket + } + +-func readConfig(useconf *bool, useconffile *string, normaliseconf *bool) *config.NodeConfig { ++func readConfig(useconf *bool, useconffile *string, extraconffile *string, normaliseconf *bool) *config.NodeConfig { + // Use a configuration file. If -useconf, the configuration will be read + // from stdin. If -useconffile, the configuration will be read from the + // filesystem. + var conf []byte ++ var extraconf []byte + var err error + if *useconffile != "" { + // Read the file from the filesystem +@@ -56,6 +57,21 @@ func readConfig(useconf *bool, useconffile *string, normaliseconf *bool) *config + if err != nil { + panic(err) + } ++ if *extraconffile != "" { ++ extraconf, err = ioutil.ReadFile(*extraconffile); ++ } ++ if err != nil { ++ panic(err) ++ } ++ // Generate a new configuration - this gives us a set of sane defaults - ++ // then parse the configuration we loaded above on top of it. The effect ++ // of this is that any configuration item that is missing from the provided ++ // configuration will use a sane default. ++ cfg := config.GenerateConfig() ++ var confs [2][]byte ++ confs[0]=conf ++ confs[1]=extraconf ++ for _, conf := range confs { + // If there's a byte order mark - which Windows 10 is now incredibly fond of + // throwing everywhere when it's converting things into UTF-16 for the hell + // of it - remove it and decode back down into UTF-8. This is necessary +@@ -69,11 +85,6 @@ func readConfig(useconf *bool, useconffile *string, normaliseconf *bool) *config + panic(err) + } + } +- // Generate a new configuration - this gives us a set of sane defaults - +- // then parse the configuration we loaded above on top of it. The effect +- // of this is that any configuration item that is missing from the provided +- // configuration will use a sane default. +- cfg := config.GenerateConfig() + var dat map[string]interface{} + if err := hjson.Unmarshal(conf, &dat); err != nil { + panic(err) +@@ -112,6 +123,7 @@ func readConfig(useconf *bool, useconffile *string, normaliseconf *bool) *config + if err = mapstructure.Decode(dat, &cfg); err != nil { + panic(err) + } ++ } + return cfg + } + +@@ -164,6 +176,7 @@ func main() { + genconf := flag.Bool("genconf", false, "print a new config to stdout") + useconf := flag.Bool("useconf", false, "read HJSON/JSON config from stdin") + useconffile := flag.String("useconffile", "", "read HJSON/JSON config from specified file path") ++ extraconffile := flag.String("extraconffile", "", "extra (usually private) HJSON/JSON config from specified file path") + normaliseconf := flag.Bool("normaliseconf", false, "use in combination with either -useconf or -useconffile, outputs your configuration normalised") + confjson := flag.Bool("json", false, "print configuration from -genconf or -normaliseconf as JSON instead of HJSON") + autoconf := flag.Bool("autoconf", false, "automatic mode (dynamic IP, peer with IPv6 neighbors)") +@@ -187,7 +200,7 @@ func main() { + cfg = config.GenerateConfig() + case *useconffile != "" || *useconf: + // Read the configuration from either stdin or from the filesystem +- cfg = readConfig(useconf, useconffile, normaliseconf) ++ cfg = readConfig(useconf, useconffile, extraconffile, normaliseconf) + // If the -normaliseconf option was specified then remarshal the above + // configuration and print it back to stdout. This lets the user update + // their configuration file with newly mapped names (like above) or to +@@ -332,7 +345,7 @@ func main() { + goto exit + case _ = <-r: + if *useconffile != "" { +- cfg = readConfig(useconf, useconffile, normaliseconf) ++ cfg = readConfig(useconf, useconffile, extraconffile, normaliseconf) + logger.Infoln("Reloading configuration from", *useconffile) + n.core.UpdateConfig(cfg) + n.tuntap.UpdateConfig(cfg) -- 2.27.0 --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0009-gnu-services-Add-new-service-for-yggdrasil-network.patch >From 796058952afc293354873484bc092211966e0108 Mon Sep 17 00:00:00 2001 From: raingloom Date: Thu, 11 Jun 2020 14:09:57 +0200 Subject: [PATCH 09/10] gnu: services: Add new service for yggdrasil network. * gnu/services/networking.scm: (yggdrasil-service-type yggdrasil-configuration yggdrasil-configuration? yggdrasil-configuration-package yggdrasil-configuration-auto-conf yggdrasil-configuration-log-level yggdrasil-configuration-log-to): New variables. ((json),(srfi srfi-43)): New dependencies. --- gnu/services/networking.scm | 115 +++++++++++++++++++++++++++++++++++- 1 file changed, 114 insertions(+), 1 deletion(-) diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm index 353fdce2bb..ce86df0d58 100644 --- a/gnu/services/networking.scm +++ b/gnu/services/networking.scm @@ -61,7 +61,9 @@ #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (srfi srfi-26) + #:use-module (srfi srfi-43) #:use-module (ice-9 match) + #:use-module (json) #:re-export (static-networking-service static-networking-service-type) #:export (%facebook-host-aliases @@ -180,7 +182,15 @@ pagekite-configuration-kitesecret pagekite-configuration-frontend pagekite-configuration-kites - pagekite-configuration-extra-file)) + pagekite-configuration-extra-file + + yggdrasil-service-type + yggdrasil-configuration + yggdrasil-configuration? + yggdrasil-configuration-package + yggdrasil-configuration-auto-conf + yggdrasil-configuration-log-level + yggdrasil-configuration-log-to)) ;;; Commentary: ;;; @@ -1747,4 +1757,107 @@ table inet filter { "Run @url{https://pagekite.net/,PageKite}, a tunneling solution to make local servers publicly accessible on the web, even behind NATs and firewalls."))) + +;;; +;;; Yggdrasil +;;; + +(define-record-type* + yggdrasil-configuration + make-yggdrasil-configuration + yggdrasil-configuration? + (package yggdrasil-configuration-package + (default yggdrasil)) + (json-config yggdrasil-configuration-json-config + (default '())) + (config-file yggdrasil-config-file + (default "/etc/yggdrasil-private.conf")) + (autoconf? yggdrasil-configuration-autoconf? + (default #f)) + (log-level yggdrasil-configuration-log-level + (default 'info)) + (log-to yggdrasil-configuration-log-to + (default 'stdout))) + +(define (yggdrasil-configuration-file config) + (define (scm->yggdrasil-json x) + (define key-value? + dotted-list?) + (define (param->camel str) + (string-concatenate + (map + string-capitalize + (string-split str (cut eqv? <> #\-))))) + (cond + ((key-value? x) + (let ((k (car x)) + (v (cdr x))) + (cons + (if (symbol? k) + (param->camel (symbol->string k)) + k) + v))) + ((list? x) (map scm->yggdrasil-json x)) + ((vector? x) (vector-map scm->yggdrasil-json x)) + (else x))) + (computed-file + "yggdrasil.conf" + #~(call-with-output-file #$output + (lambda (port) + ;; it's HJSON, so comments are a-okay + (display "# Generated by yggdrasil-service\n" port) + (display #$(scm->json-string + (scm->yggdrasil-json + (yggdrasil-configuration-json-config config))) + port))))) + +(define (yggdrasil-shepherd-service config) + "Return a for yggdrasil with CONFIG." + (define yggdrasil-command + #~(append + (list (string-append + #$(yggdrasil-configuration-package config) + "/bin/yggdrasil") + "-useconffile" + #$(yggdrasil-configuration-file config)) + (if #$(yggdrasil-configuration-autoconf? config) + '("-autoconf") + '()) + (let ((extraconf #$(yggdrasil-config-file config))) + (if extraconf + (list "-extraconffile" extraconf) + '())) + (list "-loglevel" + #$(symbol->string + (yggdrasil-configuration-log-level config)) + "-logto" + #$(symbol->string + (yggdrasil-configuration-log-to config))))) + (list (shepherd-service + (documentation "Connect to the Yggdrasil mesh network") + (provision '(yggdrasil)) + (requirement '(networking)) + (start #~(make-forkexec-constructor + #$yggdrasil-command + #:log-file "/var/log/yggdrasil.log")) + (stop #~(make-kill-destructor))))) + +;; TODO: somehow chown the socket. might be better to fix upstream? +(define %yggdrasil-accounts + (list (user-group (name "yggdrasil") (system? #t)))) + +(define yggdrasil-service-type + (service-type + (name 'yggdrasil) + (description + "Connect to the Yggdrasil mesh network. +See yggdrasil -genconf for config options.") + (extensions + (list (service-extension shepherd-root-service-type + yggdrasil-shepherd-service) + (service-extension account-service-type + (const %yggdrasil-accounts)) + (service-extension profile-service-type + (compose list yggdrasil-configuration-package)))))) + ;;; networking.scm ends here -- 2.27.0 --MP_/c9VKTLvN0NVelvWX/Tjs6+u Content-Type: text/x-patch Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename=0010-gnu-system-add-example-with-yggdrasil.patch >From 1f947b42acdf2aa20ae0421081c959a8faebaacf Mon Sep 17 00:00:00 2001 From: raingloom 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 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 --MP_/c9VKTLvN0NVelvWX/Tjs6+u--