はじめに
Zabbixの構築を自動化し、かつDBに設定するパスワードを対話式に設定出来たら便利だな~と思い作成しました。
環境
OS:RHEL 9.2
Zabbix:6.0LTS
DB:MariaDB
上記の条件で構築を行います。
almalinuxやrockylinuxでもメジャーバージョンが9であれば可能です。
要件
- Zabbix構築の自動化
- DBに扱うパスワードは対話式で決定
- パスワードポリシーは8文字以上、大文字小文字の英数字を使用
- ポリシーに当てはまらない場合は入力し直し
スクリプト本文
#!/bin/bash
# ZabbixのリポジトリURLとコンフィグのパス
ZABBIX_URL="https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm"
ZABBIX_CONF="/etc/zabbix/zabbix_server.conf"
# MariaDBのインストール
dnf install -y mariadb-server
# MariaDBの起動と自動起動設定
systemctl start mariadb
systemctl enable mariadb
# Zabbixのリポジトリを追加
rpm -Uvh "${ZABBIX_URL}"
dnf clean all
# Zabbix関連パッケージのインストール
dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent zabbix-web-japanese
# MariaDBへのログインパスワードの指定、ポリシーに当てはまらなければ再入力
while true;
do
echo "MariaDBのログインパスワードを指定してください: "
read -s db_password
if [[ ${#db_password} -ge 8 && "${db_password}" =~ [A-Z] && "${db_password}" =~ [a-z] && "${db_password}" =~ [0-9] ]]; then
read -p "入力した内容が正しければ処理を続行しますが、よろしいですか? (y/n): " confirm
case $confirm in
[Yy]* )
echo "後続の処理を実行します"
break;;
[Nn]* )
echo "パスワードの入力をやり直します";;
* )
echo "エラー: yかnを入力してください";;
esac
else
echo "エラー: パスワードは8文字以上で、英数字大文字小文字を含む必要があります"
fi
done
# Zabbixのデータベースとユーザーの作成
mysql -uroot <<EOF
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by '${db_password}';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
EOF
# Zabbixのセットアップスクリプトの実行
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p"${db_password}" zabbix
mysql -uroot <<EOF
set global log_bin_trust_function_creators = 0;
EOF
# zabbix_server.confの設定値書き換え
sed -i "s/# DBPassword=/DBPassword=${db_password}/g" "${ZABBIX_CONF}" > /dev/null
# Zabbix ServerとAgent、Apache、PHP-FPMの再起動と自動起動設定
systemctl restart zabbix-server zabbix-agent httpd php-fpm
systemctl enable zabbix-server zabbix-agent httpd php-fpm
# firewalldの設定
firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-port=10051/tcp --zone=public --permanent
firewall-cmd --reload
echo "Zabbixのセットアップが完了しました。"
実行結果
zabbix-web-japanese-6.0.28-release1.el9.noarch
zabbix-web-mysql-6.0.28-release1.el9.noarch
完了しました!
MariaDBのログインパスワードを指定してください:
入力した内容が正しければ処理を続行しますが、よろしいですか? (y/n): y
後続の処理を実行します
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-server.service → /usr/lib/systemd/system/zabbix-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent.service → /usr/lib/systemd/system/zabbix-agent.service.
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.
success
success
success
Zabbixのセットアップが完了しました。
こんな感じですぐ終わります。
http://IPアドレス/zabbix/
にアクセスして確認してみましょう。
※IPは自身の環境に置き換えてください。
あとは画面に沿って進めていけば構築完了です。