summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavier Jardón <jjardon@gnome.org>2018-02-09 15:53:30 +0000
committerJavier Jardón <jjardon@gnome.org>2018-02-09 15:53:30 +0000
commit0f389bec66f708a3d01d38ef732f6922f2255184 (patch)
tree29ed4ac9f33edf9dc100713d437edc02edd5bc00
parent88d35867910ae55ae24eea3ec61585bd3d4d9004 (diff)
parenteac97eca8aa08d7f701807283f0b1e820b31fea0 (diff)
downloadybd-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.py8
-rw-r--r--ybd/rpm.py47
-rw-r--r--ybd/sandbox.py2
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
diff --git a/ybd/rpm.py b/ybd/rpm.py
index 7d46540..52d2f98 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)
@@ -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',