0
点赞
收藏
分享

微信扫一扫

shell脚本源码方式安装fastdfs

#!/bin/bash
<<INFO
AUTHOR:运维@小兵
DATE:2022-02-21
DESCRIBE:源码方式安装fastdfs
SYSTEM:CentOS7/RedHat7
WARNING:
MODIFY:
INFO

set -e
source /etc/profile #避免ansible远程执行shell获取环境变量不一致的问题

WORKDIR=$(cd `dirname $0`;pwd) #脚本所在路径
echo "Current Excute: bash $0 $@"

DATA_DIR=/deploy/fastdfs
FDFS_GROUP=fastdfs #启动fastdfs的用户组
FDFS_USER=fastdfs #启动fastdfs的用户名
FDFS_USER_PWD=devops #fastdfs用户密码
FDFS_VERSION=v5.05 #fastdfs版本
FDFS_TRACKER_IP=192.168.1.3
FDFS_TRACKER_PORT=22122
FDFS_STORAGE_PORT=23000
FDFS_WEB_PORT=80 #nginx服务端口
GROUP_NAME="group1" #组名称

######################功能函数######################
#安装依赖包
Install_Depend_Pak() {
echo "[step1]:Begin Install Depend Pkg..."
! command -v make &> /dev/null && rpm -ivh ${WORKDIR}/make-3.82-24.el7.x86_64.rpm --nodeps
if ! command -v cmake &> /dev/null;then
rpm -ivh ${WORKDIR}/libarchive-3.1.2-14.el7_7.x86_64.rpm --nodeps
rpm -ivh ${WORKDIR}/cmake-2.8.12.2-2.el7.x86_64.rpm --nodeps
fi
! gcc --version &> /dev/null && yum -y install gcc gcc-c++
echo "INFO:Install Depend Pkg Success"
}

#创建用户
Create_User() {
echo "[step2]:Begin Create ${FDFS_USER} User..."
if ! grep "^${FDFS_GROUP}:" /etc/group &> /dev/null;then
groupadd ${FDFS_GROUP}
fi
if ! id ${FDFS_USER} &> /dev/null;then
useradd -s /bin/bash -g ${FDFS_GROUP} -m ${FDFS_USER}
echo "${FDFS_USER}:${FDFS_USER_PWD}" | chpasswd
fi
echo "INFO:Create ${FDFS_USER} User Success"
}

#修改用户限制文件
Config_User_Limit(){
[[ ! -f /etc/security/limits.d/20-nproc.conf ]] && echo "ERROR:/etc/security/limits.d/20-nproc.conf Not Found" && exit 1
echo "[step3]:Begin Config /etc/security/limits.d/20-nproc.conf..."
local config_name="/etc/security/limits.d/20-nproc.conf"
[[ ! -f ${config_name}.bak ]] && cp ${config_name}{,.bak}
sed -i "/^${FDFS_USER} /d" ${config_name}
tee -a ${config_name} << EOF
${FDFS_USER} soft nproc unlimited
EOF
echo "INFO:Config /etc/security/limits.d/20-nproc.conf Success"
}

#安装Libfastcommon
Install_Libfastcommon() {
if [[ ! -d /usr/include/fastcommon ]];then
[[ ! -f ${WORKDIR}/libfastcommon-1.0.7.zip ]] && echo "ERROR:${WORKDIR}/libfastcommon-1.0.7.zip Not Found" && exit 1
echo "[step4]:Begin Install Libfastcommon..."
unzip -o ${WORKDIR}/libfastcommon-1.0.7.zip -d /usr/local/src/
cd /usr/local/src/libfastcommon-1.0.7
./make.sh &> /dev/null
./make.sh install &> /dev/null
ln -svf /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -svf /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -svf /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -svf /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
echo "INFO:Install Libfastcommon Success"
else
echo "Libfastcommon Is Installed"
fi
}

