Skip to content

Commit

Permalink
优化 & bug fix & 更新文档
Browse files Browse the repository at this point in the history
SuperManito committed Jan 4, 2025
1 parent 9cb5eef commit 678f304
Showing 10 changed files with 421 additions and 220 deletions.
16 changes: 14 additions & 2 deletions ChangeMirrors.sh
Original file line number Diff line number Diff line change
@@ -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
;;
*) ;;
423 changes: 235 additions & 188 deletions DockerInstallation.sh

Large diffs are not rendered by default.

34 changes: 28 additions & 6 deletions docs/index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: 脚本使换源更简单
title: 一键脚本使换源更简单
description: GNU/Linux 更换系统软件源脚本及 Docker 安装脚本
comments: true
glightbox: false
@@ -16,9 +16,9 @@ hide:
![](assets/images/brand/light/2.png#only-light){ width="300" }
![](assets/images/brand/dark/2.png#only-dark){ 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,14 +30,20 @@ hide:
``` { .bash title="一键命令" }
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
```

</figure>
</div>

<div class="grid" markdown>

<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 } &nbsp; [查看软件源列表](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>
2 changes: 1 addition & 1 deletion docs/mirrors/index.md
Original file line number Diff line number Diff line change
@@ -33,7 +33,7 @@ hide:

如果这里没有想使用的镜像站那可以看看其它运行模式和命令选项。软件源的速度区分刷新速度和下行速率,后者才是关键,具体请结合实际地理位置选择尝试,还可以通过[辅助工具网站](#工具网站)进行一些测试

:material-thumb-up-outline: 使用建议:速度上推荐 `中科大`、`字节跳动(火山引擎)`,地域兼容性上推荐 `阿里云`、`腾讯云`,境外、海外或复杂网络环境下不建议使用 `清华(TUNA)` 等容易阻断的镜像站
:material-thumb-up-outline: 使用建议:速度上推荐 `中科大`、`字节跳动(火山引擎)`,地域兼容性上推荐 `阿里云`、`腾讯云`,软件源种类上推荐 `南京大学`,境外、海外或复杂网络环境下不建议使用 `清华(TUNA)` 等容易阻断的镜像站

??? note "中国大陆教育网(点击展开查看)"

89 changes: 81 additions & 8 deletions docs/other/index.md
Original file line number Diff line number Diff line change
@@ -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` &nbsp; `Ubuntu` &nbsp; `Kali` &nbsp; `Linux Mint` &nbsp; `Deepin` &nbsp; `Zorin OS` &nbsp; `Armbian` &nbsp; `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` &nbsp; `CentOS` &nbsp; `Rocky Linux` &nbsp; `AlmaLinux` &nbsp; `Fedora` &nbsp; `openEuler` &nbsp; `OpenCloudOS` &nbsp; `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
```
- ### 关于服务报错无法启动
16 changes: 16 additions & 0 deletions docs/sponsor/index.md
Original file line number Diff line number Diff line change
@@ -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')">
25 changes: 24 additions & 1 deletion docs/stylesheets/extra.css
Original file line number Diff line number Diff line change
@@ -43,6 +43,10 @@
}
}

.home-cmd pre>code {
padding-right: 3em;
}

.heart {
animation: heart 1000ms infinite;
}
@@ -108,8 +112,27 @@
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 changes: 3 additions & 3 deletions docs/theme/partials/toc.html
Original file line number Diff line number Diff line change
@@ -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>
28 changes: 18 additions & 10 deletions docs/use/index.md
Original file line number Diff line number Diff line change
@@ -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)>/<软件源仓库(路径)>`
接下来是一些高级用法的举例

2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 678f304

Please sign in to comment.