linux-bench/utils.go

120 lines
2.8 KiB
Go
Raw Normal View History

2019-01-27 16:12:29 +02:00
package main
import (
"os/exec"
"regexp"
"strings"
)
func GetOperatingSystem() (platform string, err error) {
out, err := exec.Command("bash", "-c", "cat /etc/os-release").Output()
if err != nil {
return "", err
} else {
output := strings.ToLower(string(out))
output = strings.Replace(output, `"`, "", -1)
output = strings.Replace(output, `_id`, "", -1) // version_id kills the regex
flagRe := regexp.MustCompile("id" + `=([^ \n]*)`)
vals := flagRe.FindStringSubmatch(output)
if len(vals) > 1 {
platform = vals[1]
}
platform += getPlatformVersion(output, platform)
}
return platform, nil
}
func GetBootLoader() (boot string, err error) {
out, err := exec.Command("grub-install", "--version").Output()
if err != nil {
out, err = exec.Command("bash", "-c", "ls /boot | grep grub").Output()
if err != nil {
out, err = exec.Command("bash", "-c", "ls /boot/boot | grep grub").Output()
if err != nil {
return "", err
}
}
}
output := strings.ToLower(string(out))
if strings.Contains(output, "grub2") {
boot = "grub2"
} else if strings.Contains(output, "grub") {
boot = "grub"
}
return boot, nil
}
func GetSystemLogManager() (syslog string, err error) {
out, err := exec.Command("bash", "-c", "sudo lsof +D /var/log | grep /var/log/syslog | cut -f1 -d' '").Output()
2019-01-27 16:12:29 +02:00
if err != nil {
out, err := exec.Command("bash", "-c", "service rsyslog status").Output()
if err != nil {
return "", err
}
output := strings.ToLower(string(out))
if strings.Contains(output, "active (running)") {
syslog = "rsyslog"
} else {
syslog = "syslog-ng"
}
} else {
output := strings.ToLower(string(out))
if strings.Contains(output, "syslog-ng") {
syslog = "syslog-ng"
} else {
syslog = "rsyslog"
}
}
return syslog, nil
}
func GetLSM() (lsm string, err error) {
out, err := exec.Command("bash", "-c", "sudo apparmor_status").Output()
if err != nil {
out, err = exec.Command("bash", "-c", "sestatus").Output()
if err != nil {
return "", err
} else {
output := strings.ToLower(string(out))
space := regexp.MustCompile(`\s+`)
output = space.ReplaceAllString(output, " ")
if strings.Contains(output, "selinux status: enabled") {
lsm = "selinux"
}
}
} else {
output := strings.ToLower(string(out))
if strings.Contains(output, "apparmor module is loaded") {
lsm = "apparmor"
}
}
return lsm, nil
}
func getPlatformVersion(output, platform string) string {
flagRe := regexp.MustCompile(`version[_id]*=([^ \n]*)`)
2019-01-27 16:12:29 +02:00
vals := flagRe.FindStringSubmatch(output)
if len(vals) > 1 {
switch platform {
case "rhel":
return vals[1][:1] // Get the major version only, examaple: 7.6 will return 7
case "ubuntu":
return vals[1][:2] // Get the major version only, examaple: 18.04 will return 18
2019-01-27 16:12:29 +02:00
default:
return ""
}
}
return ""
}