解决由Linux发行版版本号导致的dnf 404问题
此文章使用
CC-BY-NC
协议,协议详情介绍请看此文
前言
写文章的这会, 我正处理着一个前所未见的报错:
没错, 你看到的就是: 熟悉而陌生的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
啦!
总结
有关包管理器(尤其是dnf)出现404报错的, 需要检查镜像网站有没有提供此发行版版本的内容;
使用
--
为当前执行的指令加上运行参数.
我是听话的便当.
Bye~❛‿˂̵✧