mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-10-31 01:05:08 +03:00 
			
		
		
		
	Merge branch 'develop' into master
This commit is contained in:
		
						commit
						573574c8b6
					
				
					 78 changed files with 3245 additions and 2206 deletions
				
			
		|  | @ -15,6 +15,10 @@ command -v mkbom >/dev/null 2>&1 || ( | |||
|   sudo make install || (echo "Failed to build mkbom"; exit 1) | ||||
| ) | ||||
| 
 | ||||
| # Build Yggdrasil | ||||
| echo "running GO111MODULE=on GOOS=darwin GOARCH=${PKGARCH-amd64} ./build" | ||||
| GO111MODULE=on GOOS=darwin GOARCH=${PKGARCH-amd64} ./build | ||||
| 
 | ||||
| # Check if we can find the files we need - they should | ||||
| # exist if you are running this script from the root of | ||||
| # the yggdrasil-go repo and you have ran ./build | ||||
|  | @ -81,6 +85,7 @@ PKGNAME=$(sh contrib/semver/name.sh) | |||
| PKGVERSION=$(sh contrib/semver/version.sh --bare) | ||||
| PKGARCH=${PKGARCH-amd64} | ||||
| PAYLOADSIZE=$(( $(wc -c pkgbuild/flat/base.pkg/Payload | awk '{ print $1 }') / 1024 )) | ||||
| [ "$PKGARCH" = "amd64" ] && PKGHOSTARCH="x86_64" || PKGHOSTARCH=${PKGARCH} | ||||
| 
 | ||||
| # Create the PackageInfo file | ||||
| cat > pkgbuild/flat/base.pkg/PackageInfo << EOF | ||||
|  | @ -100,7 +105,7 @@ cat > pkgbuild/flat/Distribution << EOF | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <installer-script minSpecVersion="1.000000" authoringTool="com.apple.PackageMaker" authoringToolVersion="3.0.3" authoringToolBuild="174"> | ||||
|     <title>Yggdrasil (${PKGNAME}-${PKGVERSION})</title> | ||||
|     <options customize="never" allow-external-scripts="no"/> | ||||
|     <options customize="never" allow-external-scripts="no" hostArchitectures="${PKGHOSTARCH}" /> | ||||
|     <domains enable_anywhere="true"/> | ||||
|     <installation-check script="pm_install_check();"/> | ||||
|     <script> | ||||
|  |  | |||
							
								
								
									
										52
									
								
								contrib/mobile/build
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										52
									
								
								contrib/mobile/build
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,52 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| set -ef | ||||
| 
 | ||||
| [ ! -d contrib/mobile ] && (echo "Must run ./contrib/mobile/build [-i] [-a] from the repository top level folder"; exit 1) | ||||
| 
 | ||||
| PKGSRC=${PKGSRC:-github.com/yggdrasil-network/yggdrasil-go/src/version} | ||||
| PKGNAME=${PKGNAME:-$(sh contrib/semver/name.sh)} | ||||
| PKGVER=${PKGVER:-$(sh contrib/semver/version.sh --bare)} | ||||
| 
 | ||||
| LDFLAGS="-X $PKGSRC.buildName=$PKGNAME -X $PKGSRC.buildVersion=$PKGVER" | ||||
| ARGS="-v" | ||||
| 
 | ||||
| while getopts "aitc:l:d" option | ||||
| do | ||||
|   case "$option" | ||||
|   in | ||||
|   i) IOS=true;; | ||||
|   a) ANDROID=true;; | ||||
|   t) TABLES=true;; | ||||
|   c) GCFLAGS="$GCFLAGS $OPTARG";; | ||||
|   l) LDFLAGS="$LDFLAGS $OPTARG";; | ||||
|   d) ARGS="$ARGS -tags debug" DEBUG=true;; | ||||
|   esac | ||||
| done | ||||
| 
 | ||||
| if [ -z $TABLES ] && [ -z $DEBUG ]; then | ||||
|   LDFLAGS="$LDFLAGS -s -w" | ||||
| fi | ||||
| 
 | ||||