#安装fastdfs
Install_Fastdfs() {
if [[ ! -f /usr/bin/fdfs_monitor ]];then
[[ ! -f ${WORKDIR}/FastDFS_${FDFS_VERSION}.tar.gz ]] && echo "ERROR:${WORKDIR}/FastDFS_${FDFS_VERSION}.tar.gz Not Found" && exit 1
echo "[step5]:Begin Install Fastdfs,Version Is ${FDFS_VERSION}..."
tar xf ${WORKDIR}/FastDFS_${FDFS_VERSION}.tar.gz -C /usr/local/src/
cd /usr/local/src/FastDFS/
./make.sh &> /dev/null
./make.sh install &> /dev/null
if [[ -f /usr/bin/fdfs_trackerd ]];then
echo "INFO:Install Fastdfs Success,Version Is ${FDFS_VERSION}..."
else
echo "ERROR:Install Fastdfs Fail,Version Is ${FDFS_VERSION}..."
fi
else
echo "Fastdfs Is Installed,Version Is ${FDFS_VERSION}"
fi
}

#安装前准备
Pre_Install() {
! command -v unzip &> /dev/null && echo "ERROR:unzip Command Not Exist" && exit 1
[[ -z ${DATA_DIR} ]] && echo "ERROR:DATA_DIR Is Null" && exit 1
if ! echo ${FDFS_TRACKER_IP} |grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' &> /dev/null;then
echo "ERROR:${FDFS_TRACKER_IP} Is Invalid" && exit 1
fi
Install_Depend_Pak
Create_User
Config_User_Limit
Install_Libfastcommon
Install_Fastdfs
}

#启动tracker
Start_Tracker() {
if ! ss -nutlp | grep -w ":${FDFS_TRACKER_PORT} " &> /dev/null;then
echo "INFO:Begin Start Tracker..."
local tracker_conf="tracker.conf"
local client_conf="client.conf"
mkdir -p ${DATA_DIR}/tracker
chown -R ${FDFS_USER}:${FDFS_GROUP} ${DATA_DIR}/tracker
cd /etc/fdfs/
#修改tracker.conf
if [[ -f ${tracker_conf} ]];then
[[ ! -f ${tracker_conf}.bak ]] && cp ${tracker_conf}{,.bak}
fi
\cp ${tracker_conf}.sample ${tracker_conf}
sed -ri "s|^base_path=.*|base_path=${DATA_DIR}/tracker|" ${tracker_conf}
sed -ri "s/^store_group==.*/store_group==${GROUP_NAME}/" ${tracker_conf}
sed -ri "s/^accept_threads=.*/accept_threads=2/" ${tracker_conf}
sed -ri "s/^work_threads=.*/work_threads=20/" ${tracker_conf}
sed -ri "s/^max_connections=.*/max_connections=1024/" ${tracker_conf}
sed -ri "s/^run_by_group=.*/run_by_group=${FDFS_GROUP}/" ${tracker_conf}
sed -ri "s/^run_by_user=.*/run_by_user=${FDFS_USER}/" ${tracker_conf}
sed -ri "s/^run_by_user=.*/run_by_user=${FDFS_USER}/" ${tracker_conf}
sed -ri "s/^http.server_port=.*/http.server_port=${FDFS_WEB_PORT}/" ${tracker_conf}

#修改client.conf
if [[ -f ${client_conf} ]];then
[[ ! -f ${client_conf}.bak ]] && cp ${client_conf}{,.bak}
fi
\cp ${client_conf}.sample ${client_conf}
sed -ri "s|^base_path=.*|base_path=${DATA_DIR}/tracker|" ${client_conf}
sed -ri "s/^tracker_server=.*/tracker_server=${FDFS_TRACKER_IP}:${FDFS_TRACKER_PORT}/" ${client_conf}

#配置开机自启
if [[ ! -f /etc/init.d/fdfs_trackerd ]];then
echo "ERROR:/etc/init.d/fdfs_trackerd Not Found" && exit 1
else
[[ ! -f /etc/init.d/fdfs_trackerd.bak ]] && cp /etc/init.d/fdfs_trackerd{,.bak}
fi
sed -ri 's#/usr/local/bin/#/usr/bin/#g' /etc/init.d/fdfs_trackerd
chkconfig --add fdfs_trackerd
chkconfig fdfs_trackerd on

#启动Tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
sleep 2
if ss -nutlp | grep -w ":${FDFS_TRACKER_PORT} " &> /dev/null;then
echo "INFO:Start Tracker Success"
else
echo "ERROR:Start Tracker Fail"
fi
else
echo "INFO:Tracker Is Running"
fi
}

