Utoljára aktív 1774279515

在CentOS停止支持后,社区上还为它保留了一些可用的软件源,这个脚本就是用来快速配置软件源的

updatesource.sh Eredeti
1#!/bin/bash
2
3# 如果遇到windows格式污染请执行:
4# sed -i 's/\r$//' updatesource.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}/CentOS-Base.repo"
11
12# ==============================
13# 选择源
14# ==============================
15select_mirror() {
16 echo "==============================="
17 echo " 选择 CentOS 7 Vault 源"
18 echo "==============================="
19 echo "1. 阿里云(推荐)"
20 echo "2. 清华 TUNA"
21 echo "3. 华为云"
22 echo "4. 网易"
23 echo "5. 官方 vault"
24 echo "==============================="
25
26 read -rp "请输入编号: " choice
27
28 case "$choice" in
29 1) BASEURL="http://mirrors.aliyun.com/centos-vault/7.9.2009" ;;
30 2) BASEURL="https://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009" ;;
31 3) BASEURL="https://repo.huaweicloud.com/centos-vault/7.9.2009" ;;
32 4) BASEURL="http://mirrors.163.com/centos-vault/7.9.2009" ;;
33 5) BASEURL="https://vault.centos.org/7.9.2009" ;;
34 *) echo "无效选择"; exit 1 ;;
35 esac
36}
37
38# ==============================
39# 备份
40# ==============================
41backup_repo() {
42 echo "[+] 备份 repo → $BACKUP_DIR"
43 mkdir -p "$BACKUP_DIR"
44 cp -a ${REPO_DIR}/*.repo "$BACKUP_DIR"/ 2>/dev/null || true
45}
46
47# ==============================
48# 写入 repo(无 EOF 版本)
49# ==============================
50write_repo() {
51 echo "[+] 写入新 repo"
52
53 # 清理旧 repo
54 mkdir -p "${REPO_DIR}/bak_old"
55 mv ${REPO_DIR}/*.repo "${REPO_DIR}/bak_old/" 2>/dev/null || true
56
57 # 写入新 repo
58 {
59 echo "[base]"
60 echo "name=CentOS-7 - Base"
61 echo "baseurl=${BASEURL}/os/x86_64/"
62 echo "enabled=1"
63 echo "gpgcheck=0"
64 echo ""
65
66 echo "[updates]"
67 echo "name=CentOS-7 - Updates"
68 echo "baseurl=${BASEURL}/updates/x86_64/"
69 echo "enabled=1"
70 echo "gpgcheck=0"
71 echo ""
72
73 echo "[extras]"
74 echo "name=CentOS-7 - Extras"
75 echo "baseurl=${BASEURL}/extras/x86_64/"
76 echo "enabled=1"
77 echo "gpgcheck=0"
78 } > "$REPO_FILE"
79}
80
81# ==============================
82# fastestmirror 控制
83# ==============================
84config_fastestmirror() {
85 CONF_FILE="/etc/yum/pluginconf.d/fastestmirror.conf"
86
87 if [[ ! -f "$CONF_FILE" ]]; then
88 echo "[!] 未找到 fastestmirror 插件,跳过"
89 return
90 fi
91
92 read -rp "是否关闭 fastestmirror?(y/n): " fm
93
94 if [[ "$fm" == "y" ]]; then
95 sed -i 's/^enabled=.*/enabled=0/' "$CONF_FILE"
96 echo "[+] 已关闭 fastestmirror"
97 else
98 sed -i 's/^enabled=.*/enabled=1/' "$CONF_FILE"
99 echo "[+] 已开启 fastestmirror"
100 fi
101}
102
103# ==============================
104# 刷新缓存
105# ==============================
106refresh_cache() {
107 echo "[+] 清理缓存"
108 yum clean all
109
110 echo "[+] 构建缓存"
111 yum makecache
112}
113
114# ==============================
115# 可选组件
116# ==============================
117install_optional() {
118 read -rp "是否安装 EPEL?(y/n): " epel
119 if [[ "$epel" == "y" ]]; then
120 yum install -y epel-release || true
121 fi
122
123 read -rp "是否启用 SCLo?(y/n): " sclo
124 if [[ "$sclo" == "y" ]]; then
125 yum install -y centos-release-scl || true
126 fi
127}
128
129# ==============================
130# 回滚
131# ==============================
132rollback() {
133 echo "[!] 可用备份:"
134 ls -d ${REPO_DIR}/backup_* 2>/dev/null || {
135 echo "没有备份"
136 exit 1
137 }
138
139 read -rp "输入备份路径: " dir
140
141 if [[ -d "$dir" ]]; then
142 rm -f ${REPO_DIR}/*.repo
143 cp -a "$dir"/*.repo "$REPO_DIR"/
144 echo "[✓] 回滚完成"
145 else
146 echo "[✗] 目录不存在"
147 exit 1
148 fi
149}
150
151# ==============================
152# 主流程
153# ==============================
154main() {
155 echo "1. 更换源"
156 echo "2. 回滚"
157 read -rp "请选择: " action
158
159 case "$action" in
160 1)
161 select_mirror
162 backup_repo
163 write_repo
164 config_fastestmirror
165 refresh_cache
166 install_optional
167 echo "[✔] 完成"
168 ;;
169 2)
170 rollback
171 ;;
172 *)
173 echo "无效选择"
174 exit 1
175 ;;
176 esac
177}
178
179main