From 102f043204f82e20cdac5a2de956ae2b3b7c70bf Mon Sep 17 00:00:00 2001 From: zeaslity Date: Wed, 21 Jun 2023 09:25:08 +0800 Subject: [PATCH] [ Executor ] add base sehll script --- agent-go/executor/script/1_node_important.sh | 2016 ++++++++++++++++++ 1 file changed, 2016 insertions(+) create mode 100644 agent-go/executor/script/1_node_important.sh diff --git a/agent-go/executor/script/1_node_important.sh b/agent-go/executor/script/1_node_important.sh new file mode 100644 index 0000000..3d879b2 --- /dev/null +++ b/agent-go/executor/script/1_node_important.sh @@ -0,0 +1,2016 @@ +#!/bin/bash +# bashsupport disable=BP2001 + +# 本脚本可以一键初始化Linux服务器的环境 +# 为rancher的自动部署k8s做准备 + +# 确定在哪个节点上运行此脚本,请按照如下的的顺序运行 +# HarborServer +# WorkerServer +# MinioServer +# GlusterServer (Storage-2上执行) +# HeketiServer (Storage-1上执行) + +### 需要修改以下的内容 ### +### 需要修改以下的内容 ### +### 需要修改以下的内容 ### + +WhichNodeRun=main +DOCKER_VERSION=20.10.15 # docker的版本,一般不修改 +HarborHostName=192.168.0.8 # 需要确保此IP能够被内网服务器访问,一般为公网服务器的外网IP +HarborHostPort=8033 # harbor服务器的端口,一般不修改 +HarborAdminPass=V2ryStr@ngPss # harbor服务器管理员密码,一般不修改 +PublicServerIPs=(192.168.0.8) # 需要修改为能够访问公网的服务器IP, 内网IP地址 +PrivateServerIPs=(192.168.0.65 192.168.0.45 192.168.0.7) # 内网服务器的IP地址,不包括可以访问公网IP的服务器 +StorageServerIPs=(192.168.0.2) # 存储服务器的IP地址,默认在第一台上安装heketi,默认第一台作为NFS服务端 +NfsPath=/nfsdata # nfs路径,需要事先创建并进行文件夹赋权 +MinioStorageType=volume # 选项:volume 或者 pv Minio集群底层的存储方式,使用4PV还是使用 1PV-4Volume的形式 +OSSPublicURL=https://oss2.demo.uavcmlc.com:18000/wangdada/ # 可以不配置,会从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" +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 +} + +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" + else + LinuxReleaseVersion="" + fi + + # 判断系统的包管理工具 apt, yum, or zypper + getPackageManageTool() { + if [[ -n $(command -v apt-get) ]]; then + CMD_INSTALL="apt-get -y -qq 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 +} + +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 "" +} + +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 "" + 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 "" +} + +downloadDocker() { + colorEcho ${PURPLE} "--------------------------------------------------------------" + colorEcho ${BLUE} "准备下载Docker的离线安装包…………" + colorEcho ${GREEN} "--------------------------------------------------------------" + colorEcho ${BLUE} "您选择安装的docker版本为:${DOCKER_VERSION}" + echo "" + + ## 清理docker环境 + colorEcho ${BLUE} "开始清理docker环境,卸载先前的相关安装内容!!" + $CMD_REMOVE docker docker-client docker-client-latest docker-ce-cli \ + docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux \ + docker-engine 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 + 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} 版本的离线安装包!" + 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) + + apt-get install "docker-ce=${dockerSpecific}" "docker-ce-cli=${dockerSpecific}" "containerd.io" "docker-compose-plugin" + + mkdir -p /tmp/docker-${DOCKER_VERSION} + cd /tmp/docker-${DOCKER_VERSION} + colorEcho $BLUE "开始下载所有的依赖!" + for staff in "${dockerStaff[@]}"; do + colorEcho ${BLUE} "开始下载 ${staff} 的依赖!" + apt download $(apt-rdepends ${staff} | grep -v "^ ") + colorEcho ${GREEN} "下载完成!" + done + + # apt-get download $libs + colorEcho ${GREEN} " 下载完成 " + echo "" + colorEcho ${GREEN} "查看已经下载的Docker安装包……" + ls /tmp/docker-${DOCKER_VERSION}/ + colorEcho ${GREEN} "--------------------------------------------------------------" + echo "" + fi + echo "" +} + +distributeDocker() { + colorEcho ${PURPLE} "--------------------------------------------------------------" + colorEcho ${BLUE} "开始分发Docker的离线安装包…………" + echo "" + + for ip in "${PrivateServerIPs[@]}"; do + 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 + +} + +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 "" +} + +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 +} + +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" = "centos" ]; then + 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} " 下载完成 " + else + 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 "" + fi + + colorEcho ${GREEN} "查看已经下载的相关依赖安装包……" + ls /tmp/storage/nfs/ + ls /tmp/storage/rpc/ + colorEcho ${GREEN} "--------------------------------------------------------------" + echo "" + +} + +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 "" +} + +installNFS() { + 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 + 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 "" + +} + +#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 + 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共享目录!" + + export NfsPath=/nfsdata + 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 "" +} + +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 "" +} + +modifySystemNetworkProxy() { + colorEcho ${PURPLE} "--------------------------------------------------------------" + colorEcho ${BLUE} "开始配置系统网络代理…………" + colorEcho ${GREEN} "--------------------------------------------------------------" + echo "" + + addYumProxy + + addShellProxy + + # addDockerProxy +} + +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 +} + +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 +} + +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 + else + + colorEcho ${GREEN} "开始安装docker-ce,版本为${DOCKER_VERSION}" + colorEcho ${YELLOW} "----------------------------------------------------------------------" + ls /tmp/docker-${DOCKER_VERSION}/ + colorEcho ${YELLOW} "----------------------------------------------------------------------" + echo "" + dpkg -i /tmp/docker-${DOCKER_VERSION}/*.deb + echo "" + 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 "" +} +## 安装docker时,修改系统的配置文件 +modifySystemConfig() { + colorEcho ${PURPLE} "---------------------------------------------------------------------------------" + colorEcho ${BLUE} "开始修改系统内核参数…………" + ## 配置内核参数 + cat >/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 +} + +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 + +} + +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的目录均已创建完成!!" + +} + +buildPVForMinio() { + echo "" + colorEcho ${PURPLE} "--------------------------------------------------------------" + colorEcho ${BLUE} "开始 为MINIO服务器 初始化磁盘pv,创建整PV的存储…………" + + echo "此部分功能暂时掠过!" +} + +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 "" +} + +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 + +} + +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 +} + +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 +} + +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 +} + +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" ]]; 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 +} + +main() { + + installHarbor || return $? + + installNginx + modifyNginx + + installZSH || return $? + modifyZSH || return $? + +} + +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 $? + + downloadNFS || return $? + distributeNFS || return $? + installNFSServer || return $? + + installHarbor || return $? + + installNginx + modifyNginx + + installZSH || return $? + modifyZSH || return $? +} + +WorkerServer() { + # check_root + # + # check_sys + # disableSwap + # shutdownFirewall + # modifySystemConfig + # + # modifyTimeSyncdToMasterUbuntu + ## changeTimeZoneAndNTP || return $? + # installDocker || return $? + changeDockerRegisterMirror + +} + +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 + +} + +HeketiServer() { + check_root + addYumProxy + addShellProxy + check_sys + disableSwap + shutdownFirewall + modifySystemConfig + modifyChronySyncToMaster || return $? + + installGlusterFS || return $? + installHeketi || return $? +} +GlusterServer() { + check_root + addYumProxy + addShellProxy + check_sys + disableSwap + shutdownFirewall + modifySystemConfig + modifyChronySyncToMaster || return $? + + installGlusterFS || return $? +} +${WhichNodeRun}