collect-offline-env.sh 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/bin/sh
  2. # Read-only facts needed to select Linux Python wheels and the uv binary.
  3. printf '%s\n' '=== OS ==='
  4. if [ -r /etc/os-release ]; then
  5. awk -F= '$1 == "PRETTY_NAME" || $1 == "ID" || $1 == "ID_LIKE" || $1 == "VERSION_ID" { print }' /etc/os-release
  6. else
  7. printf '%s\n' 'os-release: unavailable'
  8. fi
  9. printf 'architecture: '; uname -m
  10. printf 'kernel: '; uname -r
  11. printf 'libc: '
  12. getconf GNU_LIBC_VERSION 2>/dev/null || printf '%s\n' 'unavailable'
  13. printf '%s\n' '=== Python ==='
  14. python_status=0
  15. if command -v python3.14 >/dev/null 2>&1; then
  16. if ! python3.14 - <<'PY'
  17. import sys
  18. import sysconfig
  19. import os
  20. import signal
  21. print('version:', sys.version.split()[0])
  22. print('executable:', sys.executable)
  23. print('cache_tag:', sys.implementation.cache_tag)
  24. print('soabi:', sysconfig.get_config_var('SOABI'))
  25. print('platform:', sysconfig.get_platform())
  26. try:
  27. fd = os.pidfd_open(os.getpid())
  28. try:
  29. signal.pidfd_send_signal(fd, 0)
  30. finally:
  31. os.close(fd)
  32. except (AttributeError, OSError) as exc:
  33. print('pidfd:', 'unavailable (' + type(exc).__name__ + ')')
  34. else:
  35. print('pidfd: available')
  36. PY
  37. then
  38. printf '%s\n' 'python3.14: inspection failed'
  39. python_status=1
  40. fi
  41. else
  42. printf '%s\n' 'python3.14: unavailable'
  43. python_status=1
  44. fi
  45. printf '%s\n' '=== NVIDIA ==='
  46. if command -v nvidia-smi >/dev/null 2>&1; then
  47. if nvidia-smi --query-gpu=name,driver_version,memory.total --format=csv,noheader; then
  48. nvidia-smi 2>/dev/null | sed -n '1,3p'
  49. else
  50. printf '%s\n' 'nvidia-smi: query failed'
  51. fi
  52. else
  53. printf '%s\n' 'nvidia-smi: unavailable'
  54. fi
  55. exit "$python_status"