#卸载tracker
Uninstall_Tracker() {
if ss -nutlp | grep -w ":${FDFS_TRACKER_PORT} " &> /dev/null;then
echo "INFO:Begin Uninstall Tracker..."
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
rm -rf ${DATA_DIR}/tracker
rm -f /etc/fdfs/tracker.conf
chkconfig fdfs_trackerd off
chkconfig --del fdfs_trackerd
if ! ss -nutlp | grep -w ":${FDFS_TRACKER_PORT} " &> /dev/null;then
echo "INFO:Uninstall Tracker Success"
else
echo "ERROR:Uninstall Tracker Success" && exit 1
fi
else
echo "INFO:Tracker Is Uninstall"
fi
}

#启动storage
Start_Storage() {
if ! ss -nutlp | grep -w ":${FDFS_STORAGE_PORT} " &> /dev/null;then
echo "INFO:Begin Start Storage..."
local storage_conf="storage.conf"
mkdir -p ${DATA_DIR}/storage
chown -R ${FDFS_USER}:${FDFS_GROUP} ${DATA_DIR}/storage
cd /etc/fdfs/
#修改storage.conf
if [[ -f ${storage_conf} ]];then
[[ ! -f ${storage_conf}.bak ]] && cp ${storage_conf}{,.bak}
fi
\cp ${storage_conf}.sample ${storage_conf}
sed -ri "s/^group_name=.*/group_name=${GROUP_NAME}/" ${storage_conf}
sed -ri "s|^base_path=.*|base_path=${DATA_DIR}/storage|" ${storage_conf}
sed -ri "s/^disk_reader_threads = .*/disk_reader_threads = 5/" ${storage_conf}
sed -ri "s/^disk_writer_threads = .*/disk_writer_threads = 20/" ${storage_conf}
sed -ri "s|^store_path0=.*|store_path0=${DATA_DIR}/storage|" ${storage_conf}
sed -ri "s/^tracker_server=.*/tracker_server=${FDFS_TRACKER_IP}:${FDFS_TRACKER_PORT}/" ${storage_conf}
sed -ri "s/^run_by_group=.*/run_by_group=${FDFS_GROUP}/" ${storage_conf}
sed -ri "s/^run_by_user=.*/run_by_user=${FDFS_USER}/" ${storage_conf}
sed -ri "s/^file_distribute_path_mode=.*/file_distribute_path_mode=1/" ${storage_conf}
sed -ri "s/^rotate_error_log=.*/rotate_error_log=true/" ${storage_conf}

#配置开机自启
if [[ ! -f /etc/init.d/fdfs_storaged ]];then
echo "ERROR:/etc/init.d/fdfs_storaged Not Found" && exit 1
else
[[ ! -f /etc/init.d/fdfs_storaged.bak ]] && cp /etc/init.d/fdfs_storaged{,.bak}
fi
sed -ri 's#/usr/local/bin/#/usr/bin/#g' /etc/init.d/fdfs_storaged
chkconfig --add fdfs_storaged
chkconfig fdfs_storaged on

#启动Storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
if [[ $? -eq 0 ]];then
if ss -nutlp | grep -w ":${FDFS_STORAGE_PORT} " &> /dev/null;then
echo "INFO:Start Storage Success"
fi
else
echo "ERROR:Start Storage Fail"
fi
else
echo "INFO:Storage Is Running"
fi
}

