mirror of
https://gitee.com/SuperManito/LinuxMirrors
synced 2025-11-04 00:10:27 +08:00
优化 & bug fix & 更新文档
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
## Author: SuperManito
|
||||
## Modified: 2024-12-28
|
||||
## Modified: 2025-01-04
|
||||
## License: MIT
|
||||
## GitHub: https://github.com/SuperManito/LinuxMirrors
|
||||
## Website: https://linuxmirrors.cn
|
||||
@@ -473,7 +473,7 @@ function handle_command_options() {
|
||||
if [ "$2" ]; then
|
||||
case "$2" in
|
||||
http | https | HTTP | HTTPS)
|
||||
WEB_PROTOCOL="$2"
|
||||
WEB_PROTOCOL="${2,,}"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
@@ -2319,6 +2319,7 @@ function change_mirrors_or_install_EPEL() {
|
||||
esac
|
||||
## 跳过较旧的 EOF 版本(epel 7 已被官方移动至 archive 仓库,目前没有多少镜像站同步,暂无适配的必要)
|
||||
if [[ "${target_version}" == "7" ]]; then
|
||||
[ -z "${SOURCE_EPEL_BRANCH}" ] && SOURCE_EPEL_BRANCH="epel-archive"
|
||||
return
|
||||
fi
|
||||
## 安装 EPEL 软件包
|
||||
@@ -2487,6 +2488,16 @@ function interactive_select_boolean() {
|
||||
echo -e "╰─ \033[2m○ 是 / \033[0m\033[32m●\033[0m 否"
|
||||
fi
|
||||
}
|
||||
function draw_menu_confirmed() {
|
||||
tput rc
|
||||
echo -e "╭─ ${message}"
|
||||
echo -e "│"
|
||||
if [ "$selected" -eq 0 ]; then
|
||||
echo -e "╰─ \033[32m●\033[0m \033[1m是\033[0m\033[2m / ○ 否\033[0m"
|
||||
else
|
||||
echo -e "╰─ \033[2m○ 是 / \033[0m\033[32m●\033[0m \033[1m否\033[0m"
|
||||
fi
|
||||
}
|
||||
function read_key() {
|
||||
IFS= read -rsn1 key
|
||||
if [[ $key == $'\x1b' ]]; then
|
||||
@@ -2517,6 +2528,7 @@ function interactive_select_boolean() {
|
||||
;;
|
||||
"")
|
||||
# Enter 键
|
||||
draw_menu_confirmed
|
||||
break
|
||||
;;
|
||||
*) ;;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
## Author: SuperManito
|
||||
## Modified: 2024-12-13
|
||||
## Modified: 2025-01-04
|
||||
## License: MIT
|
||||
## GitHub: https://github.com/SuperManito/LinuxMirrors
|
||||
## Website: https://linuxmirrors.cn
|
||||
@@ -125,6 +125,7 @@ function main() {
|
||||
collect_system_info
|
||||
run_start
|
||||
choose_mirrors
|
||||
choose_protocol
|
||||
close_firewall_service
|
||||
install_dependency_packages
|
||||
configure_docker_ce_mirror
|
||||
@@ -140,9 +141,12 @@ function handle_command_options() {
|
||||
echo -e "
|
||||
命令选项(名称/含义/值):
|
||||
|
||||
--source 指定 Docker CE 源地址 地址
|
||||
--source-registry 指定 Docker Registry 源地址 地址
|
||||
--source 指定 Docker CE 源地址(域名或IP) 地址
|
||||
--source-registry 指定镜像仓库地址(域名或IP) 地址
|
||||
--branch 指定 Docker CE 源仓库(路径) 仓库名
|
||||
--codename 指定 Debian 系操作系统的版本代号 代号名称
|
||||
--designated-version 指定 Docker CE 安装版本 版本号
|
||||
--protocol 指定 Docker CE 源的 WEB 协议 http 或 https
|
||||
--install-latest 是否安装最新版本的 Docker Engine true 或 false
|
||||
--close-firewall 是否关闭防火墙 true 或 false
|
||||
--clean-screen 是否在运行前清除屏幕上的所有内容 true 或 false
|
||||
@@ -183,6 +187,15 @@ function handle_command_options() {
|
||||
output_error "命令选项 ${BLUE}$1${PLAIN} 无效,请在该选项后指定镜像仓库地址!"
|
||||
fi
|
||||
;;
|
||||
## 指定 Docker CE 软件源仓库
|
||||
--branch)
|
||||
if [ "$2" ]; then
|
||||
SOURCE_BRANCH="$2"
|
||||
shift
|
||||
else
|
||||
output_error "命令选项 ${BLUE}$1${PLAIN} 无效,请在该选项后指定软件源仓库!"
|
||||
fi
|
||||
;;
|
||||
## 指定 Debian 版本代号
|
||||
--codename)
|
||||
if [ "$2" ]; then
|
||||
@@ -192,6 +205,36 @@ function handle_command_options() {
|
||||
output_error "命令选项 ${BLUE}$1${PLAIN} 无效,请在该选项后指定版本代号!"
|
||||
fi
|
||||
;;
|
||||
## 指定 Docker Engine 安装版本
|
||||
--designated-version)
|
||||
if [ "$2" ]; then
|
||||
echo "$2" | grep -Eq "^[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}$"
|
||||
if [ $? -eq 0 ]; then
|
||||
DESIGNATED_DOCKER_VERSION="$2"
|
||||
shift
|
||||
else
|
||||
output_error "命令选项 ${BLUE}$2${PLAIN} 无效,请在该选项后指定有效的版本号!"
|
||||
fi
|
||||
else
|
||||
output_error "命令选项 ${BLUE}$1${PLAIN} 无效,请在该选项后指定版本号!"
|
||||
fi
|
||||
;;
|
||||
## WEB 协议(HTTP/HTTPS)
|
||||
--protocol)
|
||||
if [ "$2" ]; then
|
||||
case "$2" in
|
||||
http | https | HTTP | HTTPS)
|
||||
WEB_PROTOCOL="${2,,}"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
output_error "检测到 ${BLUE}$2${PLAIN} 为无效参数值,请在该选项后指定 http 或 https !"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
output_error "命令选项 ${BLUE}$1${PLAIN} 无效,请在该选项后指定 WEB 协议(http/https)!"
|
||||
fi
|
||||
;;
|
||||
## 安装最新版本
|
||||
--install-latest | --install-latested)
|
||||
if [ "$2" ]; then
|
||||
@@ -257,6 +300,9 @@ function handle_command_options() {
|
||||
done
|
||||
## 给部分命令选项赋予默认值
|
||||
IGNORE_BACKUP_TIPS="${IGNORE_BACKUP_TIPS:-"false"}"
|
||||
if [[ "${DESIGNATED_DOCKER_VERSION}" ]]; then
|
||||
INSTALL_LATESTED_DOCKER="false"
|
||||
fi
|
||||
}
|
||||
|
||||
function run_start() {
|
||||
@@ -317,13 +363,13 @@ function collect_system_info() {
|
||||
elif [ -s $File_openEulerRelease ]; then
|
||||
SYSTEM_FACTIONS="${SYSTEM_OPENEULER}"
|
||||
elif [ -s $File_OpenCloudOSRelease ]; then
|
||||
# 拦截 OpenCloudOS 9 及以上版本,非红帽版本不支持从 Docker 官方仓库安装
|
||||
# 拦截 OpenCloudOS 9 及以上版本,不支持从 Docker 官方仓库安装
|
||||
if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" -ge 9 ]]; then
|
||||
output_error "不支持当前操作系统,请参考如下命令自行安装:\n\ndnf install -y docker\nsystemctl enable --now docker"
|
||||
fi
|
||||
SYSTEM_FACTIONS="${SYSTEM_OPENCLOUDOS}" # 自 9.0 版本起不再基于红帽
|
||||
elif [ -s $File_AnolisOSRelease ]; then
|
||||
# 拦截 Anolis OS 8 版本,不支持从 Docker 官方仓库安装
|
||||
# 拦截 Anolis OS 8.8 及以上版本,不支持从 Docker 官方仓库安装,23 版本支持
|
||||
if [[ "${SYSTEM_VERSION_NUMBER_MAJOR}" == 8 ]]; then
|
||||
output_error "不支持当前操作系统,请参考如下命令自行安装:\n\ndnf install -y docker\nsystemctl enable --now docker"
|
||||
fi
|
||||
@@ -345,6 +391,10 @@ function collect_system_info() {
|
||||
;;
|
||||
"${SYSTEM_REDHAT}")
|
||||
SYSTEM_JUDGMENT="$(awk '{printf $1}' $File_RedHatRelease)"
|
||||
# 拦截 Anolis OS 8.8 以下版本,不支持从 Docker 官方仓库安装
|
||||
if [[ "${SYSTEM_JUDGMENT}" == "${SYSTEM_ANOLISOS}" ]]; then
|
||||
output_error "不支持当前操作系统,请参考如下命令自行安装:\n\ndnf install -y docker\nsystemctl enable --now docker"
|
||||
fi
|
||||
## 特殊系统判断
|
||||
# Red Hat Enterprise Linux
|
||||
grep -q "${SYSTEM_RHEL}" $File_RedHatRelease && SYSTEM_JUDGMENT="${SYSTEM_RHEL}"
|
||||
@@ -389,6 +439,7 @@ function collect_system_info() {
|
||||
;;
|
||||
esac
|
||||
## 定义软件源仓库名称
|
||||
if [[ -z "${SOURCE_BRANCH}" ]]; then
|
||||
case "${SYSTEM_FACTIONS}" in
|
||||
"${SYSTEM_DEBIAN}")
|
||||
case "${SYSTEM_JUDGMENT}" in
|
||||
@@ -416,10 +467,6 @@ function collect_system_info() {
|
||||
"${SYSTEM_RHEL}")
|
||||
SOURCE_BRANCH="rhel"
|
||||
;;
|
||||
"${SYSTEM_ANOLISOS}")
|
||||
# 拦截 Anolis OS 8 版本,不支持从 Docker 官方仓库安装
|
||||
output_error "不支持当前操作系统,请参考如下命令自行安装:\n\ndnf install -y docker\nsystemctl enable --now docker"
|
||||
;;
|
||||
*)
|
||||
SOURCE_BRANCH="centos"
|
||||
;;
|
||||
@@ -429,6 +476,7 @@ function collect_system_info() {
|
||||
SOURCE_BRANCH="centos"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
## 定义软件源更新文字
|
||||
case "${SYSTEM_FACTIONS}" in
|
||||
"${SYSTEM_DEBIAN}")
|
||||
@@ -504,48 +552,15 @@ function choose_mirrors() {
|
||||
}
|
||||
|
||||
print_title
|
||||
if [[ -z "${INSTALL_LATESTED_DOCKER}" ]]; then
|
||||
## 是否手动选择安装版本
|
||||
if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
|
||||
echo ''
|
||||
interactive_select_boolean "${BOLD}是否安装最新版本的 Docker Engine?${PLAIN}"
|
||||
if [[ "${_SELECT_RESULT}" == "true" ]]; then
|
||||
INSTALL_LATESTED_DOCKER="true"
|
||||
else
|
||||
## 安装旧版本只有官方仓库有
|
||||
INSTALL_LATESTED_DOCKER="false"
|
||||
SOURCE="download.docker.com"
|
||||
fi
|
||||
else
|
||||
local CHOICE_A=$(echo -e "\n${BOLD}└─ 是否安装最新版本的 Docker Engine? [Y/n] ${PLAIN}")
|
||||
read -p "${CHOICE_A}" INPUT
|
||||
[[ -z "${INPUT}" ]] && INPUT=Y
|
||||
case $INPUT in
|
||||
[Yy] | [Yy][Ee][Ss])
|
||||
INSTALL_LATESTED_DOCKER="true"
|
||||
;;
|
||||
[Nn] | [Nn][Oo])
|
||||
## 安装旧版本只有官方仓库有
|
||||
INSTALL_LATESTED_DOCKER="false"
|
||||
SOURCE="download.docker.com"
|
||||
;;
|
||||
*)
|
||||
INSTALL_LATESTED_DOCKER="true"
|
||||
echo -e "\n$WARN 输入错误,默认安装最新版本!"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
|
||||
local mirror_list_name
|
||||
|
||||
if [[ -z "${SOURCE}" ]]; then
|
||||
mirror_list_name="mirror_list_docker_ce"
|
||||
if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
|
||||
sleep 1 >/dev/null 2>&1
|
||||
eval "interactive_select_mirror \"\${${mirror_list_name}[@]}\" \"\\n \${BOLD}请选择你想使用的 Docker CE 源:\${PLAIN}\\n\""
|
||||
SOURCE="${_SELECT_RESULT#*@}"
|
||||
echo -e "\n${GREEN}➜${PLAIN} ${BOLD}${_SELECT_RESULT%@*}${PLAIN}"
|
||||
echo -e "\n${GREEN}➜${PLAIN} ${BOLD}Docker CE: ${_SELECT_RESULT%@*}${PLAIN}"
|
||||
else
|
||||
print_mirrors_list "${mirror_list_name}" 38
|
||||
local CHOICE_B=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的 Docker CE 源 [ 1-$(eval echo \${#$mirror_list_name[@]}) ]:${PLAIN}")
|
||||
@@ -575,7 +590,7 @@ function choose_mirrors() {
|
||||
sleep 1 >/dev/null 2>&1
|
||||
eval "interactive_select_mirror \"\${${mirror_list_name}[@]}\" \"\\n \${BOLD}请选择你想使用的 Docker Registry 源:\${PLAIN}\\n\""
|
||||
SOURCE_REGISTRY="${_SELECT_RESULT#*@}"
|
||||
echo -e "\n${GREEN}➜${PLAIN} Docker Registry:${BOLD}${_SELECT_RESULT%@*}${PLAIN}"
|
||||
echo -e "\n${GREEN}➜${PLAIN} ${BOLD}Docker Registry: ${_SELECT_RESULT%@*}${PLAIN}"
|
||||
else
|
||||
print_mirrors_list "${mirror_list_name}" 44
|
||||
local CHOICE_C=$(echo -e "\n${BOLD}└─ 请选择并输入你想使用的 Docker Registry 源 [ 1-$(eval echo \${#$mirror_list_name[@]}) ]:${PLAIN}")
|
||||
@@ -600,6 +615,42 @@ function choose_mirrors() {
|
||||
fi
|
||||
}
|
||||
|
||||
## 选择同步或更新软件源所使用的 WEB 协议( HTTP/HTTPS)
|
||||
function choose_protocol() {
|
||||
if [[ -z "${WEB_PROTOCOL}" ]]; then
|
||||
if [[ "${ONLY_HTTP}" == "true" ]]; then
|
||||
WEB_PROTOCOL="http"
|
||||
else
|
||||
if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
|
||||
echo ''
|
||||
interactive_select_boolean "${BOLD}软件源是否使用 HTTP 协议?${PLAIN}"
|
||||
if [[ "${_SELECT_RESULT}" == "true" ]]; then
|
||||
WEB_PROTOCOL="http"
|
||||
else
|
||||
WEB_PROTOCOL="https"
|
||||
fi
|
||||
else
|
||||
local CHOICE=$(echo -e "\n${BOLD}└─ 软件源是否使用 HTTP 协议? [Y/n] ${PLAIN}")
|
||||
read -rp "${CHOICE}" INPUT
|
||||
[[ -z "${INPUT}" ]] && INPUT=Y
|
||||
case "${INPUT}" in
|
||||
[Yy] | [Yy][Ee][Ss])
|
||||
WEB_PROTOCOL="http"
|
||||
;;
|
||||
[Nn] | [Nn][Oo])
|
||||
WEB_PROTOCOL="https"
|
||||
;;
|
||||
*)
|
||||
echo -e "\n$WARN 输入错误,默认使用 HTTPS 协议!"
|
||||
WEB_PROTOCOL="https"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
WEB_PROTOCOL="${WEB_PROTOCOL,,}"
|
||||
}
|
||||
|
||||
## 关闭防火墙和SELinux
|
||||
function close_firewall_service() {
|
||||
if [ ! -x /usr/bin/systemctl ]; then
|
||||
@@ -681,6 +732,7 @@ function install_dependency_packages() {
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
echo ''
|
||||
}
|
||||
|
||||
## 选择系统包管理器
|
||||
@@ -703,31 +755,19 @@ function get_package_manager() {
|
||||
|
||||
## 卸载 Docker Engine 原有版本软件包
|
||||
function uninstall_original_version() {
|
||||
if [ -x /usr/bin/docker ]; then
|
||||
# 先停止并禁用 Docker 服务
|
||||
systemctl disable --now docker >/dev/null 2>&1
|
||||
sleep 2s
|
||||
fi
|
||||
# 确定需要卸载的软件包
|
||||
local package_list
|
||||
case "${SYSTEM_FACTIONS}" in
|
||||
"${SYSTEM_DEBIAN}")
|
||||
case "${SYSTEM_JUDGMENT}" in
|
||||
"${SYSTEM_UBUNTU}" | "${SYSTEM_ZORIN}")
|
||||
package_list="docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc"
|
||||
;;
|
||||
*)
|
||||
package_list="docker.io docker-doc docker-compose podman-docker containerd runc"
|
||||
;;
|
||||
esac
|
||||
package_list='docker* podman podman-docker containerd runc'
|
||||
;;
|
||||
"${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
|
||||
case "${SYSTEM_JUDGMENT}" in
|
||||
"${SYSTEM_FEDORA}" | "${SYSTEM_RHEL}")
|
||||
package_list="docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc"
|
||||
;;
|
||||
*)
|
||||
package_list="docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine"
|
||||
;;
|
||||
esac
|
||||
package_list='docker* podman podman-docker runc'
|
||||
;;
|
||||
esac
|
||||
# 卸载软件包并清理残留
|
||||
@@ -759,12 +799,12 @@ function configure_docker_ce_mirror() {
|
||||
fi
|
||||
chmod a+r $file_keyring
|
||||
## 添加源
|
||||
echo "deb [arch=${SOURCE_ARCH} signed-by=${file_keyring}] https://${SOURCE}/linux/${SOURCE_BRANCH} ${SYSTEM_VERSION_CODENAME} stable" | tee $Dir_DebianExtendSource/docker.list >/dev/null 2>&1
|
||||
echo "deb [arch=${SOURCE_ARCH} signed-by=${file_keyring}] ${WEB_PROTOCOL}://${SOURCE}/linux/${SOURCE_BRANCH} ${SYSTEM_VERSION_CODENAME} stable" | tee $Dir_DebianExtendSource/docker.list >/dev/null 2>&1
|
||||
apt-get update
|
||||
;;
|
||||
"${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
|
||||
yum-config-manager -y --add-repo https://${SOURCE}/linux/${SOURCE_BRANCH}/docker-ce.repo
|
||||
sed -i "s|download.docker.com|${SOURCE}|g" $Dir_YumRepos/docker-ce.repo
|
||||
sed -i "s|https://download.docker.com|${WEB_PROTOCOL}://${SOURCE}|g" $Dir_YumRepos/docker-ce.repo
|
||||
## 兼容处理版本号
|
||||
if [[ "${SYSTEM_JUDGMENT}" != "${SYSTEM_FEDORA}" ]]; then
|
||||
local target_version
|
||||
@@ -795,8 +835,9 @@ function install_docker_engine() {
|
||||
grep -wf $DockerCEVersionFile $DockerCECLIVersionFile >$DockerVersionFile
|
||||
;;
|
||||
"${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
|
||||
yum list docker-ce --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" >$DockerCEVersionFile
|
||||
yum list docker-ce-cli --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" >$DockerCECLIVersionFile
|
||||
local package_manager="$(get_package_manager)"
|
||||
$package_manager list docker-ce --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" >$DockerCEVersionFile
|
||||
$package_manager list docker-ce-cli --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" >$DockerCECLIVersionFile
|
||||
grep -wf $DockerCEVersionFile $DockerCECLIVersionFile >$DockerVersionFile
|
||||
;;
|
||||
esac
|
||||
@@ -805,6 +846,7 @@ function install_docker_engine() {
|
||||
|
||||
## 安装
|
||||
function install_main() {
|
||||
local target_docker_version
|
||||
if [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then
|
||||
case "${SYSTEM_FACTIONS}" in
|
||||
"${SYSTEM_DEBIAN}")
|
||||
@@ -817,18 +859,37 @@ function install_docker_engine() {
|
||||
esac
|
||||
else
|
||||
export_version_list
|
||||
echo -e "\n${GREEN} --------- 请选择你要安装的版本,如:27.1.0 ---------- ${PLAIN}\n"
|
||||
if [ ! -s $DockerVersionFile ]; then
|
||||
rm -rf $DockerVersionFile
|
||||
output_error "查询 Docker Engine 版本列表失败!"
|
||||
fi
|
||||
if [[ "${DESIGNATED_DOCKER_VERSION}" ]]; then
|
||||
cat $DockerVersionFile | grep -Eq "^${DESIGNATED_DOCKER_VERSION}$"
|
||||
if [ $? -ne 0 ]; then
|
||||
rm -rf $DockerVersionFile
|
||||
output_error "指定的 Docker Engine 版本不存在或不支持安装!"
|
||||
fi
|
||||
target_docker_version="${DESIGNATED_DOCKER_VERSION}"
|
||||
else
|
||||
if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
|
||||
local version_list=(
|
||||
$(cat $DockerVersionFile | sort -t '.' -k1,1nr -k2,2nr -k3,3nr | tr '\n' ' ' | sed 's/ $//')
|
||||
)
|
||||
local mirror_list_name="version_list"
|
||||
eval "interactive_select_mirror \"\${${mirror_list_name}[@]}\" \"\\n \${BOLD}请选择你想安装的版本:\${PLAIN}\\n\""
|
||||
target_docker_version="${_SELECT_RESULT}"
|
||||
echo -e "\n${GREEN}➜${PLAIN} ${BOLD}指定安装版本:${target_docker_version}${PLAIN}\n"
|
||||
else
|
||||
echo -e "\n${GREEN} --------- 请选择你要安装的版本,如:27.4.0 ---------- ${PLAIN}\n"
|
||||
cat $DockerVersionFile
|
||||
echo -e '\n注:以上可供选择的安装版本由官方源提供,此列表以外的版本则无法安装在当前操作系统上'
|
||||
while true; do
|
||||
local CHOICE=$(echo -e "\n${BOLD}└─ 请根据上面的列表,选择并输入你想要安装的具体版本号:${PLAIN}\n")
|
||||
read -p "${CHOICE}" DOCKER_VERSION
|
||||
read -p "${CHOICE}" target_docker_version
|
||||
echo ''
|
||||
cat $DockerVersionFile | grep -Eqw "${DOCKER_VERSION}"
|
||||
cat $DockerVersionFile | grep -Eqw "${target_docker_version}"
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "${DOCKER_VERSION}" | grep -Eqw '[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}'
|
||||
echo "${target_docker_version}" | grep -Eqw '[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}'
|
||||
if [ $? -eq 0 ]; then
|
||||
rm -rf $DockerVersionFile
|
||||
break
|
||||
else
|
||||
echo -e "$ERROR 请输入正确的版本号!"
|
||||
@@ -837,11 +898,14 @@ function install_docker_engine() {
|
||||
echo -e "$ERROR 输入错误请重新输入!"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
rm -rf $DockerVersionFile
|
||||
case "${SYSTEM_FACTIONS}" in
|
||||
"${SYSTEM_DEBIAN}")
|
||||
check_version="$(echo ${DOCKER_VERSION} | cut -c1-2)"
|
||||
CheckSubversion="$(echo ${DOCKER_VERSION} | cut -c4-5)"
|
||||
case ${check_version} in
|
||||
check_version="$(echo ${target_docker_version} | cut -c1-2)"
|
||||
CheckSubversion="$(echo ${target_docker_version} | cut -c4-5)"
|
||||
case "${check_version}" in
|
||||
18)
|
||||
if [ ${CheckSubversion} == "09" ]; then
|
||||
INSTALL_JUDGMENT="5:"
|
||||
@@ -853,11 +917,11 @@ function install_docker_engine() {
|
||||
INSTALL_JUDGMENT="5:"
|
||||
;;
|
||||
esac
|
||||
apt-get install -y docker-ce=${INSTALL_JUDGMENT}${DOCKER_VERSION}* docker-ce-cli=5:${DOCKER_VERSION}* containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
apt-get install -y docker-ce=${INSTALL_JUDGMENT}${target_docker_version}* docker-ce-cli=5:${target_docker_version}* containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
;;
|
||||
"${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}")
|
||||
local package_manager="$(get_package_manager)"
|
||||
$package_manager install -y docker-ce-${DOCKER_VERSION} docker-ce-cli-${DOCKER_VERSION} containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
$package_manager install -y docker-ce-${target_docker_version} docker-ce-cli-${target_docker_version} containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -912,6 +976,36 @@ function install_docker_engine() {
|
||||
fi
|
||||
}
|
||||
|
||||
## 判断是否手动选择安装版本
|
||||
if [[ -z "${INSTALL_LATESTED_DOCKER}" ]]; then
|
||||
if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
|
||||
echo ''
|
||||
interactive_select_boolean "${BOLD}是否安装最新版本的 Docker Engine ?${PLAIN}"
|
||||
if [[ "${_SELECT_RESULT}" == "true" ]]; then
|
||||
INSTALL_LATESTED_DOCKER="true"
|
||||
else
|
||||
INSTALL_LATESTED_DOCKER="false"
|
||||
fi
|
||||
else
|
||||
local CHOICE_A=$(echo -e "\n${BOLD}└─ 是否安装最新版本的 Docker Engine ? [Y/n] ${PLAIN}")
|
||||
read -p "${CHOICE_A}" INPUT
|
||||
[[ -z "${INPUT}" ]] && INPUT=Y
|
||||
case $INPUT in
|
||||
[Yy] | [Yy][Ee][Ss])
|
||||
INSTALL_LATESTED_DOCKER="true"
|
||||
;;
|
||||
[Nn] | [Nn][Oo])
|
||||
INSTALL_LATESTED_DOCKER="false"
|
||||
;;
|
||||
*)
|
||||
INSTALL_LATESTED_DOCKER="true"
|
||||
echo -e "\n$WARN 输入错误,默认安装最新版本!"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
echo ''
|
||||
fi
|
||||
|
||||
## 判定是否已安装
|
||||
case "${SYSTEM_FACTIONS}" in
|
||||
"${SYSTEM_DEBIAN}")
|
||||
@@ -923,87 +1017,29 @@ function install_docker_engine() {
|
||||
esac
|
||||
if [ $? -eq 0 ]; then
|
||||
export_version_list
|
||||
DOCKER_INSTALLED_VERSION="$(docker -v | grep -Eo "[0-9][0-9]\.[0-9]{1,2}\.[0-9]{1,2}")"
|
||||
DOCKER_VERSION_LATEST="$(cat $DockerVersionFile | head -n 1)"
|
||||
if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then
|
||||
if [[ "${DOCKER_INSTALLED_VERSION}" == "${DOCKER_VERSION_LATEST}" ]]; then
|
||||
if [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then
|
||||
echo -e "\n$COMPLETE 检测到已安装 Docker Engine 最新版本,跳过安装"
|
||||
local current_docker_version="$(docker -v | grep -Eo "[0-9][0-9]\.[0-9]{1,2}\.[0-9]{1,2}")"
|
||||
local latest_docker_version="$(cat $DockerVersionFile | head -n 1)"
|
||||
rm -rf $DockerVersionFile
|
||||
if [[ "${current_docker_version}" == "${latest_docker_version}" ]] && [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then
|
||||
echo -e "\n$TIP 检测到系统中的 Docker Engine 已经是最新的版本,跳过安装"
|
||||
change_docker_registry_mirror
|
||||
systemctl enable --now docker >/dev/null 2>&1
|
||||
check_version
|
||||
run_end
|
||||
exit
|
||||
else
|
||||
echo ''
|
||||
interactive_select_boolean "${BOLD}检测到已安装 Docker Engine 最新版本,是否继续安装其它版本?${PLAIN}"
|
||||
fi
|
||||
else
|
||||
echo ''
|
||||
if [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then
|
||||
interactive_select_boolean "${BOLD}检测到已安装 Docker Engine 旧版本,是否覆盖安装为最新版本?${PLAIN}"
|
||||
else
|
||||
interactive_select_boolean "${BOLD}检测到已安装 Docker Engine 旧版本,是否继续安装其它版本?${PLAIN}"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
if [[ "${_SELECT_RESULT}" == "true" ]]; then
|
||||
uninstall_original_version
|
||||
install_main
|
||||
[ $? -ne 0 ] && output_error "安装 Docker Engine 失败"
|
||||
fi
|
||||
else
|
||||
if [[ "${DOCKER_INSTALLED_VERSION}" == "${DOCKER_VERSION_LATEST}" ]]; then
|
||||
if [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then
|
||||
echo -e "\n$COMPLETE 检测到已安装 Docker Engine 最新版本,跳过安装"
|
||||
rm -rf $DockerVersionFile
|
||||
[ $? -ne 0 ] && output_error "安装 Docker Engine 失败!"
|
||||
change_docker_registry_mirror
|
||||
systemctl enable --now docker >/dev/null 2>&1
|
||||
check_version
|
||||
run_end
|
||||
exit
|
||||
else
|
||||
local CHOICE=$(echo -e "\n${BOLD}└─ 检测到已安装 Docker Engine 最新版本,是否继续安装其它版本? [Y/n] ${PLAIN}")
|
||||
fi
|
||||
else
|
||||
if [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then
|
||||
local CHOICE=$(echo -e "\n${BOLD}└─ 检测到已安装 Docker Engine 旧版本,是否覆盖安装为最新版本? [Y/n] ${PLAIN}")
|
||||
else
|
||||
local CHOICE=$(echo -e "\n${BOLD}└─ 检测到已安装 Docker Engine 旧版本,是否继续安装其它版本? [Y/n] ${PLAIN}")
|
||||
fi
|
||||
fi
|
||||
read -p "${CHOICE}" INPUT
|
||||
[[ -z "${INPUT}" ]] && INPUT=Y
|
||||
case $INPUT in
|
||||
[Yy] | [Yy][Ee][Ss])
|
||||
uninstall_original_version
|
||||
install_main
|
||||
[ $? -ne 0 ] && output_error "安装 Docker Engine 失败"
|
||||
;;
|
||||
[Nn] | [Nn][Oo]) ;;
|
||||
*)
|
||||
echo -e "\n$WARN 输入错误,默认不覆盖安装!\n"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
rm -rf $DockerVersionFile
|
||||
else
|
||||
uninstall_original_version
|
||||
install_main
|
||||
[ $? -ne 0 ] && output_error "安装 Docker Engine 失败"
|
||||
fi
|
||||
change_docker_registry_mirror
|
||||
systemctl enable --now docker >/dev/null 2>&1
|
||||
}
|
||||
|
||||
## 查看版本并验证安装结果
|
||||
function check_version() {
|
||||
if [ -x /usr/bin/docker ]; then
|
||||
systemctl enable --now docker >/dev/null 2>&1
|
||||
echo -en "\n当前安装版本:"
|
||||
docker -v
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "Compose 版本:$(docker compose version 2>&1)"
|
||||
echo -e " $(docker compose version 2>&1)"
|
||||
echo -e "\n$COMPLETE 安装完成"
|
||||
else
|
||||
echo -e "\n$ERROR 安装失败"
|
||||
@@ -1154,6 +1190,16 @@ function interactive_select_boolean() {
|
||||
echo -e "╰─ \033[2m○ 是 / \033[0m\033[32m●\033[0m 否"
|
||||
fi
|
||||
}
|
||||
function draw_menu_confirmed() {
|
||||
tput rc
|
||||
echo -e "╭─ ${message}"
|
||||
echo -e "│"
|
||||
if [ "$selected" -eq 0 ]; then
|
||||
echo -e "╰─ \033[32m●\033[0m \033[1m是\033[0m\033[2m / ○ 否\033[0m"
|
||||
else
|
||||
echo -e "╰─ \033[2m○ 是 / \033[0m\033[32m●\033[0m \033[1m否\033[0m"
|
||||
fi
|
||||
}
|
||||
function read_key() {
|
||||
IFS= read -rsn1 key
|
||||
if [[ $key == $'\x1b' ]]; then
|
||||
@@ -1184,6 +1230,7 @@ function interactive_select_boolean() {
|
||||
;;
|
||||
"")
|
||||
# Enter 键
|
||||
draw_menu_confirmed
|
||||
break
|
||||
;;
|
||||
*) ;;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: 脚本使换源更简单
|
||||
title: 一键脚本使换源更简单
|
||||
description: GNU/Linux 更换系统软件源脚本及 Docker 安装脚本
|
||||
comments: true
|
||||
glightbox: false
|
||||
@@ -16,9 +16,9 @@ hide:
|
||||
{ width="300" }
|
||||
{ width="300" }
|
||||
<figcaption>GNU/Linux 更换系统软件源脚本及 Docker 安装脚本</figcaption>
|
||||
<figcaption>脚本使换源更简单</figcaption>
|
||||
<figcaption>一键脚本使换源更简单</figcaption>
|
||||
</figure>
|
||||
<figure style="margin: 0; width: 500px; display: flex; flex-direction: column; justify-content: center" markdown>
|
||||
<figure class="home-cmd" style="margin: 0; display: flex; flex-direction: column; justify-content: center" markdown>
|
||||
=== "GNU/Linux"
|
||||
|
||||
``` { .bash title="一键命令" }
|
||||
@@ -30,7 +30,6 @@ hide:
|
||||
``` { .bash title="一键命令" }
|
||||
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
|
||||
```
|
||||
|
||||
</figure>
|
||||
</div>
|
||||
|
||||
@@ -38,6 +37,13 @@ hide:
|
||||
|
||||
<div class="grid cards" style="height: fit-content" markdown>
|
||||
|
||||
- :material-thumb-up-outline:{ .lg .middle } __轻松使用__
|
||||
|
||||
---
|
||||
|
||||
只需要一行命令就能直接运行,无需安装任何依赖
|
||||
文档提供了各种场景的解决方案,Linux 初学者也能轻松上手
|
||||
|
||||
- :material-source-branch:{ .lg .middle } __多元软件源适配__
|
||||
|
||||
---
|
||||
@@ -49,7 +55,7 @@ hide:
|
||||
|
||||
---
|
||||
|
||||
无需了解相关技术,文档提供了全面的知识储备和操作指引,轻松上手
|
||||
无需了解相关技术,文档提供了全面的知识储备和操作指引
|
||||
文档还提供了一些常见问题的解决方法以及一些高级用法的示例
|
||||
|
||||
- :material-vector-polyline:{ .lg .middle } __广泛的系统支持__
|
||||
@@ -64,7 +70,7 @@ hide:
|
||||
---
|
||||
|
||||
脚本使换源变得更简单,默认交互运行,逐步引导用户选择软件源配置
|
||||
同时提供了强大的命令选项,可实现各种定制需求和无交互操作
|
||||
同时提供了强大的命令选项,可实现各种高级定制需求
|
||||
|
||||
- :material-pencil-ruler-outline:{ .lg .middle } __高度可定制__
|
||||
|
||||
@@ -116,3 +122,19 @@ hide:
|
||||
</div>
|
||||
|
||||
[开 始 使 用](use/index.md){ .md-button .md-button--primary } [查看软件源列表](mirrors/index.md){ .md-button }
|
||||
|
||||
<div class="md-nav__sponsor-bottom" style="border-top: none; margin-top: 0">
|
||||
<div class="sponsor-label">
|
||||
<strong>赞助商</strong>
|
||||
</div>
|
||||
<div class="sponsor-wrapper sponsor-flex-wrapper">
|
||||
<a class="sponsor-item sponsor-flex-item" target="_blank" href="https://www.dkdun.cn/aff/VAWGETUL" title="林枫云">
|
||||
<img src="/assets/images/sponsor/linfengyun-light.png#only-light" alt="林枫云" style="width: 60%" />
|
||||
<img src="/assets/images/sponsor/linfengyun-dark.png#only-dark" alt="林枫云" style="width: 60%" />
|
||||
</a>
|
||||
<a class="sponsor-item sponsor-flex-item" target="_blank" href="https://arcadia.cool" title="Arcadia 一站式代码运维平台">
|
||||
<img src="/assets/images/sponsor/arcadia-light.png#only-light" alt="Arcadia 一站式代码运维平台" style="width: 60%" />
|
||||
<img src="/assets/images/sponsor/arcadia-dark.png#only-dark" alt="Arcadia 一站式代码运维平台" style="width: 60%" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -33,7 +33,7 @@ hide:
|
||||
|
||||
如果这里没有想使用的镜像站那可以看看其它运行模式和命令选项。软件源的速度区分刷新速度和下行速率,后者才是关键,具体请结合实际地理位置选择尝试,还可以通过[辅助工具网站](#工具网站)进行一些测试
|
||||
|
||||
:material-thumb-up-outline: 使用建议:速度上推荐 `中科大`、`字节跳动(火山引擎)`,地域兼容性上推荐 `阿里云`、`腾讯云`,境外、海外或复杂网络环境下不建议使用 `清华(TUNA)` 等容易阻断的镜像站
|
||||
:material-thumb-up-outline: 使用建议:速度上推荐 `中科大`、`字节跳动(火山引擎)`,地域兼容性上推荐 `阿里云`、`腾讯云`,软件源种类上推荐 `南京大学`,境外、海外或复杂网络环境下不建议使用 `清华(TUNA)` 等容易阻断的镜像站
|
||||
|
||||
??? note "中国大陆教育网(点击展开查看)"
|
||||
|
||||
|
||||
@@ -9,6 +9,10 @@ hide:
|
||||
|
||||
## :fontawesome-brands-docker:{style="color: #086dd7"} Docker 安装脚本
|
||||
|
||||
???+ tip inline end "友情提示"
|
||||
|
||||
该脚本近期进行了大量优化,代码逻辑变动较大,如有问题请及时反馈
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td><a href="https://www.debian.org" target="_blank"><img src="/assets/images/icon/debian.svg" width="16" height="16" style="vertical-align: -0.35em"></a> Debian</td>
|
||||
@@ -68,9 +72,7 @@ hide:
|
||||
bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh)
|
||||
```
|
||||
|
||||
支持 `选择或更换软件源以及镜像仓库`、`安装指定版本`、`重装` 等功能,支持 ARM 架构处理器
|
||||
|
||||
脚本参考 [官方文档](https://docs.docker.com/engine/install) 使用系统包管理工具安装,集成安装 [`Docker Engine`](https://docs.docker.com/engine) 和 [`Docker Compose (插件)`](https://docs.docker.com/compose/install/linux)
|
||||
脚本参考 [官方文档](https://docs.docker.com/engine/install) 使用系统包管理工具安装,集成安装 [`Docker Engine`](https://docs.docker.com/engine) 和 [`Docker Compose (插件)`](https://docs.docker.com/compose/install/linux),支持选择或更换软件源以及镜像仓库、安装指定版本、重装等功能,支持 ARM 架构处理器
|
||||
|
||||
> 注:Docker Compose 自 V2 版本起开始作为 Docker CLI 的一部分,不再需要单独安装,请使用 `docker compose` 命令替代 `docker-compose`
|
||||
|
||||
@@ -81,19 +83,90 @@ hide:
|
||||
|
||||
由于一些不可抗力的因素,目前国内网络环境一般无法正常访问 Docker Hub 因此无法拉取镜像,使用推荐的镜像源勉强能够使用不过速度可能会很慢
|
||||
|
||||
- ### 命令选项
|
||||
- ### 命令选项(高级用法)
|
||||
|
||||
| 名称 | 含义 | 选项值 |
|
||||
| :-: | :-: | :-: |
|
||||
| `--source` | 指定 `Docker CE` 源地址(域名或IP) | 地址 |
|
||||
| `--source-registry` | 指定镜像仓库地址(域名或IP) | 地址 |
|
||||
| `--codename` | 指定 Debian 系操作系统的版本代号 | 代号名称 |
|
||||
| `--source` | 指定 `Docker CE` 源地址(域名或IP) | `地址` |
|
||||
| `--source-registry` | 指定镜像仓库地址(域名或IP) | `地址` |
|
||||
| `--branch` | 指定 Docker CE 源仓库 | `仓库名(详见下方文档)` |
|
||||
| `--codename` | 指定 Debian 系操作系统的版本代号 | `代号名称` |
|
||||
| `--designated-version` | 指定 `Docker CE` 安装版本 | `版本号(详见下方文档)` |
|
||||
| `--protocol` | 指定 `Docker CE` 源的 WEB 协议 | `http` 或 `https` |
|
||||
| `--install-latest` | 是否安装最新版本的 Docker Engine | `true` 或 `false` |
|
||||
| `--close-firewall` | 是否关闭防火墙 | `true` 或 `false` |
|
||||
| `--clean-screen` | 是否在运行前清除屏幕上的所有内容 | `true` 或 `false` |
|
||||
| `--ignore-backup-tips` | 忽略覆盖备份提示(即不覆盖备份) | 无 |
|
||||
|
||||
> 软件源完整格式 `<WEB协议>://<软件源地址(域名或IP)>/<软件源仓库(路径)>`
|
||||
> 软件源完整格式 `<WEB协议>://<软件源地址(域名或IP)>/<软件源仓库(路径)>`
|
||||
|
||||
- #### 指定 Docker CE 软件源地址
|
||||
|
||||
``` { .bash .no-copy }
|
||||
bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --source mirror.example.com/docker-ce
|
||||
```
|
||||
> 注意该地址路径需要包含镜像站的 Docker CE 软件源仓库路径即 `docker-ce`
|
||||
|
||||
- #### 指定镜像仓库地址
|
||||
|
||||
``` { .bash .no-copy }
|
||||
bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --source-registry registry.example.com
|
||||
```
|
||||
|
||||
- #### 指定 Docker CE 软件源仓库
|
||||
|
||||
一般无需指定,脚本默认会自动判断
|
||||
|
||||
``` { .bash .no-copy }
|
||||
bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --branch centos
|
||||
```
|
||||
> 仓库名是固定的,目前只有 `centos` `debian` `fedora` `raspbian` `rhel` `sles` `static` `ubuntu` 这几个
|
||||
> 具体详见 [官方安装文档](https://docs.docker.com/engine/install) 和 [Docker CE 官方仓库](https://download.docker.com/linux)
|
||||
|
||||
- #### 指定 Docker CE 安装版本
|
||||
|
||||
指定安装版本时会忽略 `是否安装最新版本` 的命令选项,格式为 `主版本.次版本.补丁版本`,例如 `27.4.1`。
|
||||
|
||||
``` { .bash .no-copy }
|
||||
bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --designated-version 27.0.0
|
||||
```
|
||||
> 如果指定的版本不存在或者不支持当前系统,届时脚本会报错跳出
|
||||
|
||||
??? tip "如何查看版本列表?"
|
||||
|
||||
=== "Debian 系"
|
||||
|
||||
``` bash
|
||||
apt-cache madison docker-ce | awk '{print $3}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" | sort -t '.' -k1,1nr -k2,2nr -k3,3nr
|
||||
```
|
||||
|
||||
> `Debian` `Ubuntu` `Kali` `Linux Mint` `Deepin` `Zorin OS` `Armbian` `Proxmox`
|
||||
|
||||
=== "RedHat 系 / openEuler / OpenCloudOS / Anolis OS"
|
||||
|
||||
``` bash
|
||||
yum list docker-ce --showduplicates | sort -r | awk '{print $2}' | grep -Eo "[0-9][0-9].[0-9]{1,2}.[0-9]{1,2}" | sort -t '.' -k1,1nr -k2,2nr -k3,3nr
|
||||
```
|
||||
|
||||
> `Red Hat Enterprise Linux` `CentOS` `Rocky Linux` `AlmaLinux` `Fedora` `openEuler` `OpenCloudOS` `Anolis OS`
|
||||
|
||||
未出现在该列表中的版本则不支持通过本脚本安装,如果获取不到版本列表说明你当前的系统环境还没有正确配置 Docker CE 软件源(运行脚本时不存在该问题)
|
||||
|
||||
|
||||
- #### 无人值守(自动化)
|
||||
|
||||
不通过交互完成安装操作,至少需要使用如下命令选项来实现,建议熟悉后再使用
|
||||
|
||||
``` { .bash .no-copy title="参考命令" }
|
||||
bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \
|
||||
--source mirror.example.com \
|
||||
--source-registry registry.hub.docker.com \
|
||||
--protocol http \
|
||||
--use-intranet-source false \
|
||||
--install-latest true \
|
||||
--close-firewall true \
|
||||
--ignore-backup-tips
|
||||
```
|
||||
|
||||
- ### 关于服务报错无法启动
|
||||
|
||||
|
||||
@@ -6,6 +6,22 @@ hide:
|
||||
- footer
|
||||
---
|
||||
|
||||
<div class="md-nav__sponsor-bottom" style="border-top: none; margin-top: 0">
|
||||
<div class="sponsor-label">
|
||||
<strong>赞助商</strong>
|
||||
</div>
|
||||
<div class="sponsor-wrapper sponsor-flex-wrapper">
|
||||
<a class="sponsor-item sponsor-flex-item" target="_blank" href="https://www.dkdun.cn/aff/VAWGETUL" title="林枫云">
|
||||
<img src="/assets/images/sponsor/linfengyun-light.png#only-light" alt="林枫云" style="width: 60%" />
|
||||
<img src="/assets/images/sponsor/linfengyun-dark.png#only-dark" alt="林枫云" style="width: 60%" />
|
||||
</a>
|
||||
<a class="sponsor-item sponsor-flex-item" target="_blank" href="https://arcadia.cool" title="Arcadia 一站式代码运维平台">
|
||||
<img src="/assets/images/sponsor/arcadia-light.png#only-light" alt="Arcadia 一站式代码运维平台" style="width: 60%" />
|
||||
<img src="/assets/images/sponsor/arcadia-dark.png#only-dark" alt="Arcadia 一站式代码运维平台" style="width: 60%" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
# 成为赞助商
|
||||
|
||||
<button class="md-button md-button--primary" style="padding: 6px 20px 0 20px" title="https://afdian.com/a/SuperManito" onclick="window.open('https://afdian.com/a/SuperManito')">
|
||||
|
||||
@@ -43,6 +43,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
.home-cmd pre>code {
|
||||
padding-right: 3em;
|
||||
}
|
||||
|
||||
.heart {
|
||||
animation: heart 1000ms infinite;
|
||||
}
|
||||
@@ -108,6 +112,25 @@
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.sponsor-flex-wrapper {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.sponsor-flex-item {
|
||||
flex: 0 1 calc(33.33% - 1rem);
|
||||
min-width: 200px;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 960px) {
|
||||
.sponsor-flex-item {
|
||||
flex: 0 1 calc(50% - 1rem);
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.md-nav__sponsor-bottom {
|
||||
display: none;
|
||||
|
||||
6
docs/theme/partials/toc.html
vendored
6
docs/theme/partials/toc.html
vendored
@@ -13,15 +13,15 @@
|
||||
<strong>赞助商</strong>
|
||||
</div>
|
||||
<div class="sponsor-wrapper">
|
||||
<a href="https://www.dkdun.cn/aff/VAWGETUL" target="_blank" class="sponsor-item">
|
||||
<a class="sponsor-item" target="_blank" href="https://www.dkdun.cn/aff/VAWGETUL" title="林枫云">
|
||||
<img src="/assets/images/sponsor/linfengyun-light.png#only-light" alt="林枫云" style="width: 60%" />
|
||||
<img src="/assets/images/sponsor/linfengyun-dark.png#only-dark" alt="林枫云" style="width: 60%" />
|
||||
</a>
|
||||
<a href="https://arcadia.cool" target="_blank" class="sponsor-item">
|
||||
<a class="sponsor-item" target="_blank" href="https://arcadia.cool" title="Arcadia 一站式代码运维平台">
|
||||
<img src="/assets/images/sponsor/arcadia-light.png#only-light" alt="Arcadia 一站式代码运维平台" style="width: 60%" />
|
||||
<img src="/assets/images/sponsor/arcadia-dark.png#only-dark" alt="Arcadia 一站式代码运维平台" style="width: 60%" />
|
||||
</a>
|
||||
<a href="/sponsor/" target="_blank" class="sponsor-item">
|
||||
<a class="sponsor-item" target="_blank" href="/sponsor/">
|
||||
<span style="font-size: 0.6rem">
|
||||
<strong>成为赞助商</strong>
|
||||
</span>
|
||||
|
||||
@@ -118,25 +118,25 @@ hide:
|
||||
|
||||
---
|
||||
|
||||
切换命令为 `sudo -i` 或 `su root`。不同系统使用的命令不同,因为有些系统没有在初始安装时为 ROOT 账户设置密码(例如 Ubuntu),故需要使用 `sudo -i` 命令来切换至 ROOT。
|
||||
切换命令为 `sudo -i` 或 `su root`。不同系统使用的命令不同,因为部分系统没有在初始安装时为 ROOT 账户设置密码(例如 Ubuntu)或系统默认禁止 ROOT 用户登录。
|
||||
|
||||
- :material-numeric-2:{style="color: #3CA7E5" .lg} __建议使用 `SSH` 远程工具__
|
||||
- :material-numeric-2:{style="color: #3CA7E5" .lg} __建议使用支持 `SSH` 的现代化终端应用__
|
||||
|
||||
---
|
||||
|
||||
如果你使用的系统终端界面无法正常显示中文内容那么将导致无法查看交互内容。部分系统会自动开启 SSH 服务,否则请参考 [_关于开启 SSH 远程登录的方法_](#关于开启-ssh-远程登录的方法)。
|
||||
如果你系统命令行界面的中文显示乱码那么将导致无法查看交互内容,此外部分系统 GUI 图形界面的终端应用可能存在一些无法预料的显示问题。关于 SSH 服务部分系统会自动开启,否则请参考[开启方法](#关于开启-ssh-远程登录的方法)。
|
||||
|
||||
- :material-numeric-3:{style="color: #3CA7E5" .lg} __如果是在新系统上首次执行脚本__
|
||||
- :material-numeric-3:{style="color: #3CA7E5" .lg} __如果是在新装系统上首次执行脚本__
|
||||
|
||||
---
|
||||
|
||||
当前执行方式依赖 `curl` 指令获取脚本内容并执行,但部分操作系统没有预装此软件包,届时则会报错 `Command not found`,安装方法详见下方 [_关于报错 Command not found_](#关于报错-command-not-found)。
|
||||
|
||||
- :material-numeric-4:{style="color: #3CA7E5" .lg} __脚本需要通过交互进行配置__
|
||||
- :material-numeric-4:{style="color: #3CA7E5" .lg} __脚本运行期间需要交互选择配置__
|
||||
|
||||
---
|
||||
|
||||
交互主要有两种呈现方式,一种是铺满全屏竖向选择软件源地址的列表,另一种是横向选择 “是/否” 的选项。请通过键盘方向键或 `WASD` 控制选项、回车键确认。
|
||||
请通过方向键 ++arrow-up++++arrow-down++++arrow-left++++arrow-right++ 或 ++w++++a++++s++++d++ 控制选项并按 ++enter++ 回车键确认。如果发现交互异常那么请改变终端软件的窗口大小后重试,窗口尽量不要太小。
|
||||
|
||||
</div>
|
||||
|
||||
@@ -324,13 +324,21 @@ hide:
|
||||
|
||||
- ### 关于调用脚本的互联网位置
|
||||
|
||||
项目利用 [GitHub Action](https://github.com/SuperManito/LinuxMirrors/blob/main/.github/workflows/build-docs.yml#L24) 在每次提交后自动拷贝源码到文档目录作为网站资源发布,网站托管于知名 CDN 云服务商几乎没有被劫持的风险可放心使用
|
||||
项目利用 [GitHub Action](https://github.com/SuperManito/LinuxMirrors/blob/main/.github/workflows/build-docs.yml#L24) 在每次提交后自动拷贝源码到文档目录作为网站资源发布,网站托管于知名 CDN 云服务商几乎没有被劫持的风险请放心使用。
|
||||
|
||||
当然你也可以使用代码托管仓库的原始地址来调用,这里只是想告诉你为什么会有几个不同的地址,默认的官网地址更易于访问和记忆
|
||||
当然你也可以使用代码托管仓库的原始地址来调用,这里只是想告诉你为什么会有几个不同的地址,默认的官网地址更易于记忆和访问。
|
||||
|
||||
- ### 关于软件源下载速度相关问题
|
||||
|
||||
首先在[软件源列表](../mirrors/index.md)页面的使用帮助有使用推荐,这是根据以往经验总结出来的,但总有用户在纠结软件源速度的问题。
|
||||
|
||||
软件源(镜像站)的网络延迟即 `Ping` 与下载速度没有太大的关联,双方地理位置间隔的远近不代表实际体验,有些镜像站下行带宽很高但实际测速却并不理想,因为这与镜像站的并发性能和负载策略有关。
|
||||
|
||||
网上也有很多基于 C、Python 编写的镜像站测速开源脚本,而本项目脚本基于 Bash Shell 编写且不依赖任何第三方库,Bash 是 Linux 运维中最常用的脚本语言并且绝大部分发行版都会预装,这意味着用户不需要安装任何环境就能直接运行,这种便利性是其它高级语言无法替代的,不过目前来看 Bash 脚本可能无法实现精准测速的功能。
|
||||
|
||||
- ### 关于未启用的软件源
|
||||
|
||||
脚本遵循系统默认设置即没有启用的软件源(仓库)不会在运行完本脚本后被启用,但是它们也随脚本更换了目标软件源地址,如果你有使用需求请阅读下面的启用方法
|
||||
脚本遵循系统默认设置即没有启用的软件源(仓库)不会在运行完本脚本后被启用,但是它们也随脚本更换了目标软件源地址,具体启用方法如下:
|
||||
|
||||
=== "Debian 系 / openKylin"
|
||||
|
||||
@@ -383,7 +391,7 @@ hide:
|
||||
| `--ignore-backup-tips` | 忽略覆盖备份提示(即不覆盖备份) | 无 |
|
||||
| `--help` | 查看帮助菜单 | 无 |
|
||||
|
||||
> 软件源完整格式 `<WEB协议>://<软件源地址(域名或IP)>/<软件源仓库(路径)>`
|
||||
> 软件源完整格式 `<WEB协议>://<软件源地址(域名或IP)>/<软件源仓库(路径)>`
|
||||
|
||||
接下来是一些高级用法的举例
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
mkdocs-material==9.5.48
|
||||
mkdocs-material==9.5.49
|
||||
mkdocs-glightbox==0.4.0
|
||||
mkdocs-exclude-search==0.6.6
|
||||
Reference in New Issue
Block a user