| if [ ! $IOS ] && [ ! $ANDROID ]; then  | ||||
|   echo "Must specify -a (Android), -i (iOS) or both" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| if [ $IOS ]; then | ||||
|   echo "Building framework for iOS" | ||||
|   go get golang.org/x/mobile/bind | ||||
|   gomobile bind \ | ||||
|     -target ios -tags mobile -o Yggdrasil.xcframework \ | ||||
|     -ldflags="$LDFLAGS $STRIP" -gcflags="$GCFLAGS" \ | ||||
|     ./contrib/mobile ./src/config; | ||||
| fi | ||||
| 
 | ||||
| if [ $ANDROID ]; then | ||||
|   echo "Building aar for Android" | ||||
|   go get golang.org/x/mobile/bind | ||||
|   gomobile bind \ | ||||
|     -target android -tags mobile -o yggdrasil.aar \ | ||||
|     -ldflags="$LDFLAGS $STRIP" -gcflags="$GCFLAGS" \ | ||||
|     ./contrib/mobile ./src/config; | ||||
| fi | ||||
							
								
								
									
										210
									
								
								contrib/mobile/mobile.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										210
									
								
								contrib/mobile/mobile.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,210 @@ | |||
| package mobile | ||||
| 
 | ||||
| import ( | ||||
| 	"encoding/hex" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"net" | ||||
| 	"regexp" | ||||
| 
 | ||||
| 	"github.com/gologme/log" | ||||
| 
 | ||||
| 	"github.com/yggdrasil-network/yggdrasil-go/src/address" | ||||
| 	"github.com/yggdrasil-network/yggdrasil-go/src/config" | ||||
| 	"github.com/yggdrasil-network/yggdrasil-go/src/core" | ||||
| 	"github.com/yggdrasil-network/yggdrasil-go/src/defaults" | ||||
| 	"github.com/yggdrasil-network/yggdrasil-go/src/ipv6rwc" | ||||
| 	"github.com/yggdrasil-network/yggdrasil-go/src/multicast" | ||||
| 	"github.com/yggdrasil-network/yggdrasil-go/src/version" | ||||
| 
 | ||||
| 	_ "golang.org/x/mobile/bind" | ||||
| ) | ||||
| 
 | ||||
| // Yggdrasil mobile package is meant to "plug the gap" for mobile support, as | ||||
| // Gomobile will not create headers for Swift/Obj-C etc if they have complex | ||||
| // (non-native) types. Therefore for iOS we will expose some nice simple | ||||
| // functions. Note that in the case of iOS we handle reading/writing to/from TUN | ||||
| // in Swift therefore we use the "dummy" TUN interface instead. | ||||
| type Yggdrasil struct { | ||||
| 	core      *core.Core | ||||
| 	iprwc     *ipv6rwc.ReadWriteCloser | ||||
| 	config    *config.NodeConfig | ||||
| 	multicast *multicast.Multicast | ||||
| 	log       MobileLogger | ||||
| } | ||||
| 
 | ||||
| // StartAutoconfigure starts a node with a randomly generated config | ||||
| func (m *Yggdrasil) StartAutoconfigure() error { | ||||
| 	return m.StartJSON([]byte("{}")) | ||||
| } | ||||
| 
 | ||||
