github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/internal/system/operatingsystem/os_linux.go (about)

     1  //go:build linux
     2  // +build linux
     3  
     4  package operatingsystem
     5  
     6  import (
     7  	"fmt"
     8  	"os"
     9  	"strings"
    10  )
    11  
    12  // platformInfo is the platform specific method to get system information
    13  func platformInfo() (*OS, error) {
    14  	_, err := os.Stat("/etc/os-release")
    15  	if os.IsNotExist(err) {
    16  		return nil, fmt.Errorf("unable to read system information")
    17  	}
    18  
    19  	osRelease, _ := os.ReadFile("/etc/os-release")
    20  	return parseOsRelease(string(osRelease)), nil
    21  }
    22  
    23  func parseOsRelease(osRelease string) *OS {
    24  
    25  	// Default value
    26  	var result OS
    27  	result.ID = "Unknown"
    28  	result.Name = "Unknown"
    29  	result.Version = "Unknown"
    30  
    31  	// Split into lines
    32  	lines := strings.Split(osRelease, "\n")
    33  	// Iterate lines
    34  	for _, line := range lines {
    35  		// Split each line by the equals char
    36  		splitLine := strings.SplitN(line, "=", 2)
    37  		// Check we have
    38  		if len(splitLine) != 2 {
    39  			continue
    40  		}
    41  		switch splitLine[0] {
    42  		case "ID":
    43  			result.ID = strings.ToLower(strings.Trim(splitLine[1], "\""))
    44  		case "NAME":
    45  			result.Name = strings.Trim(splitLine[1], "\"")
    46  		case "VERSION_ID":
    47  			result.Version = strings.Trim(splitLine[1], "\"")
    48  		}
    49  	}
    50  	return &result
    51  }