rpaste/modules/utility/system.go
2024-12-03 19:50:21 -07:00

85 lines
2.3 KiB
Go

package utility
import (
"bufio"
"os"
"regexp"
"strings"
)
// Not all of these are going to be used, but just in case. This is more of a
// reference just for me. If more features are eventually added to this utility
// it may make sense to eventually use these.
var (
regexPrettyName = regexp.MustCompile(`^PRETTY_NAME=(.*)$`)
regexID = regexp.MustCompile(`^ID=(.*)$`)
regexVersionID = regexp.MustCompile(`^VERSION_ID=(.*)$`)
regexRockyName = regexp.MustCompile(`^Rocky( Linux)? release`)
regexOtherEL = regexp.MustCompile(`^(CentOS Stream|Fedora|Red Hat Enterprise|AlmaLinux|Scientific)( Linux)? release`)
regexRedHatName = regexp.MustCompile(`^(Rocky|CentOS Stream|Fedora|Red Hat Enterprise|AlmaLinux|Scientific)( Linux)? release`)
VendorName string
SystemVersion string
SystemPrettyName string
pasteBin string
osReleaseID string
simpleOSID string
)
// Gets the distro id only
func GetDistroID() string {
file, err := os.Open("/etc/os-release")
if err != nil {
return ""
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
if m := regexID.FindStringSubmatch(scanner.Text()); m != nil {
VendorName = strings.Trim(m[1], `"`)
}
}
return VendorName
}
// Sets the pastebin based on the OS
func SetPasteOnOS() string {
osReleaseID = GetDistroID()
// The order should be: config -> this
switch osReleaseID {
case "rocky":
pasteBin = "rpaste"
case "redhat", "fedora", "centos", "almalinux", "scientific":
pasteBin = "fpaste"
case "opensuse-leap", "opensuse-tumbleweed", "sles":
// this will be on rpaste for now
pasteBin = "rpaste"
default:
pasteBin = "rpaste"
}
return pasteBin
}
// This is because there are several derivatives and some distros come from
// another. For example, rocky, rhel, alma, centos, fedora, they all generally
// operate the same (eg, sysinfo should work on all of them). But suse, this
// isn't that simple, unfortunately.
func GetGenericDistroID() string {
osReleaseID = GetDistroID()
switch osReleaseID {
case "rocky", "redhat", "fedora", "centos", "almalinux", "scientific":
simpleOSID = "redhat"
case "opensuse-leap", "opensuse-tumbleweed", "sles":
simpleOSID = "suse"
case "debian", "ubuntu":
simpleOSID = "debian"
default:
simpleOSID = "unknown"
}
return simpleOSID
}