diff options
| author | Jeff Carr <[email protected]> | 2024-11-15 09:50:13 -0600 | 
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2024-11-15 09:50:13 -0600 | 
| commit | ea96d4880eedd92d9c8228b84de028185ec941b2 (patch) | |
| tree | 8c8f317c1ddca756e7c1bc12c132855e6d32833c | |
| parent | 7b069233955c6f35270f0cb2cb49bf6038c11020 (diff) | |
does apt_linux.go vs apt_windows.go work automagically?
| -rw-r--r-- | apt.go (renamed from dpkgQuery.go) | 0 | ||||
| -rw-r--r-- | apt_linux.go | 64 | ||||
| -rw-r--r-- | main.go | 25 | 
3 files changed, 89 insertions, 0 deletions
diff --git a/apt_linux.go b/apt_linux.go new file mode 100644 index 0000000..5d6eb16 --- /dev/null +++ b/apt_linux.go @@ -0,0 +1,64 @@ +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 +} @@ -55,6 +55,31 @@ func main() {  	for pkg, version := range installedPackages {  		fmt.Printf("%s: %s\n", pkg, version)  	} + +	// Detect the Linux distribution +	distro := detectDistro() +	if distro == "" { +		fmt.Println("Unable to detect Linux distribution.") +		return +	} + +	fmt.Printf("Detected distribution: %s\n", distro) + +	// Get the list of installed packages for the detected distro +	packages, err := getPackageList(distro) +	if err != nil { +		fmt.Println("Error:", err) +		return +	} + +	// Print the installed packages +	fmt.Println("Installed Packages:") +	for _, pkg := range packages { +		if pkg != "" { +			fmt.Println(pkg) +		} +	} +  	go NewWatchdog()  	startHTTP()  | 
