解码器一键安装装不上~[已解决]

今天本来一键安装解码器,出现了冲突…

問題: k3b-codecs-2.0.80+git20150209.2250-1.1.x86_64 需要 k3b = 2.0.80+git20150209.2250-1.1,但無法提供此需求
  無法安裝的提供者: k3b-2.0.80+git20150209.2250-1.1.i586[Packman Repository]
                   k3b-2.0.80+git20150209.2250-1.1.x86_64[Packman Repository]
                   k3b-2.0.80+git20150209.2250-1.1.i586[packman]
                   k3b-2.0.80+git20150209.2250-1.1.x86_64[packman]
解決方案 1:安裝 k3b-2.0.80+git20150209.2250-1.1.x86_64 (並變更廠商)
  openSUSE  -->  http://packman.links2linux.de
解決方案 2:請勿安裝 k3b-codecs-2.0.80+git20150209.2250-1.1.x86_64
解決方案 3:請勿安裝 k3b-codecs-2.0.80+git20150209.2250-1.1.x86_64
解決方案 4:藉由忽略某些它的相依性破壞 k3b-codecs-2.0.80+git20150209.2250-1.1.x86_64 

有 3 个这样的问题,全都选择了「1」,不过开始安装后,出现了

正在取出 套件 libx265-32-0.32hg20140928-2.6.x86_64                 (1/67), 466.3 KiB (已解開   2.1 MiB)
正在取出: libx265-32-0.32hg20140928-2.6.x86_64.rpm ............................................. 錯誤]
檔案 './Essentials/x86_64/libx265-32-0.32hg20140928-2.6.x86_64.rpm' 無法在媒體 'http://ftp.gwdg.de/pub/linux/packman/suse/openSUSE_13.1/' 中找到

进到 ftp.gwdg.de/pub/linux/packman/suse/openSUSE_13.1/Essentials/x86_64/ 去看,发现 libx265-32-0.32hg20140928-2. 6 .x86_64.rpm 没有,只有 libx265-32-0.32hg20140928-2. 7 .x86_64.rpm ,这种情形该如何处置?

刷新源 sudo zypper ref

从我的 iPhone 发送,使用 Tapatalk

@maguerite, 谢谢,已经装好。

不过想请教下,这问题的原因和解决的逻辑是什么?

依照我粗浅的理解,一键安装就是一个 metadata 的文档,指引 zypper 该加什么源,以及从该源安装什么套件。
那照道理说,第一次一件安装时,该源就应该是最新的状态。
又为何使用 refresh 源之后就可以安装了?

原因就是没有刷新源啊,解决的逻辑很简单啊,找不到即是没有,但源里必须有那个包名,那就打开网页访问那个源看看喽,看到了新版本,那就是本地缓存的元数据不正确,同步下就好了。

因为一键安装只指定包名不指定版本(你可以自己用文本编辑器打开看,是个 xml 文件很好理解),所以两种可能:

一是你之前加过 packman 源,而 zypper 和 YaST 刷新缓存都是有周期的不是每次都刷,你正好处在周期里打开了一键安装,于是不刷新直接按照本地缓存的包名和版本进行安装。

二是源服务器上供你下载到本地的元数据也是要生成的,是由 Open Build Service 的 Publisher 生成,它可以看作一系列 cron 任务,比如从编译服务器把编好的包复制到下载服务器,然后跑 md5sum/sha2sum 之类的提取软件包特征信息到文本文件,压缩那个文本文件为 gz 格式供你下载。

那比如要复制的包太多了,某些包已经复制过去甚至同步到镜像了,但复制过程还没有结束,那新的元数据还没来得及生成,你恰好这时刷新的源,那即使你再刷新也是获取不到新的元数据。这种情况我也没有遇到过,因为太罕见了,但要是服务器硬盘满了或突然坏了就有可能。另外 packman 并不是发布服务器和下载服务器一体的,软件包和元数据发布到发布服务器还需要同步到下载服务器,这个过程最快也要 5 到 15 分钟,不可能这么长时间元数据还没有出来。除非是代码问题导致 Publisher 直接停止了。比如编译占用内存太大没有内存运行 Publisher,那之前编译好的就不能及时生成元数据。

总之过程就是这样,环节很多,你介入的时间点很可能产生一些巧合。

从我的 iPhone 发送,使用 Tapatalk

@marguerite, 理解了,谢谢您清楚的解说
看来这种复杂的「timing」问题,只能归咎人品了… :weary: