diff --git a/osbuild/buildroot.py b/osbuild/buildroot.py index e9220b2a..e210aee0 100644 --- a/osbuild/buildroot.py +++ b/osbuild/buildroot.py @@ -33,7 +33,7 @@ class BuildRoot(contextlib.AbstractContextManager): only when exiting the context manager. """ - def __init__(self, root, runner, path="/run/osbuild", libdir=None, var="/var/tmp"): + def __init__(self, root, runner, libdir, path="/run/osbuild", var="/var/tmp"): self._exitstack = None self._rootdir = root self._rundir = path @@ -154,13 +154,11 @@ class BuildRoot(contextlib.AbstractContextManager): # We execute our own modules by bind-mounting them from the host into # the build-root. We have minimal requirements on the build-root, so # these modules can be executed. Everything else we provide ourselves. - # In case you pass `--libdir`, it must be self-contained and we provide - # nothing else. If you use the system libdir, we additionally look for + # In case `libdir` contains the python module, it must be self-contained + # and we provide nothing else. Otherwise, we additionally look for # the installed `osbuild` module and bind-mount it as well. - if self._libdir is not None: - mounts += ["--ro-bind", f"{self._libdir}", "/run/osbuild/lib"] - else: - mounts += ["--ro-bind", "/usr/lib/osbuild", "/run/osbuild/lib"] + mounts += ["--ro-bind", f"{self._libdir}", "/run/osbuild/lib"] + if not os.listdir(os.path.join(self._libdir, "osbuild")): modorigin = importlib.util.find_spec("osbuild").origin modpath = os.path.dirname(modorigin) mounts += ["--ro-bind", f"{modpath}", "/run/osbuild/lib/osbuild"] diff --git a/osbuild/main_cli.py b/osbuild/main_cli.py index 5a34ec57..dba0d45b 100644 --- a/osbuild/main_cli.py +++ b/osbuild/main_cli.py @@ -87,7 +87,7 @@ def parse_arguments(sys_argv): help="directory where intermediary os trees are stored") parser.add_argument("--sources", metavar="FILE", type=os.path.abspath, help="json file containing a dictionary of source configuration") - parser.add_argument("-l", "--libdir", metavar="DIRECTORY", type=os.path.abspath, + parser.add_argument("-l", "--libdir", metavar="DIRECTORY", type=os.path.abspath, default="/usr/lib/osbuild", help="the directory containing stages, assemblers, and the osbuild library") parser.add_argument("--checkpoint", metavar="ID", action="append", type=str, default=None, help="stage to commit to the object store during build (can be passed multiple times)") @@ -107,7 +107,7 @@ def osbuild_cli(): manifest = parse_manifest(args.manifest_path) # first thing after parsing is validation of the input - index = osbuild.meta.Index(args.libdir or "/usr/lib/osbuild") + index = osbuild.meta.Index(args.libdir) res = osbuild.meta.validate(manifest, index) if not res: if args.json or args.inspect: @@ -153,7 +153,7 @@ def osbuild_cli(): r = pipeline.run( args.store, monitor, - libdir=args.libdir, + args.libdir, output_directory=args.output_directory ) except KeyboardInterrupt: diff --git a/osbuild/pipeline.py b/osbuild/pipeline.py index 45889c45..4cd3ee4a 100644 --- a/osbuild/pipeline.py +++ b/osbuild/pipeline.py @@ -62,9 +62,9 @@ class Stage: build_tree, cache, monitor, - libdir=None, + libdir, var="/var/tmp"): - with buildroot.BuildRoot(build_tree, runner, libdir=libdir, var=var) as build_root, \ + with buildroot.BuildRoot(build_tree, runner, libdir, var=var) as build_root, \ tempfile.TemporaryDirectory(prefix="osbuild-sources-output-", dir=var) as sources_output: args = { @@ -81,7 +81,7 @@ class Stage: api = API(args, monitor) build_root.register_api(api) - src = sources.SourcesServer(libdir or "/usr/lib/osbuild", + src = sources.SourcesServer(libdir, self.sources, os.path.join(cache, "sources"), sources_output) @@ -119,8 +119,8 @@ class Assembler: description["id"] = self.id return description - def run(self, tree, runner, build_tree, monitor, output_dir=None, libdir=None, var="/var/tmp"): - with buildroot.BuildRoot(build_tree, runner, libdir=libdir, var=var) as build_root: + def run(self, tree, runner, build_tree, monitor, libdir, output_dir=None, var="/var/tmp"): + with buildroot.BuildRoot(build_tree, runner, libdir, var=var) as build_root: args = { "tree": "/run/osbuild/tree", @@ -266,7 +266,7 @@ class Pipeline: build_path, object_store.store, monitor, - libdir=libdir, + libdir, var=object_store.store) monitor.result(r) @@ -300,8 +300,8 @@ class Pipeline: self.runner, build_dir, monitor, + libdir, output_dir=output_dir, - libdir=libdir, var=object_store.store) monitor.result(r) @@ -320,7 +320,7 @@ class Pipeline: return results - def run(self, store, monitor, libdir=None, output_directory=None): + def run(self, store, monitor, libdir, output_directory=None): os.makedirs("/run/osbuild", exist_ok=True) results = {} diff --git a/test/mod/test_osbuild.py b/test/mod/test_osbuild.py index 8662e9ef..17ac30da 100644 --- a/test/mod/test_osbuild.py +++ b/test/mod/test_osbuild.py @@ -93,7 +93,7 @@ class TestDescriptions(unittest.TestCase): for p in [data, cache, output]: p.mkdir() - res = asm.run(data, runner, root, monitor, output, libdir) + res = asm.run(data, runner, root, monitor, libdir, output) self.assertEqual(res.success, True) self.assertEqual(res.id, asm.id)