[Arch][Linux] Pacman 疑难解答记录
pacman 支持软件包签名,会为软件包提供额外的安全性。默认配置,SigLevel = Required DatabaseOptional
将启用全局签名验证,但会被每个软件仓库的 SigLevel 行所覆盖。有关软件包签名和签名验证的更多细节,参见 pacman-key。
failed to init transaction (unable to lock database)
pacman 在改变软件包数据库前,比如安装软件包时,会创建一个文件锁 /var/lib/pacman/db.lck
。这会阻止其他 pacman 实例在同一时间修改软件包数据库。
如果 pacman 在更新数据库时被打断,旧锁可能保留下来。如果确认没有 pacman 实例在运行,那么删掉文件锁:
提示:以 root 身份运行
fuser /var/lib/pacman/db.lck
可以确认是否有其它进程仍在使用它。
signature from xxx is invalid
在执行 pacman -Syu
时出现下面错误:
同步系统时间
Pacman-key 依赖于系统时间。如果系统时间是错误的,(root 权限) 执行:
删除报错的包
如果相同的包持续失败,并且您确定 pacman-key
的相关操作是正确的,可以尝试移除软件包 rm /var/cache/pacman/pkg/packagename
或者 清空所有缓存,然后可以重新下载软件包。
重置所有密钥
如果要删除或重置系统,删除 /etc/pacman.d/gnupg
目录,杀死 gpg-agent
进程,并重新运行 pacman-key --init
。通过 pacman-key --populate
(或 pacman-key --populate archlinuxcn
) 重新添加默认密钥。
禁用签名检查
警告:小心使用,禁用签名检查,pacman 会自动安装不信任的软件包。
如果不在意软件包签名,可以完全禁用 PGP 签名检查,编辑 /etc/pacman.conf
并取消注释 [options]
下的如下行:
需要同时注释掉单独软件源的 SigLevel 设置,因为他们会覆盖全局设置。
package-name: signature from "packager" is unknown trust
在执行 pacman -Syu
时出现下面错误:
这是因为 package-name
软件包使用的 packager
的密钥不被本地的 pacman-key gpg
数据库信任。可能是密钥在加入密钥链之后失效了,可以通过下面方法解决:
发生这种情况是因为本地 pacman-key gpg 数据库中不存在和/或不信任软件包 package-name 中使用的打包程序密钥。 Pacman 似乎并不总是能够在继续之前检查密钥是否已收到并标记为可信。这也可能是因为密钥自添加到钥匙串以来已过期。
- 在系统升级之前手动升级 archlinux-keyring 软件包(
pacman -Sy archlinux-keyring && pacman -Su
),或 - 使用
pacman-key --refresh-keys
刷新密钥,或 - 刷新所有密钥,或
- 在本地手动签署不受信任的密钥(不推荐),或
- 暂时将 SigLevel 设置为 TrustAll(不推荐)。
后面两个选项将会破坏信任连,所以请谨慎使用。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