getKernelVersion_linux.go 1006 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package docker
  2. import (
  3. "strconv"
  4. "strings"
  5. "syscall"
  6. )
  7. func getKernelVersion() (*KernelVersionInfo, error) {
  8. var (
  9. uts syscall.Utsname
  10. flavor string
  11. kernel, major, minor int
  12. err error
  13. )
  14. if err := syscall.Uname(&uts); err != nil {
  15. return nil, err
  16. }
  17. release := make([]byte, len(uts.Release))
  18. i := 0
  19. for _, c := range uts.Release {
  20. release[i] = byte(c)
  21. i++
  22. }
  23. tmp := strings.SplitN(string(release), "-", 2)
  24. tmp2 := strings.SplitN(tmp[0], ".", 3)
  25. if len(tmp2) > 0 {
  26. kernel, err = strconv.Atoi(tmp2[0])
  27. if err != nil {
  28. return nil, err
  29. }
  30. }
  31. if len(tmp2) > 1 {
  32. major, err = strconv.Atoi(tmp2[1])
  33. if err != nil {
  34. return nil, err
  35. }
  36. }
  37. if len(tmp2) > 2 {
  38. minor, err = strconv.Atoi(tmp2[2])
  39. if err != nil {
  40. return nil, err
  41. }
  42. }
  43. if len(tmp) == 2 {
  44. flavor = tmp[1]
  45. } else {
  46. flavor = ""
  47. }
  48. return &KernelVersionInfo{
  49. Kernel: kernel,
  50. Major: major,
  51. Minor: minor,
  52. Flavor: flavor,
  53. }, nil
  54. }