package operatingsystem import ( "bytes" "errors" "io/ioutil" ) var ( // file to use to detect if the daemon is running in a container proc1Cgroup = "/proc/1/cgroup" // file to check to determine Operating System etcOsRelease = "/etc/os-release" ) func GetOperatingSystem() (string, error) { b, err := ioutil.ReadFile(etcOsRelease) if err != nil { return "", err } if i := bytes.Index(b, []byte("PRETTY_NAME")); i >= 0 { b = b[i+13:] return string(b[:bytes.IndexByte(b, '"')]), nil } return "", errors.New("PRETTY_NAME not found") } func IsContainerized() (bool, error) { b, err := ioutil.ReadFile(proc1Cgroup) if err != nil { return false, err } for _, line := range bytes.Split(b, []byte{'\n'}) { if len(line) > 0 && !bytes.HasSuffix(line, []byte{'/'}) { return true, nil } } return false, nil }