mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
gnupg: use native version for signing, rather than one provided by host
Using host gpg has been problematic, and particularly this removes the need to serialize package creation, as long as --auto-expand-secmem is passed to gpg-agent, and gnupg >= 2.2.4 is in use (https://dev.gnupg.org/T3530). Sadly, gpg-agent itself is single-threaded, so in the longer run we might want to seek alternatives: https://lwn.net/Articles/742542/ (a smaller issue is that rpm itself runs the gpg fronted in a serial fashion, which slows down the build in cases of recipes with very large amount of packages, e.g. glibc-locale) Note that sstate signing and verification continues to use host gpg, as depending on native gpg would create circular dependencies. [YOCTO #12022] (From OE-Core rev: 08fef6198122fe79d4c1213f9a64b862162ed6cd) Signed-off-by: Alexander Kanavin <alexander.kanavin@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
0a732a9c66
commit
0f49d9182f
@@ -43,4 +43,4 @@ python () {
|
||||
}
|
||||
|
||||
do_package_index[depends] += "signing-keys:do_deploy"
|
||||
do_rootfs[depends] += "signing-keys:do_populate_sysroot"
|
||||
do_rootfs[depends] += "signing-keys:do_populate_sysroot gnupg-native:do_populate_sysroot"
|
||||
|
||||
@@ -68,8 +68,4 @@ python sign_rpm () {
|
||||
do_package_index[depends] += "signing-keys:do_deploy"
|
||||
do_rootfs[depends] += "signing-keys:do_populate_sysroot"
|
||||
|
||||
# Newer versions of gpg (at least 2.1.5 and 2.2.1) have issues when signing occurs in parallel
|
||||
# so unfortunately the signing must be done serially. Once the upstream problem is fixed,
|
||||
# the following line must be removed otherwise we loose all the intrinsic parallelism from
|
||||
# bitbake. For more information, check https://bugzilla.yoctoproject.org/show_bug.cgi?id=12022.
|
||||
do_package_write_rpm[lockfiles] += "${TMPDIR}/gpg.lock"
|
||||
PACKAGE_WRITE_DEPS += "gnupg-native"
|
||||
|
||||
@@ -12,6 +12,7 @@ class LocalSigner(object):
|
||||
self.gpg_path = d.getVar('GPG_PATH')
|
||||
self.gpg_version = self.get_gpg_version()
|
||||
self.rpm_bin = bb.utils.which(os.getenv('PATH'), "rpmsign")
|
||||
self.gpg_agent_bin = bb.utils.which(os.getenv('PATH'), "gpg-agent")
|
||||
|
||||
def export_pubkey(self, output_file, keyid, armor=True):
|
||||
"""Export GPG public key to a file"""
|
||||
@@ -31,7 +32,7 @@ class LocalSigner(object):
|
||||
"""Sign RPM files"""
|
||||
|
||||
cmd = self.rpm_bin + " --addsign --define '_gpg_name %s' " % keyid
|
||||
gpg_args = '--no-permission-warning --batch --passphrase=%s' % passphrase
|
||||
gpg_args = '--no-permission-warning --batch --passphrase=%s --agent-program=%s|--auto-expand-secmem' % (passphrase, self.gpg_agent_bin)
|
||||
if self.gpg_version > (2,1,):
|
||||
gpg_args += ' --pinentry-mode=loopback'
|
||||
cmd += "--define '_gpg_sign_cmd_extra_args %s' " % gpg_args
|
||||
@@ -71,6 +72,9 @@ class LocalSigner(object):
|
||||
if self.gpg_version > (2,1,):
|
||||
cmd += ['--pinentry-mode', 'loopback']
|
||||
|
||||
if self.gpg_agent_bin:
|
||||
cmd += ["--agent-program=%s|--auto-expand-secmem" % (self.gpg_agent_bin)]
|
||||
|
||||
cmd += [input_file]
|
||||
|
||||
try:
|
||||
@@ -99,7 +103,7 @@ class LocalSigner(object):
|
||||
import subprocess
|
||||
try:
|
||||
ver_str = subprocess.check_output((self.gpg_bin, "--version", "--no-permission-warning")).split()[2].decode("utf-8")
|
||||
return tuple([int(i) for i in ver_str.split('.')])
|
||||
return tuple([int(i) for i in ver_str.split("-")[0].split('.')])
|
||||
except subprocess.CalledProcessError as e:
|
||||
raise bb.build.FuncFailed("Could not get gpg version: %s" % e)
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ python do_get_public_keys () {
|
||||
}
|
||||
do_get_public_keys[cleandirs] = "${B}"
|
||||
addtask get_public_keys before do_install
|
||||
do_get_public_keys[depends] += "gnupg-native:do_populate_sysroot"
|
||||
|
||||
do_install () {
|
||||
if [ -f "${B}/rpm-key" ]; then
|
||||
|
||||
Reference in New Issue
Block a user