From 7eb45230069015e2dfd4fe0adea9f332daffabe0 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Tue, 27 Jun 2017 10:39:47 +0100 Subject: Pass assembly.compose during rpm packaging To cover the case where component artifacts have been removed from the cache, while the "system" artifact remains. --- ybd/rpm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ybd/rpm.py b/ybd/rpm.py index 7d46540..ef47495 100644 --- a/ybd/rpm.py +++ b/ybd/rpm.py @@ -572,7 +572,7 @@ def package_rpms(system, whitelist=None): system = app.defs.get(system) with sandbox.setup(system): - assembly.install_contents(system) + assembly.install_contents(system, assembly.compose) if system.get('kind') != "system": assembly.install_dependencies(system, assembly.compose) -- cgit v1.2.1 From 8c04ee6c7ad144d0a2300145c01d652fabaf550a Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Tue, 26 Sep 2017 13:21:31 +0100 Subject: Create deployment dir early --- ybd/rpm.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/ybd/rpm.py b/ybd/rpm.py index ef47495..2d12747 100644 --- a/ybd/rpm.py +++ b/ybd/rpm.py @@ -532,19 +532,18 @@ def deploy_rpm(dn, userdata): if not os.path.exists(cached_path): app.log(dn, "WARNING: Missing cached file {}".format(cached_path)) return False - dstdir = os.path.join(app.config['deployment'], - 'RPMs', cache_key(userdata['system'])) dstfilename = rpm_deployment_filename(dn, cached_path) - dstpath = os.path.join(dstdir, dstfilename) - if not os.path.exists(dstdir): - os.makedirs(dstdir) + dstpath = os.path.join(userdata['dstdir'], dstfilename) shutil.copyfile(cached_path, dstpath) app.log(dn, "Copied %s to deployment area" % dstfilename) return True def deploy_rpms(system, whitelist=None): - deploy_results = foreach_def(system, deploy_rpm, {'system': system}, + dstdir = os.path.join(app.config['deployment'], 'RPMs', cache_key(system)) + utils.makedirs(dstdir, exist_ok=True) + userdata = {'system': system, 'dstdir': dstdir} + deploy_results = foreach_def(system, deploy_rpm, userdata, whitelist=whitelist) errors = any(not t[1] for t in deploy_results) if errors: -- cgit v1.2.1 From 8b8265601c46128141b9ce00b85046da75569d5c Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Tue, 6 Feb 2018 16:11:05 +0000 Subject: Translate additionally supported list format for rpm-metadata at parse time --- ybd/morphs.py | 8 ++++++++ ybd/rpm.py | 16 ++-------------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/ybd/morphs.py b/ybd/morphs.py index d910a27..4e1059d 100644 --- a/ybd/morphs.py +++ b/ybd/morphs.py @@ -231,6 +231,14 @@ class Morphs(object): log(new_def, 'WARNING: \'unpetrify-ref\' is a deprecated field', exit=False) + if new_def.get('rpm-metadata'): + # Support two formats of 'rpm-metadata', the older + # format specifies 'rpm-metadata' as a list of packages, + # the new format specifies 'rpm-metadata' as a dictionary + # and the package list is found in it's 'packages' member. + if isinstance(new_def['rpm-metadata'], list): + new_def['rpm-metadata'] = {'packages': new_def['rpm-metadata']} + if dn is None: self._data[new_def['path']] = new_def diff --git a/ybd/rpm.py b/ybd/rpm.py index 2d12747..5daa53c 100644 --- a/ybd/rpm.py +++ b/ybd/rpm.py @@ -124,15 +124,8 @@ def generate_spec(dn, stage_dir, metafile, output, name, system): metadata = yaml.safe_load(metafile_f) with open(output, "w") as output_f: - # Support two formats of 'rpm-metadata', the older - # format specifies 'rpm-metadata' as a list of packages, - # the new format specifies 'rpm-metadata' as a dictionary - # and the package list is found in it's 'packages' member. rpm_metadata = dn['rpm-metadata'] - if isinstance(rpm_metadata, Mapping): - package_list = rpm_metadata.get('packages', []) - else: - package_list = rpm_metadata + package_list = rpm_metadata.get('packages', []) description = 'No Description' @@ -263,12 +256,7 @@ def extract_defines(dn): def extract_metafiles(system, dn, instdir, metadir): - metadata = dn['rpm-metadata'] - if isinstance(metadata, Mapping): - packages = metadata.get('packages', []) - else: - packages = metadata - + packages = dn['rpm-metadata'].get('packages', []) for package in packages: metafile = package.get('metafile', '').lstrip(os.sep) metafile = expand_macro(system, dn, metafile) -- cgit v1.2.1 From 3bd2fdd8a1b695b88b5dbc2686f3c0c7c622950e Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Tue, 6 Feb 2018 16:59:50 +0000 Subject: Only log copying to deployment area when running verbosely --- ybd/rpm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ybd/rpm.py b/ybd/rpm.py index 5daa53c..f3dd272 100644 --- a/ybd/rpm.py +++ b/ybd/rpm.py @@ -523,7 +523,7 @@ def deploy_rpm(dn, userdata): dstfilename = rpm_deployment_filename(dn, cached_path) dstpath = os.path.join(userdata['dstdir'], dstfilename) shutil.copyfile(cached_path, dstpath) - app.log(dn, "Copied %s to deployment area" % dstfilename) + app.log(dn, "Copied %s to deployment area" % dstfilename, verbose=True) return True -- cgit v1.2.1 From addc1b86b45c9b0ff1bb3b0691b9a3513b730f8d Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Tue, 6 Feb 2018 17:00:25 +0000 Subject: Log the path RPMs have been deployed to --- ybd/rpm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ybd/rpm.py b/ybd/rpm.py index f3dd272..6764e49 100644 --- a/ybd/rpm.py +++ b/ybd/rpm.py @@ -537,6 +537,7 @@ def deploy_rpms(system, whitelist=None): if errors: app.log(system, "ERROR: Failed to deploy all RPMs!") sys.exit(1) + app.log(system, "Finished deploying RPMs to %s!" % dstdir) # package_rpms @@ -589,4 +590,3 @@ def package_rpms(system, whitelist=None): sys.exit(1) deploy_rpms(system, whitelist) - app.log(system, "Finished deploying RPMs!") -- cgit v1.2.1 From 3a0cc814c4f72c71894663aec37b88cc12bc3980 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Fri, 9 Feb 2018 12:34:59 +0000 Subject: Add /var to the writable paths to fix linux-user-chroot rpm builds --- ybd/sandbox.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ybd/sandbox.py b/ybd/sandbox.py index 5314bd2..b25c4c8 100644 --- a/ybd/sandbox.py +++ b/ybd/sandbox.py @@ -145,7 +145,7 @@ def run_sandboxed(dn, command, env=None, allow_parallel=False, writable_paths = 'all' else: writable_paths = [dn['name'] + '.build', dn['name'] + '.inst', - '/dev', '/proc', '/tmp', ] + '/dev', '/proc', '/tmp', '/var', ] config = dict( cwd=dn['name'] + '.build', -- cgit v1.2.1 From f697957b0cdcdaca9e3c623fe9ffd4131ba75f12 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Fri, 9 Feb 2018 12:49:45 +0000 Subject: Improve error message on missing rpm/rpmbuild binaries --- ybd/rpm.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ybd/rpm.py b/ybd/rpm.py index 6764e49..d24827b 100644 --- a/ybd/rpm.py +++ b/ybd/rpm.py @@ -566,8 +566,13 @@ def package_rpms(system, whitelist=None): # Fail now if missing `rpm` or `rpmbuild` env_vars = sandbox.env_vars_for_build(system) - sandbox.run_sandboxed(system, 'rpm --version', env_vars) - sandbox.run_sandboxed(system, 'rpmbuild --version', env_vars) + test_cmds = ['rpm --version', 'rpmbuild --version'] + for cmd in test_cmds: + error = sandbox.run_sandboxed( + system, cmd, env_vars, exit_on_error=False) + if error: + log('RPM-BUILD', 'To generate rpms, appropriate rpm and ' + 'rpmbuild binaries are required', exit=True) # First initialize the db rpmdb_path = os.path.join(system['sandbox'], 'var', 'lib', 'rpm') -- cgit v1.2.1 From eac97eca8aa08d7f701807283f0b1e820b31fea0 Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Fri, 9 Feb 2018 13:09:02 +0000 Subject: Improve error message on failure to generate rpm name from metadata --- ybd/rpm.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ybd/rpm.py b/ybd/rpm.py index d24827b..52d2f98 100644 --- a/ybd/rpm.py +++ b/ybd/rpm.py @@ -501,10 +501,9 @@ def rpm_deployment_filename(dn, rpmpath): out = subprocess.check_output(['rpm', '-q', '-p', rpmpath, qf], stderr=fnull) except subprocess.CalledProcessError: - app.log(dn, "ERROR: Failed to generate rpm name") - sys.exit(1) + out = "" if not out: - app.log(dn, "ERROR: getting rpm deployment filename returned empty") + app.log(dn, "ERROR: Failed to generate name from %s headers" % rpmpath) sys.exit(1) return out -- cgit v1.2.1