func StartAttachTether(t *testing.T, cfg *executor.ExecutorConfig, mocker *Mocker) (tether.Tether, extraconfig.DataSource, net.Conn) { store := extraconfig.New() sink := store.Put src := store.Get extraconfig.Encode(sink, cfg) log.Debugf("Test configuration: %#v", sink) tthr = tether.New(src, sink, mocker) tthr.Register("mocker", mocker) tthr.Register("Attach", server) // run the tether to service the attach go func() { erR := tthr.Start() if erR != nil { t.Error(erR) } }() // create client on the mock pipe conn, err := mockBackChannel(context.Background()) if err != nil && (err != io.EOF || server.(*testAttachServer).enabled) { // we accept the case where the error is end-of-file and the attach server is disabled because that's // expected when the tether is shut down. t.Error(err) } return tthr, src, conn }
func main() { defer func() { if r := recover(); r != nil { log.Errorf("run time panic: %s : %s", r, debug.Stack()) } reboot() }() src, err := extraconfig.GuestInfoSourceWithPrefix("init") if err != nil { log.Error(err) return } extraconfig.Decode(src, &config) debugLevel = config.Diagnostics.DebugLevel if debugLevel > 2 { enableShell() } setLogLevels() logFile, err := os.OpenFile("/dev/ttyS1", os.O_WRONLY|os.O_SYNC, 0644) if err != nil { log.Errorf("Could not pipe stderr to serial for debugging info. Some debug info may be lost! Error reported was %s", err) } err = syscall.Dup3(int(logFile.Fd()), int(os.Stderr.Fd()), 0) if err != nil { log.Errorf("Could not pipe logfile to standard error due to error %s", err) } _, err = os.Stderr.WriteString("all stderr redirected to debug log") if err != nil { log.Errorf("Could not write to Stderr due to error %s", err) } sink, err := extraconfig.GuestInfoSinkWithPrefix("init") if err != nil { log.Error(err) return } // create the tether tthr = tether.New(src, sink, &operations{}) // register the toolbox extension and configure for appliance toolbox := configureToolbox(tether.NewToolbox()) toolbox.PrimaryIP = externalIP tthr.Register("Toolbox", toolbox) err = tthr.Start() if err != nil { log.Error(err) return } log.Info("Clean exit from init") }
func main() { defer func() { if r := recover(); r != nil { log.Errorf("run time panic: %s : %s", r, debug.Stack()) } halt() }() // where to look for the various devices and files related to tether pathPrefix = "/.tether" if strings.HasSuffix(os.Args[0], "-debug") { extraconfig.DecodeLogLevel = log.DebugLevel extraconfig.EncodeLogLevel = log.DebugLevel } // use the same logger for trace and other logging trace.Logger = log.StandardLogger() log.SetLevel(log.DebugLevel) // Initiliaze logger with default TextFormatter log.SetFormatter(&log.TextFormatter{DisableColors: true, FullTimestamp: true}) // TODO: hard code executor initialization status reporting via guestinfo here err := createDevices() if err != nil { log.Error(err) // return gives us good behaviour in the case of "-debug" binary return } sshserver := NewAttachServerSSH() src, err := extraconfig.GuestInfoSource() if err != nil { log.Error(err) return } sink, err := extraconfig.GuestInfoSink() if err != nil { log.Error(err) return } // create the tether tthr = tether.New(src, sink, &operations{}) // register the attach extension tthr.Register("Attach", sshserver) err = tthr.Start() if err != nil { log.Error(err) return } log.Info("Clean exit from tether") }
func main() { defer func() { if r := recover(); r != nil { log.Errorf("run time panic: %s : %s", r, debug.Stack()) } halt() }() // where to look for the various devices and files related to tether pathPrefix = "com://" if strings.HasSuffix(os.Args[0], "-debug") { extraconfig.DecodeLogLevel = log.DebugLevel extraconfig.EncodeLogLevel = log.DebugLevel } // use the same logger for trace and other logging trace.Logger = log.StandardLogger() log.SetLevel(log.DebugLevel) // Initiliaze logger with default TextFormatter log.SetFormatter(&log.TextFormatter{DisableColors: true, FullTimestamp: true}) // get the windows service logic running so that we can play well in that mode runService("VMware Tether", false) sshserver := &attachServerSSH{} server = sshserver src, err := extraconfig.GuestInfoSource() if err != nil { log.Error(err) return } sink, err := extraconfig.GuestInfoSink() if err != nil { log.Error(err) return } // create the tether and register the attach extension tthr = tether.New(src, sink, &operations{}) tthr.Register("Attach", sshserver) err = tthr.Start() if err != nil { log.Error(err) return } log.Info("Clean exit from tether") }
func main() { defer func() { if r := recover(); r != nil { log.Errorf("run time panic: %s : %s", r, debug.Stack()) } halt() }() // where to look for the various devices and files related to tether pathPrefix = "/.tether" if strings.HasSuffix(os.Args[0], "-debug") { extraconfig.DecodeLogLevel = log.DebugLevel extraconfig.EncodeLogLevel = log.DebugLevel log.SetLevel(log.DebugLevel) } // TODO: hard code executor initialization status reporting via guestinfo here err := createDevices() if err != nil { log.Error(err) // return gives us good behaviour in the case of "-debug" binary return } sshserver := &attachServerSSH{} server = sshserver src, err := extraconfig.GuestInfoSource() if err != nil { log.Error(err) return } sink, err := extraconfig.GuestInfoSink() if err != nil { log.Error(err) return } // create the tether and register the attach extension tthr := tether.New(src, sink, &operations{}) tthr.Register("Attach", sshserver) err = tthr.Start() if err != nil { log.Error(err) return } log.Info("Clean exit from tether") }
func RunTether(t *testing.T, cfg *executor.ExecutorConfig) (tether.Tether, extraconfig.DataSource, error) { store := extraconfig.New() sink := store.Put src := store.Get extraconfig.Encode(sink, cfg) log.Debugf("Test configuration: %#v", sink) tthr = tether.New(src, sink, &Mocked) tthr.Register("Mocker", &Mocked) // run the tether to service the attach erR := tthr.Start() return tthr, src, erR }
func StartTether(t *testing.T, cfg *executor.ExecutorConfig) (tether.Tether, extraconfig.DataSource) { store := extraconfig.New() sink := store.Put src := store.Get extraconfig.Encode(sink, cfg) log.Debugf("Test configuration: %#v", sink) tthr = tether.New(src, sink, &Mocked) tthr.Register("mocker", &Mocked) // run the tether to service the attach go func() { err := tthr.Start() if err != nil { t.Error(err) } }() return tthr, src }
func main() { defer func() { if r := recover(); r != nil { log.Errorf("run time panic: %s : %s", r, debug.Stack()) } reboot() }() if strings.HasSuffix(os.Args[0], "-debug") { extraconfig.DecodeLogLevel = log.DebugLevel extraconfig.EncodeLogLevel = log.DebugLevel } log.SetLevel(log.DebugLevel) src, err := extraconfig.GuestInfoSourceWithPrefix("init") if err != nil { log.Error(err) return } sink, err := extraconfig.GuestInfoSinkWithPrefix("init") if err != nil { log.Error(err) return } // create the tether tthr = tether.New(src, sink, &operations{}) // register the toolbox extension tthr.Register("Toolbox", tether.NewToolbox()) err = tthr.Start() if err != nil { log.Error(err) return } log.Info("Clean exit from init") }
func main() { defer func() { if r := recover(); r != nil { log.Errorf("run time panic: %s : %s", r, debug.Stack()) } halt() }() logFile, err := os.OpenFile("/dev/ttyS1", os.O_WRONLY|os.O_SYNC, 0644) if err != nil { log.Errorf("Could not open serial port for debugging info. Some debug info may be lost! Error reported was %s", err) } if err = syscall.Dup3(int(logFile.Fd()), int(os.Stderr.Fd()), 0); err != nil { log.Errorf("Could not pipe logfile to standard error due to error %s", err) } if _, err = os.Stderr.WriteString("all stderr redirected to debug log"); err != nil { log.Errorf("Could not write to Stderr due to error %s", err) } // where to look for the various devices and files related to tether pathPrefix = "/.tether" if strings.HasSuffix(os.Args[0], "-debug") { extraconfig.DecodeLogLevel = log.DebugLevel extraconfig.EncodeLogLevel = log.DebugLevel } // use the same logger for trace and other logging trace.Logger = log.StandardLogger() log.SetLevel(log.DebugLevel) // Initiliaze logger with default TextFormatter log.SetFormatter(&log.TextFormatter{DisableColors: true, FullTimestamp: true}) // TODO: hard code executor initialization status reporting via guestinfo here err = createDevices() if err != nil { log.Error(err) // return gives us good behaviour in the case of "-debug" binary return } sshserver := NewAttachServerSSH() src, err := extraconfig.GuestInfoSource() if err != nil { log.Error(err) return } sink, err := extraconfig.GuestInfoSink() if err != nil { log.Error(err) return } // create the tether tthr = tether.New(src, sink, &operations{}) // register the attach extension tthr.Register("Attach", sshserver) // register the toolbox extension tthr.Register("Toolbox", tether.NewToolbox().InContainer()) err = tthr.Start() if err != nil { log.Error(err) return } log.Info("Clean exit from tether") }