#卸载Storage
Uninstall_Storage() {
if ss -nutlp | grep -w ":${FDFS_STORAGE_PORT} " &> /dev/null;then
echo "INFO:Begin Uninstall Storage..."
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
#rm -rf ${DATA_DIR}/storage
rm -f /etc/fdfs/storage.conf
chkconfig fdfs_storaged off
chkconfig --del fdfs_storaged
if ! ss -nutlp | grep -w ":${FDFS_STORAGE_PORT} " &> /dev/null;then
echo "INFO:Uninstall Storage Success"
else
echo "ERROR:Uninstall Storage Success"
fi
else
echo "INFO:Storage Is Uninstall"
fi
}

#检查fastdfs的上传、下载、删除功能
Check_Fastdfs() {
echo "INFO:Begin Check Fastdfs Upload/Download/Delete Function..."
#测试上传
cd ${WORKDIR}
echo "test fastdfs" > /tmp/test.html
if fdfs_test /etc/fdfs/client.conf upload /tmp/test.html &> /dev/null;then
echo "INFO:Upload Is Ok"
else
echo "ERROR:Upload Is Bad" && exit 1
fi
#测试下载
local file_addr=$(fdfs_upload_file /etc/fdfs/client.conf /tmp/test.html)
fdfs_download_file /etc/fdfs/client.conf ${file_addr} ./test.html
if [[ $(md5sum test.html | awk '{print $1}') == $(md5sum /tmp/test.html | awk '{print $1}') ]];then
echo "INFO:Download Is Ok"
else
echo "ERROR:Download Is Bad" && exit 1
fi
#测试删除
if fdfs_delete_file /etc/fdfs/client.conf ${file_addr} &> /dev/null;then
echo "INFO:Delete Is Ok"
else
echo "ERROR:Delete Is Bad" && exit 1
fi
echo "INFO:Fastdfs Is Healthz"
}

#完整卸载fastdfs
Uninstall_All_Fastdfs() {
Uninstall_Storage
Uninstall_Tracker
rm -rf ${DATA_DIR}
rm -rf /etc/fdfs
rm -f /usr/bin/fdfs_*
rm -rf /usr/include/fastdfs
rm -f /etc/init.d/fdfs_trackerd
rm -f /etc/init.d/fdfs_storaged
set +e
userdel -r ${FDFS_USER}
groupdel ${FDFS_GROUP}
set -e
echo "INFO:Uninstall Fastdfs Success"
}

#帮助信息
Help(){
cat << EOF
Usage:
bash $0 (-h|install|uninstall|check) (tracker|storage|fastdfs)
=======================================================================
bash $0 -h #查看帮助
bash $0 install tracker #安装tracker
bash $0 install fastdfs #安装tracker和storage
bash $0 uninstall tracker #卸载tracker
bash $0 uninstall fastdfs #卸载tracker和storage,以及删除二进制文件
bash $0 check #检查fastdfs是否健康
EXAMPLE:
bash $0 install tracker
EOF
}

#######################主函数#######################
[[ $UID -ne 0 ]] && echo "ERROR:Please Use Admin(root) Excute......" && exit 1
[[ $# -gt 2 ]] && Help && exit 1
case $1 in
-h)
Help;;
install)
Pre_Install
case $2 in
tracker)
Start_Tracker;;
storage)
Start_Storage;;
fastdfs)
Start_Tracker
Start_Storage
;;
*)
Help && exit 1
esac
;;
uninstall)
case $2 in
tracker)
Uninstall_Tracker;;
storage)
Uninstall_Storage;;
fastdfs)
Uninstall_All_Fastdfs;;
*)
Help && exit 1
esac
;;
check)
Check_Fastdfs;;
*)
Help && exit 1
esac


举报

相关推荐

0 条评论