Naposledy aktivní 1776932712

支持自动判断Rocky8/9

doracoin's Avatar doracoin revidoval tento gist 1776932712. Přejít na revizi

1 file changed, 223 insertions

update-source.sh(vytvořil soubor)

@@ -0,0 +1,223 @@
1 + #!/usr/bin/env bash
2 +
3 + # 如果遇到 windows 格式污染请执行:
4 + # sed -i 's/\r$//' rocky-repo.sh
5 +
6 + set -euo pipefail
7 +
8 + REPO_DIR="/etc/yum.repos.d"
9 + BACKUP_DIR="${REPO_DIR}/backup_$(date +%F_%H-%M-%S)"
10 + REPO_FILE="${REPO_DIR}/Rocky-Base.repo"
11 +
12 + # ==============================
13 + # 检测 Rocky 版本
14 + # ==============================
15 + detect_version() {
16 + if [[ -f /etc/os-release ]]; then
17 + . /etc/os-release
18 + ROCKY_VER=$(echo "$VERSION_ID" | cut -d. -f1)
19 + else
20 + echo "无法检测系统版本"
21 + exit 1
22 + fi
23 +
24 + echo "[+] 检测到 Rocky Linux $ROCKY_VER"
25 + }
26 +
27 + # ==============================
28 + # 选择镜像源
29 + # ==============================
30 + select_mirror() {
31 +
32 + echo "==============================="
33 + echo " 选择 Rocky Linux 镜像源"
34 + echo "==============================="
35 + echo "1. 阿里云(推荐)"
36 + echo "2. 清华 TUNA"
37 + echo "3. 华为云"
38 + echo "4. 腾讯云"
39 + echo "5. 官方源"
40 + echo "==============================="
41 +
42 + read -rp "请输入编号: " choice
43 +
44 + case "$choice" in
45 + 1) BASEURL="https://mirrors.aliyun.com/rockylinux/${ROCKY_VER}" ;;
46 + 2) BASEURL="https://mirrors.tuna.tsinghua.edu.cn/rockylinux/${ROCKY_VER}" ;;
47 + 3) BASEURL="https://repo.huaweicloud.com/rocky/${ROCKY_VER}" ;;
48 + 4) BASEURL="https://mirrors.cloud.tencent.com/rocky/${ROCKY_VER}" ;;
49 + 5) BASEURL="https://dl.rockylinux.org/pub/rocky/${ROCKY_VER}" ;;
50 + *) echo "无效选择"; exit 1 ;;
51 + esac
52 + }
53 +
54 + # ==============================
55 + # 备份 repo
56 + # ==============================
57 + backup_repo() {
58 +
59 + echo "[+] 备份 repo → $BACKUP_DIR"
60 +
61 + mkdir -p "$BACKUP_DIR"
62 + cp -a ${REPO_DIR}/*.repo "$BACKUP_DIR"/ 2>/dev/null || true
63 +
64 + }
65 +
66 + # ==============================
67 + # 写入 repo
68 + # ==============================
69 + write_repo() {
70 +
71 + echo "[+] 写入 Rocky repo"
72 +
73 + mkdir -p "${REPO_DIR}/bak_old"
74 + mv ${REPO_DIR}/*.repo "${REPO_DIR}/bak_old/" 2>/dev/null || true
75 +
76 + cat > "$REPO_FILE" <<EOF
77 + [BaseOS]
78 + name=Rocky Linux \$releasever - BaseOS
79 + baseurl=${BASEURL}/BaseOS/\$basearch/os/
80 + enabled=1
81 + gpgcheck=0
82 +
83 + [AppStream]
84 + name=Rocky Linux \$releasever - AppStream
85 + baseurl=${BASEURL}/AppStream/\$basearch/os/
86 + enabled=1
87 + gpgcheck=0
88 +
89 + [Extras]
90 + name=Rocky Linux \$releasever - Extras
91 + baseurl=${BASEURL}/extras/\$basearch/os/
92 + enabled=1
93 + gpgcheck=0
94 + EOF
95 +
96 + # Rocky 8/9 额外 repo
97 + if [[ "$ROCKY_VER" -ge 8 ]]; then
98 +
99 + cat >> "$REPO_FILE" <<EOF
100 +
101 + [CRB]
102 + name=Rocky Linux \$releasever - CRB
103 + baseurl=${BASEURL}/CRB/\$basearch/os/
104 + enabled=1
105 + gpgcheck=0
106 + EOF
107 +
108 + fi
109 +
110 + }
111 +
112 + # ==============================
113 + # 刷新缓存
114 + # ==============================
115 + refresh_cache() {
116 +
117 + echo "[+] 清理缓存"
118 +
119 + dnf clean all
120 +
121 + echo "[+] 构建缓存"
122 +
123 + dnf makecache
124 +
125 + }
126 +
127 + # ==============================
128 + # 可选组件
129 + # ==============================
130 + install_optional() {
131 +
132 + read -rp "是否安装 EPEL?(y/n): " epel
133 +
134 + if [[ "$epel" == "y" ]]; then
135 + dnf install -y epel-release || true
136 + fi
137 +
138 + # Rocky 8/9 推荐启用 CRB
139 + read -rp "是否启用 CRB?(y/n): " crb
140 +
141 + if [[ "$crb" == "y" ]]; then
142 +
143 + if [[ "$ROCKY_VER" == "8" ]]; then
144 + dnf config-manager --set-enabled powertools
145 + else
146 + dnf config-manager --set-enabled crb
147 + fi
148 +
149 + fi
150 +
151 + }
152 +
153 + # ==============================
154 + # 回滚
155 + # ==============================
156 + rollback() {
157 +
158 + echo "[!] 可用备份:"
159 +
160 + ls -d ${REPO_DIR}/backup_* 2>/dev/null || {
161 + echo "没有备份"
162 + exit 1
163 + }
164 +
165 + read -rp "输入备份路径: " dir
166 +
167 + if [[ -d "$dir" ]]; then
168 +
169 + rm -f ${REPO_DIR}/*.repo
170 + cp -a "$dir"/*.repo "$REPO_DIR"/
171 +
172 + echo "[✓] 回滚完成"
173 +
174 + else
175 +
176 + echo "[✗] 目录不存在"
177 + exit 1
178 +
179 + fi
180 +
181 + }
182 +
183 + # ==============================
184 + # 主流程
185 + # ==============================
186 + main() {
187 +
188 + detect_version
189 +
190 + echo "1. 更换源"
191 + echo "2. 回滚"
192 +
193 + read -rp "请选择: " action
194 +
195 + case "$action" in
196 +
197 + 1)
198 +
199 + select_mirror
200 + backup_repo
201 + write_repo
202 + refresh_cache
203 + install_optional
204 +
205 + echo "[✔] Rocky 换源完成"
206 + ;;
207 +
208 + 2)
209 +
210 + rollback
211 + ;;
212 +
213 + *)
214 +
215 + echo "无效选择"
216 + exit 1
217 + ;;
218 +
219 + esac
220 +
221 + }
222 +
223 + main
Novější Starší