package main import ( "bufio" "fmt" "os" "os/exec" "runtime" "strings" ) // detectDistro returns the Linux distribution name (if possible) func detectDistro() string { // Check if we're on Linux if runtime.GOOS != "linux" { return "" } // Try to read /etc/os-release to determine the distro file, err := os.Open("/etc/os-release") if err != nil { return "" } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() if strings.HasPrefix(line, "ID=") { parts := strings.SplitN(line, "=", 2) if len(parts) == 2 { return strings.Trim(parts[1], `"`) } } } return "" } // getPackageList returns the list of installed packages based on the distro func getPackageList(distro string) ([]string, error) { var cmd *exec.Cmd // Run the appropriate command based on the detected distribution switch distro { case "ubuntu", "debian": cmd = exec.Command("dpkg-query", "-W", "-f=${Package} ${Version}\n") case "fedora", "centos", "rhel": cmd = exec.Command("rpm", "-qa") case "arch", "manjaro": cmd = exec.Command("pacman", "-Q") default: return nil, fmt.Errorf("unsupported distribution: %s", distro) } // Capture the command's output output, err := cmd.CombinedOutput() if err != nil { return nil, fmt.Errorf("error running command: %v", err) } // Split the output into lines and return lines := strings.Split(string(output), "\n") return lines, nil }