rocky9 编写一键安装mysql 的sh脚本
1、安装方式介绍mysql安装共3中方式1)yum安装,最简单的方式2)rpm包安装,切记下载相应系统的 稳定版 源码包,相对较简单3)压缩包安装:自由度高,但配置相应复杂,且需要自己注册自启服务注:1,2,3无法在一台机器上共存,1,2可以通过mulit-mysql启动多个服务看,但无法实现:单机上的myql主从只有3方式支持1台安装多个mysql服务,实现mysql主从一、安装步骤1.获取最新
基本操作步骤
1、虚拟机最小化安装rocky9系统,安装后克隆一个系统用来编写sh 测试脚本;
2、安装 repotrack 程序,来获取rpm
3、将安装后缓存的rpm包下载下来,并打tar.gz包,并传至指定路径;
4、编写自动化安装mysql sh脚本;
5、测试运行一键安装命令
附录(本文章最后)
1)rpm及编写的脚本(本教程的centos7、rocky9.3)
2)centos7 自动化 mysql、redis、nginx、jdk、rabbitMq、syslog程序的soft.sh脚本
你编写脚本可能报换行或空格错误:sh脚本报一堆空格换行错误:需将转成unix标准格式;
#切换到上传的脚本路径
dos2unix 脚本文件名.sh
你可能用到的编写sh 脚本的参考:
1)下教程包含:1)中文字体,2)jdk 3)java依赖及时间同步器 ;4)nginx ; 5)redis
1、虚拟机最小化安装rocky9系统
1)最小化安装
2)存盘一定是标准分区(设备类型均为:标准分区。如下图);不要自动化磁盘:就4个用途路径
3)安装后克隆1台虚拟机(标准分区的可直接克隆)
2、获取rpm包
方法一:
1、安装
# 安装 repotrack
yum install yum-utils
# 查找提供的程序
yum provides repotrack
2、确保可用,并且获取rpm
# 再次执行确保已安装
yum install -y -q yum-utils-1.1.31-54.el7_8.noarch
# 获取某个应用到路径下 -p 后门写的是下载路径
repotrack -p /opt/rpms gcc
# 你找你已经安装的软件名
rpm -qa | grep -E 'chrony|chronyd'
方法二:
在/etc/yum.conf 最下面添加,然后安装软件,则该软件包的rpm 会存储至该路径下
#开始缓存:0关闭,1开启
keepcache=1
#指定缓存路径
cachedir=/opt/yum/rpm
参考
3、将安装后缓存的rpm包下载下来,并打tar.gz包,并传至指定路径;
1)将缓存文件,按如图方式放置在文件夹下;
这里我是安装后,查了一下mysql 版本8.0.36:
其中:1)base放的是mysql的安装包,2)depend-rpm:防止的是其他依赖包,3)config:是mysql的配置文件(未优化过的);
不参与sh脚本的:1)base-yum不参与sh脚本,是从mysql 拿到的 yum的rpm包;2)readMe.txt:内部使用的简单说明
2)将其打成tar.gz 用于 脚本安装的依赖程序包
用的软件压缩的tar.gz :1)先压缩 tar;2)再把tar 压过 gzip,得到 tar.gz 文件
mkdir -p /opt/soft
cd /opt/soft
将文件上传路径,如图
4、编写自动化安装mysql sh脚本;
编写脚本:
参考,就是将教程的 yum install 软件 换成 yum -y localinstall *.rpm
soft.sh 脚本内容
#!/bin/bash
# 项目部署基础路径
BASE_PATH="/usr/local"
# 压缩包名
TAR_GZ_NAME="centos9.3-rpm.tar.gz"
# 压缩包和脚本的发布路径
PUSH_SH_PATH="/opt/soft"
# 解压路径
UNZIP_TEMP_PATH="/usr/local/soft_unzip"
# 1.1 使用的账号
MYSQL_USER="root"
# 1.2 数据库密码
MYSQL_PWD="123456"
# 1.3 自动创建数据库名称
MYSQL_CREATE_DB_NAME="test_db"
# 2 开放防火墙端口
open_ports=("3306")
#-------------------往下为不建议调整参数--------------------
#参数1:操作类型
operate="$1"
#可选参数2 指定安装的软件
soft="$2"
# 发布压缩包 解压后路径(会在解压后确定)
PUSH_TEMP_PATH=""
# 检测的java_home位置的变量
JAVA_HOME=""
# 中文字体路径
FONT_PATH="/usr/share/fonts/chinese"
# 系统服务所在路径
SYS_SERVICE_PATH="/etc/systemd/system"
# 空数组:存储汇总日志
log_array=()
# 临时日志变量
LOG_TEMP_LOG=""
#使用说明,用来提示输入参数
usage() {
echo "脚本可选通用命令:"
echo " ● 安装 1) sh soft.sh push 参数2:可选项[mysql],无第二个参数,安装所有-需确认,all:安装所有-无需确认;"
echo " ● 卸载 2)sh soft.sh remove 参数2:可选项[mysql],无第二个参数:卸载所有;"
echo " ● 日志 3)sh soft.sh log 参数2:可选项[mysql],无第二个参数:查看所有;"
echo " ● -- 参数 2 概述:"
echo " ● 1、mysql:mysql-8.0.36"
exit 1
}
#建立相关文件夹并注册自启动服务
push(){
#解压tar包
un_tar_gz
# 如果未指定安装软件
if [ -z "${soft}" ]; then
# 1、安装 mysql
while true; do
# 1 提示用户输入(y or n)
read -p "3、do you want to install mysql-8.0.36 ?(y or n) " option
# 2、检查用户输入的选项值
if [ "$option" = "y" ]; then
mysql_install
break
elif [ "$option" = "n" ]; then
LOG_TEMP_LOG=" ● ignore install:3、mysql-8.0.36 "
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
break
else
echo "no effect value,please enter(y or n)"
fi
done
else
case "$soft" in
"mysql")
mysql_install
;;
"all")
# 1、安装 mysql
mysql_install
;;
esac
fi
#删除解压的文件
rm -rf $UNZIP_TEMP_PATH
# 开放防火墙
firewall_port_open
# 调优系统配置
sys_com_tuning
# 8、打印汇总日志
if [ -z "${soft}" ] ||[ "${soft}" = "all" ]; then
# 打印汇总日志
pirnt_sum_log
fi
echo " ● end: end of install exe;"
}
# 卸载服务结束
remove(){
# 关闭防火墙(应用不在时,有警告,需在最前面)
firewall_port_close
# 1、安装 mysql
if [ -z "${soft}" ] || [ "${soft}" = "mysql" ]; then
mysql_remove
fi
# 2、打印汇总日志
if [ -z "${soft}" ]; then
# 打印汇总日志
pirnt_sum_log
fi
echo " ● end: 卸载命令执行结束;"
}
#日志
log(){
# 1、安装 mysql
if [ -z "${soft}" ] || [ "${soft}" = "mysql" ]; then
mysql_log
fi
# 2、 打印汇总日志
if [ -z "${soft}" ]; then
pirnt_sum_log
fi
}
mysql_install(){
# 1、安装mysql的依赖
cd $PUSH_TEMP_PATH/mysql-8.0.36/depend-rpm
yum -y localinstall *.rpm
# 2.1 添加mysql用户组
groupadd mysql
#2.2 用户组添加用户
useradd -g mysql mysql
# 3 安装mysql的依赖
cd $PUSH_TEMP_PATH/mysql-8.0.36/base
yum -y localinstall *.rpm
# 4 执行初始化并指定密码
/usr/sbin/mysqld --initialize --user=mysql --lower-case-table-names=1
# 5 备份并修改配置
rm -rf /etc/my.cnf.bak
cp -rf /etc/my.cnf /etc/my.cnf.bak
# 5.1 替换mysql 配置文件
cat $PUSH_TEMP_PATH/mysql-8.0.36/conf/my.cnf > /etc/my.cnf
# 启动MySQL服务
echo "正在启动MySQL服务..."
sudo systemctl start mysqld
# 等待MySQL服务启动完成
sleep 5
# 获取默认密码
DEFAULT_PASSWORD=$(sudo grep 'A temporary password' /var/log/mysqld.log | awk '{print $NF}')
# 使用mysqladmin修改密码
mysqladmin -u root -p"${DEFAULT_PASSWORD}" password "$MYSQL_PWD"
# 重启MySQL服务
sudo systemctl restart mysqld
# 等待启动完成,导入数据(空库可以启动快)
sleep 5
# 连接到MySQL数据库服务器并创建数据库
mysql -u"root" -p"$MYSQL_PWD" -e "CREATE DATABASE ${MYSQL_CREATE_DB_NAME}"
# 开启远程访问
mysql_open_remote
echo " ● end install: mysql-8.0.36;"
# 显示 mysql 状态
mysql_log
}
mysql_remove(){
# 1 如果未安装mysql,则退出
mysqld_install_status=`systemctl list-unit-files | grep mysqld`
if [ -z "${mysqld_install_status}" ]; then
return
fi
# 停止MySQL服务
systemctl stop mysqld
# 卸载MySQL软件包及其依赖项
yum remove -y mysql mysql-server mysql-libs mysql-client-plugins mysql-common
# 删除MySQL数据目录和配置文件(请谨慎操作)
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
rm -rf /etc/my.cnf.bak
rm -rf /var/log/mysqld.log
mysql_log
echo " ● end remove: mysql-8.0.36;"
}
mysql_log(){
# 1 检测 mysql 是否自启动
MYSQL_STATUS=$(systemctl is-active mysqld)
if [ "${operate}" != "remove" ]; then
# 2.1 如果操作类型不是卸载,且 mysql 状态为:活跃的,打印成功,否则打印失败
if [ "${MYSQL_STATUS}" = "active" ]; then
LOG_TEMP_LOG=" ● success: start mysql-8.0.36"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error: start mysql-8.0.36"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
else
#3 如果操作类型是卸载,且识别 mysql 状态为不存在 或者失败
if [ "${MYSQL_STATUS}" = "unknown" ] || [ "${MYSQL_STATUS}" = "failed" ]; then
LOG_TEMP_LOG=" ● success:remove mysql-8.0.36"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error:remove mysql-8.0.36"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
fi
# 4 如果单独安装 mysql,或者查看指定查看 mysql 日志,则显示日志
if [ "${soft}" = "mysql" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push" ]; }; then
tail -f -n 20 /var/log/mysqld.log
fi
}
mysql_imp_sql(){
SQL_FILE="${PUSH_TEMP_PATH}/mysql-8.0.36/conf/initDb.sql"
if [ -e "$SQL_FILE" ]; then
mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" $MYSQL_CREATE_DB_NAME < "$SQL_FILE"
log_array+=(" ● 执行 mysql 数据数据化。")
echo " ● 执行 mysql 数据数据化。"
else
log_array+=(" ● 发布包不含 mysql 数据库初始化脚本。")
echo " ● 发布包不含 mysql 数据库初始化脚本。"
fi
}
# mysql 开放远程访问
# 防火墙还未开放(在防火墙内操作)
mysql_open_remote(){
echo " ● 配置mysql 可以远程访问"
# 开放远程访问
mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "CREATE USER '${MYSQL_USER}'@'%' IDENTIFIED BY '${MYSQL_PWD}'"
mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "GRANT ALL PRIVILEGES ON *.* TO '${MYSQL_USER}'@'%' WITH GRANT OPTION"
mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "FLUSH PRIVILEGES;"
}
# mysql 关闭远程远程访问
# 防火墙还未开放(在防火墙内操作)
mysql_close_remote(){
#关闭防火墙
echo " ● 配置mysql 关闭远程访问;"
# 开放远程访问
mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "REVOKE ALL PRIVILEGES ON *.* FROM '${MYSQL_USER}'@'%';"
mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "DROP USER '${MYSQL_USER}'@'%'"
mysql -u"${MYSQL_USER}" -p"${MYSQL_PWD}" -e "FLUSH PRIVILEGES;"
}
#解压tar包
un_tar_gz(){
#1 删除可能存在的解压不全的临时文件
rm -rf $UNZIP_TEMP_PATH
#2 创建加压的文件夹
mkdir -p $UNZIP_TEMP_PATH
#2 进行解压操作
tar -zxvf $PUSH_SH_PATH/$TAR_GZ_NAME -C $UNZIP_TEMP_PATH
#3 获取加压后的文件路径
#UNZIP_DIR_NAME=$(echo "$UNZIP_TEMP_PATH"/* | awk '{print $1}' | xargs basename)
UNZIP_DIR_NAME=$(tar -tzf "$PUSH_SH_PATH"/"$TAR_GZ_NAME" | head -1 | cut -d '/' -f 1)
#4 获取到解压后的真实路径
PUSH_TEMP_PATH=$UNZIP_TEMP_PATH/$UNZIP_DIR_NAME
}
#打印中途记录的在log_array内的内容
pirnt_sum_log(){
# 打印数组的每个元素
echo "-----------------------summary-log-start------------------------------"
for element in "${log_array[@]}"; do
echo "$element"
done
echo "-----------------------summary-log-end ------------------------------"
}
#防火墙开放端口
firewall_port_open(){
# 定义要检查的端口号
PORT=88
# 检查指定端口是否已经开放
if sudo firewall-cmd --list-ports | grep -q "\<$PORT\/tcp\>"; then
LOG_TEMP_LOG=" ● 端口 $PORT 已经开放,跳过"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
return;
fi
echo "调整 firewall 防火墙:"
firewall-cmd --zone=public --add-port=88/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
# 防火墙日志
firewall_port_log
}
#防火墙开放端口
firewall_port_open(){
# 检查端口是否已经开放
PORT=$open_ports[0]
# 检查指定端口是否已经开放
if sudo firewall-cmd --list-ports | grep -q "\<$PORT\/tcp\>"; then
LOG_TEMP_LOG=" ● 端口 $PORT 已经开放,跳过"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
return;
fi
#循环开放端口
for open_port in "${open_ports[@]}"
do
echo "开放firewall 防火墙-端口:${open_port}"
firewall-cmd --zone=public --add-port=${open_port}/tcp --permanent
done
firewall-cmd --reload
# 防火墙日志
firewall_port_log
}
#防火墙关闭端口
firewall_port_close(){
for open_port in "${open_ports[@]}"
do
echo "关闭firewall 防火墙-端口:${open_port}"
firewall-cmd --zone=public --remove-port=${open_port}/tcp --permanent
done
firewall-cmd --reload
# 防火墙日志
firewall_port_log
}
#防火墙日志
firewall_port_log(){
open_ports=$(firewall-cmd --list-ports)
LOG_TEMP_LOG=" ● firewall-cmd open port:${open_ports}"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
}
# 系统调优(RedHat系列linux)
sys_com_tuning(){
# 搜索文件中是否包含指定文本
if grep -q "# 全局的打开文件数" "/etc/systemd/system.conf"; then
LOG_TEMP_LOG=" ● 系统配置 已调优(适配 RedHat系列linux),跳过"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
return
fi
# 1 调整systemctl管理的 servie 资源限制
echo "# 全局的打开文件数" >> /etc/systemd/system.conf
echo "DefaultLimitNOFILE=1048576" >> /etc/systemd/system.conf
echo "# 全局打开进程数" >> /etc/systemd/system.conf
echo "DefaultLimitNPROC=65535" >> /etc/systemd/system.conf
# 2 调整系统内核参数
echo "# 全局:端口最大的监听队列的长度,可为:32768" >> /etc/sysctl.conf
echo "net.core.somaxconn=32768" >> /etc/sysctl.conf
echo "# 内存分配模式:1为不限制" >> /etc/sysctl.conf
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
echo "# 单进程打开文件句柄数" >> /etc/sysctl.conf
echo "fs.nr_open = 2097152" >> /etc/sysctl.conf
echo "# 系统打开文件句柄数" >> /etc/sysctl.conf
echo "fs.file-max = 102400" >> /etc/sysctl.conf
# 2.1 刷新内核参数,立即生效
/sbin/sysctl -p
# 3 调整用户组资源限制
echo "# 用户会话的 打开文件句柄数" >> /etc/security/limits.conf
echo "* soft nofile 1048576" >> /etc/security/limits.conf
echo "* hard nofile 1048576" >> /etc/security/limits.conf
echo "# 用户会话的 打开进程数限制" >> /etc/security/limits.conf
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf
LOG_TEMP_LOG=" ● 系统配置 调优完成(适配 RedHat系列linux)"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"push")
push
;;
"remove")
remove
;;
"log")
log
;;
*)
usage
;;
esac
5、测试运行一键安装命令
1)将文件上传至另一台机器上,进程测试,并纠正sh脚本;
#授予执行权限
chmod +x soft.sh
#测试安装
sh soft.sh push
2) 成功安装的效果图
卸载脚本,重新测试
cd /opt/soft
sh soft.sh remove
新的脚本,比之centos7 多了默认开放远程访问数据,安装后可连接测试
附录:
1)测试用的rpm及相关文件:
链接:https://pan.baidu.com/s/1NSB8VqDjNgaj2tzOY9uT6w
提取码:blib
2)centos7 自动化 mysql、redis、nginx、jdk、rabbitMq、syslog程序的soft.sh 脚本
centos7 的yum 文件修改 如图
soft.sh 脚本:
注:centos7已经快停止维护了,仅做参考
#!/bin/bash
# 项目部署基础路径
BASE_PATH="/usr/local"
# 压缩包名
TAR_GZ_NAME="centos7-rpm.tar.gz"
# 压缩包和脚本的发布路径
PUSH_SH_PATH="/opt/push"
# 解压路径
UNZIP_TEMP_PATH="/usr/local/soft_unzip"
# 1.1 数据库密码
MYSQL_PWD="123456"
# 1.2 自动创建数据库名称
MYSQL_CREATE_DB_NAME="test_db"
# 2 安装到的JavaPath路径
JAVA_HOME_PATH="/usr/local/jdk17-TencentKona"
# 2 rabbitMq 账号和密码
RABBITMQ_USER="admin"
RABBITMQ_PWD="123456"
#-------------------往下为不建议调整参数--------------------
#参数1:操作类型
operate="$1"
#可选参数2 指定安装的软件
soft="$2"
# 发布压缩包 解压后路径(会在解压后确定)
PUSH_TEMP_PATH=""
# 检测的java_home位置的变量
JAVA_HOME=""
# 中文字体路径
FONT_PATH="/usr/share/fonts/chinese"
# 系统服务所在路径
SYS_SERVICE_PATH="/etc/systemd/system"
# 空数组:存储汇总日志
log_array=()
# 临时日志变量
LOG_TEMP_LOG=""
#使用说明,用来提示输入参数
usage() {
echo "脚本可选通用命令:"
echo " ● 安装 1) sh soft.sh push 参数2:可选项[font|jdk|mysql|nginx|redis|rabbitmq|syslog|all],无第二个参数,安装所有-需确认,all:安装所有-无需确认;"
echo " ● 卸载 2)sh soft.sh remove 参数2:可选项[font|jdk|mysql|nginx|redis|rabbitmq|syslog],无第二个参数:卸载所有;"
echo " ● 日志 3)sh soft.sh log 参数2:可选项[font|jdk|mysql|nginx|redis|rabbitmq|syslog],无第二个参数:查看所有;"
echo " ● -- 参数 2 概述:"
echo " ● 1、font:中文字体,2、jdk :java运行依赖,及jdk-17-TencentKona;"
echo " ● 3、mysql:mysql-8.0.36,4、nginx:nginx-1.24.0,5、redis:redis-7.2.4"
echo " ● 6、rabbitmq:rabbitmq-3.11.28,7、syslog:syslog-8.24.0"
exit 1
}
#建立相关文件夹并注册自启动服务
push(){
#解压tar包
un_tar_gz
# 如果未指定安装软件
if [ -z "${soft}" ]; then
# 1、安装 中文字体
while true; do
# 1 提示用户输入(y or n)
read -p "1、do you want to install chinese font?(y or n) " option
# 2、检查用户输入的选项值
if [ "$option" = "y" ]; then
font_install
break
elif [ "$option" = "n" ]; then
LOG_TEMP_LOG=" ● ignore install:1、chinese font "
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
break
else
echo "no effect value,please enter(y or n)"
fi
done
# 2、安装 jdk
while true; do
# 1 提示用户输入(y or n)
read -p "2、do you want to install jdk17_TencentKona?(y or n) " option
# 2、检查用户输入的选项值
if [ "$option" = "y" ]; then
jdk17_TencentKona_install
break
elif [ "$option" = "n" ]; then
LOG_TEMP_LOG=" ● ignore install:2、jdk17_TencentKona "
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
break
else
echo "no effect value,please enter(y or n)"
fi
done
# 3、安装 mysql
while true; do
# 1 提示用户输入(y or n)
read -p "3、do you want to install mysql-8.0.36 ?(y or n) " option
# 2、检查用户输入的选项值
if [ "$option" = "y" ]; then
mysql_install
break
elif [ "$option" = "n" ]; then
LOG_TEMP_LOG=" ● ignore install:3、mysql-8.0.36 "
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
break
else
echo "no effect value,please enter(y or n)"
fi
done
# 4、安装 nginx
while true; do
# 1 提示用户输入(y or n)
read -p "4、do you want to install nginx-1.24.0 ?(y or n) " option
# 2、检查用户输入的选项值
if [ "$option" = "y" ]; then
nginx_install
break
elif [ "$option" = "n" ]; then
LOG_TEMP_LOG=" ● ignore install:4、nginx-1.24.0 "
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
break
else
echo "no effect value,please enter(y or n)"
fi
done
# 5、安装 redis
while true; do
# 1 提示用户输入(y or n)
read -p "5、do you want to install redis-7.2.4 ?(y or n) " option
# 2、检查用户输入的选项值
if [ "$option" = "y" ]; then
redis_install
break
elif [ "$option" = "n" ]; then
LOG_TEMP_LOG=" ● ignore install:5、redis-7.2.4 "
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
break
else
echo "no effect value,please enter(y or n)"
fi
done
# 6、安装 rabbitmq
while true; do
# 1 提示用户输入(y or n)
read -p "6、do you want to install rabbitmq-3.11.28 ?(y or n) " option
# 2、检查用户输入的选项值
if [ "$option" = "y" ]; then
rabbitmq_install
break
elif [ "$option" = "n" ]; then
LOG_TEMP_LOG=" ● ignore install:6、rabbitmq-3.11.28 "
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
break
else
echo "no effect value,please enter(y or n)"
fi
done
# 7、安装 syslog
while true; do
# 1 提示用户输入(y or n)
read -p "7、do you want to install rsyslog-8.24.0 ?(y or n) " option
# 2、检查用户输入的选项值
if [ "$option" = "y" ]; then
syslog_install
break
elif [ "$option" = "n" ]; then
LOG_TEMP_LOG=" ● ignore install:7、rsyslog-8.24.0 "
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
break
else
echo "no effect value,please enter(y or n)"
fi
done
else
case "$soft" in
"font")
font_install
;;
"jdk")
jdk17_TencentKona_install
;;
"mysql")
mysql_install
;;
"nginx")
nginx_install
;;
"redis")
redis_install
;;
"rabbitmq")
rabbitmq_install
;;
"syslog")
syslog_install
;;
"all")
#1、安装 中文字体
font_install
# 2、安装 jdk
jdk17_TencentKona_install
# 3、安装 mysql
mysql_install
# 4、安装 nginx
nginx_install
# 5、安装 redis
redis_install
# 6、安装 rabbitmq
rabbitmq_install
# 7、安装 syslog
syslog_install
;;
esac
fi
#删除解压的文件
rm -rf $UNZIP_TEMP_PATH
# 开放防火墙
firewall_port_open
# 调优系统配置
sys_com_tuning
# 8、打印汇总日志
if [ -z "${soft}" ] ||[ "${soft}" = "all" ]; then
# 打印汇总日志
pirnt_sum_log
fi
echo " ● end: end of install exe;"
}
# 卸载服务结束
remove(){
# 关闭防火墙(应用不在时,有警告,需在最前面)
firewall_port_close
# 1、中文字体
if [ -z "${soft}" ] || [ "${soft}" = "font" ]; then
font_remove
fi
# 2、安装jdk
if [ -z "${soft}" ] || [ "${soft}" = "jdk" ]; then
jdk17_TencentKona_remove
fi
# 3、安装 mysql
if [ -z "${soft}" ] || [ "${soft}" = "mysql" ]; then
mysql_remove
fi
# 4、安装 nginx
if [ -z "${soft}" ] || [ "${soft}" = "nginx" ]; then
nginx_remove
fi
# 5、安装 redis
if [ -z "${soft}" ] || [ "${soft}" = "redis" ]; then
redis_remove
fi
# 6、安装 rabbitmq
if [ -z "${soft}" ] || [ "${soft}" = "rabbitmq" ]; then
rabbitmq_remove
fi
# 7、安装 syslog
if [ -z "${soft}" ] || [ "${soft}" = "syslog" ]; then
syslog_remove
fi
# 8、打印汇总日志
if [ -z "${soft}" ]; then
# 打印汇总日志
pirnt_sum_log
fi
echo " ● end: 卸载命令执行结束;"
}
#日志
log(){
# 1、中文字体
if [ -z "${soft}" ] || [ "${soft}" = "font" ]; then
font_log
fi
# 2、安装jdk
if [ -z "${soft}" ] || [ "${soft}" = "jdk" ]; then
jdk17_TencentKona_log
fi
# 3、安装 mysql
if [ -z "${soft}" ] || [ "${soft}" = "mysql" ]; then
mysql_log
fi
# 4、安装 nginx
if [ -z "${soft}" ] || [ "${soft}" = "nginx" ]; then
nginx_log
fi
# 5、安装 redis
if [ -z "${soft}" ] || [ "${soft}" = "redis" ]; then
redis_log
fi
# 6、安装 rabbitmq
if [ -z "${soft}" ] || [ "${soft}" = "rabbitmq" ]; then
rabbitmq_log
fi
# 7、安装 syslog
if [ -z "${soft}" ] || [ "${soft}" = "syslog" ]; then
syslog_log
fi
# 8、 打印汇总日志
if [ -z "${soft}" ]; then
pirnt_sum_log
fi
}
#安装中文字体
font_install(){
# 1 如果安装的字体软件都存在,则不安装
font_state=`rpm -qa | grep font-config`
font_cache_state=`rpm -qa | grep ttmkfdir`
if [ -n "${font_state}" ] && [ -n "${font_cache_state}" ]; then
return
fi
# 2 安装字体
cd $PUSH_TEMP_PATH/font/base
yum -y localinstall *.rpm
# 3 将字体考到指定文件夹
rm -rf $FONT_PATH
mkdir -p $FONT_PATH
cp -rf $PUSH_TEMP_PATH/font/chinese-font/* $FONT_PATH
chmod -R 755 $FONT_PATH
# 4 汇总生成fonts.scale文件
ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
# 5 替换字体配置
cat $PUSH_TEMP_PATH/font/conf/fonts.conf > /etc/fonts/fonts.conf
# 刷新内存中的字体缓存
fc-cache
echo " ● end install: chinese font;"
#打印日志
font_log
}
#删除安装的中文字体
font_remove(){
#卸载字体软件
yum remove -y fontconfig
yum remove -y ttmkfdir
#删除上传的中文字体
rm -rf $FONT_PATH
#打印日志
font_log
echo " ● end remove: chinese font;"
}
# 刷新字体配置(手工添加字体,可以执行下列命令)
font_reload(){
# 刷新内存中的字体缓存
fc-cache
# 查看字体安装情况
font_log
}
# 查看 中文字体 安装情况
font_log(){
#检查 中文字体 是否安装成功
font_log_status=`fc-list | grep chinese`
if [ "${operate}" != "remove" ]; then
# 2.1 如果操作不是卸载,且检索 中文字体 存在,打印成功,否则打印失败
if [ -n "${font_log_status}" ]; then
LOG_TEMP_LOG=" ● success:install chinese font"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
echo " ${font_log_status}"
else
LOG_TEMP_LOG=" ● error:install chinese font"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
else
# 2.1 如果操作是卸载,且检索 中文字体 不存在,打印成功,否则打印失败
if [ -z "${font_log_status}" ]; then
LOG_TEMP_LOG=" ● success:remove chinese font"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error:remove chinese font"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
echo " ${font_log_status}"
fi
fi
}
#chrony :分布式保持时间一致性
chrony_install(){
#启动开机自启
systemctl start chronyd
systemctl enable chronyd
#设置时区位上海
timedatectl set-timezone Asia/Shanghai
#强制时间同步
chronyc -a makestep
echo " ● chronyd: 设置上海时区并自启 end;"
chrony_log
}
#chrony :查看日志
chrony_log(){
#检查字体是否安装成功
chrony_log_status=`chronyc sources –v`
if [ -n "${chrony_log_status}" ]; then
LOG_TEMP_LOG=" ● sucdess:install chrony , use Time synchronizer;"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error:install chrony , use Time synchronizer;"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
}
# jdk17_TencentKona 及运行环境安装
jdk17_TencentKona_install(){
#1、安装分布式时间同步器
chrony_install
#2、安装相关依赖 netstat、lsof、unzip、zip、dos2unix、nohup
cd $PUSH_TEMP_PATH/jdk-17-TencentKona/depend-rpm
yum -y localinstall *.rpm
# 3 获取JAVA_HOME
get_java_home
# 3.1 如果JAVA_HOME 不为空,则退出
if [ -n "${JAVA_HOME}" ]; then
return
fi
JDK_TAR_GZ_NAME="TencentKona-17.0.9.b1-jdk_linux-x86_64.tar.gz"
#4、安装解压并配置java_home
cp -rf $PUSH_TEMP_PATH/jdk-17-TencentKona/base/$JDK_TAR_GZ_NAME $BASE_PATH
cd $BASE_PATH
#加压和获取加压后的文件夹
tar -zxvf $JDK_TAR_GZ_NAME
JDK_UN_TAR_NAME=$(tar -tzf "$PUSH_TEMP_PATH"/jdk-17-TencentKona/base/"$JDK_TAR_GZ_NAME" | head -1 | cut -d '/' -f 1)
# 4.1 重命名解压目录和删除压缩包
# 一定打开压缩吧确认一下解压后的文件夹
rm -rf $BASE_PATH/jdk17-TencentKona
mv $JDK_UN_TAR_NAME jdk17-TencentKona
rm -rf $BASE_PATH/$JDK_TAR_GZ_NAME
# echo -e "\n"才能解析成换行符
echo "# set java environment" >> /etc/profile
echo "export JAVA_HOME=$JAVA_HOME_PATH" >> /etc/profile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile
echo "export CLASSPATH=.:\$JAVA_HOME/lib" >> /etc/profile
# 5 刷新配置
source /etc/profile
sleep 2
echo " ● end install: jdk-TencentKona-17.0.9;"
# 6 显示安装结果
jdk17_TencentKona_log
}
# jdk17_TencentKona 删除
jdk17_TencentKona_remove(){
# 1 删除环境变量
sudo sed -i '/# set java environment/d' /etc/profile
#用 #替换分隔符/,因为$JAVA_HOME_PATH存在/
sudo sed -i "\#export JAVA_HOME=$JAVA_HOME_PATH#d" /etc/profile
sudo sed -i "/export PATH=\$PATH:\$JAVA_HOME\/bin/d" /etc/profile
sudo sed -i "/export CLASSPATH=.:\$JAVA_HOME\/lib/d" /etc/profile
# 2 刷新配置
source /etc/profile
sleep 2
# 3 删除解压后的文件
rm -rf $JAVA_HOME_PATH
jdk17_TencentKona_log
echo " ● end remove: jdk-TencentKona-17.0.9;"
}
# jdk17_TencentKona 删除
jdk17_TencentKona_log(){
# 1 获取JAVA_HOME
get_java_home
if [ "${operate}" != "remove" ]; then
# 2.1 如果操作不是卸载,且 JAVA_HOME 不为空,打印成功,否则打印失败
if [ -n "${JAVA_HOME}" ]; then
LOG_TEMP_LOG=" ● success: install jdk-TencentKona-17.0.9"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error: install jdk-TencentKona-17.0.9"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
else
# 2.1 如果操作是卸载,且 JAVA_HOME 为空,打印成功,否则打印失败
if [ -z "${JAVA_HOME}" ]; then
LOG_TEMP_LOG=" ● success:remove jdk-TencentKona-17.0.9"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error:remove jdk-TencentKona-17.0.9"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
fi
}
mysql_install(){
# 1、安装mysql的依赖
cd $PUSH_TEMP_PATH/mysql-8.0.36/depend-rpm
yum -y localinstall *.rpm
# 2.1 添加mysql用户组
groupadd mysql
#2.2 用户组添加用户
useradd -g mysql mysql
# 3 安装mysql的依赖
cd $PUSH_TEMP_PATH/mysql-8.0.36/base
yum -y localinstall *.rpm
# 4 执行初始化并指定密码
/usr/sbin/mysqld --initialize --user=mysql --lower-case-table-names=1
# 5 备份并修改配置
rm -rf /etc/my.cnf.bak
cp -rf /etc/my.cnf /etc/my.cnf.bak
# 5.1 替换mysql 配置文件
cat $PUSH_TEMP_PATH/mysql-8.0.36/conf/my.cnf > /etc/my.cnf
# 启动MySQL服务
echo "正在启动MySQL服务..."
sudo systemctl start mysqld
# 等待MySQL服务启动完成
sleep 5
# 获取默认密码
DEFAULT_PASSWORD=$(sudo grep 'A temporary password' /var/log/mysqld.log | awk '{print $NF}')
# 使用mysqladmin修改密码为12345678
mysqladmin -u root -p"${DEFAULT_PASSWORD}" password "$MYSQL_PWD"
# 重启MySQL服务
sudo systemctl restart mysqld
# 等待启动完成,导入数据(空库可以启动快)
sleep 5
# 连接到MySQL数据库服务器并创建数据库
mysql -u"root" -p"$MYSQL_PWD" -e "CREATE DATABASE ${MYSQL_CREATE_DB_NAME}"
echo " ● end install: mysql-8.0.36;"
# 显示 mysql 状态
mysql_log
}
mysql_remove(){
# 1 如果未安装mysql,则退出
mysqld_install_status=`systemctl list-unit-files | grep mysqld`
if [ -z "${mysqld_install_status}" ]; then
return
fi
# 停止MySQL服务
systemctl stop mysqld
# 卸载MySQL软件包及其依赖项
yum remove -y mysql mysql-server mysql-libs mysql-client-plugins mysql-common
# 删除MySQL数据目录和配置文件(请谨慎操作)
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
rm -rf /etc/my.cnf.bak
rm -rf /var/log/mysqld.log
mysql_log
echo " ● end remove: mysql-8.0.36;"
}
mysql_log(){
# 1 检测 mysql 是否自启动
MYSQL_STATUS=$(systemctl is-active mysqld)
if [ "${operate}" != "remove" ]; then
# 2.1 如果操作类型不是卸载,且 mysql 状态为:活跃的,打印成功,否则打印失败
if [ "${MYSQL_STATUS}" = "active" ]; then
LOG_TEMP_LOG=" ● success: start mysql-8.0.36"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error: start mysql-8.0.36"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
else
#3 如果操作类型是卸载,且识别 mysql 状态为不存在 或者失败
if [ "${MYSQL_STATUS}" = "unknown" ] || [ "${MYSQL_STATUS}" = "failed" ]; then
LOG_TEMP_LOG=" ● success:remove mysql-8.0.36"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error:remove mysql-8.0.36"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
fi
# 4 如果单独安装 mysql,或者查看指定查看 mysql 日志,则显示日志
if [ "${soft}" = "mysql" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push" ]; }; then
tail -f -n 20 /var/log/mysqld.log
fi
}
mysql_imp_sql(){
SQL_FILE="${PUSH_TEMP_PATH}/mysql-8.0.36/conf/initDb.sql"
if [ -e "$SQL_FILE" ]; then
mysql -u"root" -p"12345678" $MYSQL_CREATE_DB_NAME < "$SQL_FILE"
log_array+=(" ● 执行 mysql 数据数据化。")
echo " ● 执行 mysql 数据数据化。"
else
log_array+=(" ● 发布包不含 mysql 数据库初始化脚本。")
echo " ● 发布包不含 mysql 数据库初始化脚本。"
fi
}
# nginx 安装
nginx_install(){
# 1 安装相关依赖
cd $PUSH_TEMP_PATH/nginx-1.24.0/depend-rpm
yum -y localinstall *.rpm
# 2 解压相关依赖
NGINX_TAR_GZ_NAME="nginx-1.24.0.tar.gz"
# 3 解压
cp -rf $PUSH_TEMP_PATH/nginx-1.24.0/base/$NGINX_TAR_GZ_NAME $BASE_PATH
cd $BASE_PATH
# 3.1 解压并获取路径
tar -zxvf $NGINX_TAR_GZ_NAME
NGINX_UN_TAR_NAME=$(tar -tzf "$PUSH_TEMP_PATH"/nginx-1.24.0/base/"$NGINX_TAR_GZ_NAME" | head -1 | cut -d '/' -f 1)
# 4.1 进入nginx安装路径
cd $BASE_PATH/$NGINX_UN_TAR_NAME
# 4.2 配置nginx
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
# 4.3 执行安装
make install
# 5 准备使用的 www 用户
groupadd -f www
useradd -g www www
cd $BASE_PATH
# 6 替换nginx 配置
cat $PUSH_TEMP_PATH/nginx-1.24.0/conf/nginx.conf > /usr/local/nginx/conf/nginx.conf
# 7 注册nginx 服务
rm -rf $SYS_SERVICE_PATH/nginx.service
cp -rf $PUSH_TEMP_PATH/nginx-1.24.0/service/nginx.service $SYS_SERVICE_PATH/
# 8.1 设置开机自启动
#刷新服务配置
systemctl daemon-reload
# 8.2 开机自启
systemctl enable nginx.service
# 8.3 启动nginx
systemctl start nginx.service
# 6.1 删除复制后的 tar.gz 包
rm -rf $BASE_PATH/nginx-1.24.0
rm -rf $BASE_PATH/$NGINX_TAR_GZ_NAME
echo " ● end install: nginx-1.24.0;"
# 6.2 等待几秒检测 nginx 状态
sleep 2
nginx_log
}
# nginx 删除
nginx_remove(){
# 1.1 停止服务
systemctl stop nginx.service
# 1.2 关闭开机自启动
systemctl disable nginx.service
echo " ▶ 已关停相关服务... "
#停顿 2s 后
/bin/sleep 2
# 删除所有的发布文件
rm -rf $BASE_PATH/nginx
# 删除发布的自启服务脚本
rm -rf $SYS_SERVICE_PATH/nginx.service
#刷新服务配置
systemctl daemon-reload
nginx_log
echo " ● end remove: nginx-1.24.0;"
}
# 检测 nginx 日志
nginx_log(){
# 1 检测 nginx 是否自启动
NGINX_STATUS=$(systemctl is-active nginx)
if [ "${operate}" != "remove" ]; then
# 2.1 如果操作类型不是卸载,且 nginx 状态为:活跃的,打印成功,否则打印失败
if [ "${NGINX_STATUS}" = "active" ]; then
LOG_TEMP_LOG=" ● success: start nginx-1.24.0"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error: start nginx-1.24.0"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
else
#3 如果操作类型是卸载,且识别 nginx 状态为不存在 或者失败
if [ "${NGINX_STATUS}" = "unknown" ] || [ "${NGINX_STATUS}" = "failed" ]; then
LOG_TEMP_LOG=" ● success:remove nginx-1.24.0"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error:remove nginx-1.24.0"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
fi
# 4 如果单独安装 nginx,或者查看指定查看 nginx 日志,则显示日志
if [ "${soft}" = "nginx" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push" ]; }; then
tail -f -n 20 $BASE_PATH/nginx/logs/error.log
fi
}
# redis 安装
redis_install(){
# 1 安装相关依赖
cd $PUSH_TEMP_PATH/redis-7.2.4/depend-rpm
yum -y localinstall *.rpm
# 2 解压相关依赖
REDIS_TAR_GZ_NAME="redis-7.2.4.tar.gz"
# 3 解压
cp -rf $PUSH_TEMP_PATH/redis-7.2.4/base/$REDIS_TAR_GZ_NAME $BASE_PATH
cd $BASE_PATH
tar -zxvf $REDIS_TAR_GZ_NAME
# 4.1 重命名解压目录和删除压缩包
mv redis-7.2.4 redis
cd $BASE_PATH/redis
# 4.2 编译和安装
make && make PREFIX=$BASE_PATH/redis/ install
# 6 替换nginx 配置
cat $PUSH_TEMP_PATH/redis-7.2.4/conf/redis.conf > /usr/local/redis/redis.conf
rm -rf $SYS_SERVICE_PATH/redis.service
cp -rf $PUSH_TEMP_PATH/redis-7.2.4/service/redis.service $SYS_SERVICE_PATH/
# 5.1 设置开机自启动
#刷新服务配置
systemctl daemon-reload
# 5.3 开机自启
systemctl enable redis.service
# 5.3 启动 redis
systemctl start redis.service
# 6.1 删除复制后的 tar.gz 包
rm -rf $BASE_PATH/$REDIS_TAR_GZ_NAME
echo " ● end install: redis-7.2.4;"
# 6.2 等待几秒检测redis状态
sleep 2
redis_log
}
# redis 删除
redis_remove(){
# 1.1 停止服务
systemctl stop redis.service
# 1.2 关闭开机自启动
systemctl disable redis.service
echo " ▶ 已关停相关服务... "
#停顿 2s 后
/bin/sleep 2
# 删除所有的发布文件
rm -rf $BASE_PATH/redis
# 删除发布的自启服务脚本
rm -rf $SYS_SERVICE_PATH/redis.service
#刷新服务配置
systemctl daemon-reload
redis_log
echo " ● end remove: redis-7.2.4;"
}
# 检测redis 日志
redis_log(){
#1.1 检测 redis 是否自启动
REDIS_STATUS=$(systemctl is-active redis)
if [ "${operate}" != "remove" ]; then
# 2.1 如果操作类型不是卸载,且 redis 状态为:活跃的,打印成功,否则打印失败
if [ "${REDIS_STATUS}" = "active" ]; then
LOG_TEMP_LOG=" ● success: start redis-7.2.4"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error: start redis-7.2.4"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
else
#3 如果操作类型是卸载,且识别 redis 状态为不存在 或者失败
if [ "${REDIS_STATUS}" = "unknown" ] || [ "${REDIS_STATUS}" = "failed" ]; then
LOG_TEMP_LOG=" ● success:remove redis-7.2.4"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error:remove redis-7.2.4"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
fi
# 4 如果单独安装 redis,或者查看指定查看 redis 日志,则显示日志
if [ "${soft}" = "redis" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push" ]; }; then
tail -f -n 20 $BASE_PATH/redis/redis.log
fi
}
# rabbitmq 安装
rabbitmq_install(){
# 1 安装相关依赖
cd $PUSH_TEMP_PATH/rabbitmq-3.11.28/depend-rpm
yum -y localinstall *.rpm
# 2 解压erlang
ERLANG_TAR_GZ_NAME="otp_src_25.3.2.8.tar.gz"
# 3 解压
cp -rf $PUSH_TEMP_PATH/rabbitmq-3.11.28/base/$ERLANG_TAR_GZ_NAME $BASE_PATH
cd $BASE_PATH
tar -zxvf $ERLANG_TAR_GZ_NAME
# 4.1 进入erlang 安装包
cd $BASE_PATH/otp_src_25.3.2.8
# 4.2 配置
./configure --prefix=/usr/local/erlang --without-javac
# 4.2 编译和安装
make && make install
# 5 写入系统配置
echo "export ERLANG_HOME=/usr/local/erlang " >> /etc/profile
echo "export PATH=\$ERLANG_HOME/bin:\$PATH" >> /etc/profile
# 刷新配置
source /etc/profile
# 5 强制安装rabbitmq rpm
rpm -ivh --nodeps $PUSH_TEMP_PATH/rabbitmq-3.11.28/base/rabbitmq-server-3.11.28-1.el8.noarch.rpm
# 6 替换rebbit 配置文件
cat $PUSH_TEMP_PATH/rabbitmq-3.11.28/sh/rabbitmq-server > /usr/lib/rabbitmq/bin/rabbitmq-server
# 5.1 强制修改hostname
hostname localhost.localdomain
#启动服务
systemctl start rabbitmq-server
# 5.3 开机自启
chkconfig rabbitmq-server on
echo " ● end install: rabbitmq-3.11.28;"
# 6.2 等待几秒查看日志
sleep 5
rabbitmq_log
# 6 开启web 管理端
rabbitmq-plugins enable rabbitmq_management
# 6. 初始化账号密码
# 6.1 创建账号
rabbitmqctl add_user "${RABBITMQ_USER}" "${RABBITMQ_PWD}"
# 6.2 设置用户角色
rabbitmqctl set_user_tags "${RABBITMQ_USER}" administrator
#6.4 设置用户权限
# set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
rabbitmqctl set_permissions -p "/" "${RABBITMQ_USER}" ".*" ".*" ".*"
#7 用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限
##查看当前用户和角色
rabbitmqctl list_users
}
# rabbitmq 删除
rabbitmq_remove(){
# 1 关闭服务
chkconfig rabbitmq-server off
# 2 停止服务
systemctl stop rabbitmq-server
# 6.2 等待几秒查看
sleep 5
# 7.1 卸载程序
rpm -e rabbitmq-server-3.11.28-1.el8.noarch
# 7.2 删除环境变量
sudo sed -i "/export ERLANG_HOME=\/usr\/local\/erlang/d" /etc/profile
sudo sed -i "/export PATH=\$ERLANG_HOME\/bin:\$PATH/d" /etc/profile
# 3 删除erlang
rm -rf /usr/local/erlang
rabbitmq_log
echo " ● end remove: rabbitmq-3.11.28;"
}
# 检测redis 日志
rabbitmq_log(){
#1.1 检测 rabbitmq 是否自启动
RABBITMQ_STATUS=$(systemctl is-active rabbitmq-server)
if [ "${operate}" != "remove" ]; then
# 2.1 如果操作类型不是卸载,且 rabbitmq 状态为:活跃的,打印成功,否则打印失败
if [ "${RABBITMQ_STATUS}" = "active" ]; then
LOG_TEMP_LOG=" ● success: start rabbitmq-3.11.28"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error: start rabbitmq-3.11.28"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
else
#3 如果操作类型是卸载,且识别 rabbitmq 状态为不存在 或者失败
if [ "${RABBITMQ_STATUS}" = "unknown" ] || [ "${RABBITMQ_STATUS}" = "failed" ]; then
LOG_TEMP_LOG=" ● success:remove rabbitmq-3.11.28"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error:remove rabbitmq-3.11.28"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
fi
# 4 如果单独安装 rabbitmq,或者查看指定查看 rabbitmq 日志,则显示日志
if [ "${soft}" = "rabbitmq" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push" ]; }; then
# tail -f -n 20 /var/log/rabbitmq/rabbit@*.log
tail -f -n 20 /var/log/rabbitmq/rabbit@$(hostname).log
fi
}
# syslog 安装
syslog_install(){
# 1 安装 syslog
yum -y localinstall $PUSH_TEMP_PATH/syslog-8.24.0/base/rsyslog-8.24.0-57.el7_9.3.x86_64.rpm
# 2 替换syslog 配置
cat $PUSH_TEMP_PATH/syslog-8.24.0/conf/rsyslog.conf > /etc/rsyslog.conf
# 4.1 刷新服务
systemctl daemon-reload
# 4.2 重新启动
systemctl restart rsyslog
# 4.3 开机自启
systemctl enable rsyslog
echo " ● end install: syslog-8.24.0;"
# 5 等待几秒检测 syslog 状态
sleep 2
syslog_log
}
# syslog 删除
syslog_remove(){
# 1 关闭开机自启动
systemctl disable rsyslog
# 2 停止服务
systemctl stop rsyslog
# 3 卸载程序
rpm -e rsyslog-8.24.0-57.el7_9.3.x86_64
sleep 2
syslog_log
echo " ● end remove: rsyslog-8.24.0;"
}
# 检测 syslog 日志
syslog_log(){
#1.1 检测 syslog 是否自启动
SYSLOG_STATUS=$(systemctl is-active rsyslog)
if [ "${operate}" != "remove" ]; then
# 2.1 如果操作类型不是卸载,且 syslog 状态为:活跃的,打印成功,否则打印失败
if [ "${SYSLOG_STATUS}" = "active" ]; then
LOG_TEMP_LOG=" ● success: start rsyslog-8.24.0"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error: start rsyslog-8.24.0"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
else
#3 如果操作类型是卸载,且识别 syslog 状态为不存在 或者失败
if [ "${SYSLOG_STATUS}" = "unknown" ] || [ "${SYSLOG_STATUS}" = "failed" ]; then
LOG_TEMP_LOG=" ● success:remove rsyslog-8.24.0"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
else
LOG_TEMP_LOG=" ● error:remove rsyslog-8.24.0"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
fi
fi
# 4 如果单独安装 syslog,或者查看指定查看 syslog 日志,则显示日志
if [ "${soft}" = "syslog" ] && { [ "${operate}" = "log" ] || [ "${operate}" = "push" ]; }; then
tail -f -n 20 /var/log/messages
fi
}
#解压tar包
un_tar_gz(){
#1 删除可能存在的解压不全的临时文件
rm -rf $UNZIP_TEMP_PATH
#2 创建加压的文件夹
mkdir -p $UNZIP_TEMP_PATH
#2 进行解压操作
tar -zxvf $PUSH_SH_PATH/$TAR_GZ_NAME -C $UNZIP_TEMP_PATH
#3 获取加压后的文件路径
#UNZIP_DIR_NAME=$(echo "$UNZIP_TEMP_PATH"/* | awk '{print $1}' | xargs basename)
UNZIP_DIR_NAME=$(tar -tzf "$PUSH_SH_PATH"/"$TAR_GZ_NAME" | head -1 | cut -d '/' -f 1)
#4 获取到解压后的真实路径
PUSH_TEMP_PATH=$UNZIP_TEMP_PATH/$UNZIP_DIR_NAME
}
# 获取JAVA_HOME
get_java_home(){
# 1、如果JAVA_HOME 不为空,则退出
if [ -n "${JAVA_HOME}" ]; then
return
fi
#2、通过java程序查找(如果是子shell 可能读不到)
JAVA_PATH=$(which java)
if [ -n "${JAVA_PATH}" ]; then
# 获取java的上2级作为JAVA_HOME
JAVA_HOME=$(dirname "$(dirname "$JAVA_PATH")")
else
#3、读取不到,则读取配置文件
JAVA_HOME=$(grep -m 1 'JAVA_HOME=' /etc/profile | awk -F= '{print $2}' | tr -d ' ')
fi
}
#打印中途记录的在log_array内的内容
pirnt_sum_log(){
# 打印数组的每个元素
echo "-----------------------summary-log-start------------------------------"
for element in "${log_array[@]}"; do
echo "$element"
done
echo "-----------------------summary-log-end ------------------------------"
}
#防火墙开放端口
firewall_port_open(){
# 定义要检查的端口号
PORT=88
# 检查指定端口是否已经开放
if sudo firewall-cmd --list-ports | grep -q "\<$PORT\/tcp\>"; then
LOG_TEMP_LOG=" ● 端口 $PORT 已经开放,跳过"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
return;
fi
echo "调整 firewall 防火墙:"
firewall-cmd --zone=public --add-port=88/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
# 防火墙日志
firewall_port_log
}
#防火墙关闭端口
firewall_port_close(){
echo "调整 firewall 防火墙:"
firewall-cmd --zone=public --remove-port=88/tcp --permanent
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
firewall-cmd --reload
# 防火墙日志
firewall_port_log
}
#防火墙日志
firewall_port_log(){
open_ports=$(firewall-cmd --list-ports)
LOG_TEMP_LOG=" ● firewall-cmd open port:${open_ports}"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
}
# 系统调优(RedHat系列linux)
sys_com_tuning(){
# 搜索文件中是否包含指定文本
if grep -q "# 全局的打开文件数" "/etc/systemd/system.conf"; then
LOG_TEMP_LOG=" ● 系统配置 已调优(适配 RedHat系列linux),跳过"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
return
fi
# 1 调整systemctl管理的 servie 资源限制
echo "# 全局的打开文件数" >> /etc/systemd/system.conf
echo "DefaultLimitNOFILE=1048576" >> /etc/systemd/system.conf
echo "# 全局打开进程数" >> /etc/systemd/system.conf
echo "DefaultLimitNPROC=65535" >> /etc/systemd/system.conf
# 2 调整系统内核参数
echo "# 全局:端口最大的监听队列的长度,可为:32768" >> /etc/sysctl.conf
echo "net.core.somaxconn=32768" >> /etc/sysctl.conf
echo "# 内存分配模式:1为不限制" >> /etc/sysctl.conf
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
echo "# 单进程打开文件句柄数" >> /etc/sysctl.conf
echo "fs.nr_open = 2097152" >> /etc/sysctl.conf
echo "# 系统打开文件句柄数" >> /etc/sysctl.conf
echo "fs.file-max = 102400" >> /etc/sysctl.conf
# 2.1 刷新内核参数,立即生效
/sbin/sysctl -p
# 3 调整用户组资源限制
echo "# 用户会话的 打开文件句柄数" >> /etc/security/limits.conf
echo "* soft nofile 1048576" >> /etc/security/limits.conf
echo "* hard nofile 1048576" >> /etc/security/limits.conf
echo "# 用户会话的 打开进程数限制" >> /etc/security/limits.conf
echo "* soft nproc 65535" >> /etc/security/limits.conf
echo "* hard nproc 65535" >> /etc/security/limits.conf
LOG_TEMP_LOG=" ● 系统配置 调优完成(适配 RedHat系列linux)"
log_array+=("$LOG_TEMP_LOG")
echo "$LOG_TEMP_LOG"
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"push")
push
;;
"remove")
remove
;;
"log")
log
;;
*)
usage
;;
esac
更多推荐
所有评论(0)