diff options
author | Javier Jardón <jjardon@gnome.org> | 2018-02-09 15:53:30 +0000 |
---|---|---|
committer | Javier Jardón <jjardon@gnome.org> | 2018-02-09 15:53:30 +0000 |
commit | 0f389bec66f708a3d01d38ef732f6922f2255184 (patch) | |
tree | 29ed4ac9f33edf9dc100713d437edc02edd5bc00 | |
parent | 88d35867910ae55ae24eea3ec61585bd3d4d9004 (diff) | |
parent | eac97eca8aa08d7f701807283f0b1e820b31fea0 (diff) | |
download | ybd-0f389bec66f708a3d01d38ef732f6922f2255184.tar.gz |
Merge branch 'benbrown/misc-rpm-fixes' into 'master'
Miscellaneous rpm fixes
See merge request baserock/ybd!401
-rw-r--r-- | ybd/morphs.py | 8 | ||||
-rw-r--r-- | ybd/rpm.py | 47 | ||||
-rw-r--r-- | ybd/sandbox.py | 2 |
3 files changed, 28 insertions, 29 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 @@ -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) @@ -513,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 @@ -532,24 +519,24 @@ 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) + app.log(dn, "Copied %s to deployment area" % dstfilename, verbose=True) 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: app.log(system, "ERROR: Failed to deploy all RPMs!") sys.exit(1) + app.log(system, "Finished deploying RPMs to %s!" % dstdir) # package_rpms @@ -572,14 +559,19 @@ 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) # 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') @@ -602,4 +594,3 @@ def package_rpms(system, whitelist=None): sys.exit(1) deploy_rpms(system, whitelist) - app.log(system, "Finished deploying RPMs!") 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', |