]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Copy nspawn settings to the output directory again
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 10 Jan 2024 09:58:29 +0000 (10:58 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 10 Jan 2024 11:25:14 +0000 (12:25 +0100)
machinectl pull-tar looks for a settings file so let's make sure
the output directory can be used directly for this purpose by copying
the nspawn settings file to the output directory again.

mkosi/__init__.py
mkosi/config.py

index f3a9dae550fc5bbf773e9ccb347f27ec4e53d717..f03a68fc91c8a5daed4ba8e846744915b4616a8c 100644 (file)
@@ -1911,6 +1911,14 @@ def copy_vmlinuz(context: Context) -> None:
         break
 
 
+def copy_nspawn_settings(context: Context) -> None:
+    if context.config.nspawn_settings is None:
+        return None
+
+    with complete_step("Copying nspawn settings file…"):
+        shutil.copy2(context.config.nspawn_settings, context.staging / context.config.output_nspawn_settings)
+
+
 def copy_initrd(context: Context) -> None:
     if (context.staging / context.config.output_split_initrd).exists():
         return
@@ -2096,6 +2104,7 @@ def check_outputs(config: Config) -> None:
         config.output_with_compression,
         config.output_checksum if config.checksum else None,
         config.output_signature if config.sign else None,
+        config.output_nspawn_settings if config.nspawn_settings else None,
     ):
         if f and (config.output_dir_or_cwd() / f).exists():
             die(f"Output path {f} exists already. (Consider invocation with --force.)")
@@ -2848,6 +2857,7 @@ def build_image(args: Args, config: Config) -> None:
         if context.config.split_artifacts:
             make_disk(context, split=True, msg="Extracting partitions")
 
+        copy_nspawn_settings(context)
         copy_vmlinuz(context)
         copy_initrd(context)
 
@@ -2993,9 +3003,11 @@ def run_shell(args: Args, config: Config) -> None:
         cmdline += [f"--set-credential={k}:{v}"]
 
     with contextlib.ExitStack() as stack:
+        # Make sure the latest nspawn settings are always used.
         if config.nspawn_settings:
+            if not (config.output_dir_or_cwd() / f"{name}.nspawn").exists():
+                stack.callback(lambda: (config.output_dir_or_cwd() / f"{name}.nspawn").unlink(missing_ok=True))
             shutil.copy2(config.nspawn_settings, config.output_dir_or_cwd() / f"{name}.nspawn")
-            stack.callback(lambda: (config.output_dir_or_cwd() / f"{name}.nspawn").unlink())
 
         if config.ephemeral:
             fname = stack.enter_context(copy_ephemeral(config, config.output_dir_or_cwd() / config.output))
index 929fa5e3bd1f5868544e64b695997092469d0b12..d8d476418d6f5f2780054a8617986365403b62a8 100644 (file)
@@ -1281,6 +1281,10 @@ class Config:
     def output_split_initrd(self) -> str:
         return f"{self.output}.initrd"
 
+    @property
+    def output_nspawn_settings(self) -> str:
+        return f"{self.output}.nspawn"
+
     @property
     def output_checksum(self) -> str:
         return f"{self.output}.SHA256SUMS"