在这台昨天晚上刚安装完毕的 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 源的问题…那是人家自己的源,一晚上更新几百次都可以的
我一般都是用 home 源安装完就 sudo zypper mr -d 禁用掉的。下次更新再自己打开。
liuf
10
@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, 就会触发你那个提示。
system
(system)
关闭
15
本主题在最后一个回复创建后60分钟后自动锁定。不再允许添加新回复。