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>
This commit is contained in:
raingloom 2020-10-17 20:57:57 +02:00 committed by Julien Lepiller
parent 6ba1769da1
commit d814246e2e
No known key found for this signature in database
GPG key ID: 53D457B2D636EE82
3 changed files with 182 additions and 0 deletions

View file

@ -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 = \

View file

@ -97,6 +97,7 @@ (define-module (gnu packages networking)
#: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 @@ (define-public nbd
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)))

View file

@ -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)