从RPM安装后脚本导入RPM GPG密钥

时间:2019-12-04 07:25:09

标签: rpm packaging rpmbuild rpm-spec dnf

我必须创建3个RPM,如下所示:

  1. key.rpm :是否在安装后脚本中以RPM形式导入RPM GPG公共密钥( /etc/sw-key/gpg.key )。
  2. software1.rpm :需要 key.rpm ,并由 /etc/sw-key/gpg.key的私钥签名。
  3. software2.rpm :需要 key.rpm ,并由 /etc/sw-key/gpg.key的私钥签名。

上面的意图是,我想使用启用了 gpgcheck 的DNF一次安装所有3个RPM。上面创建的依赖关系将允许先安装 key.rpm ,然后再安装其余2个RPM。但是, key.rpm 本身的安装失败,因为我在安装后脚本中执行了“ rpm --import” 。 rpm导入无法获取事务锁定。我了解在主RPM命令的上下文中调用了安装后脚本,因此在获取锁时rpm导入失败。

还有其他方法可以实现我上面想要做的事情吗?我想在一个DNF命令中安装所有已签名的RPM,其中一个RPM携带并安装其他人需要的RPM GPG密钥。

2 个答案:

答案 0 :(得分:1)

正确的解决方案是通过创建RPM存储库来正确地分发RPM软件包。

这将使您的RPM可通过2个命令(而不是1个)安装,但是您为将更多更新分发给用户打开了很多可能性。

您现在拥有的

key.rpm应该变成一个发行包。它应包含/etc/yum.repos.d/foo.repo存储库配置文件,所有指令均指向Web上的存储库,以及本地GPG密钥的路径(如果也已安装)或指向该URL的路径。应该用您的GPG密钥签名。

software1.rpmsoftware2.rpm只是由相同的GPG密钥签名,根本不需要依赖key.rpm

它对最终用户如何工作:

sudo dnf install https://example.com/your-release.rpm

然后:

sudo dnf install software1 software2

提示用户信任软件包安装期间安装/下载的GPG密钥。简单明了。

答案 1 :(得分:0)

三点:

1)RPM不可重入。您不得从rpm调用rpm。否则,您可能会破坏数据库和系统。

2)不可能。如今,标准是提供Ansible剧本或角色。例如,请参见下面。

3)RPM不可重入。您不得从rpm调用rpm。否则,您可能会破坏数据库和系统。现在感叹了!!

可以执行此操作的片段:

- name: install the gpg key
  yum:
    name: /usr/local/src/key.rpm
    state: present

- rpm_key:
    state: present
    key: /path/to/key1.gpg.key

- name: install sw1 and sw2
  yum:
    name:
      - /usr/local/src/software1.rpm
      - /usr/local/src/software2.rpm
    state: present