从CRAN Ubuntu仓库安装R:没有公钥错误

86

我现在使用的是R 2.13版本,想要更新到新版本以便使用一些需要R>=2.14的包。

我已经按照这里的描述,在我的sources.list文件中添加了一行。然后我打开终端输入:

sudo apt-get update

我尝试在距离我最近的CRAN镜像上更新R时,遇到了以下错误:

正在读取软件包列表... 完成

W:GPG 错误:http://lib.stat.cmu.edu oneiric/ Release:由于公钥不可用,以下签名无法验证:NO_PUBKEY 51716619E084DAB9

有什么方法可以调试这个错误吗?


13
请在您提供的链接页面向下搜索,寻找“SECURE APT”,并按照那里的说明进行操作... - Ben Bolker
此外,该行以 W 开头,意味着它仅是一个 _警告_。 - Dirk Eddelbuettel
进一步参照@ben-bolker的建议--我自己也遇到了这个问题,即使按照SECURE APT说明操作仍然无法解决。我发现我在工作时被防火墙隔离开了,关闭了端口11371,导致我无法下载安全密钥。这种情况可以在此进行测试(http://www.yougetsignal.com/tools/open-ports/)。唯一的办法是回家,在那里我可以访问我的路由器来完成这次升级。 - daedalus
10个回答

89

对我而言最简单的解决方案来自Emre Sahin在这个帖子中的回复:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9 

标记答案里的关键字好像对我无效。但是这个有效。 - OganM
4
这对我有用,但请注意我需要将密钥从 E084DAB9(属于前任维护者Michael Rutter)更改为 381BA480(现任维护者Johannes Ranke)。 - arielf
8
2017年3月22日更新:当前的公钥是Michael Rutter 51716619E084DAB9。 - Chad
谢谢Chad。截至2018-05-15仍然有效。 - Alex
1
截至今天,3.6.1版本的密钥为Johannes Ranke FCAE2A0E115C3D8A。 - stucash
这个键从哪里找到的? - Soumya Boral

48

正如@Ben Bolker所评论的(抱歉我占用了你的评论,但正确答案尚未发布),在Debian软件包仓库的描述中有一节安全的apt,其中说:

SECURE APT

CRAN的Debian后备存档使用“Johannes Ranke(CRAN Debian archive)”的密钥进行签名,密钥ID为381BA480。 您可以使用以下命令获取该键:

gpg --keyserver subkeys.pgp.net --recv-key 381BA480 或者 gpg --keyserver pgp.mit.edu --recv-key 381BA480。 如果无效,则可能是由于防火墙阻止了端口11371。 或者,您可以在http://keyserver.noreply.org/http://pgp.mit.edu/搜索0x381BA480并将密钥块复制到纯文本文件中,例如jranke_cran.asc。

如果成功接收gpg,则需要导出到文本文件中:

gpg -a --export 381BA480 > jranke_cran.asc。 在两种情况下,都需要通过以下方式使apt系统知道密钥:

sudo apt-key add jranke_cran.asc。

如果您尚未执行此操作,则可能会解决您的问题。


4
我完全不介意你接管评论。当我懒得发表完整的答案时,我会留下评论... - Ben Bolker
10
请注意,这个答案和@ManuelRamon的答案都依赖于一个较旧的密钥。请用从“apt-get update”错误消息中获得的密钥进行替换,但不改变原意。 - Ari B. Friedman
3
想确认一下,SECURE APT 部分的“剪切和粘贴”选项非常好用:在 http://keyserver.ubuntu.com:11371/ 搜索密钥(搜索 Michael Rutter),将密钥复制到纯文本文件(例如 key.txt)中,然后使用以下命令将密钥添加到 apt-key:sudo apt-key add key.txt - Richard
1
问题 - 这些信息现在已经过时,因为当前的公钥是Michael Rutter,如下面的答案所述。修改此答案以反映新信息是否合适?StackExchange上的标准是什么? - edge-case

45
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEYID

将KEYID替换为错误信息中显示的数字。


6
没错,因为密钥再次更改,这一次变成了FCAE2A0E115C3D8A。你的答案会一直有效! - MS Berends

18

感谢Philipp Burckhardt,问题已经解决。

请尝试这样做:

gpg --keyserver pgpkeys.mit.edu --recv-key 51716619E084DAB9  
gpg -a --export 51716619E084DAB9 | sudo apt-key add -

第二个链接已经不可用。 - GNUSupporter 8964民主女神 地下教會

5
这里是一份逐步指南,可能更易于理解。
  1. Fetch the key (the last 8 digits in the warning message):

    gpg --keyserver pgp.mit.edu --recv-key E084DAB9
    

    The output should look like this:

    gpg: requesting key E084DAB9 from hkp server pgp.mit.edu
    gpg: key E084DAB9: public key "Michael Rutter <marutter@gmail.com>" imported
    gpg: Total number processed: 1
    gpg:               imported: 1  (RSA: 1)
    
  2. Add the key (superuser access required):

    gpg -a --export E084DAB9 | sudo apt-key add -
    
  3. Update the repositories:

    sudo apt-get update
    
现在不应该有关于缺失密钥的警告。

1
MIT密钥服务器有时会出现故障。将其替换为“keyserver.ubuntu.com”即可解决问题。 - akashrajkn

5

我遇到了同样的问题,唯一找到的解决方法可能是由于防火墙的原因,需要使用实用的Y PPA Manager。以下两个步骤已经在Ubuntu 15.04上成功运行:

1)首先安装Y PPA Manager:

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get update
sudo apt-get install y-ppa-manager

2) 然后运行Y PPA Manager获取丢失的密钥:

y-ppa-manager

点击“高级”

接下来,点击“尝试导入缺失的GPG密钥”

最后,再次更新以检查是否有效:

sudo apt-get update

4
与其他人发布的信息类似,这个一行代码在Debian 6上似乎运行良好:
sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 381BA480

Executing: gpg --ignore-time-conflict --no-options
--no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://pgp.mit.edu:80 --recv-keys 381BA480 
gpg: requesting key 381BA480 from hkp server pgp.mit.edu 
gpg: key 381BA480: public key "Johannes Ranke (CRAN Debian archive) <jranke@uni-bremen.de>" imported 
gpg: no ultimately trusted keys found 
gpg: Total number processed: 1 
gpg:      imported: 1

1
我要补充一点,有时默认端口会被阻塞,所以你必须指定通过未被阻塞的端口获取密钥,比如80。请参见:https://cloud.r-project.org/bin/linux/ubuntu/ - mpettis

1
This solved my problem. 这解决了我的问题。 $ wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add $ wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add

1

它必须使用更长的标识符作为键。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

问题似乎是服务器上有重复的密钥ID。 请参阅CRAN的说明以及Michael Rutter的this post中提供的更多背景信息。

0

最简单的解决方法是按照https://cran.r-project.org/bin/linux/ubuntu/上的说明进行操作。请使用sudo运行:

# update indices
apt update -qq
# install two helper packages we need
apt install --no-install-recommends software-properties-common dirmngr
# add the signing key (by Michael Rutter) for these repos
# To verify key, run gpg --show-keys /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc 
# Fingerprint: 298A3A825C0D65DFD57CBB651716619E084DAB9
wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
# add the R 4.0 repo from CRAN -- adjust 'focal' to 'groovy' or 'bionic' as needed
add-apt-repository "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接