feat: initialize XAS test console with native execution
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
"""Bounded temporary work files on a private per-run tmpfs mount."""
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
from .catalog import safe_path
|
||||
|
||||
|
||||
def mounts(settings):
|
||||
result = []
|
||||
for line in Path("/proc/mounts").read_text().splitlines():
|
||||
device, target, kind, *_ = line.split()
|
||||
if not device.startswith("xas-run-") or kind != "tmpfs":
|
||||
continue
|
||||
identity = device.removeprefix("xas-run-")
|
||||
if not re.fullmatch(r"[a-f0-9]{32}", identity):
|
||||
continue
|
||||
expected = settings.runs / identity / "work"
|
||||
if target != str(expected):
|
||||
continue
|
||||
result.append(safe_path(expected, settings.runs))
|
||||
return result
|
||||
|
||||
|
||||
def create(settings, identity, uid):
|
||||
target = safe_path(settings.runs / identity / "work", settings.runs)
|
||||
if target in mounts(settings):
|
||||
raise ValueError("本次临时目录已经挂载,拒绝覆盖")
|
||||
subprocess.run(["mount", "-t", "tmpfs", "-o", f"size=134217728,nodev,nosuid,noexec,mode=0770,uid={uid},gid={uid}",
|
||||
"xas-run-" + identity, str(target)], check=True, capture_output=True, timeout=10)
|
||||
|
||||
|
||||
def remove(settings, target):
|
||||
if target not in mounts(settings):
|
||||
raise ValueError("临时挂载归属核验失败")
|
||||
subprocess.run(["umount", "--", str(target)], check=True, capture_output=True, timeout=10)
|
||||
Reference in New Issue
Block a user