mirror of
https://github.com/Cacti/documentation.git
synced 2026-10-23 03:26:44 +09:00
* docs: comprehensive audit, Spine poller overhaul, and technical refactor - Overhaul Spine documentation (Spine.md) with complete end-to-end guide: architecture, prerequisites for modern distros (EL8/9 CRB, Ubuntu 22/24, Debian 11/12, FreeBSD), SUID root permissions, secure spine.conf setup (0640), Web UI configuration (Paths, Poller type, Data Collectors tuning), MySQL max_connections sizing, and troubleshooting. - Fix broken links and anchors (Hardening, SNMP data queries, Hook API references). - Fix broken image reference in Sites.md (add-site.JPG -> add-site.png). - Fix syntax errors in documentation PHP code blocks, including invalid parenthesization, missing SQL execute quotes, and malformed comments in FAQ. - Fix DevOps installation commands: use config.php.dist, correct systemctl service names for MySQL/MariaDB/PHP-FPM, remove nonexistent php-json, add missing composer install, and correct Debian/Ubuntu systemd environment path. - Correct grammatical errors, repeated words, and typos across all markdown documents. - Remove obsolete unreferenced duplicate installation guides. Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * docs: correct reviewed examples and guidance Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * docs: correct guidance that disagrees with the Cacti source Verified each claim against include/global_arrays.php, lib/auth.php, lib/functions.php, host_templates.php and the Spine config parser. The notable ones: api_plugin_safe_exec() does not exist on either branch, Spine reads DB_Pass rather than DB_Password, and the CDEF special data source table was missing five entries and renamed four others. Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * docs: wrap Spine prose and fence the connection sizing formula The formula's bare asterisks rendered as emphasis, dropping the multiplication signs. Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> * chore: refresh copyright year in scripts and issue templates Signed-off-by: Thomas Vincent <thomasvincent@gmail.com> --------- Signed-off-by: Thomas Vincent <thomasvincent@gmail.com>
459 lines
13 KiB
Markdown
459 lines
13 KiB
Markdown
# General Installing Instructions
|
|
|
|
> **Note**: As of Cacti 1.2.31, PHP 8.1 is required and PHP Composer is
|
|
> required. Composer installs the vendor libraries and keeps them up to date.
|
|
|
|
Make sure the following packages are installed according to your operating
|
|
system's requirements. Verify that Apache and MySQL/MariaDB start at system
|
|
startup.
|
|
|
|
|
|
### A special note on installing Cacti in LXC containers such as those found on Proxmox
|
|
|
|
We recommend creating a privileged container. You may need to update your
|
|
container's config file with
|
|
|
|
```console
|
|
lxc.apparmor.profile: unconfined
|
|
```
|
|
|
|
This will allow ICMP ping and other functions to work.
|
|
|
|
A tested configuration file like the one below should work. Tune it to your own
|
|
needs and standards.
|
|
|
|
```console
|
|
arch: amd64
|
|
cores: 2
|
|
hostname: cacti
|
|
memory: 2048
|
|
net0: name=eth0,bridge=vmbr0,firewall=1,hwaddr=mac-id,ip=dhcp,type=veth
|
|
ostype: ubuntu
|
|
rootfs: local-lvm:vm-110-disk-0,size=8G
|
|
swap: 2048
|
|
lxc.apparmor.profile: unconfined
|
|
```
|
|
|
|
|
|
## Required Packages for Most Operating Systems
|
|
|
|
Depending on your operating system and PHP version, certain packages are
|
|
required for Cacti. The largest variable in these requirements comes with
|
|
regard to PHP and MySQL/MariaDB.
|
|
|
|
Installation requirements include the packages below. The installation of these
|
|
packages will vary by operating system.
|
|
|
|
### Base OS
|
|
|
|
- Apache, IIS, or nginx
|
|
|
|
- net-snmp, net-snmp-utils
|
|
|
|
- rrdtool
|
|
|
|
- help2man (for spine)
|
|
|
|
- dos2unix (for spine)
|
|
|
|
- development packages (gcc, automake, autoconf, libtool, either mysql-devel or
|
|
mariadb-devel, net-snmp-devel, help2man)
|
|
|
|
(for spine)
|
|
|
|
### Database
|
|
|
|
MySQL versions 8.0/8.4+ and MariaDB versions 10.5 through 11.x+ are supported.
|
|
|
|
- mysql
|
|
|
|
- mysql-server
|
|
|
|
- libmysqlclient
|
|
|
|
or
|
|
|
|
- mariadb
|
|
|
|
- mariadb-server
|
|
|
|
- libmariadbclient
|
|
|
|
### PHP Modules
|
|
|
|
The installation of these modules varies by OS. Use the `php -m` command to
|
|
verify that they are installed.
|
|
|
|
- posix
|
|
|
|
- session
|
|
|
|
- sockets
|
|
|
|
- PDO
|
|
|
|
- pdo_mysql
|
|
|
|
- xml
|
|
|
|
- ldap
|
|
|
|
- mbstring
|
|
|
|
- pcre
|
|
|
|
- json
|
|
|
|
- openssl
|
|
|
|
- gd
|
|
|
|
- zlib
|
|
|
|
### PHP Optional Modules
|
|
|
|
The following modules are optional, but preferred to be installed.
|
|
|
|
- snmp
|
|
|
|
- gmp (for plugin support)
|
|
|
|
- com or dotnet (Windows only)
|
|
|
|
### A special note for systems using PHP-FPM
|
|
|
|
Before starting the Cacti setup process, restart the PHP-FPM daemon to rebuild
|
|
its cache, or you may receive an HTTP 500 error.
|
|
|
|
```console
|
|
systemctl restart php-fpm
|
|
```
|
|
|
|
## FreeBSD
|
|
|
|
There are two ways to install on FreeBSD. In both cases Cacti pulls in its
|
|
dependent packages, so you do not need to install anything else. Each way has
|
|
trade-offs:
|
|
|
|
- Compiled packages: fast, but with fixed dependency versions (for example an
|
|
older MySQL server or PHP version).
|
|
|
|
```sh
|
|
pkg install cacti
|
|
pkg install spine
|
|
```
|
|
|
|
- FreeBSD ports: compilation can take a long time, but dependency versions are
|
|
not fixed (see
|
|
[Using the Ports Collection](https://docs.freebsd.org/en/books/handbook/ports/))
|
|
|
|
```sh
|
|
pkg install git
|
|
git clone https://git.FreeBSD.org/ports.git /usr/ports
|
|
git -C /usr/ports pull
|
|
# Choose either MariaDB or MySQL:
|
|
cd /usr/ports/databases/mariadb106-server
|
|
make install clean
|
|
cd /usr/ports/net-mgmt/cacti
|
|
make install
|
|
cd /usr/ports/net-mgmt/spine
|
|
make install
|
|
```
|
|
|
|
Apache and other software can be installed using packages or Ports as well.
|
|
|
|
Everything in FreeBSD is installed under /usr/local/. This documentation shows
|
|
paths such as /etc/php.ini and /usr/bin/spine.
|
|
|
|
Use the FreeBSD equivalents instead: /usr/local/etc, /usr/local/bin/spine.
|
|
|
|
For Spine, set the suid bit (without it, ICMP ping cannot function):
|
|
|
|
```sh
|
|
chmod +s /usr/local/bin/spine
|
|
```
|
|
|
|
## Configure PHP
|
|
|
|
Verify that the modules are installed and configured correctly. There are
|
|
several ways to do so - consult
|
|
[PHP configuration instructions](https://www.php.net/manual/en/configuration.php)
|
|
for a complete description.
|
|
|
|
It is imperative that you set the `date.timezone` in your `/etc/php.ini`, or
|
|
`/etc/phpX/apache/php.ini` and `/etc/phpX/cli/php.ini` files. Failure to do so
|
|
will result in errors after the install is complete.
|
|
|
|
Most other PHP configuration is done automatically by the base OS, so there is
|
|
no need to discuss that here.
|
|
|
|
## Configure the Webserver (Apache)
|
|
|
|
Most Linux and UNIX systems automatically configure the web server to allow PHP
|
|
content, so no additional configuration should be needed. The section below is
|
|
included for reference in case you are running a UNIX version that does not
|
|
configure the web server correctly. It is written specifically for RHEL and its
|
|
variants, so the instructions may vary.
|
|
|
|
Find the file `/etc/httpd/conf/httpd.conf` or its equivalent and make the
|
|
following changes to it:
|
|
|
|
```ini
|
|
# Load config files from the config directory "/etc/httpd/conf.d".
|
|
Include conf.d/*.conf
|
|
```
|
|
|
|
Now, locate the PHP configuration file at `/etc/httpd/conf.d/php.conf`
|
|
|
|
```ini
|
|
# PHP is an HTML-embedded scripting language which attempts to make it
|
|
# easy for developers to write dynamically generated webpages.
|
|
LoadModule php_module modules/libphp.so
|
|
#
|
|
# Cause the PHP interpreter to handle files with a .php extension.
|
|
AddHandler php-script .php
|
|
AddType text/html .php
|
|
#
|
|
# Add index.php to the list of files that will be served as directory
|
|
# indexes.
|
|
DirectoryIndex index.php
|
|
```
|
|
|
|
## Configure MySQL/MariaDB
|
|
|
|
Set a password for the root user, and record this password. If you lose control
|
|
of this password, you may have to re-install your database server in the case of
|
|
any system disaster or recovering from a crash.
|
|
|
|
```console
|
|
mysql_secure_installation
|
|
```
|
|
|
|
You must also load timezone information into the database. This is required for
|
|
various plugin use. Later, you will be required to grant access to the
|
|
`time_zone_name` table during the final installation steps.
|
|
|
|
```sh
|
|
shell> mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
|
|
```
|
|
|
|
Since Cacti 1.x is supporting internationalization (i18n), it is important that
|
|
the default character set for MySQL/MariaDB be i18n compatible. The Cacti
|
|
installer will make specific recommendations on MySQL/MariaDB settings. Follow
|
|
those as applicable for your OS.
|
|
|
|
Galera clustering: several tables use the MEMORY storage engine. Those tables
|
|
are not replicated among nodes, which can cause problems. If you configure Cacti
|
|
to connect to only one node of your cluster and are not load balancing, this
|
|
does not apply to you.
|
|
|
|
If you are running multiple nodes in a load-balanced environment where you
|
|
connect to a VIP, remove all but one node from rotation during Cacti
|
|
installation or update. After the installation or update, log in to your MySQL
|
|
server and run the following commands to convert those tables to the InnoDB
|
|
engine:
|
|
|
|
```sql
|
|
MariaDB [(none)]> use cacti;
|
|
MariaDB [cacti]> ALTER TABLE `automation_ips` ENGINE=InnoDB;
|
|
MariaDB [cacti]> ALTER TABLE `automation_processes` ENGINE=InnoDB;
|
|
MariaDB [cacti]> ALTER TABLE `data_source_stats_hourly_cache` ENGINE=InnoDB;
|
|
MariaDB [cacti]> ALTER TABLE `data_source_stats_hourly_last` ENGINE=InnoDB;
|
|
MariaDB [cacti]> ALTER TABLE `poller_output` ENGINE=InnoDB;
|
|
MariaDB [cacti]> ALTER TABLE `poller_output_boost_local_data_ids` ENGINE=InnoDB;
|
|
MariaDB [cacti]> ALTER TABLE `poller_output_boost_processes` ENGINE=InnoDB;
|
|
MariaDB [cacti]> ALTER TABLE `processes` ENGINE=InnoDB;
|
|
```
|
|
|
|
On Cacti 1.3 the `data_source_stats_hourly_cache` table already uses InnoDB,
|
|
so that one statement is a no-op there. It is still required on 1.2.x.
|
|
|
|
These changes should replicate to the other nodes in your cluster. Allow Cacti
|
|
to run at least two or three full polling cycles before placing the other nodes
|
|
back into rotation.
|
|
|
|
## Install and Configure Cacti
|
|
|
|
1. Extract the distribution tarball.
|
|
|
|
```sh
|
|
shell> tar xzvf cacti-version.tar.gz
|
|
```
|
|
|
|
2. Create the MySQL database:
|
|
|
|
```sh
|
|
shell> mysqladmin --user=root create cacti
|
|
```
|
|
|
|
3. Import the default cacti database:
|
|
|
|
```sh
|
|
shell> mysql cacti < cacti.sql
|
|
```
|
|
|
|
4. Optional: Create a MySQL username and password for Cacti.
|
|
|
|
```sql
|
|
shell> mysql --user=root mysql
|
|
mysql> CREATE USER 'cactiuser'@'localhost' IDENTIFIED BY 'somepassword';
|
|
mysql> GRANT ALL PRIVILEGES ON cacti.* TO 'cactiuser'@'localhost';
|
|
mysql> GRANT SELECT ON mysql.time_zone_name TO 'cactiuser'@'localhost';
|
|
mysql> FLUSH PRIVILEGES;
|
|
```
|
|
|
|
Note that if your `root` (or equivalent) user does not have `SUPER`
|
|
permissions, it may still be possible to `GRANT SELECT` privileges to the
|
|
Cacti user via an `INSERT INTO mysql.tables_priv`.
|
|
|
|
```sql
|
|
INSERT INTO mysql.tables_priv (Host, Db, User, Table_name, Grantor, Table_priv)
|
|
VALUES ('localhost', 'mysql', 'cactiuser', 'time_zone_name', 'root@localhost', 'Select');
|
|
```
|
|
|
|
5. Edit `include/config.php` and specify the database type, name, host, user and
|
|
password for your Cacti configuration.
|
|
|
|
```php
|
|
$database_type = "mysql";
|
|
$database_default = "cacti";
|
|
$database_hostname = "localhost";
|
|
$database_username = "cactiuser";
|
|
$database_password = "cacti";
|
|
```
|
|
|
|
6. Set the appropriate permissions on Cacti's directories for graph/log
|
|
generation. You should execute these commands from inside Cacti's directory
|
|
to change the permissions.
|
|
|
|
```sh
|
|
shell> chown -R cactiuser rra/ log/ cache/
|
|
```
|
|
|
|
(Enter a valid username for _cactiuser_, this user will also be used in the
|
|
next step for data gathering.)
|
|
|
|
7. Create your cron task file or systemd units file
|
|
|
|
Starting with Cacti 1.2.16, you have the option to use either the legacy
|
|
Crontab entry, or an optional cactid units file and server to run your Cacti
|
|
pollers.
|
|
|
|
For Crontab use, follow the instructions below:
|
|
|
|
Create and edit `/etc/cron.d/cacti` file. Make sure to setup the correct path
|
|
to poller.php
|
|
|
|
```console
|
|
*/5 * * * * apache php <path_cacti>/poller.php >/dev/null 2>&1
|
|
```
|
|
|
|
To install the systemd unit file, first edit the included unit file to match
|
|
your install location and the user and group the Cacti poller should run as.
|
|
Then follow the procedure below:
|
|
|
|
```console
|
|
vim <path_cacti>/service/cactid.service (edit the path)
|
|
touch /etc/sysconfig/cactid
|
|
cp -p <path_cacti>/service/cactid.service /etc/systemd/system
|
|
systemctl daemon-reload
|
|
systemctl enable cactid
|
|
systemctl start cactid
|
|
systemctl status cactid
|
|
```
|
|
|
|
The systemd units file makes managing a highly available Cacti setup a bit
|
|
more convenient.
|
|
|
|
8. During install, you will need to provide write access to the following files
|
|
and directories:
|
|
|
|
```sh
|
|
shell> chown -R apache:apache resource scripts include/config.php
|
|
```
|
|
|
|
Use the account your web server runs as. That is `apache` on Enterprise
|
|
Linux and `www-data` on Debian and Ubuntu. Do not use the database
|
|
account here, because it is a MySQL user rather than a system user.
|
|
|
|
Once the installation is complete, you may change the permissions to more
|
|
restrictive settings.
|
|
|
|
9. Point your web browser to:
|
|
|
|
`http://<your-server>/cacti/`
|
|
|
|
Log in with a username and password of _admin_. You will be required to
|
|
change this password immediately. Make sure to fill in all of the path
|
|
variables carefully and correctly on the following screen.
|
|
|
|
## (Optional) Install and Configure Spine
|
|
|
|
Spine is a very fast data collection engine, written in C. It is an optional
|
|
replacement for cmd.php. If you decide to use it, you will have to install it
|
|
explicitly. It does not come with Cacti itself.
|
|
|
|
The easiest way is to install Spine using rpm or ports. You will find packages
|
|
for Spine at the main Cacti site or from your distribution.
|
|
|
|
To compile Spine, download it to any location of your liking. Then, issue from
|
|
the downloaded directory following commands
|
|
|
|
```sh
|
|
shell> ./bootstrap
|
|
```
|
|
|
|
If the `bootstrap` script is successful, you then will follow the instructions it
|
|
provides to compile and install.
|
|
|
|
Assuming you installed Spine correctly, you must now configure it. The
|
|
configuration file may be placed in the same directory as Spine itself or at
|
|
/etc/spine.conf.
|
|
|
|
```ini
|
|
DB_Host 127.0.0.1 or hostname (not localhost)
|
|
DB_Database cacti
|
|
DB_User cactiuser
|
|
DB_Pass cactiuser
|
|
DB_Port 3306
|
|
```
|
|
|
|
### Considerations when using Proxies in front of Cacti (Cacti 1.2.23+)
|
|
|
|
For optimal security, specify only the HTTP headers that your proxy software
|
|
sets. This prevents unauthorized access through header spoofing. Set them by
|
|
editing the following section of `config.php`:
|
|
|
|
```php
|
|
/*
|
|
* Allow the use of Proxy IPs when searching for client
|
|
* IP to be used
|
|
*
|
|
* This can be set to one of the following:
|
|
* - false: to use only REMOTE_ADDR
|
|
* - true: to use all allowed headers (not advised)
|
|
* - array of one or more the following:
|
|
* 'X-Forwarded-For',
|
|
* 'X-Client-IP',
|
|
* 'X-Real-IP',
|
|
* 'X-ProxyUser-Ip',
|
|
* 'CF-Connecting-IP',
|
|
* 'True-Client-IP',
|
|
* 'HTTP_X_FORWARDED',
|
|
* 'HTTP_X_FORWARDED_FOR',
|
|
* 'HTTP_X_CLUSTER_CLIENT_IP',
|
|
* 'HTTP_FORWARDED_FOR',
|
|
* 'HTTP_FORWARDED',
|
|
* 'HTTP_CLIENT_IP',
|
|
*
|
|
* NOTE: The following will always be checked:
|
|
* 'REMOTE_ADDR',
|
|
*/
|
|
$proxy_headers = null;
|
|
|
|
```
|
|
|
|
---
|
|
|
|
Copyright (c) 2004-2026 The Cacti Group
|