马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一、为什么要换 yum 源
CentOS Stream 9 默认指向官方仓库,国内直连经常又慢又容易断,dnf install 跑到一半超时是常事。换成清华、阿里这类镜像站,下载速度快一个量级,也少不少莫名报错。
要特别留意一点:CentOS Stream 9 走的是 dnf(yum 在这里只是 dnf 的软链接包装),仓库文件格式和老版本不太一样,而且默认配置里 metalink= 会让 dnf 自己去各镜像站询问元数据,这也是慢的原因之一。下面这套流程就是针对 Stream 9 写的,核心是把 metalink 注释掉、改成写死的 baseurl。
二、第一步:进仓库配置目录
cd /etc/yum.repos.d
ls -l
这个目录下放着所有 .repo 文件,ls 一下看清楚有哪些仓库文件(CentOS-Stream-AppStream、BaseOS、Extras、CRB 等),后面要逐个处理。
三、第二步:写一个批量替换脚本
新建 update_mirror.pl:
vim update_mirror.pl
进去后按 i 进编辑模式,把下面这段粘进去(Esc 退出编辑,Shift + : 进末行模式输入 wq 保存退出):
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
my $mirrors = 'https://mirrors.tuna.tsinghua.edu.cn/centos-stream';
if (@ARGV < 1) {
die "Usage: $0 <filename1> <filename2> ...\n";
}
while (my $filename = shift @ARGV) {
my $backup_filename = $filename . '.bak';
rename $filename, $backup_filename;
open my $input, "<", $backup_filename;
open my $output, ">", $filename;
while (<$input>) {
s/^metalink/# metalink/;
if (m/^name/) {
my (undef, $repo, $arch) = split /-/;
$repo =~ s/^\s+|\s+$//g;
($arch = defined $arch ? lc($arch) : '') =~ s/^\s+|\s+$//g;
if ($repo =~ /^Extras/) {
$_ .= "baseurl=${mirrors}/SIGs/\$releasever-stream/extras" .
($arch eq 'source' ? "/${arch}/" : "/\$basearch/") . "extras-common\n";
} else {
$_ .= "baseurl=${mirrors}/\$releasever-stream/$repo" .
($arch eq 'source' ? "/" : "/\$basearch/") .
($arch ne '' ? "${arch}/tree/" : "os") . "\n";
}
}
print $output $_;
}
}
这段脚本做了两件事:把每一行的 metalink= 注释掉,然后在每个 name= 后面补一行指向清华镜像的 baseurl=,同时对每个文件留一份 .bak 备份。用 perl 而不是手改,是因为仓库文件多、格式不统一,手工逐个编辑很容易漏。
四、第三步:装 perl
编辑器写好了,跑 perl 需要 perl 解释器(精简安装常常没有):
dnf install perl
提示确认按 y 回车,可能要连续确认两次。
五、第四步:执行脚本批量换源
perl update_mirror.pl CentOS-Stream-*.repo
把待处理的仓库文件名作为参数传进去。执行完再 ls -l 看一眼,每个 .repo 旁边都应该多出一个 .bak。
六、第五步:清缓存并重建元数据
dnf clean all
dnf makecache
第一条清掉旧的包信息和缓存,第二条重新拉元数据。看到"元数据缓存已建立"就说明换源成功了,之后 dnf install 速度会明显不一样。
七、验证与回退
- 验证:随便装个小包试试,比如
dnf install -y htop,跑得顺就说明链路通了。
- 回退:把
.bak 文件改回原文件名覆盖回去,再 dnf clean all,就回到官方源状态。这也是前面一定要备份的原因。
八、几个提醒
- 版本要对上:9 流是 centos-stream,别拿老 CentOS 7 的 repo 模板往 Stream 9 上套,架构完全不同。
- 镜像站路径差异:不同镜像站的目录结构不完全一致,换源脚本里的
$mirrors 变量按你实际用的镜像站改,别一律照抄清华地址。
- CRB / Extras 等额外仓库:Stream 9 拆了 CRB(CodeReady Builder)仓库,这些也要一起换,漏了后面装编译工具链会报找不到包。
- 别只改 sources.list:Stream 9 的仓库都在
/etc/yum.repos.d/ 下的 .repo 里,改 /etc/yum.repos.d/CentOS-Stream-*.repo 才有效。
九、小结
给 CentOS Stream 9 换源的动作就是五步:进 /etc/yum.repos.d → 写 update_mirror.pl 批量把 metalink 注释掉并补 baseurl → dnf install perl → perl update_mirror.pl CentOS-Stream-*.repo → dnf clean all && dnf makecache。用脚本批量处理比手工编辑稳,因为每个仓库文件都会留一份 .bak,换错了直接覆盖回去就能回滚。以后遇到国内机器 dnf 慢,第一反应就该是先看仓库里是不是 metalink 在作怪。
qidao123.com企服评测-应用市场 编辑提示
|