mirror of
https://github.com/Cacti/documentation.git
synced 2026-10-23 19:46:50 +09:00
* docs: update stale PHP/MySQL/MariaDB version requirements - Requirements.md: PHP 5.4 -> 8.1 (matches 1.2.31+ requirement note) - Requirements.md: MySQL 5.6 -> 5.7, MariaDB 5.5 -> 10.2 (current minimums) - Requirements.md: MySQL section header updated to >= 5.7 / 10.2 - Requirements.md, Install-Under-CentOS_LAMP.md, Install-Under-CentOS_LEMP.md, Installing-Under-Windows.md: comment out innodb_file_format and innodb_large_prefix (removed in MySQL 8.0 / MariaDB 10.3+) Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * docs: upgrade http:// links to https:// and fix dead wiki URLs - Upgrade http:// to https:// in 8 files: General-Installing-Instructions.md, Graph-Templates.md, How-To-SSH-Tunnels.md, Plugin-Development.md, Standards-Code-Formatting.md, Templates.md, Upgrading-Cacti-Under-Windows.md - Replace two dead docs.cacti.net wiki links: How-To-SSH-Tunnels.md: old wiki SNMP guide -> Net-SNMP man page Plugin-Syslog.md: dead plugin:syslog.config -> plugin_syslog repo Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * docs: fix technically inaccurate MySQL configuration recommendations - innodb_additional_mem_pool_size: removed in MySQL 5.7.4 / MariaDB 10.0; replaced with removal notice in Requirements.md and comments in Install-Under-CentOS_LAMP.md and Install-Under-CentOS_LEMP.md - max_heap_table_size: clarify ">= 5" means ">= 5% of system RAM" - innodb_buffer_pool_size: clarify ">= 25" means ">= 25% of system RAM" Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * docs: add missing required PHP extensions to Requirements.md Add dom, mysqlnd, pcntl, Phar, and sqlite3 — all declared as required in composer.json but absent from the module list. pcntl is Linux-only (process control for the poller). Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * docs: fix 36 spelling errors across 19 documentation files Corrections detected by codespell: - somone->someone, Walkthough->Walkthrough, GUAGE->GAUGE - asociate->associate, messege->message, therefor->therefore - get's->gets, Proxys->Proxies, paralelisation->parallelization - parms->params (6 instances in script data query examples) - finialise->finalise, buildin->built-in, everytime->every time - Unistall->Uninstall, resiliant->resilient, build-in->built-in - requriments->requirements (2 instances), explanitory->explanatory (3 instances) - fro->for, invole->involve, reulting->resulting - stauts->status, tge->the Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * ci: add codespell spelling check workflow for documentation Adds GitHub Actions workflow that runs codespell==2.4.1 on all Markdown files on every push/PR to main. Also adds .codespell.cfg to skip binary and generated files (JSON, shell scripts, HTML, images). Update .gitignore to allow .github directory (was blocked by .git* glob). Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * docs: improve voice, consistency, and note formatting across 10 files - Convert passive/impersonal constructions to active voice - Standardize NOTE -> Note in blockquotes for consistency - Reformat inline IMPORTANT/Note callouts as blockquotes - Fix awkward phrasing in LXC container notes - Consolidate fragmented note bullets into single blockquote Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * docs: fix technical accuracy and correct typos across 10 files - Requirements.md: clarify Composer is for source/develop installs only; RRDtool minimum updated to 1.5+ (1.8+ for 1.3.x); php-snmp section rewritten to describe selective fallback behavior; SELinux/AppArmor advice reworded to recommend policy exceptions over blanket disable - Spine.md: fix PHP Script Server range (10 -> 15); fix 'senstivive' and 'Davices' typos - Trees.md: fix broken table rows split across lines; 'Sporting' -> 'Sorting' - Data-Sources.md: restructure storage table to standard 3-column layout; fix '19b' unit typo -> '19kb' - How-To-SNMP-Custom-Script.md: convert bold/backtick commands to proper fenced code blocks; fix 'intex' and 'BNSMPD' typos - Plugins.md: fix 'onfiguration' typo; fix YouTube thumbnail http -> https; fix 'Tuturial' typo - Standards-Security.md: fix 'invalidate' -> 'invalid' - template_apache_config.md: fix 'apcache2' -> 'apache2' - device-template-specific-proxmox.md: replace service file edit with drop-in approach; remove ProtectSystem=off/ProtectHome=off; add note on minimal required systemd overrides - resource/xml/query_interface_traffic.php: http -> https URL Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * docs: rename CentOS install guides to Enterprise Linux; fix grammar, logic, and security flaws - Rename Install-Under-CentOS_LAMP.md → Install-Under-Enterprise-Linux-LAMP.md - Rename Install-Under-CentOS_LEMP.md → Install-Under-Enterprise-Linux-LEMP.md - Update README.md ToC links to match new filenames and correct labels LAMP fixes: - Title updated to reflect RHEL/Rocky Linux/AlmaLinux coverage - Fix step numbering: "2.Install" / "3.Enable" missing space after number - Spine build deps: restructure for EL7/EL8/EL9+ separately; EL8 was missing package install after repo enable; EL9+ uses 'crb' not 'powertools' - SELinux URL: fix quadruple-slash typo; switch to English wiki URL LEMP fixes: - Title: "CentOS 7" → "Enterprise Linux (RHEL / Rocky Linux / AlmaLinux)" - TLS: remove TLSv1 and TLSv1.1 (RFC 8996 prohibited, fails OpenSSL 3.x); set ssl_protocols TLSv1.2 TLSv1.3 - Ciphers: remove DH+3DES (Sweet32 / CVE-2016-2183) - HTTP redirect: uncomment return 301 (comment claiming nginx lacks support for 'return' has been wrong since nginx 0.8 / 2009) - PHP location block: fix 'alias' → 'root' (alias breaks $document_root in fastcgi_param SCRIPT_FILENAME); add missing semicolon after index directive - Cron: poller path was /var/www/html/cacti but install target throughout this guide is /usr/share/nginx/html/cacti — align them - DB: split GRANT...IDENTIFIED BY into CREATE USER + GRANT (IDENTIFIED BY on GRANT removed in MySQL 8.0 / MariaDB 10.5.2) - Fix comment typo: "Compression increases performance0" → remove trailing 0 - SELinux URL: fix quadruple-slash typo README.md: - Update section 3.1 and 3.2 links to new filenames - Correct labels from "CentOS 7" to "Enterprise Linux" - Fix "Reports Admistrative Interface" → "Administrative" - Fix "requriments" (×2) → "requirements" * docs: remove Install-Under-CentOS_LAMP.md (superseded by Install-Under-Enterprise-Linux-LAMP.md) * docs: remove Install-Under-CentOS_LEMP.md (superseded by Install-Under-Enterprise-Linux-LEMP.md) * docs: update README ToC links and fix typos - Update 3.1 and 3.2 links from CentOS to Enterprise Linux filenames - Correct labels: "CentOS 7" → "Enterprise Linux (RHEL/Rocky/AlmaLinux)" - Fix "Reports Admistrative" → "Reports Administrative" - Fix "requriments" (×2) → "requirements" * docs: fix grammar, logic, and technical errors in remaining install/upgrade guides Installing-Under-Windows.md: - Replace php_mysql.dll with php_pdo_mysql.dll (php_mysql removed in PHP 7.0) - Remove IIS ISAPI steps referencing php8isapi.dll (ISAPI dropped in PHP 8.0); replace with FastCGI instructions via php-cgi.exe - Remove NO_AUTO_CREATE_USER from sql_mode (removed MySQL 8.0, breaks startup) - sort_buffer_size = 200M → 32M with caveat (per-session; 200M causes OOM under load) - Fix step numbering gaps: main list 5→8, IIS 3→5, Finishing 5→8 - "you will have to user 8.3 notation" → "use" - "c:cygwin" → "c:\cygwin" (missing backslash) - "it's subfolders" → "its subfolders" - "A anm example" → "An example" - "verify/udate" → "verify/update" Installing-Under-Ubuntu-Debian.md: - Cron user: apache → www-data (apache user does not exist on Ubuntu/Debian) - CREATE DATABASE: use utf8mb4 directly; remove redundant ALTER DATABASE - php8.1-mbstring listed twice in apt-get install; deduplicated - "may received" → "may receive" - Note php8.1 is EOL; recommend checking current supported release Upgrading-Cacti-Under-Windows.md: - Fix all steps numbered 1. → proper sequential numbering (1–10) - Remove hardcoded MySQL 5.7 path; use generic %MYSQL_HOME% note Upgrading-Cacti-Under-FreeBSD.md: - mysqldump: remove contradictory -l / --lock-tables=false flags; replace with --single-transaction (correct for InnoDB, no locking) How-To-SSH-Tunnels.md: - Add prominent note: SSH -L is TCP-only; standard SNMP uses UDP; this guide requires TCP transport configured on snmpd and does not work for most network devices - Fix unclosed code fence after ssh-keygen output block - Replace rc.local persistence with systemd unit (rc.local is deprecated and disabled by default on systemd distros: Ubuntu 16.04+, Debian 9+) - ssh-keygen: recommend ed25519 over RSA * docs: correct PHP 8.1 EOL date, Net-SNMP link, and grammar PHP 8.1 security support ended 31 December 2025, not November 2024. Point the snmpd.conf link at www.net-snmp.org (the sourceforge.io mirror is bot-blocked). Fix 'There a two ways extending' to 'There are two ways to extend'. Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * ci: fix spelling workflow trigger to target develop, not main The repo's default branch is develop; main hasn't moved since 2023. The workflow's push/pull_request filters targeted main, so it never ran on any PR opened against develop. Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> --------- Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
161 lines
7.1 KiB
PHP
161 lines
7.1 KiB
PHP
<?php
|
|
/*
|
|
+-------------------------------------------------------------------------+
|
|
| Copyright (C) 2004-2025 The Cacti Group |
|
|
| |
|
|
| This program is free software; you can redistribute it and/or |
|
|
| modify it under the terms of the GNU General Public License |
|
|
| as published by the Free Software Foundation; either version 2 |
|
|
| of the License, or (at your option) any later version. |
|
|
| |
|
|
| This program is distributed in the hope that it will be useful, |
|
|
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
| GNU General Public License for more details. |
|
|
+-------------------------------------------------------------------------+
|
|
| Cacti: The Complete RRDtool-based Graphing Solution |
|
|
+-------------------------------------------------------------------------+
|
|
| This code is designed, written, and maintained by the Cacti Group. See |
|
|
| about.php and/or the AUTHORS file for specific developer information. |
|
|
+-------------------------------------------------------------------------+
|
|
| https://www.cacti.net/ |
|
|
+-------------------------------------------------------------------------+
|
|
*/
|
|
|
|
|
|
# include some cacti files for ease of use
|
|
include(dirname(__FILE__) . '/../include/cli_check.php');
|
|
include(dirname(__FILE__) . '/../lib/snmp.php');
|
|
|
|
# define all OIDs we need for further processing
|
|
$oids = array(
|
|
'index' => '.1.3.6.1.2.1.2.2.1.1',
|
|
'ifstatus' => '.1.3.6.1.2.1.2.2.1.8',
|
|
'ifdescription' => '.1.3.6.1.2.1.2.2.1.2',
|
|
'ifname' => '.1.3.6.1.2.1.31.1.1.1.1',
|
|
'ifalias' => '.1.3.6.1.2.1.31.1.1.1.18',
|
|
'iftype' => '.1.3.6.1.2.1.2.2.1.3',
|
|
'ifspeed' => '.1.3.6.1.2.1.2.2.1.5',
|
|
'ifHWaddress' => '.1.3.6.1.2.1.2.2.1.6',
|
|
'ifInOctets' => '.1.3.6.1.2.1.2.2.1.10',
|
|
'ifOutOctets' => '.1.3.6.1.2.1.2.2.1.16',
|
|
);
|
|
|
|
$xml_delimiter = '!';
|
|
|
|
# all required input parms
|
|
$hostname = $_SERVER['argv'][1];
|
|
$snmp_community = $_SERVER['argv'][2];
|
|
$snmp_version = $_SERVER['argv'][3];
|
|
$snmp_port = $_SERVER['argv'][4];
|
|
$snmp_timeout = $_SERVER['argv'][5];
|
|
$max_oids = $_SERVER['argv'][6];
|
|
|
|
# required for SNMP V3
|
|
$snmp_auth_username = $_SERVER['argv'][7];
|
|
$snmp_auth_password = $_SERVER['argv'][8];
|
|
$snmp_auth_protocol = $_SERVER['argv'][9];
|
|
$snmp_priv_passphrase = $_SERVER['argv'][10];
|
|
$snmp_priv_protocol = $_SERVER['argv'][11];
|
|
$snmp_context = $_SERVER['argv'][12];
|
|
$cmd = $_SERVER['argv'][13];
|
|
if (isset($_SERVER['argv'][14])) {
|
|
$query_field = $_SERVER['argv'][14];
|
|
};
|
|
|
|
if (isset($_SERVER['argv'][15])) {
|
|
$query_index = $_SERVER['argv'][15];
|
|
};
|
|
|
|
# -------------------------------------------------------------------------
|
|
# main code starts here
|
|
# -------------------------------------------------------------------------
|
|
|
|
# -------------------------------------------------------------------------
|
|
# script MUST respond to index queries
|
|
# the command for this is defined within the XML file as
|
|
# <arg_index>index</arg_index>
|
|
# you may replace the string 'index' both in the XML and here
|
|
# -------------------------------------------------------------------------
|
|
# php -q <script> <parms> index
|
|
# will list all indices of the target values
|
|
# e.g. in case of interfaces
|
|
# it has to respond with the list of interface indices
|
|
# -------------------------------------------------------------------------
|
|
if ($cmd == 'index') {
|
|
# retrieve all indices from target
|
|
$return_arr = reindex(cacti_snmp_walk($hostname, $snmp_community,
|
|
$oids['index'], $snmp_version, $snmp_auth_username,
|
|
$snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol,
|
|
$snmp_context, $snmp_port, $snmp_timeout, $snmp_retries, $max_oids, SNMP_POLLER));
|
|
|
|
# and print each index as a separate line
|
|
for ($i=0;($i<sizeof($return_arr));$i++) {
|
|
print $return_arr[$i] . "\n";
|
|
}
|
|
}
|
|
|
|
# -------------------------------------------------------------------------
|
|
# script MUST respond to query requests
|
|
# the command for this is defined within the XML file as
|
|
# <arg_query>query</arg_query>
|
|
# you may replace the string 'query' both in the XML and here
|
|
# -------------------------------------------------------------------------
|
|
# php -q <script> <parms> query <function>
|
|
# where <function> is a parameter that tells this script,
|
|
# which target value should be retrieved
|
|
# e.g. in case of interfaces, <function> = ifdescription
|
|
# it has to respond with the list of
|
|
# interface indices along with the description of the interface
|
|
# -------------------------------------------------------------------------
|
|
elseif ($cmd == 'query' && isset($query_field)) {
|
|
$arr_index = reindex(cacti_snmp_walk($hostname, $snmp_community,
|
|
$oids['index'], $snmp_version, $snmp_auth_username,
|
|
$snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol,
|
|
$snmp_context, $snmp_port, $snmp_timeout, $snmp_retries, $max_oids, SNMP_POLLER));
|
|
$arr = reindex(cacti_snmp_walk($hostname, $snmp_community,
|
|
$oids[$query_field], $snmp_version, $snmp_auth_username,
|
|
$snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol,
|
|
$snmp_context, $snmp_port, $snmp_timeout, $snmp_retries, $max_oids, SNMP_POLLER));
|
|
|
|
for ($i=0;($i<sizeof($arr_index));$i++) {
|
|
print $arr_index[$i] . $xml_delimiter . $arr[$i] . "\n";
|
|
}
|
|
}
|
|
|
|
# -------------------------------------------------------------------------
|
|
# script MUST respond to get requests
|
|
# the command for this is defined within the XML file as
|
|
# <arg_get>get</arg_get>
|
|
# you may replace the string 'get' both in the XML and here
|
|
# -------------------------------------------------------------------------
|
|
# php -q <script> <parms> get <function> <index>
|
|
# where <function> is a parameter that tells this script,
|
|
# which target value should be retrieved
|
|
# and <index> is the index that should be queried
|
|
# e.g. in case of interfaces, <function> = ifdescription
|
|
# <index> = 1
|
|
# it has to respond with
|
|
# the description of the interface for interface #1
|
|
# -------------------------------------------------------------------------
|
|
elseif ($cmd == 'get' && isset($query_field) && isset($query_index)) {
|
|
print (cacti_snmp_get($hostname, $snmp_community,
|
|
$oids[$query_field] . ".$query_index", $snmp_version, $snmp_auth_username,
|
|
$snmp_auth_password, $snmp_auth_protocol, $snmp_priv_passphrase, $snmp_priv_protocol,
|
|
$snmp_context, $snmp_port, $snmp_timeout, $snmp_retries, $max_oids, SNMP_POLLER));
|
|
} else {
|
|
print "Invalid use of script query, required parameters:\n\n";
|
|
print " <hostname> <cmd>\n";
|
|
}
|
|
|
|
function reindex($arr) {
|
|
$return_arr = array();
|
|
|
|
for ($i=0;($i<sizeof($arr));$i++) {
|
|
$return_arr[$i] = $arr[$i]['value'];
|
|
}
|
|
|
|
return $return_arr;
|
|
}
|
|
|