diff --git a/.travis.yml b/.travis.yml index 57dd101..dc66c28 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,54 @@ language: bash jobs: include: + - os: linux + dist: trusty + name: "Zabbix 4.0 @ Ubuntu 14 trusty, PHP default" + arch: amd64 + addons: + apt: + sources: + - sourceline: 'deb http://repo.zabbix.com/zabbix/4.0/ubuntu trusty main' + key_url: "https://repo.zabbix.com/zabbix-official-repo.key" + packages: + - ca-certificates + - curl + - grep + - sed + - gawk + - lsof + - jq + - libfcgi0ldbl + - unzip + - zabbix-agent + - zabbix-get + - php5-fpm + before_script: + - sudo curl -o /usr/local/bin/shunit2 https://raw.githubusercontent.com/kward/shunit2/master/shunit2 + - os: linux + dist: xenial + name: "Zabbix 4.0 @ Ubuntu 16 xenial, PHP default" + arch: amd64 + addons: + apt: + sources: + - sourceline: 'deb http://repo.zabbix.com/zabbix/4.0/ubuntu xenial main' + key_url: "https://repo.zabbix.com/zabbix-official-repo.key" + packages: + - ca-certificates + - curl + - grep + - sed + - gawk + - lsof + - jq + - libfcgi0ldbl + - unzip + - zabbix-agent + - zabbix-get + - php-fpm + before_script: + - sudo curl -o /usr/local/bin/shunit2 https://raw.githubusercontent.com/kward/shunit2/master/shunit2 - os: linux dist: bionic name: "Zabbix 4.0 @ Ubuntu 18 bionic, PHP default" diff --git a/README.md b/README.md index 1cee9bb..8e99473 100644 --- a/README.md +++ b/README.md @@ -123,14 +123,25 @@ Please refer to [Wiki](https://github.com/rvalitov/zabbix-php-fpm/wiki/Installat Please refer to [Wiki](https://github.com/rvalitov/zabbix-php-fpm/wiki/Testing-and-Troubleshooting). # Compatibility -Should work with any version of PHP-FPM (starting with PHP 5.3.3), Zabbix 4.0.x and later. -Can work with any version of ISPConfig as long as you have a valid PHP-FPM status page configuration there. -Tested with: -- [Travis CI](https://travis-ci.com/rvalitov/zabbix-php-fpm) -- PHP 7.4, 7.3, 7.2, 7.1, 7.0 -- Zabbix 5.0.1, 4.4.4, 4.2.5, 4.0.20, 4.0.16, 4.0.4 -- Debian 10, 9 -- Ubuntu 18 -- CentOS 7 -- ISPConfig v.3.1.14p2 \ No newline at end of file +### System requirements + +- **PHP**. Should work with any version of PHP-FPM (starting with PHP 5.3.3) +- **Zabbix** 4.0.x and later. +- **ISPConfig**. Can work with any version of ISPConfig as long as you have a valid PHP-FPM status page configuration there. +- Minimal `bash` version 4. +- **OS** + - **Debian** 8 Jessie or newer + - **Ubuntu** 20 Focal, 18 Bionic, 16 Xenial, 14 Trusty. Other versions are supported if they are present in the [Zabbix repository](http://repo.zabbix.com/zabbix/4.0/ubuntu/dists/). + - **CentOS** 6 or newer + - **RHEL** 5 or newer + +### Tested with: + +- [**Travis CI**](https://travis-ci.com/rvalitov/zabbix-php-fpm) +- **PHP** 7.4, 7.3, 7.2, 7.1, 7.0 +- **Zabbix** 5.0.1, 4.4.4, 4.2.5, 4.0.20, 4.0.16, 4.0.4 +- **Debian** 10, 9 +- **Ubuntu** 18 Bionic, 16 Xenial, 14 Trusty +- **CentOS** 7 +- **ISPConfig** v.3.1.14p2 diff --git a/tests/all.sh b/tests/all.sh index 071f4ad..7b99cf0 100644 --- a/tests/all.sh +++ b/tests/all.sh @@ -7,13 +7,53 @@ MAX_POOLS=3 MAX_PORTS=3 MIN_PORT=9000 +function getPHPVersion() { + TEST_STRING=$1 + PHP_VERSION=$(echo "$TEST_STRING" | grep -oP "(\d\.\d)") + if [[ -z "$PHP_VERSION" ]]; then + PHP_VERSION=$(echo "$TEST_STRING" | grep -oP "php(\d)" | grep -oP "(\d)") + fi + echo "$PHP_VERSION" +} + +function getEtcPHPDirectory() { + LIST_OF_DIRS=( + "/etc/php/" + "/etc/php5/" + ) + for PHP_TEST_DIR in "${LIST_OF_DIRS[@]}"; do + if [[ -d "$PHP_TEST_DIR" ]]; then + echo "$PHP_TEST_DIR" + return 0 + fi + done + + return 1 +} + +function getRunPHPDirectory() { + LIST_OF_DIRS=( + "/run/" + "/var/run/" + ) + for PHP_TEST_DIR in "${LIST_OF_DIRS[@]}"; do + RESULT_DIR=$(find "$PHP_TEST_DIR" -name 'php*-fpm.sock' -type s -exec dirname {} \; 2>/dev/null | sort | head -n1) + if [[ -d "$RESULT_DIR" ]]; then + echo "$RESULT_DIR" + return 0 + fi + done + + return 1 +} + copyPool() { ORIGINAL_FILE=$1 POOL_NAME=$2 POOL_SOCKET=$3 POOL_TYPE=$4 POOL_DIR=$(dirname "${ORIGINAL_FILE}") - PHP_VERSION=$(echo "$POOL_DIR" | grep -oP "(\d\.\d)") + PHP_VERSION=$(getPHPVersion "$POOL_DIR") NEW_POOL_FILE="$POOL_DIR/${POOL_NAME}.conf" sudo cp "$ORIGINAL_FILE" "$NEW_POOL_FILE" @@ -31,7 +71,11 @@ copyPool() { setupPool() { POOL_FILE=$1 POOL_DIR=$(dirname "${POOL_FILE}") - PHP_VERSION=$(echo "$POOL_DIR" | grep -oP "(\d\.\d)") + PHP_VERSION=$(getPHPVersion "$POOL_DIR") + + PHP_RUN_DIR=$(getRunPHPDirectory) + EXIT_CODE=$? + assertEquals "Failed to find PHP run directory" "0" "$EXIT_CODE" #Delete all active pools except www.conf: find "$POOL_DIR" -name '*.conf' -type f -not -name 'www.conf' -exec rm -rf {} \; @@ -44,7 +88,7 @@ setupPool() { #Create new socket pools for ((c = 1; c <= MAX_POOLS; c++)); do POOL_NAME="socket$c" - POOL_SOCKET="/run/php/php${PHP_VERSION}-fpm-${POOL_NAME}.sock" + POOL_SOCKET="${PHP_RUN_DIR}php${PHP_VERSION}-fpm-${POOL_NAME}.sock" copyPool "$POOL_FILE" "$POOL_NAME" "$POOL_SOCKET" "static" done @@ -67,7 +111,11 @@ setupPool() { } setupPools() { - PHP_LIST=$(find /etc/php/ -name 'www.conf' -type f) + PHP_DIR=$(getEtcPHPDirectory) + EXIT_CODE=$? + assertEquals "Failed to find PHP directory" "0" "$EXIT_CODE" + + PHP_LIST=$(find "$PHP_DIR" -name 'www.conf' -type f) while IFS= read -r pool; do if [[ -n $pool ]]; then setupPool "$pool" @@ -76,17 +124,29 @@ setupPools() { } getNumberOfPHPVersions() { - PHP_COUNT=$(find /etc/php/ -name 'www.conf' -type f | wc -l) + PHP_DIR=$(getEtcPHPDirectory) + EXIT_CODE=$? + assertEquals "Failed to find PHP directory" "0" "$EXIT_CODE" + + PHP_COUNT=$(find "$PHP_DIR" -name 'www.conf' -type f | wc -l) echo "$PHP_COUNT" } getAnySocket() { + PHP_DIR=$(getEtcPHPDirectory) + EXIT_CODE=$? + assertEquals "Failed to find PHP directory" "0" "$EXIT_CODE" + + PHP_RUN_DIR=$(getRunPHPDirectory) + EXIT_CODE=$? + assertEquals "Failed to find PHP run directory" "0" "$EXIT_CODE" + #Get any socket of PHP-FPM: - PHP_FIRST=$(find /etc/php/ -name 'www.conf' -type f | head -n1) + PHP_FIRST=$(find "$PHP_DIR" -name 'www.conf' -type f | sort | head -n1) assertNotNull "Failed to get PHP conf" "$PHP_FIRST" - PHP_VERSION=$(echo "$PHP_FIRST" | grep -oP "(\d\.\d)") - assertNotNull "Failed to get PHP version" "$PHP_VERSION" - PHP_POOL=$(find /run/php/ -name "php${PHP_VERSION}*.sock" -type s | head -n1) + PHP_VERSION=$(getPHPVersion "$PHP_FIRST") + assertNotNull "Failed to get PHP version for $PHP_FIRST" "$PHP_VERSION" + PHP_POOL=$(find "$PHP_RUN_DIR" -name "php${PHP_VERSION}*.sock" -type s 2>/dev/null | sort | head -n1) assertNotNull "Failed to get PHP${PHP_VERSION} socket" "$PHP_POOL" echo "$PHP_POOL" } @@ -107,7 +167,7 @@ oneTimeSetUp() { #Install files: sudo cp "$TRAVIS_BUILD_DIR/zabbix/zabbix_php_fpm_discovery.sh" "/etc/zabbix" sudo cp "$TRAVIS_BUILD_DIR/zabbix/zabbix_php_fpm_status.sh" "/etc/zabbix" - sudo cp "$TRAVIS_BUILD_DIR/zabbix/userparameter_php_fpm.conf" "$(find /etc/zabbix/ -name 'zabbix_agentd*.d' -type d | head -n1)" + sudo cp "$TRAVIS_BUILD_DIR/zabbix/userparameter_php_fpm.conf" "$(find /etc/zabbix/ -name 'zabbix_agentd*.d' -type d | sort | head -n1)" sudo chmod +x /etc/zabbix/zabbix_php_fpm_discovery.sh sudo chmod +x /etc/zabbix/zabbix_php_fpm_status.sh diff --git a/zabbix/zabbix_php_fpm_discovery.sh b/zabbix/zabbix_php_fpm_discovery.sh index b322a61..d975fb8 100644 --- a/zabbix/zabbix_php_fpm_discovery.sh +++ b/zabbix/zabbix_php_fpm_discovery.sh @@ -71,6 +71,11 @@ if [[ ! -f ${S_WHOAMI} ]]; then exit 1 fi +if [[ "${BASH_VERSINFO:-0}" -lt 4 ]]; then + ${S_ECHO} "This script requires bash version 4.x or newer. Older version detected." + exit 1 +fi + STATUS_PATH="/php-fpm-status" DEBUG_MODE="" ACTIVE_USER=$(${S_WHOAMI})