package main import ( "bufio" "os/exec" "strings" ) func getInstalledPackages() (map[string]string, error) { // Run the dpkg-query command to list installed packages and versions cmd := exec.Command("dpkg-query", "-W", "-f=${Package} ${Version}\n") stdout, err := cmd.StdoutPipe() if err != nil { return nil, err } // Start the command execution if err := cmd.Start(); err != nil { return nil, err } defer cmd.Wait() // Create a map to store package names and versions installedPackages := make(map[string]string) // Use a scanner to read the output of the command line by line scanner := bufio.NewScanner(stdout) for scanner.Scan() { line := scanner.Text() // Split each line into package name and version parts := strings.SplitN(line, " ", 2) if len(parts) == 2 { packageName := parts[0] version := parts[1] installedPackages[packageName] = version } } // Return the map with package names and versions return installedPackages, scanner.Err() }