cactiをソースからインストールをしてみる

ceresでは監視アプリケーションとして、下記2種類を導入している。
- cacti
- prometheus+grafana

cactiを公式だとyumで入れているんですが、せっかくだしソースインストールしてみよう！と思って、ふとやってみた。
結論、yumで入れた方が楽だとは思います。ミドルウェアのバージョン好きなの使いたい！とかあれば本記事は役に立つかもしれません。
今回構築した構成は下記になります。

- CentOS Rocky 8.7
- Apache 2.4.55
- PHP 8.2.1
- MySQL 8.0.17

（ApacheとPHPはソケットでやり取りしてます。）

便宜上、全てrootで動かしております。
また、makeはサーバスペックに応じて`-j`つけてください。

あとこの記事、インストールとかしてるので、やけに長いです。出来る人は飛ばしながら見て頂けると。

# ディレクトリの構造

下記になります。`/opt`配下に色々作ります。

```
/opt/
├── cacti
│   ├── app     ・・・アプリケーション置き場
│   └── local
│       ├── src　　・・・各種ミドルウェアをダウンロードする場所。
│       └── bin　　・・・各種ミドルウェアの実行ファイルを置く。（パスは通す）
└── mysql-data　　　　・・・mysql置き場

```

# 準備

PATHの追加

```/etc/profile.d/cacti.sh

export CACTI_HOME="/opt/cacti/"
export PATH="${CACTI_HOME}local/bin/:${PATH}"
```

必要ディレクトリの作成

```
mkdir /opt/cacti
mkdir /opt/cacti/app
mkdir /opt/cacti/app/cacti
mkdir /opt/cacti/local
mkdir /opt/cacti/local/bin
mkdir /opt/cacti/local/src
mkdir /opt/mysql-data
```

ここら辺をdnfでインストールしています。
```
gcc gcc-c++ cpp libtool patch patchutils bzip2 zip unzip rsync wget chrony pciutils make autoconf automake libxslt openssl-devel zlib-devel curl-devel bind-utils epel-release tar logwatch ncurses ncurses-devel ncurses-term libevent libevent-devel libevent-doc tmux 
expat-devel net-snmp oniguruma gmp-devel openldap-devel libxml2-devel sqlite-devel libpng-devel libjpeg-devel gmp-devel libicu-devel net-snmp-devel openldap-clients　cmake rrdtool net-snmp-utils freetype freetype-devel

dnf --enablerepo=powertools install -y oniguruma-devel
```

# Apacheのインストール

pcreのインストールとリンク貼りを実施します。
```
cd /opt/cacti/local/src

wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
tar -xzvf pcre-8.45.tar.gz
cd pcre-8.45/
./configure --prefix=/opt/cacti/local/pcre-8.45
make
make install

cd /opt/cacti/local
ln -s pcre-8.45/ pcre
cd bin/
ln -s ../pcre/bin/* .
```

apache本体のインストールとリンク貼りを実施します。
```
cd /opt/cacti/local/src

wget https://dlcdn.apache.org/httpd/httpd-2.4.55.tar.gz
wget https://archive.apache.org/dist/apr/apr-1.7.0.tar.gz
wget https://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz

tar -xzvf apr-1.7.0.tar.gz
tar -xzvf  apr-util-1.6.1.tar.gz
tar -xzvf  httpd-2.4.55.tar.gz

mv apr-1.7.0 httpd-2.4.55/srclib/apr
mv apr-util-1.6.1 httpd-2.4.55/srclib/apr-util

cd httpd-2.4.55

"./configure" \
"--prefix=/opt/cacti/local/httpd-2.4.55" \
"--enable-cache" \
"--enable-mem-cache" \
"--enable-so" \
"--enable-ssl" \
"--enable-mods-shared=most" \
"--with-included-apr" \
"--with-pcre=/opt/cacti/local/pcre/bin/pcre-config" \
"--with-mpm=worker" \
"$@"

make
make install

cd /opt/cacti/local
ln -s httpd-2.4.55/ httpd
cd bin/
ln -s ../httpd/bin/* .
```

起動は最後にconfを編集するので、一旦起動はしない形で。

# PHPのインストール

PHPのインストールとリンク貼りを実施します。今回はphp-fpmを使ってソケットの通信を行う予定。
インストールオプションは他にONにしたいものを付けて頂ければと思います。

