From 234db05c4d045ac8983e4de0618db93870130d16 Mon Sep 17 00:00:00 2001 From: Super Manito <68613938+SuperManito@users.noreply.github.com> Date: Tue, 22 Feb 2022 06:33:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ChangeMirrors.sh | 33 ++++-- DockerInstallation.sh | 238 +++++++++++++++++++++--------------------- 2 files changed, 143 insertions(+), 128 deletions(-) diff --git a/ChangeMirrors.sh b/ChangeMirrors.sh index c69b9d0..c3d3abb 100644 --- a/ChangeMirrors.sh +++ b/ChangeMirrors.sh @@ -1,6 +1,6 @@ #!/bin/bash ## Author: SuperManito -## Modified: 2022-02-16 +## Modified: 2022-02-22 ## License: GPL-2.0 ## Github: https://github.com/SuperManito/LinuxMirrors ## Gitee: https://gitee.com/SuperManito/LinuxMirrors @@ -162,7 +162,7 @@ function PermissionJudgment() { } ## 关闭 防火墙 和 SELINUX -function TurnOffFirewall() { +function CloseFirewall() { systemctl status firewalld | grep running -q if [ $? -eq 0 ]; then CHOICE_C=$(echo -e "\n${BOLD}└ 是否关闭防火墙和 SELINUX? [Y/n] ${PLAIN}") @@ -296,7 +296,6 @@ function ChangeMirrors() { DebianMirrors elif [ ${SYSTEM_FACTIONS} = ${SYSTEM_REDHAT} ]; then RedHatMirrors - yum clean all >/dev/null 2>&1 fi echo -e "\n${WORKING} 开始${SYNC_TXT}软件源...\n" case ${SYSTEM_FACTIONS} in @@ -418,18 +417,28 @@ function RedHatMirrors() { ## 修改源 if [ ${SYSTEM_JUDGMENT} = ${SYSTEM_CENTOS} -o ${SYSTEM_JUDGMENT} = ${SYSTEM_RHEL} ]; then sed -i 's|^mirrorlist=|#mirrorlist=|g' $RedHatReposDir/${SYSTEM_CENTOS}-* + ## CentOS 8 操作系统版本结束了生命周期(EOL),Linux 社区已不再维护该操作系统版本,最终版本为 8.5.2011 - ## 原 centos 镜像已被官方移动,从 2022-02 开始切换至 centos-vault 源 - [ ${CENTOS_VERSION} -eq "8" ] && sed -i 's|^#baseurl=http://mirror.centos.org/$contentdir|baseurl=http://mirror.centos.org/centos-vault|g' $RedHatReposDir/${SYSTEM_CENTOS}-* + ## 原 centos 镜像中的 CentOS 8 相关内容已被官方移动,从 2022-02 开始切换至 centos-vault 源 + if [ ${CENTOS_VERSION} -eq "8" ]; then + sed -i 's|^#baseurl=http://mirror.centos.org/$contentdir|#baseurl=http://mirror.centos.org/centos-vault|g' $RedHatReposDir/${SYSTEM_CENTOS}-* + sed -i "s/\$releasever/8.5.2111/g" ${SYSTEM_CENTOS}-* + fi + + ## WEB协议 sed -i "s|^#baseurl=http|baseurl=${WEB_PROTOCOL}|g" $RedHatReposDir/${SYSTEM_CENTOS}-* ## 更换软件源 sed -i "s|mirror.centos.org|${SOURCE}|g" $RedHatReposDir/${SYSTEM_CENTOS}-* - ## 修改版本号 - if [ ${CENTOS_VERSION} -eq "8" ]; then - sed -i "s/\$releasever/8.5.2111/g" ${SYSTEM_CENTOS}-* - elif [ ${CENTOS_VERSION} -eq "7" ]; then - sed -i "s/\$releasever/7.9.2009/g" ${SYSTEM_CENTOS}-* + + ## Red Hat Enterprise Linux 修改版本号 + if [ ${SYSTEM_JUDGMENT} = ${SYSTEM_RHEL} ]; then + if [ ${CENTOS_VERSION} -eq "8" ]; then + sed -i "s/\$releasever/8.5.2111/g" ${SYSTEM_CENTOS}-* + elif [ ${CENTOS_VERSION} -eq "7" ]; then + sed -i "s/\$releasever/7/g" ${SYSTEM_CENTOS}-* + fi fi + ## 安装/更换基于 RHEL/CentOS 的 EPEL 扩展国内源 [ ${EPEL_INSTALL} = "True" ] && EPELMirrors elif [ ${SYSTEM_JUDGMENT} = ${SYSTEM_FEDORA} ]; then @@ -449,6 +458,8 @@ function RedHatMirrors() { $RedHatReposDir/${SOURCE_BRANCH}-updates-testing.repo \ $RedHatReposDir/${SOURCE_BRANCH}-updates-testing-modular.repo fi + ## 清理 YUM 缓存 + yum clean all >/dev/null 2>&1 } ## 安装/更换基于 RHEL/CentOS 的 EPEL (Extra Packages for Enterprise Linux) 扩展国内源 @@ -616,7 +627,7 @@ function ChooseMirrors() { esac ## 关闭 防火墙 和 SELINUX - [ ${SYSTEM_FACTIONS} = ${SYSTEM_REDHAT} ] && TurnOffFirewall + [ ${SYSTEM_FACTIONS} = ${SYSTEM_REDHAT} ] && CloseFirewall } ## 生成 CentOS 官方 repo 源文件 diff --git a/DockerInstallation.sh b/DockerInstallation.sh index 2ddffe4..0cdf756 100644 --- a/DockerInstallation.sh +++ b/DockerInstallation.sh @@ -1,6 +1,6 @@ #!/bin/bash ## Author: SuperManito -## Modified: 2022-02-16 +## Modified: 2022-02-22 ## License: GPL-2.0 ## Github: https://github.com/SuperManito/LinuxMirrors ## Gitee: https://gitee.com/SuperManito/LinuxMirrors @@ -95,7 +95,7 @@ function EnvJudgment() { ## 定义系统名称 SYSTEM_NAME=$(cat $LinuxRelease | grep -E "^NAME=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g") ## 定义系统版本号 - SYSTEM_VERSION_NUMBER=$(cat $LinuxRelease | grep -E "VERSION_ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g") + SYSTEM_VERSION_NUMBER=$(cat $LinuxRelease | grep -E "VERSION_ID=" | awk -F '=' '{print$2}' | sed "s/[\'\"]//g") ## 判定系统名称、版本、版本号 case ${SYSTEM_FACTIONS} in Debian) @@ -172,7 +172,7 @@ function NetWorkJudgment() { } ## 关闭防火墙 -function TurnOffFirewall() { +function CloseFirewall() { systemctl status firewalld | grep running -q if [ $? -eq 0 ]; then systemctl disable --now firewalld >/dev/null 2>&1 @@ -233,23 +233,6 @@ function RemoveOldVersion() { esac } -## 查看可供安装的 Docker Engine 版本清单 -function DockerEngineVersionList() { - case ${SYSTEM_FACTIONS} in - Debian) - apt-cache madison docker-ce | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCEVersionFile - apt-cache madison docker-ce-cli | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCECLIVersionFile - grep -wf $DockerCEVersionFile $DockerCECLIVersionFile >$DockerVersionFile - ;; - RedHat) - yum list docker-ce --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCEVersionFile - yum list docker-ce-cli --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCECLIVersionFile - grep -wf $DockerCEVersionFile $DockerCECLIVersionFile >$DockerVersionFile - ;; - esac - rm -rf $DockerCEVersionFile $DockerCECLIVersionFile -} - ## 配置 Docker CE 源 function ConfigureDockerCEMirror() { if [[ ${DOCKER_VERSION_INSTALL_LATEST} == "True" ]]; then @@ -281,6 +264,118 @@ function ConfigureDockerCEMirror() { ## 安装 Docker Engine function DockerEngine() { + + ## 导出可安装的版本列表 + function Export_VersionList() { + case ${SYSTEM_FACTIONS} in + Debian) + apt-cache madison docker-ce | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCEVersionFile + apt-cache madison docker-ce-cli | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCECLIVersionFile + grep -wf $DockerCEVersionFile $DockerCECLIVersionFile >$DockerVersionFile + ;; + RedHat) + yum list docker-ce --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCEVersionFile + yum list docker-ce-cli --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}" >$DockerCECLIVersionFile + grep -wf $DockerCEVersionFile $DockerCECLIVersionFile >$DockerVersionFile + ;; + esac + rm -rf $DockerCEVersionFile $DockerCECLIVersionFile + } + + ## 安装 + function Install() { + if [[ ${DOCKER_VERSION_INSTALL_LATEST} == "True" ]]; then + case ${SYSTEM_FACTIONS} in + Debian) + apt-get install -y docker-ce docker-ce-cli containerd.io + ;; + RedHat) + yum install -y docker-ce docker-ce-cli containerd.io + ;; + esac + else + Export_VersionList + echo -e "\n${GREEN} --------- 请选择你要安装的版本,如:19.03.15 ---------- ${PLAIN}\n" + cat $DockerVersionFile + echo -e '\n注:以上可供选择的安装版本由官方源提供,若系统过新可能无法安装较旧的版本' + while true; do + CHOICE_F=$(echo -e "\n${BOLD}└ 请根据上面的列表,输入你想要安装的具体版本号:${PLAIN}\n") + read -p "${CHOICE_F}" DOCKER_VERSION + echo '' + cat $DockerVersionFile | grep -Ew "${DOCKER_VERSION}" >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo ${DOCKER_VERSION} | grep -Ew '[1,2][0,8,9].[0,1][0-9].[0-9]{1,2}' >/dev/null 2>&1 + if [ $? -eq 0 ]; then + rm -rf $DockerVersionFile + break + else + echo -e "${ERROR} 请输入正确的版本号!" + fi + else + echo -e "${ERROR} 输入错误请重新输入!" + fi + done + case ${SYSTEM_FACTIONS} in + Debian) + CheckVersion=$(echo ${DOCKER_VERSION} | cut -c1-2) + CheckSubversion=$(echo ${DOCKER_VERSION} | cut -c4-5) + case ${CheckVersion} in + 21 | 20 | 19) + INSTALL_JUDGMENT="5:" + ;; + 18) + if [ ${CheckSubversion} == "09" ]; then + INSTALL_JUDGMENT="5:" + else + INSTALL_JUDGMENT="" + fi + ;; + *) + INSTALL_JUDGMENT="" + ;; + esac + apt-get install -y docker-ce=${INSTALL_JUDGMENT}${DOCKER_VERSION}* docker-ce-cli=5:${DOCKER_VERSION}* containerd.io + ;; + RedHat) + yum install -y docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} containerd.io + ;; + esac + fi + } + + ## 修改 Docker Hub 源 + function ConfigureMirror() { + if [[ ${REGISTRY_SOURCE_OFFICIAL} == "False" ]]; then + if [ -d $DockerDir ] && [ -e $DockerConfig ]; then + if [ -e $DockerConfigBackup ]; then + CHOICE_BACKUP=$(echo -e "\n${BOLD}└ 检测到已备份的 Docker 配置文件,是否覆盖备份? [Y/n] ${PLAIN}") + read -p "${CHOICE_BACKUP}" INPUT + [ -z ${INPUT} ] && INPUT=Y + case $INPUT in + [Yy] | [Yy][Ee][Ss]) + cp -rf $DockerConfig $DockerConfigBackup >/dev/null 2>&1 + ;; + [Nn] | [Nn][Oo]) ;; + *) + echo -e "\n${WARN} 输入错误,默认不覆盖!" + ;; + esac + else + cp -rf $DockerConfig $DockerConfigBackup >/dev/null 2>&1 + echo -e "\n${COMPLETE} 已备份原有 Docker 配置文件至 $DockerConfigBackup\n" + fi + sleep 2s + else + mkdir -p $DockerDir >/dev/null 2>&1 + touch $DockerConfig + fi + echo -e '{\n "registry-mirrors": ["https://SOURCE"]\n}' >$DockerConfig + sed -i "s/SOURCE/$REGISTRY_SOURCE/g" $DockerConfig + systemctl daemon-reload + fi + } + + ## 判定是否已安装 case ${SYSTEM_FACTIONS} in Debian) dpkg -l | grep docker-ce-cli -q @@ -290,13 +385,13 @@ function DockerEngine() { ;; esac if [ $? -eq 0 ]; then - DockerEngineVersionList + Export_VersionList DOCKER_INSTALLED_VERSION=$(docker -v | grep -Eo "[0-9][0-9].[0-9][0-9].[0-9]{1,2}") DOCKER_VERSION_LATEST=$(cat $DockerVersionFile | head -n 1) if [[ ${DOCKER_INSTALLED_VERSION} == ${DOCKER_VERSION_LATEST} ]]; then if [[ ${DOCKER_VERSION_INSTALL_LATEST} == "True" ]]; then echo -e "\n${SUCCESS} 检测到已安装最新版本的 Docker Engine,跳过安装" - ConfigureImageAccelerator + ConfigureMirror systemctl status docker | grep running -q if [ $? -eq 0 ]; then systemctl restart docker @@ -324,7 +419,7 @@ function DockerEngine() { echo -en "\n${WORKING} 正在卸载之前的版本..." RemoveOldVersion echo -e "\n\n${SUCCESS} 卸载完毕\n" - DockerEngineInstall + Install ;; [Nn] | [Nn][Oo]) ;; *) @@ -334,103 +429,12 @@ function DockerEngine() { rm -rf $DockerVersionFile else RemoveOldVersion - DockerEngineInstall + Install fi - ConfigureImageAccelerator + ConfigureMirror systemctl stop docker >/dev/null 2>&1 systemctl enable --now docker >/dev/null 2>&1 } -function DockerEngineInstall() { - if [[ ${DOCKER_VERSION_INSTALL_LATEST} == "True" ]]; then - case ${SYSTEM_FACTIONS} in - Debian) - apt-get install -y docker-ce docker-ce-cli containerd.io - ;; - RedHat) - yum install -y docker-ce docker-ce-cli containerd.io - ;; - esac - else - DockerEngineVersionList - echo -e "\n${GREEN} --------- 请选择你要安装的版本,如:19.03.15 ---------- ${PLAIN}\n" - cat $DockerVersionFile - echo -e '\n注:以上可供选择的安装版本由官方源提供,若系统过新可能无法安装较旧的版本' - while true; do - CHOICE_F=$(echo -e "\n${BOLD}└ 请根据上面的列表,输入你想要安装的具体版本号:${PLAIN}\n") - read -p "${CHOICE_F}" DOCKER_VERSION - echo '' - cat $DockerVersionFile | grep -Ew "${DOCKER_VERSION}" >/dev/null 2>&1 - if [ $? -eq 0 ]; then - echo ${DOCKER_VERSION} | grep -Ew '[1,2][0,8,9].[0,1][0-9].[0-9]{1,2}' >/dev/null 2>&1 - if [ $? -eq 0 ]; then - rm -rf $DockerVersionFile - break - else - echo -e "${ERROR} 请输入正确的版本号!" - fi - else - echo -e "${ERROR} 输入错误请重新输入!" - fi - done - case ${SYSTEM_FACTIONS} in - Debian) - CheckVersion=$(echo ${DOCKER_VERSION} | cut -c1-2) - CheckSubversion=$(echo ${DOCKER_VERSION} | cut -c4-5) - case ${CheckVersion} in - 21 | 20 | 19) - INSTALL_JUDGMENT="5:" - ;; - 18) - if [ ${CheckSubversion} == "09" ]; then - INSTALL_JUDGMENT="5:" - else - INSTALL_JUDGMENT="" - fi - ;; - *) - INSTALL_JUDGMENT="" - ;; - esac - apt-get install -y docker-ce=${INSTALL_JUDGMENT}${DOCKER_VERSION}* docker-ce-cli=5:${DOCKER_VERSION}* containerd.io - ;; - RedHat) - yum install -y docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} containerd.io - ;; - esac - fi -} - -## 修改 Docker Hub 源 -function ConfigureImageAccelerator() { - if [[ ${REGISTRY_SOURCE_OFFICIAL} == "False" ]]; then - if [ -d $DockerDir ] && [ -e $DockerConfig ]; then - if [ -e $DockerConfigBackup ]; then - CHOICE_BACKUP=$(echo -e "\n${BOLD}└ 检测到已备份的 Docker 配置文件,是否覆盖备份? [Y/n] ${PLAIN}") - read -p "${CHOICE_BACKUP}" INPUT - [ -z ${INPUT} ] && INPUT=Y - case $INPUT in - [Yy] | [Yy][Ee][Ss]) - cp -rf $DockerConfig $DockerConfigBackup >/dev/null 2>&1 - ;; - [Nn] | [Nn][Oo]) ;; - *) - echo -e "\n${WARN} 输入错误,默认不覆盖!" - ;; - esac - else - cp -rf $DockerConfig $DockerConfigBackup >/dev/null 2>&1 - echo -e "\n${COMPLETE} 已备份原有 Docker 配置文件至 $DockerConfigBackup\n" - fi - sleep 2s - else - mkdir -p $DockerDir >/dev/null 2>&1 - touch $DockerConfig - fi - echo -e '{\n "registry-mirrors": ["https://SOURCE"]\n}' >$DockerConfig - sed -i "s/SOURCE/$REGISTRY_SOURCE/g" $DockerConfig - systemctl daemon-reload - fi -} ## 安装 Docker Compose function DockerCompose() { @@ -698,7 +702,7 @@ function ChooseMirrors() { esac echo -e '' - [ ${SYSTEM_FACTIONS} == ${SYSTEM_REDHAT} ] && TurnOffFirewall + [ ${SYSTEM_FACTIONS} == ${SYSTEM_REDHAT} ] && CloseFirewall } Combin_Function