diff --git a/default.nix b/default.nix index 3069821..e9651bf 100644 --- a/default.nix +++ b/default.nix @@ -69,7 +69,7 @@ in rec { ''; }; - vendorHash = "sha256-JhcoMLVc6WHRiO3nNDyvGoxZRTtYf7e65nRMaK/EODo="; + vendorHash = "sha256-N80aMMR67DjyEtz9/Yat1bft92nj7JuuF4i2xC9iJ6s="; subPackages = [ "./cmd/entrypoint" diff --git a/go/daemon/child_dnsmasq.go b/go/daemon/child_dnsmasq.go index 05d055f..5188aca 100644 --- a/go/daemon/child_dnsmasq.go +++ b/go/daemon/child_dnsmasq.go @@ -1,6 +1,7 @@ package daemon import ( + "context" "fmt" "isle/bootstrap" "isle/dnsmasq" @@ -8,9 +9,11 @@ import ( "sort" "code.betamike.com/micropelago/pmux/pmuxlib" + "dev.mediocregopher.com/mediocre-go-lib.git/mlog" ) func dnsmasqPmuxProcConfig( + logger *mlog.Logger, runtimeDirPath, binDirPath string, hostBootstrap bootstrap.Bootstrap, daemonConfig Config, @@ -43,8 +46,10 @@ func dnsmasqPmuxProcConfig( } return pmuxlib.ProcessConfig{ - Name: "dnsmasq", Cmd: filepath.Join(binDirPath, "dnsmasq"), Args: []string{"-d", "-C", confPath}, + StartAfterFunc: func(ctx context.Context) error { + return waitForNebula(ctx, logger, hostBootstrap) + }, }, nil } diff --git a/go/daemon/child_garage.go b/go/daemon/child_garage.go index 4249548..a636d47 100644 --- a/go/daemon/child_garage.go +++ b/go/daemon/child_garage.go @@ -151,10 +151,10 @@ func garagePmuxProcConfigs( adminToken string, hostBootstrap bootstrap.Bootstrap, ) ( - []pmuxlib.ProcessConfig, error, + map[string]pmuxlib.ProcessConfig, error, ) { var ( - pmuxProcConfigs []pmuxlib.ProcessConfig + pmuxProcConfigs = map[string]pmuxlib.ProcessConfig{} allocs = daemonConfig.Storage.Allocations ) @@ -172,14 +172,14 @@ func garagePmuxProcConfigs( return nil, fmt.Errorf("writing child config file for alloc %+v: %w", alloc, err) } - pmuxProcConfigs = append(pmuxProcConfigs, pmuxlib.ProcessConfig{ - Name: fmt.Sprintf("garage-%d", alloc.RPCPort), + procName := fmt.Sprintf("garage-%d", alloc.RPCPort) + pmuxProcConfigs[procName] = pmuxlib.ProcessConfig{ Cmd: filepath.Join(binDirPath, "garage"), Args: []string{"-c", childConfigPath, "server"}, StartAfterFunc: func(ctx context.Context) error { return waitForNebula(ctx, logger, hostBootstrap) }, - }) + } } return pmuxProcConfigs, nil diff --git a/go/daemon/child_nebula.go b/go/daemon/child_nebula.go index d21f59a..0489186 100644 --- a/go/daemon/child_nebula.go +++ b/go/daemon/child_nebula.go @@ -142,8 +142,8 @@ func nebulaPmuxProcConfig( } return pmuxlib.ProcessConfig{ - Name: "nebula", - Cmd: filepath.Join(binDirPath, "nebula"), - Args: []string{"-config", nebulaYmlPath}, + Cmd: filepath.Join(binDirPath, "nebula"), + Args: []string{"-config", nebulaYmlPath}, + Group: -1, // Make sure nebula is shut down last. }, nil } diff --git a/go/daemon/child_pmux.go b/go/daemon/child_pmux.go index 34e0247..ff7c7ef 100644 --- a/go/daemon/child_pmux.go +++ b/go/daemon/child_pmux.go @@ -28,6 +28,7 @@ func (c *Children) newPmuxConfig( } dnsmasqPmuxProcConfig, err := dnsmasqPmuxProcConfig( + c.logger, c.opts.EnvVars.RuntimeDirPath, binDirPath, hostBootstrap, @@ -55,14 +56,12 @@ func (c *Children) newPmuxConfig( ) } + pmuxProcConfigs := garagePmuxProcConfigs + pmuxProcConfigs["nebula"] = nebulaPmuxProcConfig + pmuxProcConfigs["dnsmasq"] = dnsmasqPmuxProcConfig + return pmuxlib.Config{ - Processes: append( - []pmuxlib.ProcessConfig{ - nebulaPmuxProcConfig, - dnsmasqPmuxProcConfig, - }, - garagePmuxProcConfigs..., - ), + Processes: pmuxProcConfigs, }, nil } diff --git a/go/daemon/children.go b/go/daemon/children.go index eac8718..9aa3d4f 100644 --- a/go/daemon/children.go +++ b/go/daemon/children.go @@ -20,8 +20,7 @@ type Children struct { logger *mlog.Logger opts Opts - pmuxCancelFn context.CancelFunc - pmuxStoppedCh chan struct{} + pmux *pmuxlib.Pmux } // NewChildren initialized and returns a Children instance. If initialization @@ -46,13 +45,9 @@ func NewChildren( return nil, fmt.Errorf("loading garage RPC secret: %w", err) } - pmuxCtx, pmuxCancelFn := context.WithCancel(context.Background()) - c := &Children{ - logger: logger, - opts: *opts, - pmuxCancelFn: pmuxCancelFn, - pmuxStoppedCh: make(chan struct{}), + logger: logger, + opts: *opts, } pmuxConfig, err := c.newPmuxConfig( @@ -67,11 +62,7 @@ func NewChildren( return nil, fmt.Errorf("generating pmux config: %w", err) } - go func() { - defer close(c.pmuxStoppedCh) - pmuxlib.Run(pmuxCtx, c.opts.Stdout, c.opts.Stderr, pmuxConfig) - c.logger.Debug(pmuxCtx, "pmux stopped") - }() + c.pmux = pmuxlib.NewPmux(pmuxConfig, c.opts.Stdout, c.opts.Stderr) initErr := c.postPmuxInit( ctx, daemonConfig, garageAdminToken, hostBootstrap, @@ -99,7 +90,6 @@ func NewChildren( // If this returns an error then it's possible that child processes are // still running and are no longer managed. func (c *Children) Shutdown() error { - c.pmuxCancelFn() - <-c.pmuxStoppedCh + c.pmux.Stop() return nil } diff --git a/go/go.mod b/go/go.mod index 5361bfc..1f31215 100644 --- a/go/go.mod +++ b/go/go.mod @@ -3,13 +3,12 @@ module isle go 1.22 require ( - code.betamike.com/micropelago/pmux v0.0.0-20230706154656-fde8c2be7540 + code.betamike.com/micropelago/pmux v0.0.0-20240719134913-f5fce902e8c4 dev.mediocregopher.com/mediocre-go-lib.git v0.0.0-20240511135822-4ab1176672d7 github.com/adrg/xdg v0.4.0 github.com/imdario/mergo v0.3.12 github.com/jxskiss/base62 v1.1.0 github.com/minio/minio-go/v7 v7.0.28 - github.com/shirou/gopsutil v3.21.11+incompatible github.com/slackhq/nebula v1.6.1 github.com/spf13/pflag v1.0.5 github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c @@ -19,7 +18,6 @@ require ( require ( github.com/dustin/go-humanize v1.0.0 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect github.com/google/uuid v1.1.1 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -34,9 +32,6 @@ require ( github.com/rs/xid v1.2.1 // indirect github.com/sirupsen/logrus v1.8.1 // indirect github.com/smartystreets/assertions v1.13.0 // indirect - github.com/tklauser/go-sysconf v0.3.10 // indirect - github.com/tklauser/numcpus v0.4.0 // indirect - github.com/yusufpapurcu/wmi v1.2.2 // indirect golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 // indirect golang.org/x/net v0.0.0-20220403103023-749bd193bc2b // indirect golang.org/x/sys v0.0.0-20220406155245-289d7a0edf71 // indirect diff --git a/go/go.sum b/go/go.sum index 657100c..0a9b553 100644 --- a/go/go.sum +++ b/go/go.sum @@ -1,5 +1,5 @@ -code.betamike.com/micropelago/pmux v0.0.0-20230706154656-fde8c2be7540 h1:ycD1mEkCbrx3Apr71Q2PKgyycRu8wvwX9J4ZSvjyTtQ= -code.betamike.com/micropelago/pmux v0.0.0-20230706154656-fde8c2be7540/go.mod h1:WlEWacLREVfIQl1IlBjKzuDgL56DFRvyl7YiL5gGP4w= +code.betamike.com/micropelago/pmux v0.0.0-20240719134913-f5fce902e8c4 h1:n4pGP12kgdH5kCTF4TZYpOjWuAR/zZLpM9j3neeVMEk= +code.betamike.com/micropelago/pmux v0.0.0-20240719134913-f5fce902e8c4/go.mod h1:WlEWacLREVfIQl1IlBjKzuDgL56DFRvyl7YiL5gGP4w= dev.mediocregopher.com/mediocre-go-lib.git v0.0.0-20240511135822-4ab1176672d7 h1:wKQ3bXzG+KQDtRAN/xaRZ4aQtJe1pccleG6V43MvFxw= dev.mediocregopher.com/mediocre-go-lib.git v0.0.0-20240511135822-4ab1176672d7/go.mod h1:nP+AtQWrc3k5qq5y3ABiBLkOfUPlk/FO9fpTFpF+jgs= github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls= @@ -9,8 +9,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -55,8 +53,6 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= -github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/slackhq/nebula v1.6.1 h1:/OCTR3abj0Sbf2nGoLUrdDXImrCv0ZVFpVPP5qa0DsM= @@ -73,24 +69,16 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= -github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29 h1:tkVvjkPTB7pnW3jnid7kNyAMPVWllTNOf/qKDze4p9o= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY= golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/net v0.0.0-20220403103023-749bd193bc2b h1:vI32FkLJNAWtGD4BwkThwEy6XS7ZLLMHkSkYfF8M0W0= golang.org/x/net v0.0.0-20220403103023-749bd193bc2b/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220406155245-289d7a0edf71 h1:PRD0hj6tTuUnCFD08vkvjkYFbQg/9lV8KIxe1y4/cvU= golang.org/x/sys v0.0.0-20220406155245-289d7a0edf71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.8-0.20211105212822-18b340fc7af2 h1:GLw7MR8AfAG2GmGcmVgObFOHXYypgGjnGno25RDwn3Y=