Zuletzt aktiv 1776932712

支持自动判断Rocky8/9

Änderung 301c3242ef49f551373d2cc983970ee2be0c40cc

update-source.sh Orginalformat
1#!/usr/bin/env bash
2
3# 如果遇到 windows 格式污染请执行:
4# sed -i 's/\r$//' rocky-repo.sh
5
6set -euo pipefail
7
8REPO_DIR="/etc/yum.repos.d"
9BACKUP_DIR="${REPO_DIR}/backup_$(date +%F_%H-%M-%S)"
10REPO_FILE="${REPO_DIR}/Rocky-Base.repo"
11
12# ==============================
13# 检测 Rocky 版本
14# ==============================
15detect_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# ==============================
30select_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# ==============================
57backup_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# ==============================
69write_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]
78name=Rocky Linux \$releasever - BaseOS
79baseurl=${BASEURL}/BaseOS/\$basearch/os/
80enabled=1
81gpgcheck=0
82
83[AppStream]
84name=Rocky Linux \$releasever - AppStream
85baseurl=${BASEURL}/AppStream/\$basearch/os/
86enabled=1
87gpgcheck=0
88
89[Extras]
90name=Rocky Linux \$releasever - Extras
91baseurl=${BASEURL}/extras/\$basearch/os/
92enabled=1
93gpgcheck=0
94EOF
95
96 # Rocky 8/9 额外 repo
97 if [[ "$ROCKY_VER" -ge 8 ]]; then
98
99 cat >> "$REPO_FILE" <<EOF
100
101[CRB]
102name=Rocky Linux \$releasever - CRB
103baseurl=${BASEURL}/CRB/\$basearch/os/
104enabled=1
105gpgcheck=0
106EOF
107
108 fi
109
110}
111
112# ==============================
113# 刷新缓存
114# ==============================
115refresh_cache() {
116
117 echo "[+] 清理缓存"
118
119 dnf clean all
120
121 echo "[+] 构建缓存"
122
123 dnf makecache
124
125}
126
127# ==============================
128# 可选组件
129# ==============================
130install_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# ==============================
156rollback() {
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# ==============================
186main() {
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
223main