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

前回は各種ミドルウェアをインストールして終わったので、今回は起動とcactiの設定をしていこうと思います。

前回の記事は下記になります。
https://qiita.com/imaii/items/81c837431c9d07d6af43

# mysqlの起動、初期化

テストなのでrootはパスなしで初期設定します。
cacti用のユーザを作成しましょう。

```
useradd -s /sbin/nologin mysql
chown -R mysql:mysql /opt/mysql-data
/opt/cacti/local/mysql/bin/mysqld --user=mysql --log-error-verbosity=3 --initialize-insecure

/opt/cacti/local/mysql/bin/mysqld_safe &
/opt/cacti/local/mysql/bin/mysql -uroot

#cacti用のユーザとDBを作成しましょう。
mysql> create user 'cacti'@'localhost' identified by 'cacti';
mysql> create database cacti;
mysql> quit

#初期のデータを投入しましょう。
/opt/cacti/local/mysql/bin/mysql -uroot < /opt/cacti/app/cacti/cacti.sql cacti

/opt/cacti/local/mysql/bin/mysql -uroot
mysql> GRANT ALL ON cacti.* TO 'cacti'@'localhost';

#パスワード認証方法を確認し、nativeに変更する
mysql> SELECT user, host, plugin FROM mysql.user;
mysql> ALTER USER 'cacti'@'localhost' IDENTIFIED WITH mysql_native_password;

#timezoneの確認をし、変更（SYSTEMだとエラーになる）する
mysql> show variables like '%time_zone%';
mysql> quit

chmod 755 /opt/mysql-data/
/opt/cacti/local/mysql/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot mysql

```

`/etc/my.cnf`に初期値を記載しておきましょう。

```/etc/my.cnf
[mysqld]
default-time-zone='Asia/Tokyo'
```

mysqlを再起動して、timezoneが変わっていることを確認する。

```
/opt/cacti/local/mysql/bin/mysqladmin shutdown
/opt/cacti/local/mysql/bin/mysqld_safe &

#合わせて、cactiのユーザでmysqlにログインし、cactiのテーブルが見えれるか確認をする
/opt/cacti/local/mysql/bin/mysql -u cacti

下記が出る場合は、
You must reset your password using ALTER USER statement before executing this statement

もう1回これ流しましょう。
mysql> alter user 'cacti'@'localhost' identified by 'cacti';
mysql> GRANT ALL ON cacti.* TO 'cacti'@'localhost';

その後、下記コマンドで確認しましょう。
mysql> show databases;
mysql> use cacti;
mysql> show tables;
```

ここら辺まででmysqlの起動確認終わりになります。

# apache,phpの起動と設定

次に、apacheとphpの設定ファイルを修正しましょう。
主に下記です。
- httpd.conf
- （追加する場合は、）cacti用のconf
- php-fpm.conf
- php.ini
- `/opt/cacti/app/cacti/include/config.php`（ここに接続情報が書いてある）

今回は、httpd.confをあまりいじらず、新規でcacti用のconfを作成する。
LoadModuleで下記2点有効になっていることと、httpd.confの最終行に`Include`を追加しましょう。

```/opt/cacti/local/httpd/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so	LoadModule proxy_module 
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

Include conf/cacti.conf
```

追加するcacti.confの中身です。
割と適当です。テストなので、`all granted`にしてます。設定したいオプションがあれば書きましょう。
大事なのは、`FilesMatch`ディレクティブです。php-fpm.confに書くので。

```/opt/cacti/local/httpd/conf/cacti.conf
<VirtualHost *:80>
    ServerAdmin 好きなの入れてね！！
    ServerName サーバ名にしてね！！
    DocumentRoot /opt/cacti/app
    LogLevel debug
    ErrorLog "|/opt/cacti/local/bin/rotatelogs /opt/cacti/app/cacti/log/httpd-cacti.error_log_%Y%m%d 86400 540"
    CustomLog "|/opt/cacti/local/bin/rotatelogs /opt/cacti/app/cacti/log/httpd-cacti.access_log_%Y%m%d 86400 540" combined
    AddHandler cgi-script .cgi .pl
    <Directory "/opt/cacti/app">
        Require all granted
        <FilesMatch \.php$>
                SetHandler "proxy:unix:/var/run/php-fpm-product.sock|fcgi://localhost"
        </FilesMatch>
        DirectoryIndex index.php
        Options -Indexes
        AllowOverride all
        AddType application/x-httpd-php .php
    </Directory>
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddHandler cgi-script .cgi
    AddType application/x-httpd-php .php
</IfModule>

</VirtualHost>
```

apacheと繋げるようのPHPの設定ファイルをいじりましょう。
上でメモった`listen`とソケットの値があっていれば大丈夫です。
それ以外は適当です。