```
cd /opt/cacti/local/src
wget https://www.php.net/distributions/php-8.2.1.tar.gz
tar -xzvf php-8.2.1.tar.gz

cd php-8.2.1

#configureを通す前に、おまじない。
ln -s /usr/lib64/libldap* /usr/lib/.
export LDFLAGS=-llber

'./configure' \
'--prefix=/opt/cacti/local/php-8.2.1' \
'--enable-mysqlnd' \
'--with-mysqli=mysqlnd' \
'--with-pdo-mysql=mysqlnd' \
'--enable-fpm' \
'--enable-mbstring' \
'--enable-mbregex' \
'--enable-sockets' \
'--enable-bcmath' \
'--enable-intl' \
'--enable-gd' \
'--enable-pcntl' \
'--with-gettext' \
'--with-pear' \
'--with-openssl' \
'--with-jpeg' \
'--with-zlib' \
'--with-ldap' \
'--with-ldap-sasl' \
'--with-gmp' \
'--with-snmp' \
"$@"

make
make install

#実行ファイル取ってくる
cp /opt/cacti/local/src/php-8.2.1/sapi/fpm/init.d.php-fpm /opt/cacti/local/php-8.2.1/bin/php-fpm
chmod +x /opt/cacti/local/php-8.2.1/bin/php-fpm

cd /opt/cacti/local
ln -s php-8.2.1/ php
cd bin
ln -s ../php/bin/* .

#confとiniを取ってきましょう
cp /opt/cacti/local/php/etc/php-fpm.conf.default /opt/cacti/local/php/etc/php-fpm.conf
cp /opt/cacti/local/src/php-8.2.1/php.ini-production /opt/cacti/local/php/lib/php.ini
```

confとiniの修正は最後にやりますので、一旦次に行きます。

# MySQLのインストール

`/etc/yum.repos.d/Rocky-PowerTools.repo`のEnabledが0になっていると思うので、1にしてください。

必要なものをインストールします。
```
dnf install rpcgen libtirpc-devel
```

MySQL本体をインストールします。

```
cd /opt/cacti/local/src/
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.0.17.tar.gz
tar -xzvf mysql-boost-8.0.17.tar.gz

wget https://boostorg.jfrog.io/artifactory/main/release/1.69.0/source/boost_1_69_0.tar.gz
tar -xzvf boost_1_69_0.tar.gz

cd mysql-8.0.17
mkdir bld
cd bld

cmake .. \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DCMAKE_INSTALL_PREFIX=/opt/cacti/local/mysql-8.0.17 \
-DMYSQL_UNIX_ADDR=/opt/mysql-data/mysql.sock \
-DWITH_BOOST=/opt/cacti/local/src/boost_1_69_0 \
-DMYSQL_DATADIR=/opt/mysql-data

make
install

cd /opt/cacti/local/
ln -s mysql-8.0.17/ mysql
cd bin
ln -s ../mysql/bin/* .
```

# cactiの本体のダウンロードと配置

```
cd /opt/cacti/local/src/
wget https://files.cacti.net/cacti/linux/cacti-1.2.23.tar.gz

tar -xzvf cacti-1.2.23.tar.gz

mv cacti-1.2.23/* /opt/cacti/app/cacti/.

useradd -s /sbin/nologin cacti
chown -R cacti:cacti /opt/cacti/app
```

# spineの設定

ポーリングするためのツールです。
そのインストールを実施します。

```
dnf install help2man
cd /opt/cacti/local/src/
wget https://files.cacti.net/spine/cacti-spine-1.2.23.tar.gz
tar -xzvf cacti-spine-1.2.23.tar.gz

cd cacti-spine-1.2.23/
./bootstrap
ldconfig /opt/cacti/local/mysql/lib
./configure --with-mysql=/opt/cacti/local/mysql --prefix=/opt/cacti/local/spine-1.2.23

make
make install

chown root:root /opt/cacti/local/spine-1.2.23/bin/spine
chmod +x /opt/cacti/local/spine-1.2.23/bin/spine

/opt/cacti/local/
ln -s spine-1.2.23/ spine
cd bin/
ln -s ../spine/bin/* .

cp /opt/cacti/local/spine/etc/spine.conf.dist /opt/cacti/local/spine/etc/spine.conf
```

spine用のconfにcacti用のユーザの接続情報を記載しましょう。
今回はテストということでDB,User,Passを`cacti`で統一しています。

```/opt/cacti/local/spine/etc/spine.conf
DB_Host       localhost
DB_Database   cacti
DB_User       cacti
DB_Pass       cacti
DB_Port       3306
#DB_UseSSL    0
```

ちょっと長くなったので一旦ここまで、次は各ミドルウェアの起動とcactiの設定を書きます。

続きは下記URLに！
https://qiita.com/imaii/items/444936e933e0c854eb02