packages/hyprspace: never daemonize
This commit is contained in:
parent
0f5d3cc55d
commit
9584c5f2f8
2 changed files with 1 additions and 82 deletions
|
@ -12,7 +12,6 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -26,7 +25,6 @@ import (
|
||||||
"github.com/libp2p/go-libp2p/core/network"
|
"github.com/libp2p/go-libp2p/core/network"
|
||||||
"github.com/libp2p/go-libp2p/core/peer"
|
"github.com/libp2p/go-libp2p/core/peer"
|
||||||
"github.com/multiformats/go-multibase"
|
"github.com/multiformats/go-multibase"
|
||||||
"github.com/nxadm/tail"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -65,9 +63,6 @@ func UpRun(r *cmd.Root, c *cmd.Sub) {
|
||||||
// Parse Command Args
|
// Parse Command Args
|
||||||
args := c.Args.(*UpArgs)
|
args := c.Args.(*UpArgs)
|
||||||
|
|
||||||
// Parse Command Flags
|
|
||||||
flags := c.Flags.(*UpFlags)
|
|
||||||
|
|
||||||
// Parse Global Config Flag for Custom Config Path
|
// Parse Global Config Flag for Custom Config Path
|
||||||
configPath := r.Flags.(*GlobalFlags).Config
|
configPath := r.Flags.(*GlobalFlags).Config
|
||||||
if configPath == "" {
|
if configPath == "" {
|
||||||
|
@ -78,16 +73,6 @@ func UpRun(r *cmd.Root, c *cmd.Sub) {
|
||||||
cfg, err := config.Read(configPath)
|
cfg, err := config.Read(configPath)
|
||||||
checkErr(err)
|
checkErr(err)
|
||||||
|
|
||||||
if !flags.Foreground {
|
|
||||||
if err := createDaemon(cfg); err != nil {
|
|
||||||
fmt.Println("[+] Failed to Create Hyprspace Daemon")
|
|
||||||
fmt.Println(err)
|
|
||||||
} else {
|
|
||||||
fmt.Println("[+] Successfully Created Hyprspace Daemon")
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup reverse lookup hash map for authentication.
|
// Setup reverse lookup hash map for authentication.
|
||||||
RevLookup = make(map[string]string, len(cfg.Peers))
|
RevLookup = make(map[string]string, len(cfg.Peers))
|
||||||
for ip, id := range cfg.Peers {
|
for ip, id := range cfg.Peers {
|
||||||
|
@ -323,72 +308,6 @@ func eventLogger(host host.Host, cfg *config.Config) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// createDaemon handles creating an independent background process for a
|
|
||||||
// Hyprspace daemon from the original parent process.
|
|
||||||
func createDaemon(cfg *config.Config) error {
|
|
||||||
path, err := os.Executable()
|
|
||||||
checkErr(err)
|
|
||||||
|
|
||||||
// Generate log path
|
|
||||||
logPath := filepath.Join(filepath.Dir(cfg.Path), cfg.Interface.Name+".log")
|
|
||||||
|
|
||||||
// Create Pipe to monitor for daemon output.
|
|
||||||
f, err := os.Create(logPath)
|
|
||||||
checkErr(err)
|
|
||||||
|
|
||||||
// Create Sub Process
|
|
||||||
process, err := os.StartProcess(
|
|
||||||
path,
|
|
||||||
append(os.Args, "--foreground"),
|
|
||||||
&os.ProcAttr{
|
|
||||||
Dir: ".",
|
|
||||||
Env: os.Environ(),
|
|
||||||
Files: []*os.File{nil, f, f},
|
|
||||||
},
|
|
||||||
)
|
|
||||||
checkErr(err)
|
|
||||||
|
|
||||||
// Listen to the child process's log output to determine
|
|
||||||
// when the daemon is setup and connected to a set of peers.
|
|
||||||
count := 0
|
|
||||||
deadlineHit := false
|
|
||||||
countChan := make(chan int)
|
|
||||||
go func(out chan<- int) {
|
|
||||||
numConnected := 0
|
|
||||||
t, err := tail.TailFile(logPath, tail.Config{Follow: true})
|
|
||||||
if err != nil {
|
|
||||||
out <- numConnected
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for line := range t.Lines {
|
|
||||||
fmt.Println(line.Text)
|
|
||||||
if strings.HasPrefix(line.Text, "[+] Connection to") {
|
|
||||||
numConnected++
|
|
||||||
if numConnected >= len(cfg.Peers) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
out <- numConnected
|
|
||||||
}(countChan)
|
|
||||||
|
|
||||||
// Block until all clients are connected or for a maximum of 30s.
|
|
||||||
select {
|
|
||||||
case _, deadlineHit = <-time.After(30 * time.Second):
|
|
||||||
case count = <-countChan:
|
|
||||||
}
|
|
||||||
|
|
||||||
// Release the created daemon
|
|
||||||
err = process.Release()
|
|
||||||
checkErr(err)
|
|
||||||
|
|
||||||
// Check if the daemon exited prematurely
|
|
||||||
if !deadlineHit && count < len(cfg.Peers) {
|
|
||||||
return errors.New("failed to create daemon")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func streamHandler(stream network.Stream) {
|
func streamHandler(stream network.Stream) {
|
||||||
// If the remote node ID isn't in the list of known nodes don't respond.
|
// If the remote node ID isn't in the list of known nodes don't respond.
|
||||||
if _, ok := RevLookup[stream.Conn().RemotePeer().Pretty()]; !ok {
|
if _, ok := RevLookup[stream.Conn().RemotePeer().Pretty()]; !ok {
|
||||||
|
|
|
@ -8,7 +8,6 @@ require (
|
||||||
github.com/libp2p/go-libp2p-kad-dht v0.20.0
|
github.com/libp2p/go-libp2p-kad-dht v0.20.0
|
||||||
github.com/multiformats/go-multiaddr v0.7.0
|
github.com/multiformats/go-multiaddr v0.7.0
|
||||||
github.com/multiformats/go-multibase v0.1.1
|
github.com/multiformats/go-multibase v0.1.1
|
||||||
github.com/nxadm/tail v1.4.8
|
|
||||||
github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8
|
github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8
|
||||||
github.com/vishvananda/netlink v1.1.0
|
github.com/vishvananda/netlink v1.1.0
|
||||||
gopkg.in/yaml.v2 v2.4.0
|
gopkg.in/yaml.v2 v2.4.0
|
||||||
|
@ -85,6 +84,7 @@ require (
|
||||||
github.com/multiformats/go-multihash v0.2.1 // indirect
|
github.com/multiformats/go-multihash v0.2.1 // indirect
|
||||||
github.com/multiformats/go-multistream v0.3.3 // indirect
|
github.com/multiformats/go-multistream v0.3.3 // indirect
|
||||||
github.com/multiformats/go-varint v0.0.6 // indirect
|
github.com/multiformats/go-varint v0.0.6 // indirect
|
||||||
|
github.com/nxadm/tail v1.4.8 // indirect
|
||||||
github.com/onsi/ginkgo v1.16.5 // indirect
|
github.com/onsi/ginkgo v1.16.5 // indirect
|
||||||
github.com/opencontainers/runtime-spec v1.0.2 // indirect
|
github.com/opencontainers/runtime-spec v1.0.2 // indirect
|
||||||
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
||||||
|
|
Loading…
Add table
Reference in a new issue