```/opt/cacti/local/php/etc/php-fpm.conf
[global]
error_log = /var/log/php-fpm.log
log_level = notice
[product]
user = cacti
group = cacti
listen = /var/run/php-fpm-$pool.sock
listen.owner = cacti
listen.group = cacti
listen.mode = 0666
pm = static
pm.max_children = 10
access.log = /opt/cacti/app/cacti/log/php-fpm.access.log
fpm.access.log_%Y%m%d 86400 540"
slowlog = /opt/cacti/app/cacti/log/php-fpm.slowlog.log
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
php_admin_value[error_log] = /opt/cacti/app/cacti/log/php-fpm.errors.log
```

cacti内のinclude/config.php

```/opt/cacti/app/cacti/include/config.php

$database_type     = 'mysql';
$database_default  = 'cacti';
$database_hostname = '127.0.0.1';
$database_username = 'cacti';
$database_password = 'cacti';
$database_port     = '3306';
$database_retries  = 5;
$database_ssl      = false;
$database_ssl_key  = '';
$database_ssl_cert = '';
$database_ssl_ca   = '';
$database_persist  = false;

```

```
sudo apachectl start
sudo php-fpm start
```

ここまで来れば、`http://<サーバのIP or apacheで設定したホスト名>/cacti`でログイン画面が出てくる。

# ブラウザの操作

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/6a895a83-6847-5c26-bcb5-79036deb8ed5.png)

ただ、これで終わりじゃありません！
ここから初期のインストールウィザードが走りますので、画面に従いましょう。

初期パスは`admin:admin`なのでログインしてからパスワードを変更しましょう。

同意して言語を決めると、インストールチェックが入ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/c3b4adc9-903a-f40c-4a21-42a700c482e2.png)

各ミドルウェアの設定少なくね？と思ったあなた。正解です。ここでチェックされたものに関しては、各種ファイルを修正しましょう。見てもらいたかったので、少なくしてます。
例えば、PHPであればphp.iniです。PHPのモジュールが必要だったら再ビルド・・・はめんどくさいのでそれはしないようにビルドはしてます。

PHPで指示があった値に書き換えましょう。
書き換えたら、`php-fpm restart`で再起動しましょう。

```/opt/cacti/local/php/lib/php.ini
memory_limit = 1024MB
max_execution_time = 60
```

MySQLで指示があった値に書き換えましょう。その1
```
mysql -uroot
mysql> GRANT SELECT ON `mysql`.`time_zone_name` TO `cacti`@`localhost`;
```

MySQLで指示があった値に書き換えましょう。その2
雑に`/etc/my.cnf`を書き換えましょう。書き換えたら、`mysqladmin shutdown -> mysqld_safe &`で起動させましょう。
```/etc/my.cnf
[mysqld]
default-time-zone='Asia/Tokyo'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
max_heap_table_size=500MB
tmp_table_size=500MB
innodb_buffer_pool_size=8GB
innodb_flush_log_at_timeout=3
innodb_read_io_threads=32
innodb_write_io_threads=16
innodb_buffer_pool_instances=8
innodb_io_capacity=5000
innodb_io_capacity_max=10000

#character_set_client=utf8mb4は書かなくて大丈夫です。書くと起動しません。
```

ここら辺を修正して、ブラウザをリロードすると先へ進めると思います。

## 番外編

これの直し方がわからなかった・・・gdはenableにしてるのに・・・
ただオプションなので、今回はスルーさせてもらいました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/c0751352-eb86-d036-b661-21334ba04d20.png)

続き。
あとは画像をペタペタします。

初めての場合は、`New Primary Server`を選択して、Next
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/39e2bac9-43a4-4189-c229-9649fe42091d.png)

問題ないことを確認して、Next
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/367f7ebb-9d44-c346-2172-0b5f3f2ebb50.png)

spineだけ空っぽだったのでパス入れときましょう。（後で変更可）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/1ae374e9-8cc4-a075-99c4-10d1d77561fb.png)

pollerの注意点が書いてあります。確認したらチェック入れて、Next
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/8481bd62-cf5f-b343-3a7f-c1772902d62e.png)

pollerの設定など。ScanModeは自分は手動でやる予定だったので、OFFにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/cd81977d-a71b-78b5-8216-ab99dc790e8d.png)

確認して、Ne（ry
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/b060a729-6cc1-30d3-e4aa-67ee78480022.png)

確認して、（ry
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/b77e7c10-298c-301e-2010-50b043336f3b.png)

確認（ry
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/a1569f83-21f9-3d57-0bdf-7fbffe180093.png)

おめでとうございます！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/2d33ffb2-609a-f552-34c4-666cdce7e8e2.png)


あとは、`Create -> NewDevice`でデバイスを登録したりして、cactiを使い始めれます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490993/1753829e-cf29-f259-bafd-3011028d9f80.png)

良きcacti生活を！　

次ぐらいに、こういう使い方も出来ますよー的なのを書いてみようかな。と思います。