// KeybaseFuseStatus returns Fuse status func KeybaseFuseStatus(bundleVersion string, log Log) keybase1.FuseStatus { st := keybase1.FuseStatus{ BundleVersion: bundleVersion, InstallStatus: keybase1.InstallStatus_UNKNOWN, InstallAction: keybase1.InstallAction_UNKNOWN, } var kextInfo *kext.Info // Check kbfuse 3.x path := "/Library/Filesystems/kbfuse.fs" if _, err := os.Stat(path); err == nil { st.Path = path kextID := "com.github.kbfuse.filesystems.kbfuse" info, err := kext.LoadInfo(kextID) if err != nil { st.InstallStatus = keybase1.InstallStatus_ERROR st.InstallAction = keybase1.InstallAction_REINSTALL st.Status = keybase1.Status{Code: libkb.SCGeneric, Name: "INSTALL_ERROR", Desc: err.Error()} return st } if info == nil { // This means the kext isn't loaded. If kext isn't loaded then kbfs will // load it when it start up by calling load_kbfuse (in the kext bundle). // TODO: Go ahead and load the kext ahead of time? st.InstallStatus = keybase1.InstallStatus_INSTALLED st.InstallAction = keybase1.InstallAction_NONE st.Status = keybase1.StatusOK(fmt.Sprintf("Fuse installed (%s) but kext was not loaded (%s)", st.Path, kextID)) return st } // Installed st.KextID = kextID kextInfo = info } // If neither is found, we have no install if st.KextID == "" || kextInfo == nil { st.InstallStatus = keybase1.InstallStatus_NOT_INSTALLED st.InstallAction = keybase1.InstallAction_INSTALL return st } // Try to get mount info, it's non-critical if we fail though. mountInfos, err := mountInfo("kbfuse") if err != nil { log.Errorf("Error trying to read mount info: %s", err) } st.MountInfos = mountInfos st.Version = kextInfo.Version st.KextStarted = kextInfo.Started installStatus, installAction, status := ResolveInstallStatus(st.Version, st.BundleVersion, "", log) st.InstallStatus = installStatus st.InstallAction = installAction st.Status = status return st }
func KeybaseFuseStatus(g *libkb.GlobalContext, bundleVersion string) keybase1.FuseStatus { st := keybase1.FuseStatus{ BundleVersion: bundleVersion, InstallStatus: keybase1.InstallStatus_UNKNOWN, InstallAction: keybase1.InstallAction_UNKNOWN, } var kextInfo *kext.Info // Check kbfuse 3.x path := "/Library/Filesystems/kbfuse.fs" if _, err := os.Stat(path); err == nil { st.Path = path kextID := "com.github.kbfuse.filesystems.kbfuse" info, err := kext.LoadInfo(kextID) if err != nil { st.InstallStatus = keybase1.InstallStatus_ERROR st.InstallAction = keybase1.InstallAction_REINSTALL st.Status = keybase1.Status{Code: libkb.SCGeneric, Name: "INSTALL_ERROR", Desc: err.Error()} return st } if info == nil { st.InstallStatus = keybase1.InstallStatus_ERROR st.InstallAction = keybase1.InstallAction_REINSTALL st.Status = keybase1.Status{Code: libkb.SCGeneric, Name: "INSTALL_ERROR", Desc: fmt.Sprintf("Fuse installed (%s) but kext was not loaded (%s)", st.Path, kextID)} return st } // Installed st.KextID = kextID kextInfo = info } // If neither is found, we have no install if st.KextID == "" || kextInfo == nil { st.InstallStatus = keybase1.InstallStatus_NOT_INSTALLED st.InstallAction = keybase1.InstallAction_INSTALL return st } // Try to get mount info, it's non-critical if we fail though. mountInfos, err := mountInfo("kbfuse") if err != nil { g.Log.Errorf("Error trying to read mount info: %s", err) } st.MountInfos = mountInfos st.Version = kextInfo.Version st.KextStarted = kextInfo.Started installStatus, installAction, status := install.ResolveInstallStatus(st.Version, st.BundleVersion, "") st.InstallStatus = installStatus st.InstallAction = installAction st.Status = status return st }