45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
from pathlib import Path
|
|
from typing import Callable
|
|
|
|
from l4d2host.fs.base import OverlayMounter
|
|
from l4d2host.process import run_command
|
|
|
|
|
|
class FuseOverlayFSMounter(OverlayMounter):
|
|
def mount(
|
|
self,
|
|
*,
|
|
lowerdirs: str,
|
|
upperdir: Path,
|
|
workdir: Path,
|
|
merged: Path,
|
|
on_stdout: Callable[[str], None] | None = None,
|
|
on_stderr: Callable[[str], None] | None = None,
|
|
passthrough: bool = False,
|
|
) -> None:
|
|
run_command(
|
|
[
|
|
"fuse-overlayfs",
|
|
"-o",
|
|
f"lowerdir={lowerdirs},upperdir={upperdir},workdir={workdir}",
|
|
str(merged),
|
|
],
|
|
on_stdout=on_stdout,
|
|
on_stderr=on_stderr,
|
|
passthrough=passthrough,
|
|
)
|
|
|
|
def unmount(
|
|
self,
|
|
*,
|
|
merged: Path,
|
|
on_stdout: Callable[[str], None] | None = None,
|
|
on_stderr: Callable[[str], None] | None = None,
|
|
passthrough: bool = False,
|
|
) -> None:
|
|
run_command(
|
|
["fusermount3", "-u", str(merged)],
|
|
on_stdout=on_stdout,
|
|
on_stderr=on_stderr,
|
|
passthrough=passthrough,
|
|
)
|