| // StartJSON starts a node with the given JSON config. You can get JSON config | ||||
| // (rather than HJSON) by using the GenerateConfigJSON() function | ||||
| func (m *Yggdrasil) StartJSON(configjson []byte) error { | ||||
| 	logger := log.New(m.log, "", 0) | ||||
| 	logger.EnableLevel("error") | ||||
| 	logger.EnableLevel("warn") | ||||
| 	logger.EnableLevel("info") | ||||
| 	m.config = defaults.GenerateConfig() | ||||
| 	if err := json.Unmarshal(configjson, &m.config); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	// Setup the Yggdrasil node itself. | ||||
| 	{ | ||||
| 		sk, err := hex.DecodeString(m.config.PrivateKey) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 		options := []core.SetupOption{} | ||||
| 		for _, peer := range m.config.Peers { | ||||
| 			options = append(options, core.Peer{URI: peer}) | ||||
| 		} | ||||
| 		for intf, peers := range m.config.InterfacePeers { | ||||
| 			for _, peer := range peers { | ||||
| 				options = append(options, core.Peer{URI: peer, SourceInterface: intf}) | ||||
| 			} | ||||
| 		} | ||||
| 		for _, allowed := range m.config.AllowedPublicKeys { | ||||
| 			k, err := hex.DecodeString(allowed) | ||||
| 			if err != nil { | ||||
| 				panic(err) | ||||
| 			} | ||||
| 			options = append(options, core.AllowedPublicKey(k[:])) | ||||
| 		} | ||||
| 		m.core, err = core.New(sk[:], logger, options...) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Setup the multicast module. | ||||
| 	if len(m.config.MulticastInterfaces) > 0 { | ||||
| 		var err error | ||||
| 		options := []multicast.SetupOption{} | ||||
| 		for _, intf := range m.config.MulticastInterfaces { | ||||
| 			options = append(options, multicast.MulticastInterface{ | ||||
| 				Regex:  regexp.MustCompile(intf.Regex), | ||||
| 				Beacon: intf.Beacon, | ||||
| 				Listen: intf.Listen, | ||||
| 				Port:   intf.Port, | ||||
| 			}) | ||||
| 		} | ||||
| 		m.multicast, err = multicast.New(m.core, logger, options...) | ||||
| 		if err != nil { | ||||
| 			logger.Errorln("An error occurred starting multicast:", err) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	mtu := m.config.IfMTU | ||||
| 	m.iprwc = ipv6rwc.NewReadWriteCloser(m.core) | ||||
| 	if m.iprwc.MaxMTU() < mtu { | ||||
| 		mtu = m.iprwc.MaxMTU() | ||||
| 	} | ||||
| 	m.iprwc.SetMTU(mtu) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // Send sends a packet to Yggdrasil. It should be a fully formed | ||||
| // IPv6 packet | ||||
| func (m *Yggdrasil) Send(p []byte) error { | ||||
| 	if m.iprwc == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	_, _ = m.iprwc.Write(p) | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // Recv waits for and reads a packet coming from Yggdrasil. It | ||||
| // will be a fully formed IPv6 packet | ||||
| func (m *Yggdrasil) Recv() ([]byte, error) { | ||||
| 	if m.iprwc == nil { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 	var buf [65535]byte | ||||
| 	n, _ := m.iprwc.Read(buf[:]) | ||||
| 	return buf[:n], nil | ||||
| } | ||||
| 
 | ||||
| // Stop the mobile Yggdrasil instance | ||||
| func (m *Yggdrasil) Stop() error { | ||||
| 	logger := log.New(m.log, "", 0) | ||||
| 	logger.EnableLevel("info") | ||||
| 	logger.Infof("Stop the mobile Yggdrasil instance %s", "") | ||||
| 	if err := m.multicast.Stop(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	m.core.Stop() | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // GenerateConfigJSON generates mobile-friendly configuration in JSON format | ||||
| func GenerateConfigJSON() []byte { | ||||
| 	nc := defaults.GenerateConfig() | ||||
| 	nc.IfName = "none" | ||||
| 	if json, err := json.Marshal(nc); err == nil { | ||||
| 		return json | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // GetAddressString gets the node's IPv6 address | ||||
| func (m *Yggdrasil) GetAddressString() string { | ||||
| 	ip := m.core.Address() | ||||
| 	return ip.String() | ||||
| } | ||||
| 
 | ||||
| // GetSubnetString gets the node's IPv6 subnet in CIDR notation | ||||
| func (m *Yggdrasil) GetSubnetString() string { | ||||
| 	subnet := m.core.Subnet() | ||||
| 	return subnet.String() | ||||
| } | ||||
| 
 | ||||
| // GetPublicKeyString gets the node's public key in hex form | ||||
| func (m *Yggdrasil) GetPublicKeyString() string { | ||||
| 	return hex.EncodeToString(m.core.GetSelf().Key) | ||||
| } | ||||
| 
 | ||||
| // GetCoordsString gets the node's coordinates | ||||
| func (m *Yggdrasil) GetCoordsString() string { | ||||
| 	return fmt.Sprintf("%v", m.core.GetSelf().Coords) | ||||
| } | ||||
| 
 | ||||
| func (m *Yggdrasil) GetPeersJSON() (result string) { | ||||
| 	peers := []struct { | ||||
| 		core.PeerInfo | ||||
| 		IP string | ||||
| 	}{} | ||||
| 	for _, v := range m.core.GetPeers() { | ||||
| 		a := address.AddrForKey(v.Key) | ||||
| 		ip := net.IP(a[:]).String() | ||||
| 		peers = append(peers, struct { | ||||
| 			core.PeerInfo | ||||
| 			IP string | ||||
| 		}{ | ||||
| 			PeerInfo: v, | ||||
| 			IP:       ip, | ||||
| 		}) | ||||
| 	} | ||||
| 	if res, err := json.Marshal(peers); err == nil { | ||||
| 		return string(res) | ||||
| 	} else { | ||||
| 		return "{}" | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (m *Yggdrasil) GetDHTJSON() (result string) { | ||||
| 	if res, err := json.Marshal(m.core.GetDHT()); err == nil { | ||||
| 		return string(res) | ||||
| 	} else { | ||||
| 		return "{}" | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // GetMTU returns the configured node MTU. This must be called AFTER Start. | ||||
| func (m *Yggdrasil) GetMTU() int { | ||||
| 	return int(m.core.MTU()) | ||||
| } | ||||
| 
 | ||||
| func GetVersion() string { | ||||
| 	return version.BuildVersion() | ||||
| } | ||||
							
								
								
									
										13
									
								
								contrib/mobile/mobile_android.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								contrib/mobile/mobile_android.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | |||
| //go:build android | ||||
| // +build android | ||||
| 
 | ||||
| package mobile | ||||
| 
 | ||||
| import "log" | ||||
| 
 | ||||
| type MobileLogger struct{} | ||||
| 
 | ||||
| func (nsl MobileLogger) Write(p []byte) (n int, err error) { | ||||
| 	log.Println(string(p)) | ||||
| 	return len(p), nil | ||||
| } | ||||
							
								
								
									
										28
									
								
								contrib/mobile/mobile_ios.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								contrib/mobile/mobile_ios.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| //go:build ios | ||||
| // +build ios | ||||
| 
 | ||||
| package mobile | ||||
| 
 | ||||
| /* | ||||
| #cgo CFLAGS: -x objective-c | ||||
| #cgo LDFLAGS: -framework Foundation | ||||
| #import <Foundation/Foundation.h> | ||||
| void Log(const char *text) { | ||||
|   NSString *nss = [NSString stringWithUTF8String:text]; | ||||
|   NSLog(@"%@", nss); | ||||
| } | ||||
| */ | ||||
| import "C" | ||||
| import ( | ||||
| 	"unsafe" | ||||
| ) | ||||
| 
 | ||||
| type MobileLogger struct { | ||||
| } | ||||
| 
 | ||||
| func (nsl MobileLogger) Write(p []byte) (n int, err error) { | ||||
| 	p = append(p, 0) | ||||
| 	cstr := (*C.char)(unsafe.Pointer(&p[0])) | ||||
| 	C.Log(cstr) | ||||
| 	return len(p), nil | ||||
| } | ||||
							
								
								
									
										14
									
								
								contrib/mobile/mobile_other.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								contrib/mobile/mobile_other.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| //go:build !android && !ios | ||||
| // +build !android,!ios | ||||
| 
 | ||||
| package mobile | ||||
| 
 | ||||
| import "fmt" | ||||
| 
 | ||||
| type MobileLogger struct { | ||||
| } | ||||
| 
 | ||||
| func (nsl MobileLogger) Write(p []byte) (n int, err error) { | ||||
| 	fmt.Print(string(p)) | ||||
| 	return len(p), nil | ||||
| } | ||||
							
								
								
									
										16
									
								
								contrib/mobile/mobile_test.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								contrib/mobile/mobile_test.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| package mobile | ||||
| 
 | ||||
| import "testing" | ||||
| 
 | ||||
| func TestStartYggdrasil(t *testing.T) { | ||||
| 	ygg := &Yggdrasil{} | ||||
| 	if err := ygg.StartAutoconfigure(); err != nil { | ||||
| 		t.Fatalf("Failed to start Yggdrasil: %s", err) | ||||
| 	} | ||||
| 	t.Log("Address:", ygg.GetAddressString()) | ||||
| 	t.Log("Subnet:", ygg.GetSubnetString()) | ||||
| 	t.Log("Coords:", ygg.GetCoordsString()) | ||||
| 	if err := ygg.Stop(); err != nil { | ||||
| 		t.Fatalf("Failed to stop Yggdrasil: %s", err) | ||||
| 	} | ||||
| } | ||||
|  | @ -1,9 +1,9 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| # This script generates an MSI file for Yggdrasil for a given architecture. It | ||||
| # needs to run on Windows within MSYS2 and Go 1.13 or later must be installed on | ||||
| # the system and within the PATH. This is ran currently by Appveyor (see | ||||
| # appveyor.yml in the repository root) for both x86 and x64. | ||||
| # needs to run on Windows within MSYS2 and Go 1.17 or later must be installed on | ||||
| # the system and within the PATH. This is ran currently by GitHub Actions (see | ||||
| # the workflows in the repository). | ||||
| # | ||||
| # Author: Neil Alexander <neilalexander@users.noreply.github.com> | ||||
| 
 | ||||
|  | @ -11,37 +11,21 @@ | |||
| PKGARCH=$1 | ||||
| if [ "${PKGARCH}" == "" ]; | ||||
| then | ||||
|   echo "tell me the architecture: x86, x64 or arm" | ||||
|   echo "tell me the architecture: x86, x64, arm or arm64" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| # Get the rest of the repository history. This is needed within Appveyor because | ||||
| # otherwise we don't get all of the branch histories and therefore the semver | ||||
| # scripts don't work properly. | ||||
| if [ "${APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH}" != "" ]; | ||||
| then | ||||
|   git fetch --all | ||||
|   git checkout ${APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCH} | ||||
| elif [ "${APPVEYOR_REPO_BRANCH}" != "" ]; | ||||
| then | ||||
|   git fetch --all | ||||
|   git checkout ${APPVEYOR_REPO_BRANCH} | ||||
| fi | ||||
| 
 | ||||
| # Install prerequisites within MSYS2 | ||||
| pacman -S --needed --noconfirm unzip git curl | ||||
| 
 | ||||
| # Download the wix tools! | ||||
| if [ ! -d wixbin ]; | ||||
| then | ||||
|   curl -LO https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip | ||||
|   if [ `md5sum wix311-binaries.zip | cut -f 1 -d " "` != "47a506f8ab6666ee3cc502fb07d0ee2a" ]; | ||||
|   curl -LO https://wixtoolset.org/downloads/v3.14.0.3910/wix314-binaries.zip | ||||
|   if [ `md5sum wix314-binaries.zip | cut -f 1 -d " "` != "34f655cf108086838dd5a76d4318063b" ]; | ||||
|   then | ||||
|     echo "wix package didn't match expected checksum" | ||||
|     exit 1 | ||||
|   fi | ||||
|   mkdir -p wixbin | ||||
|   unzip -o wix311-binaries.zip -d wixbin || ( | ||||
|   unzip -o wix314-binaries.zip -d wixbin || ( | ||||
|     echo "failed to unzip WiX" | ||||
|     exit 1 | ||||
|   ) | ||||
|  | @ -51,7 +35,7 @@ fi | |||
| [ "${PKGARCH}" == "x64" ] && GOOS=windows GOARCH=amd64 CGO_ENABLED=0 ./build | ||||
| [ "${PKGARCH}" == "x86" ] && GOOS=windows GOARCH=386 CGO_ENABLED=0 ./build | ||||
| [ "${PKGARCH}" == "arm" ] && GOOS=windows GOARCH=arm CGO_ENABLED=0 ./build | ||||
| #[ "${PKGARCH}" == "arm64" ] && GOOS=windows GOARCH=arm64 CGO_ENABLED=0 ./build | ||||
| [ "${PKGARCH}" == "arm64" ] && GOOS=windows GOARCH=arm64 CGO_ENABLED=0 ./build | ||||
| 
 | ||||
| # Create the postinstall script | ||||
| cat > updateconfig.bat << EOF | ||||
|  | @ -69,14 +53,14 @@ EOF | |||
| PKGNAME=$(sh contrib/semver/name.sh) | ||||
| PKGVERSION=$(sh contrib/msi/msversion.sh --bare) | ||||
| PKGVERSIONMS=$(echo $PKGVERSION | tr - .) | ||||
| [ "${PKGARCH}" == "x64" ] && \ | ||||
| ([ "${PKGARCH}" == "x64" ] || [ "${PKGARCH}" == "arm64" ]) && \ | ||||
|   PKGGUID="77757838-1a23-40a5-a720-c3b43e0260cc" PKGINSTFOLDER="ProgramFiles64Folder" || \ | ||||
|   PKGGUID="54a3294e-a441-4322-aefb-3bb40dd022bb" PKGINSTFOLDER="ProgramFilesFolder" | ||||
| 
 | ||||
| # Download the Wintun driver | ||||
| if [ ! -d wintun ]; | ||||
| then | ||||
|   curl -o wintun.zip https://www.wintun.net/builds/wintun-0.11.zip | ||||
|   curl -o wintun.zip https://www.wintun.net/builds/wintun-0.14.1.zip | ||||
|   unzip wintun.zip | ||||
| fi | ||||
| if [ $PKGARCH = "x64" ]; then | ||||
|  | @ -85,8 +69,8 @@ elif [ $PKGARCH = "x86" ]; then | |||
|   PKGWINTUNDLL=wintun/bin/x86/wintun.dll | ||||
| elif [ $PKGARCH = "arm" ]; then | ||||
|   PKGWINTUNDLL=wintun/bin/arm/wintun.dll | ||||
| #elif [ $PKGARCH = "arm64" ]; then | ||||
| #  PKGWINTUNDLL=wintun/bin/arm64/wintun.dll | ||||
| elif [ $PKGARCH = "arm64" ]; then | ||||
|   PKGWINTUNDLL=wintun/bin/arm64/wintun.dll | ||||
| else | ||||
|   echo "wasn't sure which architecture to get wintun for" | ||||
|   exit 1 | ||||
|  |  | |||
|  | @ -1,9 +1,11 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| # Get the current branch name | ||||
| BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null) | ||||
| BRANCH="$GITHUB_REF_NAME" | ||||
| if [ -z "$BRANCH" ]; then | ||||
|   BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null) | ||||
| fi | ||||
| 
 | ||||
| # Complain if the git history is not available | ||||
| if [ $? != 0 ] || [ -z "$BRANCH" ]; then | ||||
|   printf "yggdrasil" | ||||
|   exit 0 | ||||
|  |  | |||
|  | @ -1,8 +1,8 @@ | |||
| [Unit] | ||||
| Description=yggdrasil | ||||
| Wants=network.target | ||||
| Wants=network-online.target | ||||
| Wants=yggdrasil-default-config.service | ||||
| After=network.target | ||||
| After=network-online.target | ||||
| After=yggdrasil-default-config.service | ||||
| 
 | ||||
| [Service] | ||||
|  | @ -10,7 +10,7 @@ Group=yggdrasil | |||
| ProtectHome=true | ||||
| ProtectSystem=true | ||||
| SyslogIdentifier=yggdrasil | ||||
| CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW | ||||
| CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE | ||||
| ExecStartPre=+-/sbin/modprobe tun | ||||
| ExecStart=/usr/bin/yggdrasil -useconffile /etc/yggdrasil.conf | ||||
| ExecReload=/bin/kill -HUP $MAINPID | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Neil Alexander
						Neil Alexander