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:
		
							parent
							
								
									6ba1769da1
								
							
						
					
					
						commit
						d814246e2e
					
				
					 3 changed files with 182 additions and 0 deletions
				
			
		|  | @ -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))) | ||||
|  |  | |||
							
								
								
									
										86
									
								
								gnu/packages/patches/yggdrasil-extra-config.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								gnu/packages/patches/yggdrasil-extra-config.patch
									
										
									
									
									
										Normal 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) | ||||
		Reference in a new issue