Ad Widget

Collapse

Linux: чтение Distribution name

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Anth(0)ny
    Member
    • Jul 2015
    • 42

    #1

    Linux: чтение Distribution name

    Коллеги, добрый день.

    Понадобилось сделать универсальный айтем для чтения имени дистрибутива Linux и его версии.

    Столкнулся с проблемой, что для разных дистрибутивов имя хранится в разных местах и я не смог нарисовать универсальный метод (однострочный скрипт). Предполагается выполнение строки через system.run с сервера мониторинга, без создания локального айтема.

    Не подскажете, как можно решить данную проблему, есть ли какой-то путь? Ничего толкового нагуглить не удалось. lsb_release поставить возможности нет.

    Спасибо.
  • Nagainos
    Member
    • Oct 2016
    • 46

    #2
    Code:
    #!/bin/bash
    if [ -f "/etc/lsb_release"]; then
    grep 'DISTRIB_DESCRIPTION' /etc/lsb/release | awk -F\= '{print $2}';
    exit 0;
    fi
    if [ -f "/etc/redhat-release"]; then
    cat /etc/redhat-release;
    exit 0;
    fi
    
    echo "OS version undetected"
    exit 1;
    Первое что пришло в голову, не составит сложности дописать под любую ОСь

    Comment

    • Kos
      Senior Member
      Zabbix Certified SpecialistZabbix Certified Professional
      • Aug 2015
      • 3404

      #3
      Боюсь, что в общем виде проблема решается только одним способом:
      Code:
      system.run["cat /etc/*-release"]
      Но результатом будет, как правило, многострочный текст.

      Дело в том, что производители, вроде бы, договорились между собой стандартизировать местоположение этих данных: держать их в файле /etc/os-release. Как минимум, последние версии SUSE-шных и RedHat-овских дистрибутивов держат их именно там и в стандартизированном виде.
      Однако: 1) в более старых версиях это не так; 2) не факт, что другие производители следуют этой договорённости; 3) есть множество производных дистрибутивов (используемых, например, в appliance-ах), где этой практике также не следуют.

      Вот несколько примеров того, как выглядит одна и та же команда "more /etc/*-release" (чтобы были видны конкретные имена файлов) на разных Linux-системах из имеющегося "зоопарка".

      SLES12sp2:
      Code:
      ::::::::::::::
      /etc/SuSE-release
      ::::::::::::::
      SUSE Linux Enterprise Server 12 (x86_64)
      VERSION = 12
      PATCHLEVEL = 2
      # This file is deprecated and will be removed in a future service pack or release.
      # Please check /etc/os-release for details about this release.
      ::::::::::::::
      /etc/os-release
      ::::::::::::::
      NAME="SLES"
      VERSION="12-SP2"
      VERSION_ID="12.2"
      PRETTY_NAME="SUSE Linux Enterprise Server 12 SP2"
      ID="sles"
      ANSI_COLOR="0;32"
      CPE_NAME="cpe:/o:suse:sles:12:sp2"
      SLES11sp4/OES11sp3:
      Code:
      ::::::::::::::
      /etc/SuSE-release
      ::::::::::::::
      SUSE Linux Enterprise Server 11 (x86_64)
      VERSION = 11
      PATCHLEVEL = 4
      ::::::::::::::
      /etc/lsb-release
      ::::::::::::::
      LSB_VERSION="core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-x86_64:core-3.2-x86_64:core-4.0-x86_64"
      ::::::::::::::
      /etc/novell-release
      ::::::::::::::
      Novell Open Enterprise Server 11 (x86_64)
      VERSION = 11.3
      PATCHLEVEL = 3
      ::::::::::::::
      /etc/os-release
      ::::::::::::::
      NAME="SLES"
      VERSION="11.4"
      VERSION_ID="11.4"
      PRETTY_NAME="SUSE Linux Enterprise Server 11 SP4"
      ID="sles"
      ANSI_COLOR="0;32"
      CPE_NAME="cpe:/o:suse:sles:11:4"
      RHEL 7.3:
      Code:
      ::::::::::::::
      /etc/os-release
      ::::::::::::::
      NAME="Red Hat Enterprise Linux Server"
      VERSION="7.3 (Maipo)"
      ID="rhel"
      ID_LIKE="fedora"
      VERSION_ID="7.3"
      PRETTY_NAME="Red Hat Enterprise Linux"
      ANSI_COLOR="0;31"
      CPE_NAME="cpe:/o:redhat:enterprise_linux:7.3:GA:server"
      HOME_URL="https://www.redhat.com/"
      BUG_REPORT_URL="https://bugzilla.redhat.com/"
      
      REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 7"
      REDHAT_BUGZILLA_PRODUCT_VERSION=7.3
      REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
      REDHAT_SUPPORT_PRODUCT_VERSION="7.3"
      ::::::::::::::
      /etc/redhat-release
      ::::::::::::::
      Red Hat Enterprise Linux Server release 7.3 (Maipo)
      ::::::::::::::
      /etc/system-release
      ::::::::::::::
      Red Hat Enterprise Linux Server release 7.3 (Maipo)
      VMware VCenter (фактически, appliance):
      Code:
      ::::::::::::::
      /etc/SuSE-release
      ::::::::::::::
      SUSE Linux Enterprise Server 11 (x86_64)
      VERSION = 11
      PATCHLEVEL = 3
      Avamar server (appliance):
      Code:
      ::::::::::::::
      /etc/SuSE-release
      ::::::::::::::
      SUSE Linux Enterprise Server 11 (x86_64)
      VERSION = 11
      PATCHLEVEL = 1
      IWSVA (appliance):
      Code:
      ::::::::::::::
      /etc/redhat-release
      ::::::::::::::
      IWSVA release 6.5
      ::::::::::::::
      /etc/system-release
      ::::::::::::::
      IWSVA release 6.5
      Centos 6.2:
      Code:
      ::::::::::::::
      /etc/centos-release
      ::::::::::::::
      CentOS release 6.2 (Final)
      ::::::::::::::
      /etc/redhat-release
      ::::::::::::::
      CentOS release 6.2 (Final)
      ::::::::::::::
      /etc/system-release
      ::::::::::::::
      CentOS release 6.2 (Final)

      Comment

      • Nagainos
        Member
        • Oct 2016
        • 46

        #4
        Можно ещё попробовать ansible с модулем gather_fact, выдёргивать значение переменных "ansible_distribution", "ansible_distribution_release", "ansible_distribution_version", форматировать вывод через awk и запихивать в Zabbix. Таким образом можно не распихивать скрипты по разным хостам, достаточно поставить ansible на Zabbix Proxy или Zabbix Server

        Comment

        Working...