operatingsystem_linux.go 837 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package operatingsystem
  2. import (
  3. "bytes"
  4. "errors"
  5. "io/ioutil"
  6. )
  7. var (
  8. // file to use to detect if the daemon is running in a container
  9. proc1Cgroup = "/proc/1/cgroup"
  10. // file to check to determine Operating System
  11. etcOsRelease = "/etc/os-release"
  12. )
  13. func GetOperatingSystem() (string, error) {
  14. b, err := ioutil.ReadFile(etcOsRelease)
  15. if err != nil {
  16. return "", err
  17. }
  18. if i := bytes.Index(b, []byte("PRETTY_NAME")); i >= 0 {
  19. b = b[i+13:]
  20. return string(b[:bytes.IndexByte(b, '"')]), nil
  21. }
  22. return "", errors.New("PRETTY_NAME not found")
  23. }
  24. func IsContainerized() (bool, error) {
  25. b, err := ioutil.ReadFile(proc1Cgroup)
  26. if err != nil {
  27. return false, err
  28. }
  29. for _, line := range bytes.Split(b, []byte{'\n'}) {
  30. if len(line) > 0 && !bytes.HasSuffix(line, []byte{'/'}) {
  31. return true, nil
  32. }
  33. }
  34. return false, nil
  35. }