160 lines
6.4 KiB
Plaintext
160 lines
6.4 KiB
Plaintext
let Genode = env:DHALL_GENODE
|
|
|
|
let Prelude = Genode.Prelude
|
|
|
|
let XML = Prelude.XML
|
|
|
|
let Init = Genode.Init
|
|
|
|
let Child = Init.Child
|
|
|
|
let parentRoutes =
|
|
Prelude.List.map Text Init.ServiceRoute.Type Init.ServiceRoute.parent
|
|
|
|
in λ(params : { coreutils : Text, execStart : Text }) →
|
|
Init::{
|
|
, verbose = True
|
|
, routes = parentRoutes [ "Timer", "Rtc", "File_system" ]
|
|
, children = toMap
|
|
{ vfs =
|
|
Child.flat
|
|
Child.Attributes::{
|
|
, binary = "vfs"
|
|
, exitPropagate = True
|
|
, provides = [ "File_system" ]
|
|
, resources = Genode.Init.Resources::{
|
|
, caps = 256
|
|
, ram = Genode.units.MiB 8
|
|
}
|
|
, config = Init.Config::{
|
|
, content =
|
|
[ XML.element
|
|
{ name = "vfs"
|
|
, attributes = XML.emptyAttributes
|
|
, content =
|
|
let dir =
|
|
λ(name : Text) →
|
|
λ(content : List XML.Type) →
|
|
XML.element
|
|
{ name = "dir"
|
|
, content
|
|
, attributes = toMap { name }
|
|
}
|
|
|
|
let leaf =
|
|
λ(name : Text) →
|
|
XML.leaf
|
|
{ name, attributes = XML.emptyAttributes }
|
|
|
|
in [ dir
|
|
"dev"
|
|
[ dir "pipes" [ leaf "pipe" ]
|
|
, dir
|
|
"sockets"
|
|
[ XML.leaf
|
|
{ name = "fs"
|
|
, attributes = toMap
|
|
{ label = "sockets" }
|
|
}
|
|
]
|
|
, leaf "log"
|
|
, leaf "null"
|
|
, leaf "rtc"
|
|
, leaf "zero"
|
|
]
|
|
, dir
|
|
"etc"
|
|
[ XML.element
|
|
{ name = "inline"
|
|
, attributes = toMap
|
|
{ name = "ExecStart" }
|
|
, content =
|
|
[ XML.text params.execStart ]
|
|
}
|
|
]
|
|
, dir
|
|
"usr"
|
|
[ dir
|
|
"bin"
|
|
[ XML.leaf
|
|
{ name = "symlink"
|
|
, attributes = toMap
|
|
{ name = "env"
|
|
, target =
|
|
"${params.coreutils}/bin/env"
|
|
}
|
|
}
|
|
]
|
|
]
|
|
, dir "tmp" [ leaf "ram" ]
|
|
, dir
|
|
"nix"
|
|
[ dir
|
|
"store"
|
|
[ XML.leaf
|
|
{ name = "fs"
|
|
, attributes = toMap
|
|
{ label = "nix-store" }
|
|
}
|
|
]
|
|
]
|
|
]
|
|
}
|
|
]
|
|
, policies =
|
|
[ Init.Config.Policy::{
|
|
, service = "File_system"
|
|
, label = Init.LabelSelector.prefix "shell"
|
|
, attributes = toMap { root = "/", writeable = "yes" }
|
|
}
|
|
]
|
|
}
|
|
}
|
|
, shell =
|
|
Child.flat
|
|
Child.Attributes::{
|
|
, binary = "bash"
|
|
, exitPropagate = True
|
|
, resources = Genode.Init.Resources::{
|
|
, caps = 256
|
|
, ram = Genode.units.MiB 8
|
|
}
|
|
, config = Genode.Init.Config::{
|
|
, content =
|
|
[ XML.leaf
|
|
{ name = "libc"
|
|
, attributes = toMap
|
|
{ stdin = "/dev/null"
|
|
, stdout = "/dev/log"
|
|
, stderr = "/dev/log"
|
|
, pipe = "/dev/pipes"
|
|
, rtc = "/dev/rtc"
|
|
, socket = "/dev/sockets"
|
|
}
|
|
}
|
|
, XML.element
|
|
{ name = "vfs"
|
|
, attributes = XML.emptyAttributes
|
|
, content =
|
|
[ XML.leaf
|
|
{ name = "fs"
|
|
, attributes = XML.emptyAttributes
|
|
}
|
|
]
|
|
}
|
|
]
|
|
# Prelude.List.map
|
|
Text
|
|
XML.Type
|
|
( λ(x : Text) →
|
|
XML.leaf
|
|
{ name = "arg"
|
|
, attributes = toMap { value = x }
|
|
}
|
|
)
|
|
[ "bash", "/etc/ExecStart" ]
|
|
}
|
|
}
|
|
}
|
|
}
|