Update dhall-genode for Libc helper
This commit is contained in:
parent
143c0c5551
commit
57a093afea
|
@ -18,11 +18,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1605706415,
|
"lastModified": 1606240001,
|
||||||
"narHash": "sha256-TNMK7m95qrHyauJAz5b6FonwMFZvMl75GL/Zpk7FMSE=",
|
"narHash": "sha256-XaZWsa2SAtvgH6qC8DBPe8/MAEX+hbHQ2E2HqB7GeqM=",
|
||||||
"owner": "ehmry",
|
"owner": "ehmry",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "1f87da9eaa90afacc256f842e05e1111aa03ffa1",
|
"rev": "1ab17e1a3abf3005974cd4c09732efb635f44483",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
@ -12,6 +12,10 @@ let Resources = Init.Resources
|
||||||
|
|
||||||
let ServiceRoute = Init.ServiceRoute
|
let ServiceRoute = Init.ServiceRoute
|
||||||
|
|
||||||
|
let Libc = Genode.Libc
|
||||||
|
|
||||||
|
let VFS = Genode.VFS
|
||||||
|
|
||||||
in λ(params : { bash : Text, coreutils : Text, path : Text }) →
|
in λ(params : { bash : Text, coreutils : Text, path : Text }) →
|
||||||
let init =
|
let init =
|
||||||
Init::{
|
Init::{
|
||||||
|
@ -81,24 +85,40 @@ in λ(params : { bash : Text, coreutils : Text, path : Text }) →
|
||||||
, binary = "vfs"
|
, binary = "vfs"
|
||||||
, config = Init.Config::{
|
, config = Init.Config::{
|
||||||
, content =
|
, content =
|
||||||
[ Prelude.XML.text
|
[ VFS.vfs
|
||||||
''
|
[ VFS.dir
|
||||||
<vfs>
|
"dev"
|
||||||
<dir name="dev">
|
[ VFS.leaf "log"
|
||||||
<log name="stderr" label="stderr"/>
|
, VFS.leaf "null"
|
||||||
<log name="stdout" label="stdout"/>
|
, VFS.dir "pipe" [ VFS.leaf "pipe" ]
|
||||||
<null/>
|
, VFS.leaf "rtc"
|
||||||
<pipe/>
|
, VFS.leaf "terminal"
|
||||||
<rtc/>
|
, VFS.leaf "zero"
|
||||||
<terminal/>
|
]
|
||||||
<zero/>
|
, VFS.dir
|
||||||
</dir>
|
"usr"
|
||||||
<dir name="usr"><dir name="bin"><symlink name="env" target="${params.coreutils}/bin/env"/></dir></dir>
|
[ VFS.dir
|
||||||
<dir name="tmp"><ram/></dir>
|
"bin"
|
||||||
<dir name="nix"><dir name="store"><fs label="nix/store" writeable="no"/></dir></dir>
|
[ VFS.symlink
|
||||||
</vfs>
|
"${params.coreutils}/bin/env"
|
||||||
<default-policy root="/" writeable="yes"/>
|
"env"
|
||||||
''
|
]
|
||||||
|
]
|
||||||
|
, VFS.dir "tmp" [ VFS.leaf "ram" ]
|
||||||
|
, VFS.dir
|
||||||
|
"nix"
|
||||||
|
[ VFS.dir
|
||||||
|
"store"
|
||||||
|
[ VFS.fs VFS.FS::{ label = "nix-store" } ]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
, policies =
|
||||||
|
[ Init.Config.Policy::{
|
||||||
|
, service = "File_system"
|
||||||
|
, attributes = toMap
|
||||||
|
{ root = "/", writeable = "yes" }
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
, provides = [ "File_system" ]
|
, provides = [ "File_system" ]
|
||||||
|
@ -126,27 +146,21 @@ in λ(params : { bash : Text, coreutils : Text, path : Text }) →
|
||||||
Child.flat
|
Child.flat
|
||||||
Child.Attributes::{
|
Child.Attributes::{
|
||||||
, binary = "bash"
|
, binary = "bash"
|
||||||
, config = Genode.Init.Config::{
|
, config =
|
||||||
, content =
|
Libc.toConfig
|
||||||
[ Prelude.XML.text
|
Libc::{
|
||||||
''
|
, stdin = Some "/dev/terminal"
|
||||||
<libc stdin="/dev/terminal" stdout="/dev/terminal" stderr="/dev/terminal" pipe="/dev/pipe" rtc="/dev/rtc"/>
|
, stdout = Some "/dev/terminal"
|
||||||
<vfs> <fs/> </vfs>
|
, stderr = Some "/dev/terminal"
|
||||||
<env key="TERM" value="screen"/>
|
, pipe = Some "/dev/pipe"
|
||||||
<env key="PATH" value="${params.path}" />
|
, rtc = Some "/dev/rtc"
|
||||||
<env key="PS1" value="system:$PWD> " />
|
, vfs = [ VFS.leaf "fs" ]
|
||||||
''
|
, env = toMap
|
||||||
]
|
{ TERM = "screen"
|
||||||
# Prelude.List.map
|
, PATH = "${params.path}"
|
||||||
Text
|
, PS1 = "system:\$PWD"
|
||||||
XML.Type
|
|
||||||
( λ(x : Text) →
|
|
||||||
XML.leaf
|
|
||||||
{ name = "arg"
|
|
||||||
, attributes = toMap { value = x }
|
|
||||||
}
|
}
|
||||||
)
|
, args = [ "bash" ]
|
||||||
[ "bash" ]
|
|
||||||
}
|
}
|
||||||
, exitPropagate = True
|
, exitPropagate = True
|
||||||
, resources = Resources::{
|
, resources = Resources::{
|
||||||
|
|
|
@ -12,14 +12,9 @@ let Resources = Init.Resources
|
||||||
|
|
||||||
let ServiceRoute = Init.ServiceRoute
|
let ServiceRoute = Init.ServiceRoute
|
||||||
|
|
||||||
let Vfs/inline =
|
let Libc = Genode.Libc
|
||||||
λ(name : Text) →
|
|
||||||
λ(body : Text) →
|
let VFS = Genode.VFS
|
||||||
XML.element
|
|
||||||
{ name = "inline"
|
|
||||||
, attributes = toMap { name }
|
|
||||||
, content = [ XML.text body ]
|
|
||||||
}
|
|
||||||
|
|
||||||
let BootFormat = < ISO | VDI >
|
let BootFormat = < ISO | VDI >
|
||||||
|
|
||||||
|
@ -143,24 +138,10 @@ let toVbox =
|
||||||
in Child.flat
|
in Child.flat
|
||||||
Child.Attributes::{
|
Child.Attributes::{
|
||||||
, binary = "virtualbox5"
|
, binary = "virtualbox5"
|
||||||
, config = Init.Config::{
|
, config =
|
||||||
, attributes = toMap
|
( Libc.toConfig
|
||||||
{ vbox_file = "machine.vbox", vm_name = params.vmName }
|
Libc::{
|
||||||
, content =
|
, vfs =
|
||||||
[ XML.leaf
|
|
||||||
{ name = "libc"
|
|
||||||
, attributes = toMap
|
|
||||||
{ stdout = "/log", stderr = "/log", rtc = "/dev/rtc" }
|
|
||||||
}
|
|
||||||
, XML.element
|
|
||||||
{ name = "vfs"
|
|
||||||
, attributes = XML.emptyAttributes
|
|
||||||
, content =
|
|
||||||
let tag =
|
|
||||||
λ(name : Text) →
|
|
||||||
XML.leaf
|
|
||||||
{ name, attributes = XML.emptyAttributes }
|
|
||||||
|
|
||||||
let mutableVfs =
|
let mutableVfs =
|
||||||
let fsNode =
|
let fsNode =
|
||||||
[ XML.leaf
|
[ XML.leaf
|
||||||
|
@ -202,17 +183,19 @@ let toVbox =
|
||||||
}
|
}
|
||||||
params.bootFormat
|
params.bootFormat
|
||||||
|
|
||||||
in [ Vfs/inline "machine.vbox" vboxConfig
|
in [ VFS.inline "machine.vbox" vboxConfig
|
||||||
, XML.element
|
, VFS.dir
|
||||||
{ name = "dir"
|
"dev"
|
||||||
, attributes = toMap { name = "dev" }
|
[ VFS.leaf "log"
|
||||||
, content = [ tag "log", tag "rtc" ]
|
, VFS.leaf "null"
|
||||||
}
|
, VFS.leaf "rtc"
|
||||||
|
]
|
||||||
]
|
]
|
||||||
# mutableVfs
|
# mutableVfs
|
||||||
}
|
}
|
||||||
]
|
)
|
||||||
}
|
with attributes = toMap
|
||||||
|
{ vbox_file = "machine.vbox", vm_name = params.vmName }
|
||||||
, resources = Resources::{
|
, resources = Resources::{
|
||||||
, caps = 1024
|
, caps = 1024
|
||||||
, ram =
|
, ram =
|
||||||
|
|
|
@ -2,8 +2,6 @@ let Genode = env:DHALL_GENODE
|
||||||
|
|
||||||
let Prelude = Genode.Prelude
|
let Prelude = Genode.Prelude
|
||||||
|
|
||||||
let XML = Prelude.XML
|
|
||||||
|
|
||||||
let Init = Genode.Init
|
let Init = Genode.Init
|
||||||
|
|
||||||
let Child = Init.Child
|
let Child = Init.Child
|
||||||
|
|
|
@ -4,6 +4,8 @@ let Prelude = Genode.Prelude
|
||||||
|
|
||||||
let XML = Prelude.XML
|
let XML = Prelude.XML
|
||||||
|
|
||||||
|
let Libc = Genode.Libc
|
||||||
|
|
||||||
let VFS = Genode.VFS
|
let VFS = Genode.VFS
|
||||||
|
|
||||||
let Init = Genode.Init
|
let Init = Genode.Init
|
||||||
|
@ -14,11 +16,7 @@ let parentRoutes =
|
||||||
Prelude.List.map Text Init.ServiceRoute.Type Init.ServiceRoute.parent
|
Prelude.List.map Text Init.ServiceRoute.Type Init.ServiceRoute.parent
|
||||||
|
|
||||||
in λ ( params
|
in λ ( params
|
||||||
: { name : Text
|
: { args : List Text, coreutils : Text, interface : Optional Text }
|
||||||
, coreutils : Text
|
|
||||||
, execStart : Text
|
|
||||||
, interface : Optional Text
|
|
||||||
}
|
|
||||||
) →
|
) →
|
||||||
let socketsVfs =
|
let socketsVfs =
|
||||||
merge
|
merge
|
||||||
|
@ -80,7 +78,7 @@ in λ ( params
|
||||||
, policies =
|
, policies =
|
||||||
[ Init.Config.Policy::{
|
[ Init.Config.Policy::{
|
||||||
, service = "File_system"
|
, service = "File_system"
|
||||||
, label = Init.LabelSelector.prefix "shell"
|
, label = Init.LabelSelector.prefix "ExecStart"
|
||||||
, attributes = toMap
|
, attributes = toMap
|
||||||
{ root = "/", writeable = "yes" }
|
{ root = "/", writeable = "yes" }
|
||||||
}
|
}
|
||||||
|
@ -106,12 +104,12 @@ in λ ( params
|
||||||
[ Init.Config.Policy::{
|
[ Init.Config.Policy::{
|
||||||
, service = "ROM"
|
, service = "ROM"
|
||||||
, diag = Some True
|
, diag = Some True
|
||||||
, label = Init.LabelSelector.prefix "shell"
|
, label = Init.LabelSelector.prefix "ExecStart"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
, shell =
|
, ExecStart =
|
||||||
Child.flat
|
Child.flat
|
||||||
Child.Attributes::{
|
Child.Attributes::{
|
||||||
, binary = "bash"
|
, binary = "bash"
|
||||||
|
@ -120,32 +118,20 @@ in λ ( params
|
||||||
, caps = 256
|
, caps = 256
|
||||||
, ram = Genode.units.MiB 8
|
, ram = Genode.units.MiB 8
|
||||||
}
|
}
|
||||||
, config = Init.Config::{
|
, config =
|
||||||
, content =
|
( Libc.toConfig
|
||||||
[ XML.leaf
|
Libc::{
|
||||||
{ name = "libc"
|
, stdin = Some "/dev/null"
|
||||||
, attributes = toMap
|
, stdout = Some "/dev/log"
|
||||||
{ stdin = "/dev/null"
|
, stderr = Some "/dev/log"
|
||||||
, stdout = "/dev/log"
|
, pipe = Some "/dev/pipes"
|
||||||
, stderr = "/dev/log"
|
, rtc = Some "/dev/rtc"
|
||||||
, pipe = "/dev/pipes"
|
, socket = Some "/dev/sockets"
|
||||||
, rtc = "/dev/rtc"
|
, vfs = [ VFS.leaf "fs" ]
|
||||||
, socket = "/dev/sockets"
|
, args = params.args
|
||||||
}
|
|
||||||
}
|
|
||||||
, VFS.vfs [ VFS.leaf "fs" ]
|
|
||||||
]
|
|
||||||
# Prelude.List.map
|
|
||||||
Text
|
|
||||||
XML.Type
|
|
||||||
( λ(x : Text) →
|
|
||||||
XML.leaf
|
|
||||||
{ name = "arg"
|
|
||||||
, attributes = toMap { value = x }
|
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
[ "bash", "-c", params.execStart ]
|
with attributes = toMap { ld_verbose = "yes" }
|
||||||
}
|
|
||||||
, routes =
|
, routes =
|
||||||
Prelude.List.map
|
Prelude.List.map
|
||||||
Text
|
Text
|
||||||
|
|
|
@ -46,15 +46,18 @@ with lib; {
|
||||||
vfs_pipe
|
vfs_pipe
|
||||||
];
|
];
|
||||||
configFile = let
|
configFile = let
|
||||||
|
args = ''[ "'' + concatStringsSep ''", "''
|
||||||
|
((lib.strings.splitString " ")
|
||||||
|
(toString service.serviceConfig.ExecStart)) + ''" ]'';
|
||||||
|
# TODO: service.environment;
|
||||||
interface = if service.genode.interface == null then
|
interface = if service.genode.interface == null then
|
||||||
"None Text"
|
"None Text"
|
||||||
else
|
else
|
||||||
''Some "${service.genode.interface}"'';
|
''Some "${service.genode.interface}"'';
|
||||||
in pkgs.writeText "${name'}.dhall" ''
|
in pkgs.writeText "${name'}.dhall" ''
|
||||||
${./systemd-runner.dhall} {
|
${./systemd-runner.dhall} {
|
||||||
, name = "${name'}"
|
, args = ${args}
|
||||||
, coreutils = "${pkgs.coreutils}"
|
, coreutils = "${pkgs.coreutils}"
|
||||||
, execStart = "${toString service.serviceConfig.ExecStart}"
|
|
||||||
, interface = ${interface}
|
, interface = ${interface}
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -1,17 +1,11 @@
|
||||||
{ stdenv, fetchgit, dhallPackages }:
|
{ stdenv, fetchgit, dhallPackages }:
|
||||||
|
|
||||||
dhallPackages.buildDhallPackage {
|
dhallPackages.buildDhallDirectoryPackage {
|
||||||
name = "dhall-genode";
|
name = "dhall-genode";
|
||||||
|
|
||||||
code = let
|
|
||||||
src = fetchgit {
|
src = fetchgit {
|
||||||
url = "https://git.sr.ht/~ehmry/dhall-genode";
|
url = "https://git.sr.ht/~ehmry/dhall-genode";
|
||||||
rev = "882740d78425bb1a6c4b1b34b1b201ace9d71317";
|
rev = "01b99d53f597cac40c6b4761d6dd750fc89f63da";
|
||||||
sha256 = "0cqlrbjb6023x7yynnglv11755xiw0wy4g16r88nsflcw119czqm";
|
sha256 = "1df4plhr72rhva9rdphlyq244j0rmldkpa7bj6mjzwarisdxw9vv";
|
||||||
};
|
};
|
||||||
in src + "/package.dhall";
|
|
||||||
|
|
||||||
dependencies = [ dhallPackages.Prelude ];
|
dependencies = [ dhallPackages.Prelude ];
|
||||||
|
|
||||||
source = true;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,6 @@ let Genode = env:DHALL_GENODE
|
||||||
|
|
||||||
let Prelude = Genode.Prelude
|
let Prelude = Genode.Prelude
|
||||||
|
|
||||||
let XML = Prelude.XML
|
|
||||||
|
|
||||||
let VFS = Genode.VFS
|
let VFS = Genode.VFS
|
||||||
|
|
||||||
let Init = Genode.Init
|
let Init = Genode.Init
|
||||||
|
@ -126,43 +124,21 @@ in λ(params : { bash : Text, coreutils : Text }) →
|
||||||
, "posix.lib.so"
|
, "posix.lib.so"
|
||||||
, "vfs.lib.so"
|
, "vfs.lib.so"
|
||||||
]
|
]
|
||||||
, config = Genode.Init.Config::{
|
, config =
|
||||||
, attributes = toMap { ld_verbose = "true" }
|
( Libc.toConfig
|
||||||
, content =
|
Libc::{
|
||||||
let env =
|
, pipe = Some "/dev/pipe"
|
||||||
λ(key : Text) →
|
, rtc = Some "/dev/rtc"
|
||||||
λ(value : Text) →
|
, vfs = [ VFS.fs VFS.FS::{ label = "root" } ]
|
||||||
XML.leaf
|
, env = toMap
|
||||||
{ name = "env"
|
{ TERM = "screen"
|
||||||
, attributes = toMap { key, value }
|
, PATH =
|
||||||
}
|
|
||||||
|
|
||||||
let arg =
|
|
||||||
λ(value : Text) →
|
|
||||||
XML.leaf
|
|
||||||
{ name = "arg"
|
|
||||||
, attributes = toMap { value }
|
|
||||||
}
|
|
||||||
|
|
||||||
in [ XML.leaf
|
|
||||||
{ name = "libc"
|
|
||||||
, attributes = toMap
|
|
||||||
{ stdin = "/dev/null"
|
|
||||||
, stdout = "/dev/log"
|
|
||||||
, stderr = "/dev/log"
|
|
||||||
, pipe = "/dev/pipe"
|
|
||||||
, rtc = "/dev/rtc"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
, VFS.vfs [ VFS.fs VFS.FS::{ label = "root" } ]
|
|
||||||
, env "TERM" "screen"
|
|
||||||
, env
|
|
||||||
"PATH"
|
|
||||||
"${params.coreutils}/bin:${params.bash}/bin"
|
"${params.coreutils}/bin:${params.bash}/bin"
|
||||||
, arg "bash"
|
|
||||||
, arg "/script.sh"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
, args = [ "bash", "/script.sh" ]
|
||||||
|
}
|
||||||
|
)
|
||||||
|
with attributes = toMap { ld_verbose = "true" }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,8 @@ let Init = Genode.Init
|
||||||
|
|
||||||
let Child = Init.Child
|
let Child = Init.Child
|
||||||
|
|
||||||
|
let Libc = Genode.Libc
|
||||||
|
|
||||||
in Child.flat
|
in Child.flat
|
||||||
Child.Attributes::{
|
Child.Attributes::{
|
||||||
, binary = "hello"
|
, binary = "hello"
|
||||||
|
@ -14,38 +16,5 @@ in Child.flat
|
||||||
, caps = 500
|
, caps = 500
|
||||||
, ram = Genode.units.MiB 10
|
, ram = Genode.units.MiB 10
|
||||||
}
|
}
|
||||||
, config = Init.Config::{
|
, config = Libc.toConfig Libc.default
|
||||||
, content =
|
|
||||||
let XML = Genode.Prelude.XML
|
|
||||||
|
|
||||||
in [ XML.leaf
|
|
||||||
{ name = "libc"
|
|
||||||
, attributes = toMap
|
|
||||||
{ stdin = "/dev/null"
|
|
||||||
, stdout = "/dev/log"
|
|
||||||
, stderr = "/dev/log"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
, 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" [ leaf "log", leaf "null" ] ]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,14 @@ let Genode = Test.Genode
|
||||||
|
|
||||||
let Prelude = Genode.Prelude
|
let Prelude = Genode.Prelude
|
||||||
|
|
||||||
let XML = Prelude.XML
|
|
||||||
|
|
||||||
let Init = Genode.Init
|
let Init = Genode.Init
|
||||||
|
|
||||||
let Child = Init.Child
|
let Child = Init.Child
|
||||||
|
|
||||||
|
let Libc = Genode.Libc
|
||||||
|
|
||||||
|
let VFS = Genode.VFS
|
||||||
|
|
||||||
in λ(params : { bash : Text, coreutils : Text, script : Text }) →
|
in λ(params : { bash : Text, coreutils : Text, script : Text }) →
|
||||||
let init =
|
let init =
|
||||||
Init::{
|
Init::{
|
||||||
|
@ -78,24 +80,13 @@ in λ(params : { bash : Text, coreutils : Text, script : Text }) →
|
||||||
Child.flat
|
Child.flat
|
||||||
Child.Attributes::{
|
Child.Attributes::{
|
||||||
, binary = "bash"
|
, binary = "bash"
|
||||||
, config = Genode.Init.Config::{
|
, config =
|
||||||
, content =
|
Libc.toConfig
|
||||||
[ Prelude.XML.text
|
Libc::{
|
||||||
''
|
, pipe = Some "/dev/pipe"
|
||||||
<libc stdin="/dev/null" stdout="/dev/stdout" stderr="/dev/stderr" pipe="/dev/pipe" rtc="/dev/rtc"/>
|
, rtc = Some "/dev/rtc"
|
||||||
<vfs> <fs/> </vfs>
|
, vfs = [ VFS.leaf "fs" ]
|
||||||
''
|
, args = [ "bash", params.script ]
|
||||||
]
|
|
||||||
# Prelude.List.map
|
|
||||||
Text
|
|
||||||
XML.Type
|
|
||||||
( λ(x : Text) →
|
|
||||||
XML.leaf
|
|
||||||
{ name = "arg"
|
|
||||||
, attributes = toMap { value = x }
|
|
||||||
}
|
|
||||||
)
|
|
||||||
[ "bash", params.script ]
|
|
||||||
}
|
}
|
||||||
, exitPropagate = True
|
, exitPropagate = True
|
||||||
, resources = Genode.Init.Resources::{
|
, resources = Genode.Init.Resources::{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user