zypper 提示软件源已过时

在这台昨天晚上刚安装完毕的 Tumbleweed 下面,我遇到了 Zypper 关于软件源过时的提示:

$ zypper info amarok 
访问 'https://downloads.1password.com/linux/rpm/stable/x86_64/media.1/media' 的准入请求被拒绝。
中止、重试、还是忽略呢? [a/r/i/...? 显示全部选项] (a): 
软件源 '1password' 已经过时。您可以 root 身份运行 'zypper refresh' 更新它。
软件源 'Packman' 已经过时。您可以 root 身份运行 'zypper refresh' 更新它。
正在加载软件源数据...
正在读取已安装的软件包...
…… ……

这些提示几乎反复发生,从今天白天开始,只要我执行 zypper 命令,多数情况下会有这么个提示,我一般会输入 a 或者 i 跳过去,也按照提示执行 zypper ref,之后一段时间不会再有提示,但过一会儿这提示又会回来,非常烦人。

不知道大家有无遇到过类似情况,有没有办法解决?或者有什么方向可以调查一下问题?

你用 sudo zypper 干就会自动刷新过时的软件源了。提示过时是预期行为,不是非预期行为。

今天一天这个提示出现了不下 5 次,我执行了 refresh 命令后 30 分钟左右再次出现,这频率应该不大正常吧?或者说这才是 TW 的常态,我之前恰巧都没遇到过?

@liuf 这个确实不太正常,TW 一个礼拜最多也就发布几个 snapshot。我看你提示的软件源是 packman 和 1password 啊,zypper lr -P 让我看下你的源

我也遇到这种问题,而且我用的版本是 Leap 15.3
查了很多资料找不到问题所在。

liuf:Org/ $ zypper lr -P                                                                           [11:21:43]
#  | Alias                    | Name                        | Enab-> | GPG Ch-> | Re-> | Prio->
---+--------------------------+-----------------------------+--------+----------+------+-------
 8 | packman                  | USTC:Packman                | 是     | (r ) 是  | 是   |   90
 1 | 1password                | 1password                   | 是     | (r ) 是  | 否   |   99
 2 | home_agraul              | home:agraul                 | 是     | (r ) 是  | 是   |   99
 3 | home_fusionfuture_office | home:fusionfuture:office    | 是     | (r ) 是  | 是   |   99
 4 | home_fusionfuture_typora | home:fusionfuture:typora    | 是     | (r ) 是  | 是   |   99
 5 | home_qvshuo              | home:qvshuo                 | 是     | (r ) 是  | 是   |   99
 6 | home_zzndb               | home:zzndb                  | 是     | (r ) 是  | 是   |   99
 7 | openSUSE-20220322-0      | openSUSE-20220322-0         | 是     | (r ) 是  | 是   |   99
 9 | repo-debug               | openSUSE-Tumbleweed-Debug   | 否     | ----     | ---- |   99
10 | repo-non-oss             | openSUSE-Tumbleweed-Non-Oss | 是     | (r ) 是  | 是   |   99
11 | repo-source              | openSUSE-Tumbleweed-Source  | 否     | ----     | ---- |   99
12 | repo-update              | openSUSE-Tumbleweed-Update  | 是     | (r ) 是  | 是   |   99
liuf:Org/ $ 

@liuf 你这源不对劲呀,openSUSE-20220322-0 这个源是永远不会更新的 ISO,所以根本不是 Tumbleweed 自己的问题,是你加了一堆 home 源的问题…那是人家自己的源,一晚上更新几百次都可以的 :joy:

我一般都是用 home 源安装完就 sudo zypper mr -d 禁用掉的。下次更新再自己打开。


@marguerite 我看 openSUSE-20220322-0 指向的是个 URL,这个是不会更新的吗?

另外提示我有问题的是 Packman 源跟 1Password 官方网站的源,我姑且认为是第三方源有内容更新吧,虽然不确定 Zypper 在什么情况下会提示已经过时。我理解的是不管什么源有更新,在我手动刷新之前应该都不会提示吧?不然怎么 TW 执行 zypper dup 之前也没有提示源已经过时,执行 dup 就能刷出来一堆可更新的包?

刚才测试这个问题没有出现,我再观察几次。

那个是会更新的,不过那个 URL 一般不是叫做 repo-oss 的吗?你这个名字让我以为是 ISO。

这里的条件:

manager.refreshMetadata( repo, RepoManager::RefreshIfNeeded );

就是非 root 用户提示软件源过时的条件,即这个函数报 exception 就提示源过时。可以单独提炼出来写个小程序让你看看为什么你的源提示你过时(即什么时候报 exception)。

所以你的手动刷新前不会提示就错了,都刷新了还提示你也没有意义了,当然是在没刷新的时候提示你。

你拿 dup 做对比肯定是不对的。你 dup 肯定是 sudo 的,你可以试试非 root 用户跑 dup 肯定也会提示你源过时。因为上面那个条件是出现在 init_repos 函数里面,只要你用源的行为那么预期结果都是返回一致的。

这串数字是 Tumbleweed 的安装日期,我的系统安装后也是保留了这个数字,自己给改成正常的名称。

@liuf

经过一番 debug, 直接说结论:它会校验本地 repo 的 checksum 和远程源的 cookie,对不上就会触发刷新。不用 root 运行会写不了本地 repo, 就会触发你那个提示。

收到。感谢!

本主题在最后一个回复创建后60分钟后自动锁定。不再允许添加新回复。