guix-commits
[Top][All Lists]
Advanced

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

05/06: gnu: Add yggdrasil.


From: guix-commits
Subject: 05/06: gnu: Add yggdrasil.
Date: Thu, 5 Nov 2020 12:46:11 -0500 (EST)

roptat pushed a commit to branch master
in repository guix.

commit d814246e2ebc4bb65d3714fcd9a6285553a8c092
Author: raingloom <raingloom@riseup.net>
AuthorDate: Sat Oct 17 20:57:57 2020 +0200

    gnu: Add yggdrasil.
    
    * gnu/packages/networking.scm (yggdrasil): New variable.
    * gnu/packages/patches/yggdrasil-extra-config.patch: New file.
    * gnu/local.mk (dist_PATCH_DATA): Add it.
    
    Signed-off-by: Julien Lepiller <julien@lepiller.eu>
---
 gnu/local.mk                                      |  1 +
 gnu/packages/networking.scm                       | 95 +++++++++++++++++++++++
 gnu/packages/patches/yggdrasil-extra-config.patch | 86 ++++++++++++++++++++
 3 files changed, 182 insertions(+)

diff --git a/gnu/local.mk b/gnu/local.mk
index 72f81a9..3a8f1e3 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1725,6 +1725,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 fefb9a5..f94c3e4 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -97,6 +97,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 graphviz)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
@@ -3821,3 +3822,97 @@ stamps.")
 client and server.  It allows you to use remote block devices over a TCP/IP
 network.")
     (license license:gpl2)))
+
+(define-public yggdrasil
+  (package
+    (name "yggdrasil")
+    (version "0.3.15")
+    (source
+     (origin
+       (method git-fetch)
+       (uri
+        (git-reference
+         (url "https://github.com/yggdrasil-network/yggdrasil-go";)
+         (commit (string-append "v" version))
+         (recursive? #t)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "0gk7gy8yq5nrnblv4imxzzm2hac4ri0hlw19ajfbc1zll5kj32gf"))
+       (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))
+                      #t)))))
+    ;; 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
+     "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 0000000..c21ca29
--- /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 len(conf)>0 {
+       // 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)



reply via email to

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