# platform_detection.sh ############ # This section makes platform detection compatible with omnitruck on the system # it runs. # # Outputs: # $platform: Name of the platform. # $platform_version: Version of the platform. # $machine: System’s architecture. ############

# # Platform and Platform Version detection # # NOTE: This logic should match ohai platform and platform_version matching. # do not invent new platform and platform_version schemas, just make this behave # like what ohai returns as platform and platform_version for the system. # # ALSO NOTE: Do not mangle platform or platform_version here. It is less error # prone and more future-proof to do that in the server, and then all omnitruck clients # will ‘inherit’ the changes (install.sh is not the only client of the omnitruck # endpoint out there). #

machine=‘uname -m` os=`uname -s`

if test -f “/etc/lsb-release” && grep DISTRIB_ID /etc/lsb-release >/dev/null && ! grep wrlinux /etc/lsb-release >/dev/null; then

platform=`grep DISTRIB_ID /etc/lsb-release | cut -d "=" -f 2 | tr '[A-Z]' '[a-z]'`
platform_version=`grep DISTRIB_RELEASE /etc/lsb-release | cut -d "=" -f 2`

if test "$platform" = "\"cumulus linux\""; then
  platform="cumulus_linux"
elif test "$platform" = "\"cumulus networks\""; then
  platform="cumulus_networks"
fi

elif test -f “/etc/debian_version”; then

platform="debian"
platform_version=`cat /etc/debian_version`

elif test -f “/etc/Eos-release”; then

# EOS may also contain /etc/redhat-release so this check must come first.
platform=arista_eos
platform_version=`awk '{print $4}' /etc/Eos-release`
machine="i386"

elif test -f “/etc/redhat-release”; then

platform=`sed 's/^\(.\+\) release.*/\1/' /etc/redhat-release | tr '[A-Z]' '[a-z]'`
platform_version=`sed 's/^.\+ release \([.0-9]\+\).*/\1/' /etc/redhat-release`

if test "$platform" = "xenserver"; then
  # Current XenServer 6.2 is based on CentOS 5, platform is not reset to "el" server should handle response
  platform="xenserver"
else
  # FIXME: use "redhat"
  platform="el"
fi

elif test -f “/etc/system-release”; then

platform=`sed 's/^\(.\+\) release.\+/\1/' /etc/system-release | tr '[A-Z]' '[a-z]'`
platform_version=`sed 's/^.\+ release \([.0-9]\+\).*/\1/' /etc/system-release | tr '[A-Z]' '[a-z]'`
case $platform in amazon*) # sh compat method of checking for a substring
  . /etc/os-release
  platform_version=$VERSION_ID

  if test "$platform_version" = "2022"; then
    platform="amazon"
    platform_version="2022"
  elif test "$platform_version" = "2"; then
    platform="el"
    platform_version="7"
  else
    platform="el"

    # VERSION_ID will match YYYY.MM for Amazon Linux AMIs
    platform_version="6"
  fi
esac

# Apple macOS elif test -f “/usr/bin/sw_vers”; then

platform="mac_os_x"
# Matching the tab-space with sed is error-prone
platform_version=`sw_vers | awk '/^ProductVersion:/ { print $2 }' | cut -d. -f1,2`

elif test -f “/etc/release”; then

machine=`/usr/bin/uname -p`
if grep SmartOS /etc/release >/dev/null; then
  platform="smartos"
  platform_version=`grep ^Image /etc/product | awk '{ print $3 }'`
else
  platform="solaris2"
  platform_version=`/usr/bin/uname -r`
fi

elif test -f “/etc/SuSE-release”; then

if grep 'Enterprise' /etc/SuSE-release >/dev/null;
then
    platform="sles"
    platform_version=`awk '/^VERSION/ {V = $3}; /^PATCHLEVEL/ {P = $3}; END {print V "." P}' /etc/SuSE-release`
else # opensuse 43 only. 15 ships with /etc/os-release only
    platform="opensuseleap"
    platform_version=`awk '/^VERSION =/ { print $3 }' /etc/SuSE-release`
fi

elif test “x$os” = “xFreeBSD”; then

platform="freebsd"
platform_version=`uname -r | sed 's/-.*//'`

elif test “x$os” = “xAIX”; then

platform="aix"
platform_version="`uname -v`.`uname -r`"
machine="powerpc"

elif test -f “/etc/os-release”; then

. /etc/os-release
if test "x$CISCO_RELEASE_INFO" != "x"; then
  . $CISCO_RELEASE_INFO
fi

platform=$ID

# VERSION_ID is always the preferred variable to use, but not
# every distro has it so fallback to VERSION
if test "x$VERSION_ID" != "x"; then
  platform_version=$VERSION_ID
else
  platform_version=$VERSION
fi

fi

if test “x$platform” = “x”; then

echo "Unable to determine platform version!"
report_bug
exit 1

fi

# # NOTE: platform mangling in the install.sh is DEPRECATED # # - install.sh should be true to ohai and should not remap # platform or platform versions. # # - remapping platform and mangling platform version numbers is # now the complete responsibility of the server-side endpoints #

major_version=‘echo $platform_version | cut -d. -f1` case $platform in

# FIXME: should remove this case statement completely
"el")
  # FIXME:  "el" is deprecated, should use "redhat"
  platform_version=$major_version
  ;;
"debian")
  if test "x$major_version" = "x5"; then
    # This is here for potential back-compat.
    # We do not have 5 in versions we publish for anymore but we
    # might have it for earlier versions.
    platform_version="6"
  else
    platform_version=$major_version
  fi
  ;;
"freebsd")
  platform_version=$major_version
  ;;
"sles")
  platform_version=$major_version
  ;;
"opensuseleap")
  platform_version=$major_version
  ;;

esac

# normalize the architecture we detected case $machine in

"arm64"|"aarch64")
  machine="aarch64"
  ;;
"x86_64"|"amd64"|"x64")
  machine="x86_64"
  ;;
"i386"|"i86pc"|"x86"|"i686")
  machine="i386"
  ;;
"sparc"|"sun4u"|"sun4v")
  machine="sparc"
  ;;

esac

if test “x$platform_version” = “x”; then

echo "Unable to determine platform version!"
report_bug
exit 1

fi

if test “x$platform” = “xsolaris2”; then

# hack up the path on Solaris to find wget, pkgadd
PATH=/usr/sfw/bin:/usr/sbin:$PATH
export PATH

fi

echo “$platform $platform_version $machine”

############ # end of platform_detection.sh ############