虽然 openSUSE 官方的说明中表示,使用 zypper 更新系统的时候,会根据地理位置自动选用较近(通常速度也较快)的镜像站点来下载更新包。实际使用过程中似乎并不是这样的。
最近这段时间更新 openSUSE 经常遇到错误,不管是 Leap 15.4 还是 Tumbleweed 都这样。类似于,
Retrieving repository 'Update repository with updates from SUSE Linux Enterprise 15' metadata .......................................................[error] Repository 'Update repository with updates from SUSE Linux Enterprise 15' is invalid. [repo-sle-update|http://download.opensuse.org/update/leap/15.4/sle/] Valid metadata not found at specified URL History: - [|] Error trying to read from 'http://download.opensuse.org/update/leap/15.4/sle/' - Download (curl) error for 'http://download.opensuse.org/update/leap/15.4/sle/content': Error code: Curl error 56 Error message: Recv failure: Connection reset by peer
偶尔用代理的情况下又可以更新成功。开始我还以为是网站被墙了。
转头一想,不对啊,为什么没有使用比较近的镜像源来更新,而非要连到官方的主服务器呢?我记得之前还听说过几次主服务器因为访问量过大而拥堵的情况。看来 zypp.conf
里面设定的使用优先使用地理邻近的镜像源的情况并没有起作用。于是搜了搜,找到了手动更换源地址来使用 MirrorCache 的说明,原来是需要自己将系统中的源配置文件中的地址给改了才行。
下面的指令可以查询当前源的地址,
grep baseurl /etc/zypp/repos.d/*.repo
如果要批量改成 https://mirrorcache.opensuse.org/,则可以使用下面的指令,
sudo sed -i "s,http://download.opensuse.org,https://mirrorcache.opensuse.org,g" /etc/zypp/repos.d/*.repo
注意看,这个 mirrorcache 的地址是使用了加密连接 HTTPS 的。现在更新起系统来终于飞快了。虽然以前也不算慢,可是想想自己给官方源的服务器造成了那么多不必要的压力,就感觉很愧疚。
更新 2023-02-12
这样修改来强制使用镜像站点更新,下载软件包的速度确实飞快。但是也可能偶尔会带来问题,比如下载软件包的时候会提示某些软件包的摘要验证(Digest verification)失败。此时会有如下的警告,
Retrieving: libspice-client-glib-2_0-8-0.41-4.3.x86_64.rpm ......................................[done] Warning: Digest verification failed for file 'libspice-client-glib-2_0-8-0.41-4.3.x86_64.rpm' [/var/tmp/AP_0xkxnbg3/x86_64/libspice-client-glib-2_0-8-0.41-4.3.x86_64.rpm] expected 8c489d71ea08f0bcf2f93d3f731c22fbee0b1c696ef67abd298f38d0f8dc2a83c0376bc9201db539c1b10e15a726 dec396bc413cc428bd69ce33d3c7bc6d4b3b but got cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877e ec2f63b931bd47417a81a538327af927da3e Accepting packages with wrong checksums can lead to a corrupted system and in extreme cases even to a s ystem compromise.
此时可以根据提示 discard 当前下载然后重试。有时候重试能够正确获取,也有可能多次重试依然遇到同样的错误。实际上如果换个时间重试可能又都没问题。
这个问题极有可能是因为下载过程出错,当然也可能是镜像源上的软件包本身有问题。如果想确认的话,可以手工下载出错的软件包来检查。例如,针对上面的软件包 libspice-client-glib,
> wget -c https://mirrorcache.opensuse.org/tumbleweed/repo/oss/x86_64/libspice-client-glib-2_0-8-0.41-4.3.x86_64.rpm > rpm --checksig ./libspice-client-glib-2_0-8-0.41-4.3.x86_64.rpm ./libspice-client-glib-2_0-8-0.41-4.3.x86_64.rpm: digests signatures OK
手工检查发现没有问题。
如果换个时间再升级一直遇到同样的问题,可以退回到使用 download.opensuse.org 这个源地址。将前文中的操作反过来就行了。©
本文发表于水景一页。永久链接:<https://cnzhx.net/blog/update-opensuse-from-mirrorcache/>。转载请保留此信息及相应链接。
引用通告: 升级 openSUSE Leap 15.3 到 Leap 15.4 | 水景一页
哥,有没有办法和https://review.tumbleweed.boombatower.com/about.html
有没有法和这个一起用呢?
可以的。不过有些镜像站点没有同步 history 那个文件夹。