func KBFSServiceStatus(g *libkb.GlobalContext, bundleVersion string) keybase1.ServiceStatus { serviceLabel := libkb.DefaultServiceLabel(libkb.KBFSServiceID, libkb.DefaultRunMode) kbfsService := launchd.NewService(serviceLabel) kbfsLaunchdStatus, err := kbfsService.Status() if err != nil { return errorStatus(err) } if kbfsLaunchdStatus == nil { return keybase1.ServiceStatus{InstallStatus: keybase1.InstallStatus_NOT_INSTALLED} } var kbfsInfo *libkb.ServiceInfo if kbfsLaunchdStatus.Pid() != "" { runtimeDir := g.Env.GetRuntimeDir() kbfsInfo, err = libkb.WaitForServiceInfoFile(path.Join(runtimeDir, "kbfs.info"), kbfsLaunchdStatus.Pid(), 5, 500*time.Millisecond, "launchd status for kbfs") if err != nil { return errorStatus(err) } } // nil means not running or file wasn't found if kbfsInfo == nil { kbfsInfo = &libkb.ServiceInfo{} } version := kbfsInfo.Version st := keybase1.ServiceStatus{ Version: version, Label: kbfsLaunchdStatus.Label(), Pid: kbfsLaunchdStatus.Pid(), LastExitStatus: kbfsLaunchdStatus.LastExitStatus(), BundleVersion: bundleVersion, } installStatus, installAction, se := installStatus(version, bundleVersion, st.LastExitStatus) st.InstallStatus = installStatus st.InstallAction = installAction st.Error = se return st }
func KeybaseServiceStatus(g *libkb.GlobalContext, bundleVersion string) keybase1.ServiceStatus { serviceLabel := libkb.DefaultServiceLabel(libkb.KeybaseServiceID, libkb.DefaultRunMode) kbService := launchd.NewService(serviceLabel) kbLaunchdStatus, err := kbService.Status() if err != nil { return errorStatus(err) } if kbLaunchdStatus == nil { return keybase1.ServiceStatus{InstallStatus: keybase1.InstallStatus_NOT_INSTALLED} } var config keybase1.Config if kbLaunchdStatus.Pid() != "" { runtimeDir := g.Env.GetRuntimeDir() _, err := libkb.WaitForServiceInfoFile(path.Join(runtimeDir, "keybased.info"), kbLaunchdStatus.Pid(), 5, 500*time.Millisecond, "launchd status for service") if err != nil { return errorStatus(err) } configClient, err := GetConfigClient(g) if err != nil { return errorStatus(err) } config, err = configClient.GetConfig(context.TODO(), 0) if err != nil { return errorStatus(err) } if config.Label != kbLaunchdStatus.Label() { return errorStatus(fmt.Errorf("Service label mismatch: %s != %s", config.Label, kbLaunchdStatus.Label())) } } version := config.Version buildVersion := libkb.VersionString() st := keybase1.ServiceStatus{ Version: config.Version, Label: kbLaunchdStatus.Label(), Pid: kbLaunchdStatus.Pid(), LastExitStatus: kbLaunchdStatus.LastExitStatus(), BundleVersion: bundleVersion, } // Something must be wrong if this build doesn't match the package version. if bundleVersion != buildVersion { st.InstallStatus = keybase1.InstallStatus_ERROR st.InstallAction = keybase1.InstallAction_NONE st.Error = &keybase1.ServiceStatusError{Message: fmt.Sprintf("Version mismatch: %s != %s", bundleVersion, buildVersion)} return st } installStatus, installAction, se := installStatus(version, bundleVersion, st.LastExitStatus) st.InstallStatus = installStatus st.InstallAction = installAction st.Error = se return st }