unshare,
userns_has_single_user,
)
-from mkosi.tree import copy_tree, move_tree, rmtree
+from mkosi.tree import copy_tree, make_tree, move_tree, rmtree
from mkosi.types import PathString
from mkosi.user import INVOKING_USER
from mkosi.util import (
context.config.distribution.createrepo(context)
+def make_rootdir(context: Context) -> None:
+ if context.root.exists():
+ return
+
+ with umask(~0o755):
+ # Using a btrfs subvolume as the upperdir in an overlayfs results in EXDEV so make sure we create
+ # the root directory as a regular directory if the Overlay= option is enabled.
+ if context.config.overlay:
+ context.root.mkdir()
+ else:
+ make_tree(context.root, use_subvolumes=context.config.use_subvolumes, sandbox=context.sandbox)
+
+
def build_image(context: Context) -> None:
manifest = Manifest(context) if context.config.manifest_format else None
with mount_base_trees(context):
install_base_trees(context)
cached = reuse_cache(context)
+ make_rootdir(context)
+
wantrepo = (
(
not cached
resources=resources,
package_cache_dir=config.package_cache_dir_or_default(),
)
+ context.root.mkdir(mode=0o755)
install_package_manager_trees(context)
context.config.distribution.setup(context)
from typing import Optional
from mkosi.config import Args, Config
-from mkosi.sandbox import umask
-from mkosi.tree import make_tree
from mkosi.types import PathString
self.resources = resources
self.package_cache_dir = package_cache_dir or (self.root / "var")
self.package_dir = package_dir or (self.workspace / "packages")
- self.package_dir.mkdir(exist_ok=True)
-
- with umask(~0o755):
- # Using a btrfs subvolume as the upperdir in an overlayfs results in EXDEV so make sure we create
- # the root directory as a regular directory if the Overlay= option is enabled.
- if config.overlay:
- self.root.mkdir()
- else:
- make_tree(
- self.root,
- use_subvolumes=self.config.use_subvolumes,
- sandbox=config.sandbox,
- )
+ self.package_dir.mkdir(exist_ok=True)
self.staging.mkdir()
self.pkgmngr.mkdir()
self.repository.mkdir()