#!/bin/bash # bashsupport disable=BP2001 # 本脚本可以一键初始化Linux服务器的环境 # 为rancher的自动部署k8s做准备 # 确定在哪个节点上运行此脚本,请按照如下的的顺序运行 # HarborServer # WorkerServer # MinioServer # GlusterServer (Storage-2上执行) # HeketiServer (Storage-1上执行) ### 需要修改以下的内容 ### ### 需要修改以下的内容 ### ### 需要修改以下的内容 ### WhichNodeRun=HarborServer DOCKER_VERSION=20.10.15 # docker的版本,一般不修改 HarborHostName=172.28.0.17 # 需要确保此IP能够被内网服务器访问,一般为公网服务器的外网IP HarborHostPort=8033 # harbor服务器的端口,一般不修改 HarborAdminPass=V2ryStr@ngPss # harbor服务器管理员密码,一般不修改 PublicServerIPs=(172.28.0.17) # 需要修改为能够访问公网的服务器IP, 内网IP地址 PrivateServerIPs=(172.28.0.8 172.28.0.21) # 内网服务器的IP地址,不包括可以访问公网IP的服务器 StorageServerIPs=(172.28.0.15) # 存储服务器的IP地址,默认在第一台上安装heketi,默认第一台作为NFS服务端 NfsPath=/nfsdata # nfs路径,需要事先创建并进行文件夹赋权 MinioStorageType=volume # 选项:volume 或者 pv Minio集群底层的存储方式,使用4PV还是使用 1PV-4Volume的形式 OSSPublicURL=https://oss-s1.107421.xyz/ # 可以不配置,会从DockerHub拉取所有镜像(3GB) ### 需要修改以上的内容 ### ### 需要修改以上的内容 ### ### 需要修改以上的内容 ### CMD_INSTALL="" CMD_UPDATE="" CMD_REMOVE="" SOFTWARE_UPDATED=0 LinuxReleaseVersion="" DockerRegisterDomain=${HarborHostName}:${HarborHostPort} ProxyOfflineFile=${OSSPublicURL}"proxy-offline.tar.gz" HarborOfflineFile=${OSSPublicURL}"harbor-offline-installer-v2.1.0.tgz" # 可以不配置,会从GitHub拉取Harbor离线安装包(550MB) DockerComposeFile=${OSSPublicURL}"docker-compose-linux-x86_64-v2.18.0" HelmOfflineFile=${OSSPublicURL}"helm-v3.4.0-linux-amd64.tar.gz" NginxOfflineFile=${OSSPublicURL}"nginx-1.20.1-1.el7.ngx.x86_64.rpm" HeketiOfficeFile=${OSSPublicURL}"heketi-v9.0.0.linux.amd64.tar.gz" HeketiConfigOfflineFile=${OSSPublicURL}"heketi-config.tar.gz" RED="31m" ## 姨妈红 GREEN="32m" ## 水鸭青 YELLOW="33m" ## 鸭屎黄 PURPLE="35m" ## 基佬紫 BLUE="36m" ## 天依蓝 ######## 颜色函数方法很精妙 ############ ######## 颜色函数方法很精妙 ############ colorEcho() { # shellcheck disable=SC2145 echo -e "\033[${1}${@:2}\033[0m" 1>&2 } ####################################### # description # Globals: # EUID # RED # YELLOW # Arguments: # None ####################################### check_root() { if [[ $EUID != 0 ]]; then colorEcho ${RED} "当前非root账号(或没有root权限),无法继续操作,请更换root账号!" colorEcho ${YELLOW} "使用sudo -命令获取临时root权限(执行后可能会提示输入root密码)" exit 1 fi } # 判断命令是否存在 command_exists() { command -v "$@" >/dev/null 2>&1 } ####### 获取系统版本及64位或32位信息 check_sys() { ## 判定Linux的发行版本 if [ -f /etc/redhat-release ]; then LinuxReleaseVersion="centos" elif cat /etc/issue | grep -Eqi "debian"; then LinuxReleaseVersion="debian" elif cat /etc/issue | grep -Eqi "ubuntu"; then LinuxReleaseVersion="ubuntu" elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then LinuxReleaseVersion="centos" elif cat /proc/version | grep -Eqi "debian"; then LinuxReleaseVersion="debian" elif cat /proc/version | grep -Eqi "ubuntu"; then LinuxReleaseVersion="ubuntu" elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then LinuxReleaseVersion="centos" elif cat /etc/os-release | grep -Eqi "openEuler"; then LinuxReleaseVersion="euler" else LinuxReleaseVersion="" fi # 判断系统的包管理工具 apt, yum, or zypper getPackageManageTool() { if [[ -n $(command -v apt-get) ]]; then CMD_INSTALL="apt-get -y -qq --allow-downgrades install" CMD_UPDATE="apt-get -qq update" CMD_REMOVE="apt-get -y remove" elif [[ -n $(command -v yum) ]]; then CMD_INSTALL="yum -y -q install" CMD_UPDATE="yum -q makecache" CMD_REMOVE="yum -y remove" elif [[ -n $(command -v zypper) ]]; then CMD_INSTALL="zypper -y install" CMD_UPDATE="zypper ref" CMD_REMOVE="zypper -y remove" else return 1 fi return 0 } # 检查系统包管理方式,更新包 getPackageManageTool if [[ $? -eq 1 ]]; then colorEcho ${RED} "系统的包管理不是 APT or YUM, 请手动安装所需要的软件." return 1 fi ### 更新程序引索 if [[ $SOFTWARE_UPDATED -eq 0 ]]; then colorEcho ${BLUE} "正在更新软件包管理..." $CMD_UPDATE SOFTWARE_UPDATED=1 fi return 0 } ## 安装所需要的程序,及依赖程序 installDemandSoftwares() { for software in "$@"; do ## 安装该软件 if [[ -n $(command -v "${software}") ]]; then colorEcho ${GREEN} "${software}已经安装了...跳过..." echo "" else colorEcho ${BLUE} "正在安装 ${software}..." $CMD_INSTALL "${software}" ## 判断该软件是否安装成功 if [[ $? -ne 0 ]]; then colorEcho ${RED} "安装 ${software} 失败。" colorEcho ${RED} "如果是重要软件,本脚本会自动终止!!" colorEcho ${PURPLE} "一般软件,本脚本会忽略错误并继续运行,请之后手动安装该程序。" return 1 else colorEcho ${GREEN} "已经成功安装 ${software}." colorEcho ${GREEN} "-----------------------------------------------------------" echo "" fi fi done return 0 } ####################################### # description # Globals: # BLUE # GREEN # LinuxReleaseVersion # PURPLE # Arguments: # None ####################################### shutdownFirewall() { ## 关闭防火墙、SElinux、Swap colorEcho ${PURPLE} "---------------------------------------------------------------------------------" colorEcho ${BLUE} "开始关闭系统的防火墙…………" systemctl stop firewalld systemctl disable firewalld echo "" if [ "${LinuxReleaseVersion}" = "centos" ]; then colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" colorEcho ${GREEN} "--------------------------------------------------" colorEcho ${BLUE} "开始关闭SELinux……" setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config colorEcho ${GREEN} " SELinux关闭完成 " else colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" colorEcho ${GREEN} "无需关闭SELinux,现在 跳过" fi echo "" } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # Arguments: # None ####################################### disableSwap() { colorEcho ${PURPLE} "---------------------------------------------------------------------------------" colorEcho ${BLUE} "开始关闭系统的虚拟内存…………" swapoff -a colorEcho ${GREEN} " 关闭完成 " echo "" colorEcho ${BLUE} "正在备份系统的文件系统表……" cp -f /etc/fstab /etc/fstab_bak colorEcho ${GREEN} " 备份完成 " echo "" colorEcho ${BLUE} "正在修改文件系统表,去除虚拟内存的部分……" cat /etc/fstab_bak | grep -v swap >/etc/fstab colorEcho ${GREEN} " 修改完成 " echo "" colorEcho ${GREEN} "----------------------------------------------------------------------------------" echo "" } ## 安装docker时,修改系统的配置文件 modifySystemConfig_Docker() { colorEcho ${PURPLE} "---------------------------------------------------------------------------------" colorEcho ${BLUE} "开始修改系统内核参数…………" ## 配置内核参数 cat >/etc/sysctl.d/k8s.conf <>~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys colorEcho ${GREEN} "--------------------------------------------------------------" colorEcho ${GREEN} "-----------本机配置完成!-------------" echo "" # bashsupport disable=BP2001 AllInnerServer=("${PrivateServerIPs[@]}" "${StorageServerIPs[@]}") for ip in "${AllInnerServer[@]}"; do colorEcho ${BLUE} "请手动将如下的命令,以 root 权限在主机 ${ip} 上运行" colorEcho ${BLUE} "请手动将如下的命令,以 root 权限在主机 ${ip} 上运行" colorEcho ${BLUE} "请手动将如下的命令,以 root 权限在主机 ${ip} 上运行" colorEcho ${BLUE} "-----------------------------------------------" echo "" echo "" colorEcho ${RED} " 请以 root 角色 运行!!! " colorEcho ${RED} " 请以 root 角色 运行!!! " colorEcho ${RED} " 请以 root 角色 运行!!! " echo "" colorEcho ${YELLOW} 'sed -i -e "/PermitRootLogin no/ d" -e "$ a PermitRootLogin yes" /etc/ssh/sshd_config && systemctl restart sshd' echo "" colorEcho ${YELLOW} "ssh-keygen -t rsa -P \"\" -f ~/.ssh/id_rsa && echo \"$(cat ~/.ssh/id_rsa.pub)\" >> ~/.ssh/authorized_keys && echo \"\" && cat ~/.ssh/authorized_keys" echo "" echo "" echo "" while true; do colorEcho ${RED} "请确保您已经将上述的命令在主机${ip}上执行了!!" read -r -p "请输入yes进行确认,脚本才可继续运行!!" input case $input in yes) colorEcho ${GREEN} "您已确认在主机${ip}上添加了私有的ssh key!" echo "" break ;; *) echo "" colorEcho ${RED} "输入有误!!! 请输入 >> yes << 进行确认" colorEcho ${RED} "请在主机${ip}上执行上述命令!!!" colorEcho ${RED} "否则本脚本的功能会失效!!" colorEcho ${RED} "-----------------------------------------------------" echo "" ;; esac done colorEcho ${GREEN} "----------------------------------------------------------" done echo "" } ####################################### # description # Globals: # BLUE # CMD_REMOVE # DOCKER_VERSION # GREEN # LinuxReleaseVersion # PURPLE # RED # dockerStaff # staff # Arguments: # None ####################################### downloadDocker() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "准备下载Docker的离线安装包…………" colorEcho ${GREEN} "--------------------------------------------------------------" colorEcho ${BLUE} "您选择安装的docker版本为:${DOCKER_VERSION}" echo "" ## 清理docker环境 colorEcho ${BLUE} "开始清理docker环境,卸载先前的相关安装内容!!" $CMD_REMOVE docker-ce docker-ce-cli containerd.io $CMD_REMOVE kubelet kubeadm kubectl colorEcho ${GREEN} "----------------- docker环境清理完成 -----------------" echo "" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" echo "" if [ "$LinuxReleaseVersion" = "centos" ]; then ## 安装docker的依赖 colorEcho ${BLUE} "正在下载安装docker的所需要的依赖" yum install -y -q --downloadonly --downloaddir=/tmp/docker-${DOCKER_VERSION}/depends yum-utils device-mapper-persistent-data lvm2 colorEcho ${GREEN} " 下载完成 " colorEcho ${GREEN} "查看已经下载的相关依赖安装包……" ls /tmp/docker-${DOCKER_VERSION}/depends/ colorEcho ${GREEN} "--------------------------------------------------------------" echo "" ## 添加docker的yum源 colorEcho ${BLUE} "正在添加docker的yum源…………" yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo if [[ -f /etc/yum.repos.d/docker-ce.repo ]]; then sed -i 's/download.docker.com/mirrors.ustc.edu.cn\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo colorEcho ${BLUE} "已成功添加中科大的docker-ce的yum源!" echo "" colorEcho ${BLUE} "可以安装的docker-ce的 $(echo ${DOCKER_VERSION} | cut -d"." -f1) 版本为:" colorEcho ${GREEN} "--------------------------------------------------------------" yum list docker-ce --showduplicates | grep $(echo ${DOCKER_VERSION} | cut -d"." -f1) | awk '{print$2}' | cut -d ":" -f2 | sort -n -t - -k 1.7 colorEcho ${GREEN} "--------------------------------------------------------------" echo "" yum install -y -q --downloadonly --downloaddir=/tmp/docker-${DOCKER_VERSION} docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} colorEcho ${GREEN} " 下载完成 " echo "" colorEcho ${GREEN} "查看已经下载的Docker安装包……" ls /tmp/docker-${DOCKER_VERSION}/ colorEcho ${GREEN} "--------------------------------------------------------------" echo "" else colorEcho ${RED} "docker的yum源添加失败,请手动添加" exit 1 fi elif [[ $LinuxReleaseVersion == "euler" ]]; then colorEcho ${BLUE} "清理Docker已经下载的依赖!" rm -rf /tmp/docker-${DOCKER_VERSION}/ colorEcho ${BLUE} "正在下载安装docker的所需要的依赖" yum install -y -q --downloadonly --downloaddir=/tmp/docker-${DOCKER_VERSION}/depends device-mapper-persistent-data lvm2 colorEcho ${GREEN} " 下载完成 " colorEcho ${GREEN} "查看已经下载的相关依赖安装包……" ls /tmp/docker-${DOCKER_VERSION}/depends/ colorEcho ${GREEN} "--------------------------------------------------------------" # https://download.docker.com/linux/static/stable/x86_64/ export DOCKER_VERSION=20.10.15 local dockerBaseUrl="https://download.docker.com/linux/static/stable/x86_64/" wget $dockerBaseUrl -O docker-version.html local realDockerVersion=$(cat docker-version.html | grep ${DOCKER_VERSION} | head -1 | cut -d '"' -f2) # wget ${dockerBaseUrl}containerd.io-1.6.15-3.1.el7.x86_64.rpm -P /tmp/docker-${DOCKER_VERSION}/ wget $dockerBaseUrl$realDockerVersion -P /tmp/docker-${DOCKER_VERSION}/ colorEcho ${BLUE} "开始现在特定docker版本的二进制文件!" colorEcho ${GREEN} " 下载完成 " echo "" colorEcho ${GREEN} "查看已经下载的Docker安装包……" ls /tmp/docker-${DOCKER_VERSION}/ colorEcho ${GREEN} "--------------------------------------------------------------" echo "" else colorEcho ${BLUE} "开始安装相关的Docker基础组件" installDemandSoftwares apt-transport-https ca-certificates curl gnupg-agent software-properties-common colorEcho ${BLUE} "开始添加中科大的docker源的apt-key" curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - colorEcho ${BLUE} "开始添加中科大的docker源的apt源" add-apt-repository \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) \ stable" # 国外的情况 # colorEcho ${BLUE} "开始添加中科大的docker源的apt-key" # curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # # colorEcho ${BLUE} "开始添加中科大的docker源的apt源" # echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ # $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null colorEcho ${BLUE} "正在执行更新操作!!" apt-get update colorEcho ${BLUE} "查看特定版本的Docker镜像!" colorEcho ${BLUE} "可以安装的docker-ce的 $(echo ${DOCKER_VERSION} | cut -d"." -f1) 版本为:" colorEcho ${GREEN} "--------------------------------------------------------------" apt-cache madison docker-ce | grep $(echo ${DOCKER_VERSION} | cut -d"." -f1) | awk '{print$3}' colorEcho ${BLUE} "开始下载 ${DOCKER_VERSION} 版本的离线安装包!" local dockerSpecific=$(apt-cache madison docker-ce | grep $(echo ${DOCKER_VERSION} | cut -d"." -f1) | awk '{print$3}' | grep ${DOCKER_VERSION}) # 需要获取其所依赖包的包 colorEcho $BLUE "开始解析依赖!" # export DOCKER_VERSION=20.10.15 # export dockerSpecific=$(apt-cache madison docker-ce | grep $(echo ${DOCKER_VERSION} | cut -d"." -f1) | awk '{print$3}' | grep ${DOCKER_VERSION} | head -1) colorEcho $BLUE "将要下载的docker版本为 docker-ce=${dockerSpecific} !" local dockerStaff=("docker-compose-plugin" "containerd.io" "docker-ce-cli" "docker-ce") local realdockerStaff=("docker-ce=${dockerSpecific}" "docker-ce-cli=${dockerSpecific}" "containerd.io" "docker-compose-plugin") echo "" mkdir -p /tmp/docker-${DOCKER_VERSION}/dep cd /tmp/docker-${DOCKER_VERSION}/dep colorEcho $BLUE "开始下载所有的依赖!" for staff in "${dockerStaff[@]}"; do colorEcho ${BLUE} "开始下载 ${staff} 的依赖!" apt download $(apt-rdepends ${staff} | grep -v "^ ") colorEcho ${GREEN} "下载完成!" done cd /tmp/docker-${DOCKER_VERSION}/ for staff in "${realdockerStaff[@]}"; do colorEcho ${BLUE} "开始下载 ${staff} !" apt download "$staff" colorEcho ${GREEN} "下载完成!" done colorEcho ${GREEN} " 下载完成 " echo "" colorEcho ${GREEN} "查看已经下载的Docker安装包……" ls /tmp/docker-${DOCKER_VERSION}/ colorEcho ${GREEN} "--------------------------------------------------------------" echo "" fi echo "" } ####################################### # description # Globals: # BLUE # CMD_REMOVE # DOCKER_VERSION # GREEN # LinuxReleaseVersion # PURPLE # Arguments: # None ####################################### installDockerOnline() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "准备 在线 安装 Docker…………" colorEcho ${GREEN} "--------------------------------------------------------------" colorEcho ${BLUE} "您选择安装的docker版本为:${DOCKER_VERSION}" echo "" ## 清理docker环境 colorEcho ${BLUE} "开始清理docker环境,卸载先前的相关安装内容!!" $CMD_REMOVE docker-ce docker-ce-cli containerd.io $CMD_REMOVE kubelet kubeadm kubectl colorEcho ${GREEN} "----------------- docker环境清理完成 -----------------" echo "" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" if [ "$LinuxReleaseVersion" = "ubuntu" ]; then colorEcho ${BLUE} "开始安装相关的Docker基础组件" installDemandSoftwares apt-transport-https ca-certificates curl gnupg-agent software-properties-common colorEcho ${BLUE} "开始添加中科大的docker源的apt-key" curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - colorEcho ${BLUE} "开始添加中科大的docker源的apt源" add-apt-repository \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) \ stable" colorEcho ${BLUE} "正在执行更新操作!!" apt-get update colorEcho ${BLUE} "查看特定版本的Docker镜像!" colorEcho ${BLUE} "可以安装的docker-ce的 $(echo ${DOCKER_VERSION} | cut -d"." -f1) 版本为:" colorEcho ${GREEN} "--------------------------------------------------------------" apt-cache madison docker-ce | grep $(echo ${DOCKER_VERSION} | cut -d"." -f1) | awk '{print$3}' colorEcho ${BLUE} "开始下载 ${DOCKER_VERSION} 版本的离线安装包!" local dockerSpecific=$(apt-cache madison docker-ce | grep $(echo ${DOCKER_VERSION} | cut -d"." -f1) | awk '{print$3}' | grep ${DOCKER_VERSION}) colorEcho $BLUE "将要下载的docker版本为 docker-ce=${dockerSpecific} !" installDemandSoftwares "docker-ce=${dockerSpecific}" "docker-ce-cli=${dockerSpecific}" "containerd.io" "docker-compose-plugin" fi colorEcho ${GREEN} " Docker安装完成 " colorEcho ${GREEN} " Docker安装完成 " colorEcho ${GREEN} " Docker安装完成 " colorEcho ${GREEN} "--------------------------------------------------------------" echo "" colorEcho ${BLUE} "正在启动docker的服务进程…………" systemctl enable docker.service systemctl start docker.service colorEcho ${BLUE} "等待docker的服务进程启动…………" sleep 3 colorEcho ${BLUE} "查看docker的服务进程运行状态…………" systemctl status docker.service -l | grep "active (running)" if [[ $? -eq 0 ]]; then colorEcho ${GREEN} " Docker 启动完成 " fi echo "" } ####################################### # description # Globals: # BLUE # DOCKER_VERSION # GREEN # PURPLE # PrivateServerIPs # RED # ip # Arguments: # None ####################################### distributeDocker() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始分发Docker的离线安装包…………" echo "" for ip in "${PrivateServerIPs[@]}"; do colorEcho ${BLUE} "清理主机 ${ip} 上的Docker残留" ssh root@${ip} "rm -rf /tmp/docker-${DOCKER_VERSION}" colorEcho ${BLUE} "正在将Docker的离线安装包分发至主机 ${ip} 上……" echo "yes yes " | scp -r /tmp/docker-${DOCKER_VERSION} root@${ip}:/tmp/docker-${DOCKER_VERSION} if [[ $? -eq 0 ]]; then colorEcho ${GREEN} "Docker离线安装包已经分发完成!" colorEcho ${GREEN} "----------------------------------------------------------" else colorEcho ${RED} "ERROR:Docker离线安装包 没有正常分发!!" colorEcho ${RED} "----------------------------------------------------------" fi done echo "" } # 能够联网的机器上 downloadGlusterFSHeketi() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始下载存储服务器相关的组件…………" colorEcho ${BLUE} "正在安装 gluster 源!" yum install centos-release-gluster -y if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "glusterfs的源添加完成…………" echo "" GlusterFSVersion=$(yum list glusterfs | grep "gluster" | awk '{print$2}') HeketiVersion=$(yum list heketi | grep "heketi" | awk '{print$2}') colorEcho ${BLUE} "开始下载 glusterFS的离线安装包!" colorEcho ${BLUE} " glusterFS的版本为: ${GlusterFSVersion}!!" colorEcho ${BLUE} " glusterFS的版本为: ${GlusterFSVersion}!!" yum install -y -q --downloadonly --downloaddir=/tmp/storage/ glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma glusterfs-geo-replication glusterfs-devel colorEcho ${GREEN} " 下载完成 " colorEcho ${BLUE} "开始下载 heketi 的离线安装包!" colorEcho ${BLUE} " heketi 的版本为 ${HeketiVersion}!!" colorEcho ${BLUE} " heketi 的版本为 ${HeketiVersion}!!" yum install -y -q --downloadonly --downloaddir=/tmp/storage/ hekeit heketi-client colorEcho ${GREEN} " 下载完成 " colorEcho ${GREEN} "查看已经下载的相关依赖安装包……" ls /tmp/storage/ colorEcho ${GREEN} "--------------------------------------------------------------" echo "" else colorEcho ${RED} "glusterfs的源添加失败!! 无法继续进行存储服务器的初始化" colorEcho ${RED} "glusterfs的源添加失败!! 无法继续进行存储服务器的初始化" colorEcho ${RED} "glusterfs的源添加失败!! 无法继续进行存储服务器的初始化" return 1 fi } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # RED # StorageServerIPs # ip # Arguments: # None ####################################### distributeGlusterFSHeketiRPMs() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始分发GlusterFSHeketi的离线安装包…………" echo "" for ip in "${StorageServerIPs[@]}"; do colorEcho ${BLUE} "正在将GlusterFS-Heketi的离线安装包分发至主机 ${ip} 上……" echo "yes yes " | scp -r /tmp/storage/ root@${ip}:/tmp/storage/ if [[ $? -eq 0 ]]; then colorEcho ${GREEN} "GlusterFS-Heketi 的离线安装包已经分发完成!" colorEcho ${GREEN} "----------------------------------------------------------" else colorEcho ${RED} "ERROR:GlusterFS-Heketi 离线安装包 没有正常分发!!" colorEcho ${RED} "----------------------------------------------------------" fi done echo "" } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # RED # StorageNodeNum # WhichNodeRun # Arguments: # None # Returns: # 1 ... ####################################### installGlusterFS() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始安装 存储服务 GlusterFS 的基础组件 的相关服务…………" echo "" if [ -d /tmp/storage ]; then ls /tmp/storage | grep -q gluster if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "检测到存储服务的离线安装包,开始执行安装过程!" yum install -y -q /tmp/storage/*.rpm if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "GlusterFS安装完成,开始启动服务!" systemctl start glusterd.service colorEcho ${BLUE} "------------------------------------------------------------" systemctl status glusterd.service colorEcho ${BLUE} "------------------------------------------------------------" systemctl enable glusterd.service echo "" echo "" colorEcho ${BLUE} "开始配置 GlusterFS,连接对方主机!" StorageNodeNum=$(echo ${WhichNodeRun} | cut -d"-" -f2) if [ "${StorageNodeNum}" -eq "1" ]; then colorEcho ${BLUE} "检测到当前主机为 Storage-1,请确保是否正确!" colorEcho ${BLUE} "检测到当前主机为 Storage-1,请确保是否正确!" colorEcho ${BLUE} "检测到当前主机为 Storage-1,请确保是否正确!" gluster peer probe storage-2 echo "" colorEcho ${BLUE} "glusterFS的节点状态为:" gluster peer status elif [ "${StorageNodeNum}" -eq "2" ]; then colorEcho ${BLUE} "检测到当前主机为 Storage-2,请确保是否正确!" colorEcho ${BLUE} "检测到当前主机为 Storage-2,请确保是否正确!" colorEcho ${BLUE} "检测到当前主机为 Storage-2,请确保是否正确!" gluster peer probe storage-1 echo "" colorEcho ${BLUE} "GlusterFS的节点状态为:" gluster peer status fi fi else colorEcho ${RED} "未检测到GlusterFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到GlusterFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到GlusterFS的基础安装包,程序将终止!!" return 1 fi fi } ####################################### # description # Globals: # BLUE # GREEN # HeketiConfigOfflineFile # HeketiOfficeFile # PURPLE # PrivateServerIPs # RED # YELLOW # input # ip # Arguments: # None ####################################### installHeketi() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始安装 存储服务 Heketi 的相关服务…………" echo "" ls /tmp/storage | grep heketi | grep -v heketi-client if [ "$?" -ne "0" ]; then colorEcho ${RED} "未检测到heketi的离线安装rpm包!!!" colorEcho ${RED} "未检测到heketi的离线安装rpm包!!!" echo "" colorEcho ${BLUE} "开始进行heketi的离线下载,安装过程!!!!" wget ${HeketiOfficeFile} -O heketi9-offline.tar.gz tar -zvxf heketi9-offline.tar.gz cd heketi pwd mv ./heketi /usr/bin/heketi mv ./heketi-cli /usr/bin/heketi-cli cd .. pwd echo "" colorEcho ${BLUE} "请检查heketi的命令是否输出正常!!" heketi --version colorEcho ${BLUE} "----------------------------------------------------" heketi-cli --version echo "" else colorEcho ${BLUE} "检测到heketi-server的离线安装包!" echo "" colorEcho ${BLUE} "按照道理目前的 heketi已经安装!!" colorEcho ${BLUE} "开始检测…………" echo "" fi if heketi --version &>/dev/null && heketi-cli --version &>/dev/null; then colorEcho ${GREEN} "检查到heketi已经安装成功!! 开始进行相关的配置。" echo "" colorEcho ${BLUE} "开始为heketi-server添加系统用户 heketi!" sudo groupadd --system heketi sudo useradd -s /sbin/nologin --system -g heketi heketi echo "" colorEcho ${BLUE} "开始创建 heketi-server 的配置、工作、日志目录" sudo mkdir -p /var/lib/heketi /etc/heketi /var/log/heketi echo "" colorEcho ${BLUE} "开始下载heketi的配置文件压缩包,heketi-config.tar.gz…" wget "${HeketiConfigOfflineFile}" -O /etc/heketi/heketi-config.tar.gz echo "" if [ -s /etc/heketi/heketi-config.tar.gz ]; then colorEcho ${GREEN} "heketi的配置文件压缩包下载成功!!!" tar -zxvf /etc/heketi/heketi-config.tar.gz echo "" fi colorEcho ${BLUE} "开始创建heketi的ssh key文件,使得heketi-server能够访问glusterfs的server" echo "y |" ssh-keygen -f /etc/heketi/heketi_key -t rsa -N '' chown heketi:heketi /etc/heketi/heketi_key* for ip in "${PrivateServerIPs[@]}"; do colorEcho ${BLUE} "请手动将如下的命令,以 root 权限在主机 ${ip} 上运行" colorEcho ${BLUE} "-----------------------------------------------" echo "" echo "" colorEcho ${RED} " 请以 root 角色 运行!!! " colorEcho ${RED} " 请以 root 角色 运行!!! " colorEcho ${RED} " 请以 root 角色 运行!!! " echo "" colorEcho ${YELLOW} 'sed -i -e "/PermitRootLogin no/ d" -e "$ a PermitRootLogin yes" /etc/ssh/sshd_config && systemctl restart sshd' echo "" colorEcho ${YELLOW} "echo \"$(cat /etc/heketi/heketi_key.pub)\" >> ~/.ssh/authorized_keys && echo \"\" && cat ~/.ssh/authorized_keys" echo "" echo "" while true; do colorEcho ${RED} "请确保您已经将上述的命令在主机${ip}上执行了!!" read -r -p "请输入yes进行确认,脚本才可继续运行!!" input case $input in yes) colorEcho ${GREEN} "您已确认在主机${ip}上添加了私有的ssh key!" echo "" break ;; *) echo "" colorEcho ${RED} "输入有误!!! 请输入 >> yes << 进行确认" colorEcho ${RED} "请在主机${ip}上执行上述命令!!!" colorEcho ${RED} "否则本脚本的功能会失效!!" colorEcho ${RED} "-----------------------------------------------------" echo "" ;; esac done done colorEcho ${GREEN} "heketi的密钥已经分发完毕!!" echo "" corlorEcho ${BLUE} "--------------------------------------------------------------" corlorEcho ${BLUE} "请根据主机实际的物理磁盘信息,修改相应的 device!" corlorEcho ${BLUE} "请根据主机实际的物理磁盘信息,修改相应的 device!" corlorEcho ${BLUE} "请根据主机实际的物理磁盘信息,修改相应的 device!" corlorEcho ${BLUE} "--------------------------------------------------------------" while true; do colorEcho ${RED} "请确保您已经新开终端界面并修改了topology.json文件!!!" read -r -p "请输入yes进行确认,脚本才可继续运行!!" input case $input in yes) colorEcho ${GREEN} "您已确认新开终端界面并修改了topology.json文件!!!!" echo "" break ;; *) echo "" colorEcho ${RED} "输入有误!!! 请输入 >> yes << 进行确认" colorEcho ${RED} "请确保您已经新开终端界面并修改了topology.json文件!!!" colorEcho ${RED} "否则本脚本的功能会失效!!" colorEcho ${RED} "-----------------------------------------------------" echo "" ;; esac done corlorEcho ${BLUE} "--------------------------------------------------------------" colorEcho ${BLUE} "修改所有的heketi-server目录的权限" chown -R heketi:heketi /var/lib/heketi /var/log/heketi /etc/heketi echo "" colorEcho ${BLUE} "重新加载Systemd并启动 Heketi service" cp /etc/heketi/heketi.service /usr/lib/systemd/system/heketi.service sudo systemctl daemon-reload sudo systemctl enable --now heketi echo "" colorEcho ${BLUE} "输出heketi-server的状态!!" systemctl status heketi -l fi } # 能够联网的机器上 downloadNFS() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始下载NFS相关的组件…………" echo "" # NFSVersion=$(yum list nfs-utils | grep "nfs" | awk '{print$2}') colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" echo "" if [ "$LinuxReleaseVersion" = "ubuntu" ]; then colorEcho ${BLUE} "开始下载 NFS的离线安装包!" apt-cache madison nfs-common | awk '{print$3}' # installDemandSoftwares nfs-kernel-server mkdir -p /tmp/storage/nfs/ mkdir -p /tmp/storage/rpc/ echo colorEcho ${BLUE} "需要下载的依赖为 ${libs}" colorEcho ${BLUE} "开始下载 NFS的离线安装包!" cd /tmp/storage/nfs colorEcho $BLUE "开始解析依赖!" colorEcho ${BLUE} "开始下载 NFS-Client 的离线安装包!" # ubuntu 20.04 使用如下的几项内容即可 # apt-get download keyutils libnfsidmap2 libtirpc-common libtirpc3 nfs-common rpcbind apt-get download $(apt-rdepends nfs-common | grep -v "^ ") colorEcho ${GREEN} " 下载完成 " colorEcho ${BLUE} "开始下载 NFS-Server 的离线安装包!" cd /tmp/storage/rpc # ubuntu 20.04 使用如下的几项内容即可 # apt-get download keyutils libnfsidmap2 libtirpc-common libtirpc3 nfs-common nfs-kernel-server rpcbind apt-get download $(apt-rdepends nfs-kernel-server | grep -v "^ ") colorEcho ${GREEN} " 下载完成 " echo "" else colorEcho ${BLUE} "开始下载 NFS的离线安装包!" # colorEcho ${BLUE} " NFS的版本为: ${NFSVersion}!!" yum install -y -q --downloadonly --downloaddir=/tmp/storage/nfs/ nfs-utils colorEcho ${GREEN} " 下载完成 " colorEcho ${BLUE} "开始下载 NFS-rpcbind的离线安装包!" # colorEcho ${BLUE} " NFS的版本为: ${NFSVersion}!!" yum install -y -q --downloadonly --downloaddir=/tmp/storage/rpc/ rpcbind colorEcho ${GREEN} " 下载完成 " fi colorEcho ${GREEN} "查看已经下载的相关依赖安装包……" ls /tmp/storage/nfs/ ls /tmp/storage/rpc/ colorEcho ${GREEN} "--------------------------------------------------------------" echo "" } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # RED # StorageServerIPs # ip # Arguments: # None ####################################### distributeNFS() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始分发NFS的离线安装包…………" echo "" for ip in "${StorageServerIPs[@]}"; do colorEcho ${BLUE} "正在将NFS的离线安装包分发至主机 ${ip} 上……" echo "yes yes " | scp -r /tmp/storage/ root@${ip}:/tmp/storage/ if [[ $? -eq 0 ]]; then colorEcho ${GREEN} "NFS的离线安装包已经分发完成!" colorEcho ${GREEN} "----------------------------------------------------------" else colorEcho ${RED} "ERROR:NFS 离线安装包 没有正常分发!!" colorEcho ${RED} "----------------------------------------------------------" fi done echo "" } ####################################### # description # Globals: # BLUE # GREEN # LinuxReleaseVersion # PURPLE # RED # Arguments: # None # Returns: # 1 ... ####################################### installNFS() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始安装 存储服务 NFS 的基础组件 的相关服务…………" echo "" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" echo "" if [ "$LinuxReleaseVersion" = "centos" ] || [ "$LinuxReleaseVersion" = "euler" ]; then if [ -d /tmp/storage/nfs/ ]; then ls /tmp/storage/nfs/ | grep -q nfs-utils if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "检测到存储服务的离线安装包,开始执行安装过程!" yum install -y -q /tmp/storage/nfs/*.rpm echo "" else colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" return 1 fi fi else ls /tmp/storage/nfs | grep -q "nfs-common" if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "检测到存储服务的离线安装包,开始执行安装过程!" dpkg -i /tmp/storage/nfs/*.deb echo "" else colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" return 1 fi fi colorEcho ${GREEN} "NFS安装完成,开始启动服务!" systemctl start nfs nfs-client nfs-common systemctl enable nfs nfs-client nfs-common colorEcho ${BLUE} "------------------------------------------------------------" systemctl status nfs nfs-client nfs-common -l | grep "active (running)" if [[ $? -eq 0 ]]; then colorEcho ${GREEN} " NFS-Client 启动完成 " fi colorEcho ${BLUE} "------------------------------------------------------------" echo "" } installNFSOnline(){ colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始安装 存储服务 NFS的基础组件 的相关服务…………" echo "" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" echo "" if [ "$LinuxReleaseVersion" = "ubuntu" ]; then installDemandSoftwares nfs-common nfs-client nfs fi colorEcho ${GREEN} "NFS安装完成,开始启动服务!" systemctl start nfs nfs-client nfs-common systemctl enable nfs nfs-client nfs-common colorEcho ${BLUE} "------------------------------------------------------------" systemctl status nfs nfs-client nfs-common -l | grep "active (running)" if [[ $? -eq 0 ]]; then colorEcho ${GREEN} " NFS-Client 启动完成 " fi colorEcho ${BLUE} "------------------------------------------------------------" echo "" } #nfs 服务端 installNFSServer() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始安装 存储服务 NFS 的基础组件 的相关服务…………" echo "" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" echo "" if [ "$LinuxReleaseVersion" = "centos" ]; then if [ -d /tmp/storage/nfs/ ]; then ls /tmp/storage/nfs/ | grep -q nfs-utils if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "检测到存储服务的离线安装包,开始执行安装过程!" yum install -y -q /tmp/storage/nfs/*.rpm if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "NFS安装完成,开始启动服务!" systemctl enable nfs systemctl start nfs colorEcho ${BLUE} "------------------------------------------------------------" systemctl status nfs -l | grep "active (running)" if [[ $? -eq 0 ]]; then colorEcho ${GREEN} " NFS-Client 启动完成 " fi colorEcho ${BLUE} "------------------------------------------------------------" echo "" fi else colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" return 1 fi fi if [ -d /tmp/storage/rpc/ ]; then ls /tmp/storage/rpc/ | grep -q rpcbind if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "检测到存储服务的离线安装包,开始执行安装过程!" yum install -y -q /tmp/storage/rpc/*.rpm if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "NFS-RPCBIND 安装完成,开始启动服务!" systemctl start rpcbind systemctl enable rpcbind colorEcho ${BLUE} "------------------------------------------------------------" systemctl status rpcbind -l | grep "active (running)" if [[ $? -eq 0 ]]; then colorEcho ${GREEN} " NFS-Server 启动完成 " fi colorEcho ${BLUE} "------------------------------------------------------------" echo "" fi else colorEcho ${RED} "未检测到NFS-RPCBIND的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS-RPCBIND的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS-RPCBIND的基础安装包,程序将终止!!" return 1 fi fi elif [[ $LinuxReleaseVersion == "euler" ]]; then if [ -d /tmp/storage/nfs/ ]; then ls /tmp/storage/nfs/ | grep -q nfs-utils if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "检测到存储服务的离线安装包,开始执行安装过程!" yum install -y -q /tmp/storage/nfs/*.rpm if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "NFS安装完成,开始启动服务!" systemctl enable nfs systemctl start nfs colorEcho ${BLUE} "------------------------------------------------------------" systemctl status nfs -l | grep "active (running)" if [[ $? -eq 0 ]]; then colorEcho ${GREEN} " NFS-Client 启动完成 " fi colorEcho ${BLUE} "------------------------------------------------------------" echo "" fi else colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" return 1 fi fi else colorEcho ${GREEN} "执行发行版为-- ${LinuxReleaseVersion} 的NFS-Server安装进程!" if [ -d /tmp/storage/nfs/ ]; then ls /tmp/storage/nfs/ | grep -q nfs-common if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "检测到存储服务的离线安装包,开始执行安装过程!" dpkg -i /tmp/storage/nfs/*.deb if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "NFS安装完成,开始启动服务!" systemctl start nfs systemctl enable nfs colorEcho ${BLUE} "------------------------------------------------------------" systemctl status nfs -l | grep "active (running)" if [[ $? -eq 0 ]]; then colorEcho ${GREEN} " NFS-Client 启动完成 " fi colorEcho ${BLUE} "------------------------------------------------------------" echo "" fi else colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS的基础安装包,程序将终止!!" return 1 fi fi if [ -d /tmp/storage/rpc/ ]; then ls /tmp/storage/rpc/ | grep -q server if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "检测到存储服务的离线安装包,开始执行安装过程!" dpkg -i /tmp/storage/rpc/*.deb if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "NFS-Server 安装完成,开始启动服务!" systemctl start nfs-server systemctl enable nfs-server colorEcho ${BLUE} "------------------------------------------------------------" systemctl status nfs-server -l | grep "active (running)" if [[ $? -eq 0 ]]; then colorEcho ${GREEN} " NFS-Server 启动完成 " fi colorEcho ${BLUE} "------------------------------------------------------------" echo "" fi else colorEcho ${RED} "未检测到NFS-RPCBIND的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS-RPCBIND的基础安装包,程序将终止!!" colorEcho ${RED} "未检测到NFS-RPCBIND的基础安装包,程序将终止!!" return 1 fi fi fi echo "" colorEcho ${BLUE} "开始创建NFS共享目录!" mkdir -p ${NfsPath} chmod 777 ${NfsPath} cat /etc/exports | grep ${NfsPath} -q if [[ $? -ne 0 ]]; then # exports文件中没有相关的额配置,才添加! echo "nfs config not exist ! 开始添加" echo "${NfsPath} *(rw,no_root_squash,no_all_squash,sync)" >>/etc/exports fi echo "" colorEcho ${BLUE} "开始重启nfs服务!" if [ "$LinuxReleaseVersion" = "centos" ]; then systemctl restart rpcbind && systemctl restart nfs else systemctl restart nfs-server && systemctl restart nfs fi echo "" echo "" colorEcho ${BLUE} "检查NFS的运行状况:" rpcinfo -p localhost colorEcho ${YELLOW} "------------------------------------------------------------" echo "" } installNFSServerOnline(){ colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始安装 存储服务 NFS-Server 的基础组件 的相关服务…………" echo "" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" echo "" if [ "$LinuxReleaseVersion" = "ubuntu" ]; then installDemandSoftwares nfs-kernel-server nfs-common fi echo "" colorEcho ${BLUE} "开始创建NFS共享目录!" mkdir -p ${NfsPath} chmod 777 ${NfsPath} cat /etc/exports | grep ${NfsPath} -q if [[ $? -ne 0 ]]; then # exports文件中没有相关的额配置,才添加! echo "nfs config not exist ! 开始添加" echo "${NfsPath} *(rw,no_root_squash,no_all_squash,sync)" >>/etc/exports fi echo "" colorEcho ${BLUE} "开始重启nfs服务!" if [ "$LinuxReleaseVersion" = "ubuntu" ]; then systemctl restart nfs-server && systemctl restart nfs else systemctl restart rpcbind && systemctl restart nfs fi echo "" echo "" colorEcho ${BLUE} "检查NFS的运行状况:" rpcinfo -p localhost colorEcho ${YELLOW} "------------------------------------------------------------" echo "" } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # ProxyOfflineFile # PublicServerIPs # RED # YELLOW # Arguments: # None # Returns: # 1 ... ####################################### installProxyServer() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始安装网络代理(v2ray)的相关服务…………" echo "" colorEcho ${BLUE} "开始从西云的对象存储下载离线安装包…………" colorEcho ${BLUE} "当前目录为 $(pwd),创建代理服务器的临时安装目录:" mkdir proxy_offline_install && cd ./proxy_offline_install wget "${ProxyOfflineFile}" -O proxy-offline.tar.gz if [ ! -s proxy-offline.tar.gz ]; then echo "" colorEcho ${RED} "代理服务器安装包下载失败!!!" colorEcho ${RED} "代理服务器安装包下载失败!!!" colorEcho ${RED} "代理服务器安装包下载失败!!!" return 1 fi colorEcho ${GREEN} " 下载完成 " tar -zxvf proxy-offline.tar.gz colorEcho ${GREEN} " 代理服务器离线安装包解压缩完成 " pwd chmod +x v2ray-install.sh colorEcho ${BLUE} "开始离线安装 网络代理(v2ray)服务器……" echo " " | ./v2ray-install.sh --local v2ray-linux-64_v4.32.1.zip echo "" colorEcho ${GREEN} "网络代理(v2ray v4.32.1)服务器已经安装成功!" colorEcho ${GREEN} "---------------------------------------------" echo "" colorEcho ${BLUE} "开始配置代理服务器的相关设置…………" sed -i "s/User=nobody/User=root/g" /etc/systemd/system/v2ray.service rm /usr/local/etc/v2ray/config.json cp ./config.json /usr/local/etc/v2ray/config.json colorEcho ${GREEN} " 配置完成 " cd .. pwd echo "" colorEcho ${BLUE} "正在开启代理服务器v2ray的服务程序……" systemctl daemon-reload && systemctl start v2ray colorEcho ${GREEN} " 服务启动配置完成 " echo "" colorEcho ${BLUE} "查看代理服务器v2ray的程序运行状态……" systemctl status v2ray -l | grep "Active: active (running)" if [ $? -ne 0 ]; then echo "" colorEcho ${RED} "代理服务器启动失败!!" colorEcho ${RED} "代理服务器启动失败!!" colorEcho ${RED} "代理服务器启动失败!!" colorEcho ${RED} "代理服务器启动失败!!" return 1 fi colorEcho ${BLUE} "正在设置v2ray的开机自启动……" systemctl enable v2ray colorEcho ${GREEN} " 开机自启动配置完成 " colorEcho ${GREEN} "--------------------------------------------------------------" echo "" colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "------------下面是代理服务器的使用方法说明------------" colorEcho ${BLUE} "------------下面是代理服务器的使用方法说明------------" colorEcho ${YELLOW} "------------------------------------------------------------" colorEcho ${BLUE} "请确保当前主机能够访问公网!!!!" colorEcho ${BLUE} "在需要使用代理上网的服务器上输入如下的命令:" echo "" echo "" colorEcho ${YELLOW} " export http_proxy=http://${PublicServerIPs}:12333 && export https_proxy=http://${PublicServerIPs}:12333 " echo "" echo "" colorEcho ${YELLOW} "------------------------------------------------------------" colorEcho ${BLUE} "------------上面是代理服务器的使用方法说明------------" colorEcho ${BLUE} "------------上面是代理服务器的使用方法说明------------" echo "" echo "" } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # Arguments: # None ####################################### modifySystemNetworkProxy() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始配置系统网络代理…………" colorEcho ${GREEN} "--------------------------------------------------------------" echo "" addYumProxy addShellProxy # addDockerProxy } ####################################### # description # Globals: # BLUE # GREEN # PublicServerIPs # Arguments: # None # Returns: # 1 ... ####################################### addYumProxy() { colorEcho ${BLUE} "开始配置yum包管理工具的网络代理…………" cat /etc/yum.conf | grep "http_proxy="http://"${PublicServerIPs}":12333"" if [ $? -eq 0 ]; then colorEcho ${BLUE} "检测到yum的代理已经添加,跳过!" return 1 fi sed -i "$ a http_proxy="http://"${PublicServerIPs}":12333"" /etc/yum.conf sed -i "$ a https_proxy="http://"${PublicServerIPs}":12333"" /etc/yum.conf if [ $? -eq 0 ]; then colorEcho ${GREEN} "yum源代理配置修改完成! 目前yum命令可以通过master 节点代理上网" echo "" fi } ####################################### # description # Globals: # BLUE # GREEN # PublicServerIPs # http_proxy # https_proxy # Arguments: # None # Returns: # 1 ... ####################################### addShellProxy() { colorEcho ${BLUE} "开始配置shell终端的网络代理…………" export http_proxy=http://${PublicServerIPs}:12333 && export https_proxy=http://${PublicServerIPs}:12333 cat /etc/profile | grep "http_proxy="http://"${PublicServerIPs}":12333"" if [ $? -eq 0 ]; then colorEcho ${BLUE} "检测到shell的代理已经添加,跳过!" return 1 fi sed -i "$ a export http_proxy="http://"${PublicServerIPs}":12333"" /etc/profile sed -i "$ a export https_proxy="http://"${PublicServerIPs}":12333"" /etc/profile if [ -a ~/.bashrc ]; then colorEcho ${BLUE} "检测到bash shell存在,开始配置其代理。。" cat ~/.bashrc | grep "http_proxy="http://"${PublicServerIPs}":12333"" if [ $? -eq 0 ]; then colorEcho ${BLUE} "检测到shell的代理已经添加,跳过!" return 1 fi sed -i "$ a export http_proxy="http://"${PublicServerIPs}":12333"" ~/.bashrc sed -i "$ a export https_proxy="http://"${PublicServerIPs}":12333"" ~/.bashrc fi if [ -a ~/.profile ]; then colorEcho ${BLUE} "检测到~/.profile存在,开始配置其代理。。" cat ~/.profile | grep "http_proxy="http://"${PublicServerIPs}":12333"" if [ $? -eq 0 ]; then colorEcho ${BLUE} "检测到shell的代理已经添加,跳过!" return 1 fi sed -i "$ a export http_proxy="http://"${PublicServerIPs}":12333"" ~/.profile sed -i "$ a export https_proxy="http://"${PublicServerIPs}":12333"" ~/.profile fi if [ -a ~/.zshrc ]; then colorEcho ${BLUE} "检测到zsh shell存在,开始配置其代理。。" cat ~/.zshrc | grep "http_proxy="http://"${PublicServerIPs}":12333"" if [ $? -eq 0 ]; then colorEcho ${BLUE} "检测到shell的代理已经添加,跳过!" return 1 fi sed -i "$ a export http_proxy="http://"${PublicServerIPs}":12333"" ~/.zshrc sed -i "$ a export https_proxy="http://"${PublicServerIPs}":12333"" ~/.zshrc fi if [ $? -eq 0 ]; then colorEcho ${GREEN} "shell的代理配置修改完成! 目前curl wget等命令可以通过master节点代理上网" echo "" fi } ####################################### # description # Globals: # BLUE # DOCKER_VERSION # GREEN # LinuxReleaseVersion # MAINPID # PURPLE # YELLOW # Arguments: # None ####################################### installDocker() { ### 国内的环境 ### ### 依赖colorEcho colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始安装Docker的相关服务…………" colorEcho ${GREEN} "--------------------------------------------------------------" colorEcho ${BLUE} "您选择安装的docker版本为:${DOCKER_VERSION}" echo "" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion}!!" echo "" if [ "$LinuxReleaseVersion" = "centos" ]; then colorEcho ${BLUE} "正在安装安装docker的所需要的依赖…………" colorEcho ${YELLOW} "----------------------------------------------------------------------" ls /tmp/docker-${DOCKER_VERSION}/depends/ colorEcho ${YELLOW} "----------------------------------------------------------------------" echo "" yum install -y -q /tmp/docker-${DOCKER_VERSION}/depends/*.rpm colorEcho ${GREEN} " 安装完成 " colorEcho ${GREEN} "--------------------------------------------------------------" echo "" colorEcho ${GREEN} "开始安装docker-ce,版本为${DOCKER_VERSION}" colorEcho ${YELLOW} "----------------------------------------------------------------------" ls /tmp/docker-${DOCKER_VERSION}/ colorEcho ${YELLOW} "----------------------------------------------------------------------" echo "" yum install -y -q /tmp/docker-${DOCKER_VERSION}/*.rpm elif [ "$LinuxReleaseVersion" = "euler" ]; then colorEcho ${GREEN} "开始安装docker-ce,版本为${DOCKER_VERSION}" colorEcho ${YELLOW} "----------------------------------------------------------------------" tar -zxvf /tmp/docker-${DOCKER_VERSION}/docker-${DOCKER_VERSION}.tgz cp docker/* /usr/bin cat >/etc/systemd/system/docker.service </etc/sysctl.d/k8s.conf </dev/null if [[ $? -eq 0 ]]; then colorEcho ${GREEN} "docker-compose安装成功!!版本为$(docker-compose --version | cut -d" " -f3)尽情享用" else ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose fi else colorEcho ${RED} "docker-compose文件下载失败!! 无法访问github的资源。。" colorEcho ${RED} "请手动下载docker-compose的安装文件!" fi } ####################################### # description # Globals: # BLUE # PURPLE # Arguments: # None ####################################### downloadKubectlMinio() { echo "" colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} " 本部分应该在master节点上执行!………" colorEcho ${BLUE} " 开始下载minio集群的安装初始化工具 ………" sudo wget https://github.com/minio/operator/releases/download/v4.4.13/kubectl-minio_4.4.13_linux_amd64 \ -O /usr/bin/kubectl-minio sudo chmod +x /usr/bin/kubectl-minio colorEcho ${BLUE} "请确保在需要安装 minio的服务器上创建好了目录!" colorEcho ${BLUE} "请确保在需要安装 minio的服务器上创建好了目录!" # 2. 初始化 minio 部署工具 kubectl minio init } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # RED # i # input # Arguments: # None # Returns: # 1 ... ####################################### buildDirectoryForMinio() { echo "" colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} " 本部分应该在 安装minio集群的 节点上执行!………" colorEcho ${BLUE} "开始 为MINIO服务器创建目录…………" while true; do colorEcho ${BLUE} "运行到此处,说明,您选择了一个pv挂载4目录的形式!" colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${RED} "请确保您已经 手动初始化磁盘pv,并将其挂在至 /data 目录!" read -r -p "请输入yes进行确认,脚本才可继续运行!!" input case $input in yes) colorEcho ${GREEN} "您已确认 手动初始化磁盘pv,并将其挂在至 /data 目录!" echo "" break ;; *) echo "" colorEcho ${RED} "输入有误!!! 请输入 >> yes << 进行确认" colorEcho ${RED} "请确保您已经 手动初始化磁盘pv,并将其挂在至 /data 目录!" colorEcho ${RED} "否则本脚本的功能会失效!!" colorEcho ${RED} "-----------------------------------------------------" echo "" ;; esac done # 向下兼容 适应8pod或者4pod的情况 for i in {1..8}; do mkdir -p /data/minio-pv/pv${i} if [ -d "/data/minio-pv/pv${i}" ]; then echo "yes" else return 1 fi echo "" done colorEcho ${GREEN} "Minio的目录均已创建完成!!" } ####################################### # description # Globals: # BLUE # PURPLE # Arguments: # None ####################################### buildPVForMinio() { echo "" colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始 为MINIO服务器 初始化磁盘pv,创建整PV的存储…………" echo "此部分功能暂时掠过!" } ####################################### # description # Globals: # BLUE # PURPLE # RED # Arguments: # None # Returns: # $? ... # 1 ... ####################################### installZSH() { colorEcho ${PURPLE} "--------------------------------------------------------------" colorEcho ${BLUE} "开始安装宇宙第一shell的相关服务…………" installDemandSoftwares zsh git || return $? # 脚本会自动更换默认的shell # echo y | sh -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/robbyrussell/oh-my-zsh@master/tools/install.sh)" wget https://cdn.jsdelivr.net/gh/robbyrussell/oh-my-zsh@master/tools/install.sh -O zsh-install.sh # sed -i "s/github.com/github.com.cnpmjs.org/g" zsh-install.sh # if [ $? -eq 0 ]; then # colorEcho ${GREEN} "zsh仓库地址替换完成,已更换为国内的下载加速镜像" # fi chmod +x zsh-install.sh colorEcho ${BLUE} "开始执行zsh的安装过程!!" echo y | sh -c "./zsh-install.sh" if [ "$(ls -A /root/.oh-my-zsh | wc -w)" -eq "0" ]; then echo "" colorEcho ${RED} "zsh下载失败!!跳过安装步骤!" echo "" return 1 fi echo "" } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # RED # i # Arguments: # None ####################################### modifyZSH() { colorEcho ${PURPLE} "---------------------------------------------------------------------------" colorEcho ${GREEN} "zsh应该已经安装成功!!!" colorEcho ${BLUE} "开始修改zsh的相关配置信息,使其更加好用…………" echo "" cat >~/oh-my-zsh-plugins-list.txt <自动提示< 插件…………" git clone https://github.com.cnpmjs.org/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/plugins/zsh-autosuggestions echo "" colorEcho ${BLUE} "开始从GitHub下载 >命令高亮< 插件…………" git clone https://github.com.cnpmjs.org/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/plugins/zsh-syntax-highlighting echo "" colorEcho ${BLUE} "开始从JSDeliver下载另外一些插件…………" wget -c -i ~/oh-my-zsh-plugins-list.txt -P ~/.oh-my-zsh/plugins/ echo "" colorEcho ${PURPLE} "---------------------------------------------------------------------------" colorEcho ${GREEN} "插件已经下载完毕,现在开始修改zsh的配置文件…………" echo "" sed -i "s/robbyrussell/agnoster/g" ~/.zshrc sed -i 's/^# DISABLE_AUTO_UPDATE="true"/DISABLE_AUTO_UPDATE="true"/g' ~/.zshrc sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions zsh-syntax-highlighting command-not-found z themes)/g' ~/.zshrc colorEcho ${GREEN} "请检查当前zsh的插件开启情况:" colorEcho ${GREEN} "------------------------------------------" cat ~/.zshrc | grep "plugins=" | grep -v "\#" cat ~/.zshrc | grep "plugins=" | grep -v "\#" cat ~/.zshrc | grep "plugins=" | grep -v "\#" colorEcho ${GREEN} "------------------------------------------" echo "" echo "----------------------------------------------------" echo "这里的错误输出无需在意" source /root/.zshrc echo "这里的错误输出无需在意" echo "----------------------------------------------------" if [[ $? -eq 0 ]]; then colorEcho ${BLUE} "开始修改默认shell为zsh……" for i in {6..1..-1}; do colorEcho ${BLUE} "倒计时开始 ->> $i 秒 <<-,准备切换shell,上文的日志输出将会消失!!" sleep 2 done chsh -s /bin/zsh zsh else colorEcho ${RED} "zsh 安装失败,大概率是已经安装!!小概率是无法连接GitHub服务器~~" fi colorEcho ${GREEN} "zsh 安装成功,已更换主题,禁止更新,尽情享用~~~" colorEcho ${GREEN} "-----------------------------------------------------------------------------" colorEcho ${PURPLE} "宇宙第一shell的zsh已经安装成功了!!!" colorEcho ${GREEN} "宇宙第一shell的zsh已经安装成功了!!!" colorEcho ${BLUE} "宇宙第一shell的zsh已经安装成功了!!!" colorEcho ${GREEN} "-----------------------------------------------------------------------------" echo "" } # 修改docker的国内加速镜像 changeDockerRegisterMirror() { colorEcho ${PURPLE} "---------------------------------------------------------------------------------" colorEcho ${BLUE} "开始配置docker的(加速+私有)镜像…………" echo "" if [[ -e /etc/docker/daemon.json ]]; then colorEcho ${BLUE} "已经存在docker的daemon文件。。" mv /etc/docker/daemon.json /etc/docker/daemon.backup.json colorEcho ${GREEN} "已经将daemon文件备份" fi colorEcho ${BLUE} "正在写入docker的daemon配置文件……" cat >>/etc/docker/daemon.json <>/etc/systemd/system/docker.service.d/http-proxy.conf <>~/.docker/config.json </dev/null colorEcho ${BLUE} "开始添加Nginx的apt源!" echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list colorEcho ${BLUE} "开始更新apt源" sudo apt update echo "" colorEcho ${BLUE} "查看所有可以安装的nginx版本" apt-cache madison nginx | awk '{print$3}' echo "" echo "" colorEcho ${BLUE} "开始安装最新版本的nginx" sudo apt install "nginx=$(apt-cache madison nginx | awk '{print$3}' | head -1)" fi systemctl status nginx systemctl start nginx if [ "$?" -eq "0" ]; then colorEcho ${GREEN} "nginx安装完成!已成功运行!" fi } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # YELLOW # body_bytes_sent # http_referer # http_upgrade # http_user_agent # http_x_forwarded_for # proxy_add_x_forwarded_for # remote_addr # remote_user # request # status # time_local # Arguments: # None ####################################### modifyNginx() { colorEcho ${PURPLE} "---------------------------------------------------------------------------------" colorEcho ${BLUE} "开始安装Nginx作为对面暴露面…………" echo "" colorEcho ${BLUE} "开始配置nginx的总配置文件!!" cat >/etc/nginx/nginx.conf </etc/nginx/conf.d/real-public-nginx.conf </dev/null if [[ $? -ne 0 ]]; then colorEcho ${RED} "检测到docker-compose未安装!! Harbor服务器的安装过程将中断!!" colorEcho ${RED} "检测到docker-compose未安装!! Harbor服务器的安装过程将中断!!" colorEcho ${RED} "检测到docker-compose未安装!! Harbor服务器的安装过程将中断!!" return 1 fi echo "" if [[ $OSSPublicURL == "" ]]; then colorEcho ${BLUE} "未指定harbor镜像仓库的离线安装包下载地址!!" colorEcho ${BLUE} "开始从GitHub下载 harbor的离线安装包!!" echo "" wget --no-check-certificate https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz else colorEcho ${BLUE} "已经指定harbor镜像仓库的离线安装包下载地址!!" wget --no-check-certificate "${HarborOfflineFile}" -O harbor-offline-installer-v2.1.0.tgz fi if [ ! -s harbor-offline-installer-v2.1.0.tgz ]; then colorEcho ${RED} "harbor离线安装包下载失败! 跳过Harbor安装过程!" return 1 fi colorEcho ${GREEN} "---------------离线安装包下载完成!!----------------" echo "" colorEcho ${BLUE} "开始解压缩harbor的离线安装包!!" tar xvf harbor-offline-installer-v2.1.0.tgz colorEcho ${GREEN} "---------------解压缩完成!!---------------" echo "" colorEcho ${BLUE} "开始配置harbor仓库的相关设置!!" rm ./harbor/harbor.yml cat >>./harbor/harbor.yml < ${RKESystemImages} <上下载RKE系统镜像!!" echo "" fi } #downloadChrony(){ # colorEcho ${PURPLE} "--------------------------------------------------------------" # colorEcho ${BLUE} "准备下载 Chrony 的离线安装包…………" # colorEcho ${GREEN} "--------------------------------------------------------------" # echo "" # # # mkdir /tmp/chrony # cd /tmp/chrony # # command_exists apt-rdepends # if [ "$?" -eq "0" ]; then # let staff=chrony # colorEcho ${BLUE} "开始下载 ${staff} 的依赖!" # apt download $(apt-rdepends ${staff} | grep -v "^ ") # colorEcho ${GREEN} "下载完成!" # else # colorEcho ${RED} "依赖检测工具不存在!" # apt-get download libnss-systemd libpam-systemd libsystemd0 systemd systemd-sysv chrony # fi # #} # 使用chrony进行NTP时间同步 TimeSyncToNTPByChrony() { colorEcho ${PURPLE} "---------------------------------------------------------------------------------" colorEcho ${BLUE} "开始使用 chrony 工具进行时间同步…………" colorEcho ${GREEN} "----------------------------------------------------------------------------------" echo "" colorEcho ${BLUE} "开始安装chrony工具……" installDemandSoftwares chrony || return $? colorEcho ${GREEN} " 安装完成 " # 这里使用的是 默认的NTP源,又不是不能用,为啥要换啊。 colorEcho ${BLUE} "开始启动并开启开机启动chrony……" systemctl enable chronyd && systemctl start chronyd colorEcho ${BLUE} "开始配置chrony……" suffixIP=$(echo ${PublicServerIPs[0]} | cut -d "." -f1-2) internalCIDR=$(echo "${suffixIP}.0.0/16") if [[ ${LinuxReleaseVersion} == "centos" ]]; then local chronyFile=/etc/chrony.conf else local chronyFile=/etc/chrony/chrony.conf fi # sed -i "/^#allow 192.168.0.0\/16/ a allow ${internalCIDR}" ${chronyFile} sed -i "$ a allow ${internalCIDR}" ${chronyFile} sed -i "s/server 0.centos.pool.ntp.org iburst/server ntp2.aliyun.com iburst/g" ${chronyFile} colorEcho ${BLUE} "开始重启chrony server服务!" systemctl restart chronyd echo "" systemctl status chronyd -l | grep "active (running)" -q if [[ $? -eq 0 ]]; then chronyc -n sources -v chronyc tracking colorEcho ${GREEN} "时间同步配置完成,已与阿里云进行时间同步!!" colorEcho ${GREEN} "NTP同步时间完成。现在时间为:" colorEcho ${GREEN} "--------------------------------------------------" colorEcho ${PURPLE} "$(date -R)" colorEcho ${GREEN} "--------------------------------------------------" else colorEcho ${RED} "时间同步服务器启动失败!!" colorEcho ${RED} "时间同步服务器启动失败!!" colorEcho ${RED} "时间同步服务器启动失败!!" return 1 fi changeTimeZoneAndNTP } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # PublicServerIPs # RED # Arguments: # None # Returns: # $? ... # 1 ... ####################################### modifyChronySyncToMaster() { colorEcho ${PURPLE} "---------------------------------------------------------------------------------" colorEcho ${BLUE} "开始配置 chrony 时间同步至master节点…………" colorEcho ${GREEN} "----------------------------------------------------------------------------------" echo "" colorEcho ${BLUE} "开始安装chrony工具……" installDemandSoftwares chrony || return $? colorEcho ${GREEN} " 安装完成 " colorEcho ${BLUE} "开始启动并开启开机启动chrony……" systemctl enable chronyd && systemctl start chronyd colorEcho ${BLUE} "开始配置chrony……" sed -i "s/server 0.centos.pool.ntp.org iburst/server ${PublicServerIPs} minpoll 4 maxpoll 10 iburst/g" /etc/chrony.conf systemctl restart chronyd systemctl status chronyd -l | grep "active (running)" if [[ $? -eq 0 ]]; then chronyc -n sources -v chronyc tracking colorEcho ${GREEN} "时间同步配置完成,已与Master节点 ${PublicServerIPs} 进行时间同步!!" colorEcho ${GREEN} "NTP同步时间完成。现在时间为:" colorEcho ${GREEN} "--------------------------------------------------" colorEcho ${PURPLE} "$(date -R)" colorEcho ${GREEN} "--------------------------------------------------" else colorEcho ${RED} "时间同步服务器启动失败!!" colorEcho ${RED} "时间同步服务器启动失败!!" colorEcho ${RED} "时间同步服务器启动失败!!" return 1 fi changeTimeZoneAndNTP } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # PublicServerIPs # RED # YELLOW # Arguments: # None # Returns: # 23 ... ####################################### modifyTimeSyncdToMasterUbuntu() { colorEcho ${PURPLE} "---------------------------------------------------------------------------------" colorEcho ${BLUE} "开始配置 timesyncd 时间同步至master节点…………" colorEcho ${GREEN} "----------------------------------------------------------------------------------" echo "" colorEcho ${BLUE} "开始修改配置文件,时间同步到 Master节点!" sed -i "$ a NTP=${PublicServerIPs}" /etc/systemd/timesyncd.conf systemctl daemon-reload systemctl restart systemd-timesyncd.service systemctl status systemd-timesyncd.service -l | grep "active (running)" if [[ $? -eq 0 ]]; then colorEcho $GREEN "时间同步客户端正在正常运行!" colorEcho ${YELLOW} "------------------------------------------------" timedatectl show-timesync --all echo "" colorEcho ${YELLOW} "------------------------------------------------" timedatectl status echo "" colorEcho ${YELLOW} "------------------------------------------------" else colorEcho ${RED} "时间同步服务器安装失败! 请检查原因" return 23 fi } ####################################### # description # Globals: # BLUE # GREEN # PURPLE # RED # Arguments: # None ####################################### changeTimeZoneAndNTP() { colorEcho ${PURPLE} "---------------------------------------------------------------------------------" colorEcho ${BLUE} "开始使用 timedatectl 工具进行时间同步…………" colorEcho ${GREEN} "----------------------------------------------------------------------------------" echo "" if [[ -n $(command -v timedatectl) ]]; then colorEcho ${BLUE} "检测到工具存在,正在设置时间和时区为 上海(UTC+8)时间" timedatectl set-timezone Asia/Shanghai && timedatectl set-ntp true colorEcho ${GREEN} "同步时间完成。现在时间为:" colorEcho ${GREEN} "--------------------------------------------------" colorEcho ${PURPLE} "$(date -R)" colorEcho ${GREEN} "--------------------------------------------------" colorEcho ${BLUE} "开始重启系统日志服务,使得系统日志的时间戳也立即生效" systemctl restart rsyslog colorEcho ${GREEN} " 重启完成 " else colorEcho ${RED} "timedatectl 工具不存在,时间同步失败!! 请手动更换时间!" fi colorEcho ${GREEN} "----------------------------------------------------------------------------------" echo "" } ## 为了本脚本能够满足Ubuntu系统,做出设当的更改 commonToolInstall() { colorEcho ${PURPLE} "---------------------------------------------------------------------------------" colorEcho ${BLUE} "开始进行Linux常用工具的安装过程…………" colorEcho ${GREEN} "--------------------------------------------------" echo "" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion} !!" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion} !!" colorEcho ${GREEN} "当前系统的发行版为-- ${LinuxReleaseVersion} !!" echo "" if [[ ${LinuxReleaseVersion} == "centos" ]] || [[ ${LinuxReleaseVersion} == "euler" ]]; then centosCommonTool=(deltarpm net-tools iputils bind-utils lsof curl wget vim mtr htop screen unzip git openssl iftop) installDemandSoftwares "${centosCommonTool[@]}" elif [[ ${LinuxReleaseVersion} == "ubuntu" ]] || [[ ${LinuxReleaseVersion} == "debian" ]]; then ubuntuCommonTool=(iputils-ping net-tools dnsutils lsof curl wget mtr-tiny vim htop screen git apt-rdepends nethogs iftop) installDemandSoftwares "${ubuntuCommonTool[@]}" fi } ####################################### # description # Arguments: # None # Returns: # $? ... ####################################### main() { installHarbor || return $? installNginx modifyNginx installZSH || return $? modifyZSH || return $? } ####################################### # description # Arguments: # None # Returns: # $? ... ####################################### HarborServer() { # 当harbor位于k8s-master节点相同时 check_root check_sys disableSwap shutdownFirewall modifySystemConfig commonToolInstall # installHelm TimeSyncToNTPByChrony || return $? changeTimeZoneAndNTP || return $? # installProxyServer || return $? generateSSHKey || return $? # downloadDocker || return $? # distributeDocker || return $? # installDocker || return $? # installDockerCompose || return $? installDockerOnline || return $? # downloadNFS || return $? # distributeNFS || return $? # installNFSServer || return $? installNFSServerOnline || return $? installHarbor || return $? installNginx modifyNginx installZSH || return $? modifyZSH || return $? } ####################################### # description # Arguments: # None # Returns: # $? ... ####################################### WorkerServer() { check_root check_sys disableSwap shutdownFirewall modifySystemConfig modifyTimeSyncdToMasterUbuntu # changeTimeZoneAndNTP || return $? # installDocker || return $? installDockerOnline installNFSOnline changeDockerRegisterMirror } ####################################### # description # Globals: # MinioStorageType # Arguments: # None # Returns: # $? ... ####################################### MinioServer() { check_root addYumProxy addShellProxy check_sys disableSwap shutdownFirewall modifySystemConfig # changeTimeZoneAndNTP || return $? modifyChronySyncToMaster installDocker || return $? changeDockerRegisterMirror addDockerProxy if [[ ${MinioStorageType} -eq "pv" ]]; then buildPVForMinio else buildDirectoryForMinio fi } ####################################### # description # Arguments: # None # Returns: # $? ... ####################################### HeketiServer() { check_root addYumProxy addShellProxy check_sys disableSwap shutdownFirewall modifySystemConfig modifyChronySyncToMaster || return $? installGlusterFS || return $? installHeketi || return $? } ####################################### # description # Arguments: # None # Returns: # $? ... ####################################### GlusterServer() { check_root addYumProxy addShellProxy check_sys disableSwap shutdownFirewall modifySystemConfig modifyChronySyncToMaster || return $? installGlusterFS || return $? } ${WhichNodeRun}