-
Notifications
You must be signed in to change notification settings - Fork 6
/
test_rootfs.jl
61 lines (52 loc) · 1.41 KB
/
test_rootfs.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using Pkg.Artifacts: artifact_path
using RootfsUtils: parse_test_args, ensure_artifact_exists_locally
using Sandbox: Sandbox, SandboxConfig, with_executor
args = parse_test_args(ARGS, @__FILE__)
command = args.command
mount_julia = args.mount_julia
multiarch = args.multiarch
read_write_maps = args.read_write_maps
tmpfs_size = args.tmpfs_size
treehash = args.treehash
url = args.url
working_dir = args.working_dir
run_as_root = args.run_as_root
# If the artifact is not locally existent, download it
ensure_artifact_exists_locally(; treehash, url)
read_only_maps = Dict{String, String}()
read_only_maps["/"] = artifact_path(treehash)
path_list = String[
"/usr/local/bin",
"/usr/bin",
"/bin",
]
if mount_julia
read_only_maps["/opt/julia/"] = dirname(abspath(Sys.BINDIR))
pushfirst!(path_list, "/opt/julia/bin")
end
environment_variables = Dict{String, String}()
environment_variables["PATH"] = join(path_list, ":")
environment_variables["HOME"] = "/home/juliaci"
environment_variables["USER"] = "juliaci"
uid = Sandbox.getuid()
gid = Sandbox.getgid()
if run_as_root
uid = 0
gid = 0
end
config = SandboxConfig(
read_only_maps,
read_write_maps,
environment_variables;
stdin,
stdout,
stderr,
multiarch,
tmpfs_size,
uid,
gid,
pwd = working_dir,
)
with_executor() do exe
run(exe, config, command)
end