format_tree,
parse_config,
summary,
+ want_selinux_relabel,
yes_no,
)
from mkosi.context import Context
def run_selinux_relabel(context: Context) -> None:
- if context.config.selinux_relabel == ConfigFeature.disabled:
- return
-
- selinux = context.root / "etc/selinux/config"
- if not selinux.exists():
- if context.config.selinux_relabel == ConfigFeature.enabled:
- die("SELinux relabel is requested but could not find selinux config at /etc/selinux/config")
- return
-
- policy = run(["sh", "-c", f". {selinux} && echo $SELINUXTYPE"],
- sandbox=context.sandbox(options=["--ro-bind", selinux, selinux]),
- stdout=subprocess.PIPE).stdout.strip()
- if not policy:
- if context.config.selinux_relabel == ConfigFeature.enabled:
- die("SELinux relabel is requested but no selinux policy is configured in /etc/selinux/config")
- return
-
- if not find_binary("setfiles", root=context.config.tools()):
- logging.info("setfiles is not installed, not relabeling files")
+ if not (policy := want_selinux_relabel(context.config, context.root)):
return
fc = context.root / "etc/selinux" / policy / "contexts/files/file_contexts"
return val
return json_transformer
+
+
+def want_selinux_relabel(config: Config, root: Path, fatal: bool = True) -> Optional[str]:
+ if config.selinux_relabel == ConfigFeature.disabled:
+ return None
+
+ selinux = root / "etc/selinux/config"
+ if not selinux.exists():
+ if fatal and config.selinux_relabel == ConfigFeature.enabled:
+ die("SELinux relabel is requested but could not find selinux config at /etc/selinux/config")
+ return None
+
+ policy = run(["sh", "-c", f". {selinux} && echo $SELINUXTYPE"],
+ sandbox=config.sandbox(options=["--ro-bind", selinux, selinux]),
+ stdout=subprocess.PIPE).stdout.strip()
+ if not policy:
+ if fatal and config.selinux_relabel == ConfigFeature.enabled:
+ die("SELinux relabel is requested but no selinux policy is configured in /etc/selinux/config")
+ return None
+
+ if not find_binary("setfiles", root=config.tools()):
+ if fatal:
+ logging.info("setfiles is not installed, not relabeling files")
+ return None
+
+ return policy
QemuFirmware,
QemuVsockCID,
format_bytes,
+ want_selinux_relabel,
)
from mkosi.log import die
from mkosi.partition import finalize_root, find_partitions
"--sandbox=chroot",
]
- if not uidmap:
+ if not uidmap and want_selinux_relabel(config, directory, fatal=False):
cmdline += ["--security-label"]
# We create the socket ourselves and pass the fd to virtiofsd to avoid race conditions where we start qemu