dnf 安装 rpm 包时怎么同步接受 gpgkey 呢?

2022-11-22 00:25:36 +08:00
 dzdh

问题是这样的

我在 almalinux 中dnf install -y epel-release。ok ,没问题,装上了。在/etc/pki/rpm-gpg中有个文件RPM-GPG-KEY-EPEL-9

然后我执行rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9没问题。

但是在dnf update时,仍然会提示是否信任/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9

那我rpm --import了个寂寞?

strace 了 rpm 命令看操作了/var/lib/rpm/rpmdb.sqlite一个 sqlite 数据库,这个文件是写入到数据库了吗?

能不能或有没有什么方法像 debian/ubuntu 那样把 key 文件放到 /etc/apt/trusted.d/或者 /usr/share/gpg/key 目录中就表示被接受了的方法呢?

在 rhel/rocky 都复现了

1918 次点击
所在节点    Linux
18 条回复
julyclyde
2022-11-22 08:55:18 +08:00
你是不是从旧版本升级上来的?

应该还有个提示信息 RPM database read only 吧
dzdh
2022-11-22 09:07:35 +08:00
@julyclyde

容器中操作

echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && dnf makecache && dnf upgrade -y && dnf install -y epel-release && dnf makecache && dnf upgrade

就出来了
julyclyde
2022-11-22 09:17:41 +08:00
旧版本的 rpm 只支持 berkeley db 作为 rpmdb
新的是 sqlite
新版本 rpm 软件支持多种 数据库 backend ,其中 berkeley db 是 readonly 的

前几天我升级的时候也遇到这个问题,需要运行 rebuilddb ,rpm 会把所有认识的数据都读出来,然后写到一个新的可以写的 backend 去

所以我问你,是不是从旧版本升级上来的
按说如果你全新安装,它应该“本来就是”sqlite 的啊,不应该出现写不进去的问题?
dzdh
2022-11-22 09:54:26 +08:00
@julyclyde 所以就很懵。按照上面的操作。使用 almalinux:9 的镜像就会在 upgrade 时候出来那个提示了

但是确实 install epel-release 是 9-2.el9 。upgrade 的时候就变成了 9-4.el9
julyclyde
2022-11-22 10:43:58 +08:00
@dzdh 哦,原来你手头的系统并不是完全受控的,而是二手的啊
那个镜像可能是以前升级上来的而非全新安装。不过这事很难考证

你试试 rpm --rebuilddb 吧,如果能搞定就别深究了
dzdh
2022-11-22 11:18:26 +08:00
@julyclyde

也就是说如果执行过 rpm --import /etc/xxx 再执行 rpm --rebuilddb 理论上应该 upgrade/update 是不会再二次提示确认是否信任 gpgkey 对吧
julyclyde
2022-11-22 11:24:24 +08:00
@dzdh 顺序反了
需要先 rpm --rebuilddb 然后再 import 才能成功 import 吧

按你这个顺序,import 应该是失败的才对啊
dzdh
2022-11-22 11:29:46 +08:00
@julyclyde
并不行。rpm --rebuilddb 后 dnf upgrade 依然提示是否信任 key
dzdh
2022-11-22 11:33:01 +08:00
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf
dnf makecache
dnf upgrade -y
dnf install -y epel-release
dnf makecache
rpm --rebuilddb
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-9
dnf upgrade

好了
julyclyde
2022-11-22 11:46:09 +08:00
@dzdh rebuilddb 只是给 import 提供了前提环境,并没有自动 import 啊
你还是需要 import 才会免提示是否信任的
dzdh
2022-11-22 11:58:37 +08:00
@julyclyde #10

为啥 install 后不能自动信任呢。我都给你 install 了还能不信任么。能 install 后的同时自动信任么
julyclyde
2022-11-22 12:47:07 +08:00
@dzdh 就是“怕你乱 install”才问你是否信任的
加-y 是不是可以免提问?没试过
dzdh
2022-11-22 13:20:05 +08:00
@julyclyde #12

https://bugzilla.redhat.com/show_bug.cgi?id=1768206

remi 装 php 无论如何都会提示。搜到了如上一个 bug (不是 bug 的 bug )

官方是这么说的:
如果一个 repo 开启了 repo_gpgcheck=1 ,那么 gpgkey 是同一个,但是 rpm 和 dnf(yum)会从两个地方读。

rpm import 以后 dnf 也不认。必须只能强制的交互式的输入个 y 以便录入到 dnf 的数据库中。

以上问题只存在 repo 开启了 repo_gpgcheck 的前提下。

sed -i 's/repo_gpgcheck=1/repo_gpgcheck=0/g' /etc/yum.repos.d/remi* 清净了。。。


以上及本贴问题是在打业务的容器镜像。老是被中断,现在好了。
julyclyde
2022-11-22 13:46:16 +08:00
@dzdh 两个软件的 key 确实是分开管理的。比较割裂
dzdh
2022-11-22 17:24:53 +08:00
@julyclyde #14

RedHat 及同系列的用 minimal 版镜像或者生产环境用 microdnf 就没有这些提示了。
julyclyde
2022-11-23 08:48:37 +08:00
@dzdh 那可能说明这个镜像是一手的,而不是像你开始用的那个一样是升级上来的?
dzdh
2022-11-23 09:00:38 +08:00
@julyclyde #16

no 啊没升级过啊
julyclyde
2022-11-23 09:05:22 +08:00
@dzdh 那在你搞清楚了 rpm key 和 dnf key 是两个不同的管理渠道之后,能不能重新梳理一下最开始的问题呢
你看到的是否信任 key 到底是 dnf 的还是 rpm 的
你为什么用 rpm --import 去尝试处理 dnf 的问题?
为什么用 strace rpm 的方法去调查 dnf 的问题
以及,为什么我建议的 rpm rebuilddb 竟然能处理 dnf 的问题?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/896941

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX