diff --git a/packagemanager/os.go b/packagemanager/os.go index efc84d6..703e887 100644 --- a/packagemanager/os.go +++ b/packagemanager/os.go @@ -156,6 +156,10 @@ func parseOsRelease(osRelease string) *OS { result.Version = strings.Trim(splitLine[1], "\"") } } + err := result.getPackageManager() + if err != nil { + log.Fatal(err) + } return &result } @@ -230,3 +234,31 @@ func getPlatformInfo() (*OS, error) { return nil, fmt.Errorf("unsupported operating system: %s", runtime.GOOS) } } + +func (os *OS) getPackageManager() error { + switch os.ID { + case "debian", "ubuntu": + os.PackageManager = "apt" + return nil + case "arch": + os.PackageManager = "pacman" + return nil + case "fedora": + os.PackageManager = "dnf" + return nil + default: + pmcommands := []string{ + "apt", + "dnf", + "pacman", + } + for _, pmname := range pmcommands { + _, err := shell.ExecLookPath(pmname) + if err == nil { + os.PackageManager = pmname + return nil + } + } + return fmt.Errorf("no packagemanager found fos os: %s", os.Name) + } +}