]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
overlayfs: avoid userxattr if kernel version is < 5.11
authorLuca Boccassi <bluca@debian.org>
Fri, 24 Mar 2023 01:04:05 +0000 (01:04 +0000)
committerLuca Boccassi <luca.boccassi@gmail.com>
Fri, 24 Mar 2023 11:25:04 +0000 (11:25 +0000)
userxattr was added as a mount option for overlayfs only in kernel 5.11,
so avoid it on older versions (like Debian stable):

‣   Running build script…
mount: /home/bluca/git/systemd/.mkosi.tmpzt2q0dyp/root: wrong fs type, bad option, bad superblock on overlay, missing codepage or helper program, or other error.
umount: /home/bluca/git/systemd/.mkosi.tmpzt2q0dyp/root: not mounted

mkosi/__init__.py
mkosi/mounts.py

index b138b25678312d05271f9347ae6e28967a19e66c..4b534fbdd2be0043c8d6144601d28787c6f1544d 100644 (file)
@@ -2590,6 +2590,11 @@ def load_args(args: argparse.Namespace) -> MkosiConfig:
             if not p.is_file():
                 die(f"Initrd {p} is not a file")
 
+    # For unprivileged builds we need the userxattr OverlayFS mount option, which is only available in Linux v5.11 and later.
+    with prepend_to_environ_path(args.extra_search_paths):
+        if (args.build_script is not None or args.base_image is not None) and GenericVersion(platform.release()) < GenericVersion("5.11") and os.geteuid() != 0:
+            die("This unprivileged build configuration requires at least Linux v5.11")
+
     return MkosiConfig(**vars(args))
 
 
index 0a1b0cb38a367cc322df0fcac6b56f3f14186a8b..ad1c9deaa07de7cd0de09fef697b9be50817a820 100644 (file)
@@ -3,12 +3,14 @@
 import collections
 import contextlib
 import os
+import platform
 import stat
 from collections.abc import Iterator, Sequence
 from pathlib import Path
 from typing import Callable, Deque, Optional, TypeVar, Union, cast
 
 from mkosi.log import complete_step
+from mkosi.manifest import GenericVersion
 from mkosi.run import run
 from mkosi.types import PathString
 
@@ -89,7 +91,11 @@ def mount_overlay(
     workdir: Path,
     where: Path
 ) -> Iterator[Path]:
-    options = [f"lowerdir={lower}", f"upperdir={upper}", f"workdir={workdir}", "userxattr"]
+    options = [f"lowerdir={lower}", f"upperdir={upper}", f"workdir={workdir}"]
+
+    # userxattr is only supported on overlayfs since kernel 5.11
+    if GenericVersion(platform.release()) >= GenericVersion("5.11"):
+        options.append("userxattr")
 
     try:
         with mount("overlay", where, options=options, type="overlay"):