解决由Linux发行版版本号导致的dnf 404问题

本文最后更新于:3 个月前

点击获得封面头图

此文章使用CC-BY-NC协议,协议详情介绍请看此文


前言

写文章的这会, 我正处理着一个前所未见的报错:

404!

没错, 你看到的就是: 熟悉而陌生的404错误!

熟悉是因为我们在浏览网页时常见, 陌生在它出现在我的dnf的报错里.

众所周知, 404代表查无此人, 也就是说, 在互联网上, 没有这个东西的一席之地.

起初我以为是代理问题, 于是export了代理, 重试后还是同样的报错. 使用浏览器打开链接后, 也提示了404.

如图所示

我不见棺材不落泪, 还要跳转到镜像站的域名首页, 最终发现人家运行的好好的.

至此, 我确定了一件事: 是我本地的问题.

摸索

到底是哪里的问题, 导致了404呢?

于是, 我开始研究起了这个网站.

本地不知从何下手.

一般这种包管理器的镜像网站, 都提供了树状图式的预览. 依靠这种顺藤摸瓜的方式, 很快, 我发现了问题所在:

如图所示

什么鬼, 为什么我的发行版版本号多了小版本号???

而镜像网站并没有小版本号.

找到了问题, 接下来就要找解决方案了.

解决

每当我处理Linux的报错时, 耳畔总能回响起不知道是谁说过的那句话:

“Linux一切皆文件”

很自然的, 我去查看了dnf的换源文件, 路径是 /etc/yum.repos.d, 里面塞满了.repo文件.

我随便打开了一个repo文件, 发现了非常关键的东西:

如图所示

报错图片中出现的38.1实际上是一个变量, 而圈住的$releasever就是这个变量, 即为导致我dnf报错的罪魁祸首!

因为$releasever是一个变量, 于是我尝试echo了一下:

如图所示

居然echo不了! 奇怪了.

我以为是权限问题, 毕竟dnf在更新时是需要sudo的. 不过, 切换到root用户后, 还是查无此值.

怎么办呢?

那我设置一个环境变量得了.

如图所示

事与愿违, 失败了.

不过紧接着, 我又想起来另一种设置变量的方法:

也就是指令运行时, 所谓的参数, 例如运行electron软件常用--no-sandbox.

试一试!

我在dnf update后面加上了--releasever=38, 然后:

如图所示

成功!

觉得这样有点麻烦的, 可以编辑一下自己的.zshrc.bashrc, 添加:

1
alias up='sudo dnf update --releasever=38'

以后就能通过输入up这个指令完成update啦!

总结

  1. 有关包管理器(尤其是dnf)出现404报错的, 需要检查镜像网站有没有提供此发行版版本的内容;

  2. 使用--为当前执行的指令加上运行参数.


我是听话的便当.

Bye~❛‿˂̵✧