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>master
parent
6ba1769da1
commit
d814246e2e
|
@ -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 = \
|
||||
|
|
|
@ -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)))
|
||||
|
|
|
@ -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)
|
Reference in New Issue