mirror of https://github.com/fengyuhetao/shell.git
140 lines
5.0 KiB
Bash
140 lines
5.0 KiB
Bash
#!/bin/bash
|
||
# auth:kaliarch
|
||
# version:v1.0
|
||
# func:kafka 0.10.2/0.11.0/1.1.0/2.0.0 安装
|
||
|
||
# 定义安装目录、及日志信息
|
||
. /etc/init.d/functions
|
||
[ $(id -u) != "0" ] && echo "Error: You must be root to run this script" && exit 1
|
||
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
||
download_path=/tmp/tmpdir/
|
||
install_log_name=install_kafka.log
|
||
env_file=/etc/profile.d/kafka.sh
|
||
install_log_path=/var/log/appinstall/
|
||
install_path=/usr/local/
|
||
software_config_file=${install_path}kafka/config/server.properties
|
||
|
||
clear
|
||
echo "##########################################"
|
||
echo "# #"
|
||
echo "# 安装kafka 0.10.2/0.11.0/1.1.0/2.0.0 #"
|
||
echo "# #"
|
||
echo "##########################################"
|
||
echo "1: Install kafka 0.10.2"
|
||
echo "2: Install kafka 0.11.0"
|
||
echo "3: Install kafka 1.1.0"
|
||
echo "4: Install kafka 2.0.0"
|
||
echo "5: EXIT"
|
||
# 选择安装软件版本
|
||
read -p "Please input your choice:" softversion
|
||
if [ "${softversion}" == "1" ];then
|
||
URL="https://anchnet-script.oss-cn-shanghai.aliyuncs.com/kafka/kafka_2.12-0.10.2.2.tgz"
|
||
elif [ "${softversion}" == "2" ];then
|
||
URL="https://anchnet-script.oss-cn-shanghai.aliyuncs.com/kafka/kafka_2.12-0.11.0.3.tgz"
|
||
elif [ "${softversion}" == "3" ];then
|
||
URL="https://anchnet-script.oss-cn-shanghai.aliyuncs.com/kafka/kafka_2.12-1.1.0.tgz"
|
||
elif [ "${softversion}" == "4" ];then
|
||
URL="https://anchnet-script.oss-cn-shanghai.aliyuncs.com/kafka/kafka_2.12-2.0.0.tgz"
|
||
elif [ "${softversion}" == "5" ];then
|
||
echo "you choce channel!"
|
||
exit 1;
|
||
else
|
||
echo "input Error! Place input{1|2|3|4|5}"
|
||
exit 0;
|
||
fi
|
||
|
||
# 传入内容,格式化内容输出,可以传入多个参数,用空格隔开
|
||
output_msg() {
|
||
for msg in $*;do
|
||
action $msg /bin/true
|
||
done
|
||
}
|
||
|
||
|
||
# 判断命令是否存在,第一个参数 $1 为判断的命令,第二个参数为提供该命令的yum 软件包名称
|
||
check_yum_command() {
|
||
output_msg "命令检查:$1"
|
||
hash $1 >/dev/null 2>&1
|
||
if [ $? -eq 0 ];then
|
||
echo "`date +%F' '%H:%M:%S` check command $1 ">>${install_log_path}${install_log_name} && return 0
|
||
else
|
||
yum -y install $2 >/dev/null 2>&1
|
||
# hash $Command || { echo "`date +%F' '%H:%M:%S` $2 is installed fail">>${install_log_path}${install_log_name} ; exit 1 }
|
||
fi
|
||
}
|
||
|
||
# 判断目录是否存在,传入目录绝对路径,可以传入多个目录
|
||
check_dir() {
|
||
output_msg "目录检查"
|
||
for dirname in $*;do
|
||
[ -d $dirname ] || mkdir -p $dirname >/dev/null 2>&1
|
||
echo "`date +%F' '%H:%M:%S` $dirname check success!" >> ${install_log_path}${install_log_name}
|
||
done
|
||
}
|
||
|
||
# 下载文件并解压至安装目录,传入url链接地址
|
||
download_file() {
|
||
output_msg "下载源码包"
|
||
mkdir -p $download_path
|
||
for file in $*;do
|
||
wget $file -c -P $download_path &> /dev/null
|
||
if [ $? -eq 0 ];then
|
||
echo "`date +%F' '%H:%M:%S` $file download success!">>${install_log_path}${install_log_name}
|
||
else
|
||
echo "`date +%F' '%H:%M:%s` $file download fail!">>${install_log_path}${install_log_name} && exit 1
|
||
fi
|
||
done
|
||
}
|
||
|
||
|
||
# 解压文件,可以传入多个压缩文件绝对路径,用空格隔开,解压至安装目录
|
||
extract_file() {
|
||
output_msg "解压源码"
|
||
for file in $*;do
|
||
if [ "${file##*.}" == "gz" ] || [ "${file##*.}" == "tgz" ];then
|
||
tar -zxf $file -C $install_path && echo "`date +%F' '%H:%M:%S` $file extrac success!,path is $install_path">>${install_log_path}${install_log_name}
|
||
elif [ "${file##*.}" == "zip" ];then
|
||
unzip -q $file -d $install_path && echo "`date +%F' '%H:%M:%S` $file extrac success!,path is $install_path">>${install_log_path}${install_log_name}
|
||
else
|
||
echo "`date +%F' '%H:%M:%S` $file type error, extrac fail!">>${install_log_path}${install_log_name} && exit 1
|
||
fi
|
||
done
|
||
}
|
||
|
||
# 配置环境变量,第一个参数为添加环境变量的绝对路径
|
||
config_env() {
|
||
output_msg "环境变量配置"
|
||
echo "export PATH=\$PATH:$1" >${env_file}
|
||
source ${env_file} && echo "`date +%F' '%H:%M:%S` 软件安装完成!">> ${install_log_path}${install_log_name}
|
||
|
||
}
|
||
|
||
# 添加配置文件
|
||
add_config() {
|
||
cat> $1 <<EOF
|
||
broker.id=1 #kafka集群标识,不能相同,第一台是1以此类推,其他都一样。
|
||
log.dirs=/usr/local/kafka/kafka-logs
|
||
host.name=127.0.0.1 #主机ip
|
||
#zookeeper.connect=127.0.0.1:2181 #zookeeper连接
|
||
EOF
|
||
}
|
||
|
||
main() {
|
||
check_dir $install_log_path $install_path
|
||
check_yum_command wget wget
|
||
download_file $URL
|
||
|
||
software_name=$(echo $URL|awk -F'/' '{print $NF}'|awk -F'.tgz' '{print $1}')
|
||
for filename in `ls $download_path`;do
|
||
extract_file ${download_path}$filename
|
||
done
|
||
rm -fr ${download_path}
|
||
ln -s $install_path$software_name ${install_path}kafka
|
||
add_config ${software_config_file}
|
||
check_dir ${install_path}kafka/kafka-logs
|
||
config_env ${install_path}kafka/bin
|
||
}
|
||
|
||
main
|
||
|