erisPatch nixos modules

This commit is contained in:
Ehmry - 2021-02-16 12:10:50 +01:00
parent 207da49692
commit 85a108bdb3
19 changed files with 308 additions and 258 deletions

View File

@ -3,10 +3,18 @@
with lib;
let
localPackages = pkgs.buildPackages;
binary = mkOption {
description = "Program binary for this child.";
type = types.path;
description = "Program binary for this child. Must be an ERIS URN";
default = null;
type = types.nullOr
(types.str // { check = lib.strings.hasPrefix "urn:erisx2:"; });
example =
"urn:erisx2:AEAU4KT7AGJLA5BHPWFZ7HX2OVVNVFGDM2SIS726OPZBGXDED64QIDPHN2M5P5HIMOG3YDSWBGDPNUMZKCG4CRVU4DI5BOS5IJRFCSLQQY";
};
package = mkOption {
description = "Package to source the binary for this child.";
type = lib.types.package;
example = literalExample "pkg.genodePackages.init";
};
coreROMs = mkOption {
type = with types; listOf str;
@ -22,6 +30,152 @@ let
default = [ ];
type = types.listOf types.package;
};
children' = with builtins;
lib.attrsets.mapAttrs (childName: child:
if child.binary != null then {
inherit (child) binary configFile;
roms = { };
} else
let bin = lib.getEris "bin" child.package;
in {
config = ''${child.configFile} "${bin.cap}"'';
binary = bin.cap;
roms = [{
name = bin.cap;
value = bin.path;
}] ++ lib.mapAttrsToList (path: cap: {
name = cap;
value = path;
}) bin.closure;
}) config.genode.core.children;
coreErisCaps = with builtins;
let pkgNames = [ "cached_fs_rom" "jitter_sponge" "rtc_drv" ];
in listToAttrs (map (name:
let pkg = pkgs.genodePackages.${name};
in {
inherit name;
value = lib.getEris "bin" pkg;
}) pkgNames);
tarball =
"${config.system.build.tarball}/tarball/${config.system.build.tarball.fileName}.tar";
/* romDirectories = filterAttrs (_: value: value != null) (mapAttrs (name: value:
if value.extraInputs == [ ] then
null
else
pkgs.symlinkJoin {
name = "${name}-rom";
paths = value.extraInputs;
}) config.genode.init.children);
*/
bootConfigFile = let
storeBackendInputs = {
fs = [ pkgs.genodePackages.rump ];
memory = [ config.system.build.tarball ];
}.${config.genode.boot.storeBackend};
coreInputs = with builtins;
concatMap (getAttr "extraInputs")
(attrValues config.genode.core.children);
mergeManifests = inputs:
with builtins;
let
f = head: input:
if hasAttr "manifest" input then
''
${head}, { mapKey = "${
lib.getName input
}", mapValue = ${input.manifest} }''
else
abort "${input.pname} does not have a manifest";
in (foldl' f "[" inputs) + "]";
addManifest = drv:
drv // {
manifest =
localPackages.runCommand "${drv.name}.dhall" { inherit drv; } ''
set -eu
echo -n '[' >> $out
find $drv/ -type f -printf ',{mapKey= "%p",mapValue="%p"}' >> $out
${if builtins.elem "lib" drv.outputs then
''
find ${drv.lib}/ -type f -printf ',{mapKey= "%p",mapValue="%p"}' >> $out''
else
""}
echo -n ']' >> $out
'';
};
manifest =
# Manifests are Dhall metadata to be attached to every
# package to be used for dynamically buildings enviroments
# using Dhall expressions. Probably not worth pursuing.
pkgs.writeText "manifest.dhall" (mergeManifests (map addManifest
(with pkgs.genodePackages; storeBackendInputs ++ coreInputs))
+ lib.optionalString (config.genode.boot.romModules != { }) ''
# [ { mapKey = "romModules", mapValue = [ ${
lib.concatStringsSep ", " (lib.lists.flatten ((mapAttrsToList
(k: v: ''{ mapKey = "${k}", mapValue = "${v}" }'')
config.genode.boot.romModules)))
}] } ]'');
/* storeRomPolicies = mapAttrsToList
(name: value: '', { mapKey = "${name}", mapValue = "${value}" }'')
romDirectories;
*/
extraRoutes = lib.concatStringsSep ", " (lib.lists.flatten
(lib.mapAttrsToList (name: value:
map (suffix: ''
{ service =
{ name = "ROM"
, label =
Genode.Init.LabelSelector.Type.Partial
{ prefix = Some "nixos -> ${name}", suffix = Some "${suffix}" }
}
, route = Genode.Init.Route.parent (Some "${suffix}")
}
'') value.coreROMs) config.genode.init.children));
extraCoreChildren = "[ ${
lib.concatStringsSep ", " (lib.mapAttrsToList
(name: value: ''{ mapKey = "${name}", mapValue = ${value.config} }'')
children')
} ]";
in with coreErisCaps;
localPackages.runCommand "boot.dhall" { } ''
cat > $out << EOF
let Genode = env:DHALL_GENODE in
let VFS = Genode.VFS
let XML = Genode.Prelude.XML
in
${./store-wrapper.dhall}
{ binaries = {
, cached_fs_rom = "${cached_fs_rom.cap}"
, jitter_sponge = "${jitter_sponge.cap}"
, rtc_drv = "${rtc_drv.cap}"
}
, extraCoreChildren = ${extraCoreChildren}
, subinit = ${config.genode.init.configFile}
, storeSize = $(stat --format '%s' ${tarball})
, routes = [${extraRoutes} ] : List Genode.Init.ServiceRoute.Type
, bootManifest = ${manifest}
}
EOF
'';
erisContents = lib.attrsets.mapAttrsToList (urn: source: {
target = "eris/" + urn;
inherit source;
}) config.genode.init.romModules;
in {
options.genode = {
@ -43,7 +197,7 @@ in {
type = with types;
attrsOf (submodule {
options = {
inherit binary coreROMs extraInputs;
inherit binary coreROMs extraInputs package;
configFile = mkOption {
type = types.path;
description = ''
@ -132,50 +286,7 @@ in {
};
config = let
addManifest = drv:
drv // {
manifest =
localPackages.runCommand "${drv.name}.dhall" { inherit drv; } ''
set -eu
echo -n '[' >> $out
find $drv/ -type f -printf ',{mapKey= "%p",mapValue="%p"}' >> $out
${if builtins.elem "lib" drv.outputs then
''
find ${drv.lib}/ -type f -printf ',{mapKey= "%p",mapValue="%p"}' >> $out''
else
""}
echo -n ']' >> $out
'';
};
mergeManifests = inputs:
with builtins;
let
f = head: input:
if hasAttr "manifest" input then
''
${head}, { mapKey = "${
lib.getName input
}", mapValue = ${input.manifest} }''
else
abort "${input.pname} does not have a manifest";
in (foldl' f "[" inputs) + "]";
romDirectories = filterAttrs (_: value: value != null) (mapAttrs
(name: value:
if value.extraInputs == [ ] then
null
else
pkgs.symlinkJoin {
name = "${name}-rom";
paths = value.extraInputs;
}) config.genode.init.children);
tarball =
"${config.system.build.tarball}/tarball/${config.system.build.tarball.fileName}.tar";
in {
config = {
assertions = [{
assertion = builtins.any (s:
@ -184,25 +295,23 @@ in {
message = "invalid Genode core for this system";
}];
genode.boot.romModules = with pkgs.genodePackages;
let
getBin = name:
"${builtins.getAttr name pkgs.genodePackages}/bin/${name}";
in {
cached_fs_rom = getBin "cached_fs_rom";
init = "${init}/bin/init";
jitter_sponge = "${jitter_sponge}/bin/jitter_sponge";
report_rom = "${report_rom}/bin/report_rom";
rtc_drv = "${rtc_drv}/bin/rtc_drv";
vfs = "${vfs}/bin/vfs";
"vfs.lib.so" = "${vfs}/lib/vfs.lib.so";
};
genode.boot.romModules = with builtins;
let getBin = name: "${getAttr name pkgs.genodePackages}/bin/${name}";
in listToAttrs (lib.lists.flatten
((map (getAttr "roms") (attrValues children')) ++ (map
({ cap, path, ... }: {
name = cap;
value = path;
}) (attrValues coreErisCaps)))) // {
"init" = "${pkgs.genodePackages.init}/bin/init";
"report_rom" = "${pkgs.genodePackages.report_rom}/bin/report_rom";
};
genode.core.children =
# Component to steer the main fs to a specific partition
(if config.genode.boot.storeBackend != "memory" then {
part_block = {
binary = "${pkgs.genodePackages.part_block}/bin/part_block";
package = pkgs.genodePackages.part_block;
configFile = pkgs.writeText "part_block.dhall" ''
let Genode = env:DHALL_GENODE
@ -234,7 +343,7 @@ in {
} else
{ }) // {
fs = {
binary = "${pkgs.genodePackages.vfs}/bin/vfs";
package = pkgs.genodePackages.vfs;
configFile = let
vfsConfig = if config.genode.boot.storeBackend == "memory" then ''
VFS.vfs
@ -324,97 +433,16 @@ in {
};
};
genode.boot.configFile = let
# genode.boot.storePaths = builtins.attrValues romDirectories;
storeBackendInputs = {
fs = [ pkgs.genodePackages.rump ];
memory = [ config.system.build.tarball ];
}.${config.genode.boot.storeBackend};
coreInputs = with builtins;
concatMap (getAttr "extraInputs")
(attrValues config.genode.core.children);
manifest =
# Manifests are Dhall metadata to be attached to every
# package to be used for dynamically buildings enviroments
# using Dhall expressions. Probably not worth pursuing.
pkgs.writeText "manifest.dhall" (mergeManifests (map addManifest
(with pkgs.genodePackages;
storeBackendInputs ++ [ cached_fs_rom jitter_sponge report_rom vfs ]
++ coreInputs))
+ lib.optionalString (config.genode.boot.romModules != { }) ''
# [ { mapKey = "romModules", mapValue = [ ${
toString ((mapAttrsToList
(k: v: '', { mapKey = "${k}", mapValue = "${v}" }'')
config.genode.boot.romModules) ++ (lib.attrsets.mapAttrsToList
(name: value:
''
, { mapKey = "${value.binary}", mapValue = "${value.binary}" }'')
config.genode.core.children))
}] } ]'');
storeRomPolicies = mapAttrsToList
(name: value: '', { mapKey = "${name}", mapValue = "${value}" }'')
romDirectories;
extraRoutes = lib.concatStringsSep ", " (lib.lists.flatten
(lib.mapAttrsToList (name: value:
map (suffix: ''
{ service =
{ name = "ROM"
, label =
Genode.Init.LabelSelector.Type.Partial
{ prefix = Some "nixos -> ${name}", suffix = Some "${suffix}" }
}
, route = Genode.Init.Route.parent (Some "${suffix}")
}
'') value.coreROMs) config.genode.init.children));
extraCoreChildren = "[ ${
toString (lib.mapAttrsToList (name: value:
''
, { mapKey = "${name}", mapValue = ${value.configFile} "${value.binary}" }'')
config.genode.core.children)
} ]";
in localPackages.runCommand "boot.dhall" { } ''
cat > $out << EOF
let Genode = env:DHALL_GENODE in
let VFS = Genode.VFS
let XML = Genode.Prelude.XML
in
${./store-wrapper.dhall}
{ extraCoreChildren = ${extraCoreChildren}
, subinit = ${config.genode.init.configFile}
, storeSize = $(stat --format '%s' ${tarball})
, storeRomPolicies = [${
toString storeRomPolicies
} ] : Genode.Prelude.Map.Type Text Text
, routes = [${extraRoutes} ] : List Genode.Init.ServiceRoute.Type
, bootManifest = ${manifest}
}
EOF
'';
genode.boot.storePaths = with builtins;
[ config.genode.init.configFile ] ++ (attrValues romDirectories);
genode.boot.configFile = bootConfigFile;
# Create the tarball of the store to live in core ROM
system.build.tarball =
pkgs.callPackage "${modulesPath}/../lib/make-system-tarball.nix" {
contents = [ ];
storeContents = let
romDirs = mapAttrsToList (name: object: {
symlink = "rom/${name}";
inherit object;
}) romDirectories;
configFiles = mapAttrsToList (name: child: {
symlink = "config/${name}.dhall";
object = pkgs.writeText "${name}.dhall"
"${child.configFile} ${child.binary}";
}) config.genode.init.children;
in romDirs ++ configFiles;
extraInputs = lib.attrsets.mapAttrsToList (name: child: child.package)
config.genode.init.children;
contents = erisContents;
compressCommand = "cat";
compressionExtension = "";
};
@ -427,14 +455,16 @@ in {
lndir -silent \
${pkgs.genodePackages.dhallGenode}/.cache \
$XDG_CACHE_HOME
dhall text <<< "(env:DHALL_GENODE).Init.render (${config.genode.boot.configFile}).config" > $out
dhall text <<< "(env:DHALL_GENODE).Init.render (${bootConfigFile}).config" > $out
xmllint --noout $out
'';
virtualisation.diskImage = let
espImage = import ./lib/make-esp-fs.nix { inherit config pkgs; };
storeFsImage =
pkgs.callPackage ./lib/make-ext2-fs.nix { inherit config pkgs; };
storeFsImage = pkgs.callPackage ./lib/make-ext2-fs.nix {
inherit config lib pkgs;
contents = erisContents;
};
bootDriveImage = import ./lib/make-bootable-image.nix {
inherit config pkgs espImage storeFsImage;
};
@ -442,12 +472,13 @@ in {
virtualisation.useBootLoader = config.genode.boot.storeBackend != "memory";
virtualisation.qemu.options =
let blockCommon = [ "-bios ${pkgs.buildPackages.buildPackages.OVMF.fd}/FV/OVMF.fd" ];
in {
fs = blockCommon;
memory = [ ];
}.${config.genode.boot.storeBackend};
virtualisation.qemu.options = let
blockCommon =
[ "-bios ${pkgs.buildPackages.buildPackages.OVMF.fd}/FV/OVMF.fd" ];
in {
fs = blockCommon;
memory = [ ];
}.${config.genode.boot.storeBackend};
};

View File

@ -6,8 +6,17 @@ let
cfg = config.genode.init;
binary = mkOption {
description = "Program binary for this child.";
type = types.path;
description = "Program binary for this child. Must be an ERIS URN.";
default = null;
type = types.nullOr
(types.str // { check = lib.strings.hasPrefix "urn:erisx2:"; });
example =
"urn:erisx2:AEAU4KT7AGJLA5BHPWFZ7HX2OVVNVFGDM2SIS726OPZBGXDED64QIDPHN2M5P5HIMOG3YDSWBGDPNUMZKCG4CRVU4DI5BOS5IJRFCSLQQY";
};
package = mkOption {
description = "Package to source the binary for this child.";
type = lib.types.package;
example = literalExample "pkg.genodePackages.init";
};
coreROMs = mkOption {
type = with types; listOf str;
@ -18,11 +27,41 @@ let
'';
example = [ "platform_info" ];
};
extraInputs = mkOption {
description = "List of packages to build a ROM store with.";
extraInputs =
# TODO: deprecated?
mkOption {
description = "List of packages to build a ROM store with.";
default = [ ];
type = types.listOf types.package;
};
extraErisInputs = mkOption {
description = "List of ERIS inputs to add to the init closure.";
default = [ ];
type = types.listOf types.package;
type = types.listOf types.attrs;
};
children' = with builtins;
lib.attrsets.mapAttrs (childName: child:
let
toRoms = { cap, closure, path }:
[{
name = cap;
value = path;
}] ++ (lib.mapAttrsToList (value: name: { inherit name value; })
closure);
extraRoms = lib.lists.flatten (map toRoms child.extraErisInputs);
in if child.binary != null then {
inherit (child) binary configFile;
roms = { }; # extraRoms;
} else
let bin = lib.getEris "bin" child.package;
in {
config = ''${child.configFile} "${bin.cap}"'';
binary = bin.cap;
roms = toRoms bin ++ extraRoms;
}) config.genode.init.children;
in {
options.genode.init = {
@ -62,7 +101,7 @@ in {
type = with types;
attrsOf (submodule {
options = {
inherit binary coreROMs extraInputs;
inherit binary coreROMs extraErisInputs extraInputs package;
routeToNics = lib.mkOption {
type = with types; listOf str;
@ -94,6 +133,12 @@ in {
});
};
romModules = mkOption {
type = types.attrsOf types.path;
default = { };
description = "Attr set of initial ROM modules";
};
subinits =
# Subinits are just a different kind of children.
# Eventually this will be nested "genode.init" instances.
@ -102,7 +147,7 @@ in {
type = with types;
attrsOf (submodule {
options = {
inherit binary coreROMs extraInputs;
inherit binary coreROMs extraErisInputs extraInputs;
configFile = mkOption {
type = types.path;
description = ''
@ -121,7 +166,7 @@ in {
# TODO: convert the subinits to children
children = mapAttrs (name: value: {
inherit (value) extraInputs;
inherit (value) extraErisInputs extraInputs;
configFile = pkgs.writeText "${name}.child.dhall" ''
let Genode = env:DHALL_GENODE
@ -131,9 +176,9 @@ in {
configFile = let
children = lib.mapAttrsToList
(name: value: '', `${name}` = ${value.configFile} "${value.binary}"'')
cfg.children;
children =
lib.mapAttrsToList (name: value: ", `${name}` = ${value.config} ")
children';
nicRoutes = lib.mapAttrsToList (child: value:
(map (label: ''
@ -153,12 +198,16 @@ in {
in baseConfig // {
, verbose = ${if config.genode.init.verbose then "True" else "False"}
, children = baseConfig.children # toMap {${toString children} }
, routes = baseConfig.routes # [${
, routes = baseConfig.routes # ([${
toString nicRoutes
}] : List Genode.Init.ServiceRoute.Type
}] : List Genode.Init.ServiceRoute.Type)
} : Genode.Init.Type
'';
romModules = with builtins;
listToAttrs (lib.lists.flatten
(map ({ roms, ... }: roms) (lib.lists.flatten (attrValues children'))));
};
}

View File

@ -16,7 +16,7 @@ in {
hardware.genode.framebuffer.enable = cfg.enable;
genode.core.children.nitpicker = mkIf cfg.enable {
binary = "${pkgs.genodePackages.nitpicker}/bin/nitpicker";
binary = pkgs.genodePackages.nitpicker;
configFile = pkgs.writeText "nitpicker.dhall" ''
let Init = (env:DHALL_GENODE).Init
@ -38,7 +38,7 @@ in {
};
genode.core.children.consoleLog = mkIf cfg.consoleLog.enable {
binary = "${pkgs.genodePackages.init}/bin/init";
binary = pkgs.genodePackages.init;
extraInputs = with pkgs.genodePackages; [
gui_fb
log_core

View File

@ -25,7 +25,7 @@ with lib;
'');
genode.core.children.ahci_drv = lib.mkIf cfg.enable {
binary = "${pkgs.genodePackages.ahci_drv}/bin/ahci_drv";
package = pkgs.genodePackages.ahci_drv;
configFile = pkgs.writeText "ahci_drv.dhall" ''
let Genode = env:DHALL_GENODE

View File

@ -17,7 +17,7 @@ with lib;
config = {
genode.core.children.acpi_drv = {
binary = "${pkgs.genodePackages.acpi_drv}/bin/acpi_drv";
package = pkgs.genodePackages.acpi_drv;
configFile = pkgs.writeText "acpi_drv.dhall" ''
let Genode = env:DHALL_GENODE
@ -45,7 +45,7 @@ with lib;
};
genode.core.children.platform_drv = {
binary = "${pkgs.genodePackages.platform_drv}/bin/platform_drv";
package = pkgs.genodePackages.platform_drv;
configFile = let
policies =
map (policy: ", ${policy}") config.hardware.genode.platform.policies;

View File

@ -15,16 +15,11 @@ with lib;
genode.core.children.fb_drv =
mkIf config.hardware.genode.framebuffer.enable {
binary = with pkgs.genodePackages;
{
boot = boot_fb_drv;
vesa = vesa_drv;
}.${config.hardware.genode.framebuffer.driver};
configFile = let
binary = with pkgs.genodePackages;
{
boot = "${boot_fb_drv}/bin/boot_fb_drv";
vesa = "${vesa_drv}/bin/vesa_fb_drv";
boot = boot_fb_drv;
vesa = vesa_drv;
}.${config.hardware.genode.framebuffer.driver};
in builtins.toFile "fb_drv.dhall" ''
let Genode = env:DHALL_GENODE

View File

@ -44,8 +44,7 @@ with lib;
else
null) config.genode.init.children);
in {
assertion =
trace clientList (clientList == [ ] || length clientList == 1);
assertion = clientList == [ ] || length clientList == 1;
message = "Multiple routes to Nic ${name}, ${clientList}";
};
in lib.lists.concatMap
@ -79,10 +78,10 @@ with lib;
in {
name = name';
value = {
binary = with pkgs.genodePackages;
package = with pkgs.genodePackages;
{
ipxe = "${ipxe_nic_drv}/bin/ipxe_nic_drv";
virtio = "${virtio_nic_drv}/bin/virtio_nic_drv";
ipxe = ipxe_nic_drv;
virtio = virtio_nic_drv;
}.${interface.genode.driver};
configFile = let
policy = lib.mapAttrsToList (childName: value:
@ -119,17 +118,18 @@ with lib;
sockets = mapAttrs' (name: interface:
let
name' = name + ".sockets";
vfsPlugin = with pkgs.genodePackages;
vfsPlugin = lib.getEris "lib" (with pkgs.genodePackages;
{
lwip = "${vfs_lwip}/lib/vfs_lwip.lib.so";
lxip = "${vfs_lxip}/lib/vfs_lxip.lib.so";
}.${interface.genode.stack};
lwip = vfs_lwip;
lxip = vfs_lxip;
}.${interface.genode.stack});
in {
name = name';
value = if interface.genode.stack == null then
null
else {
binary = "${pkgs.genodePackages.vfs}/bin/vfs";
package = pkgs.genodePackages.vfs;
extraErisInputs = [ vfsPlugin ];
routeToNics = [ name ];
configFile = let
ram = {
@ -144,7 +144,7 @@ with lib;
}
{
name = "load";
value = vfsPlugin;
value = vfsPlugin.cap;
}
] ++ lib.optionals (interface.ipv4.addresses != [ ])
(let addr = head interface.ipv4.addresses;

View File

@ -88,7 +88,7 @@ with lib;
genode.core.children.usb_block_drv =
mkIf config.hardware.genode.usb.storage.enable {
binary = "${pkgs.genodePackages.usb_block_drv}/bin/usb_block_drv";
binary = pkgs.genodePackages.usb_block_drv;
configFile = builtins.toFile "usb_block_drv.dhall" ''
let Genode = env:DHALL_GENODE

View File

@ -1,10 +1,15 @@
{ config, pkgs }:
{ config, lib, pkgs, extraInputs ? [ ], contents }:
let
grub' = pkgs.buildPackages.grub2_efi;
sdClosureInfo = pkgs.buildPackages.closureInfo {
rootPaths = config.genode.boot.storePaths;
};
copyEris = lib.strings.concatMapStrings ({ source, target }: ''
cp -a --reflink=auto -t "./rootImage/${target}" "${source}"
'') contents;
in pkgs.stdenv.mkDerivation {
name = "ext2-fs.img.zstd";
@ -49,6 +54,8 @@ in pkgs.stdenv.mkDerivation {
done
)
${copyEris}
# Also include a manifest of the closures in a format suitable for nix-store --load-db
cp ${sdClosureInfo}/registration ./rootImage/nix-path-registration

View File

@ -13,10 +13,11 @@ let ChildMapType = TextMapType Child.Type
let Manifest/Type = TextMapType (TextMapType Text)
in λ ( params
: { extraCoreChildren : ChildMapType
: { binaries :
{ cached_fs_rom : Text, jitter_sponge : Text, rtc_drv : Text }
, extraCoreChildren : ChildMapType
, subinit : Init.Type
, storeSize : Natural
, storeRomPolicies : Prelude.Map.Type Text Text
, routes : List Init.ServiceRoute.Type
, bootManifest : Manifest/Type
}
@ -46,7 +47,7 @@ in λ ( params
"rtc"
( Child.flat
Child.Attributes::{
, binary = "rtc_drv"
, binary = params.binaries.rtc_drv
, routes = [ Init.ServiceRoute.parent "IO_PORT" ]
, config = Init.Config::{
, policies =
@ -62,7 +63,7 @@ in λ ( params
"jitter_sponge"
( Child.flat
Child.Attributes::{
, binary = "jitter_sponge"
, binary = params.binaries.jitter_sponge
, config = Init.Config::{
, policies =
[ Init.Config.Policy::{
@ -77,11 +78,14 @@ in λ ( params
"store_rom"
( Child.flat
Child.Attributes::{
, binary = "cached_fs_rom"
, binary = params.binaries.cached_fs_rom
, resources = Init.Resources::{
, ram = params.storeSize + Genode.units.MiB 1
}
, config = Init.Config::{
, defaultPolicy = Some Init.Config.DefaultPolicy::{
, attributes = toMap { directory = "/eris" }
}
, policies =
let directStoreROMs =
Prelude.List.map
@ -106,49 +110,22 @@ in λ ( params
params.subinit.children
)
let indirectStoreROMS =
let Entry = Prelude.Map.Entry Text Text
in Prelude.List.concatMap
Entry
Init.Config.Policy.Type
( λ(e : Entry) →
[ Init.Config.Policy::{
, service = "ROM"
, label =
Init.LabelSelector.prefix
"nixos -> ${e.mapKey}"
, attributes = toMap
{ directory =
"${e.mapValue}/bin"
}
}
, Init.Config.Policy::{
, service = "ROM"
, label =
Init.LabelSelector.Type.Partial
{ prefix = Some
"nixos -> ${e.mapKey}"
, suffix = Some ".so"
}
, attributes = toMap
{ directory =
"${e.mapValue}/lib"
}
}
]
)
params.storeRomPolicies
in [ Init.Config.Policy::{
, service = "ROM"
, label =
Init.LabelSelector.prefix
"nixos -> /nix/store"
}
, Init.Config.Policy::{
, attributes = toMap
{ directory = "/eris" }
, label =
Init.LabelSelector.prefix
"nixos -> "
, service = "ROM"
}
]
# directStoreROMs
# indirectStoreROMS
}
}
)

View File

@ -8,7 +8,7 @@
};
genode.boot.storeBackend = "fs";
genode.init.children.hello = {
binary = "${pkgs.hello}/bin/hello";
package = pkgs.hello;
configFile = ./hello.dhall;
};
};

View File

@ -2,7 +2,7 @@
name = "bash";
machine = { pkgs, ... }: {
genode.init.children.bash = {
binary = "${pkgs.genodePackages.init}/bin/init";
package = pkgs.genodePackages.init;
configFile = pkgs.writeText "bash.child.dhall" ''
${
./bash.dhall

View File

@ -1,8 +1,9 @@
{
name = "hello";
machine = { pkgs, ... }: {
genode.init.verbose = true;
genode.init.children.hello = {
binary = "${pkgs.hello}/bin/hello";
package = pkgs.hello;
configFile = ./hello.dhall;
};
};

View File

@ -1,6 +1,6 @@
{ system, localSystem, crossSystem
# Nixpkgs, for qemu, lib and more
, pkgs, modulesPath
, pkgs, lib, modulesPath
# NixOS configuration to add to the VMs
, extraConfigurations ? [ ] }:
@ -24,7 +24,7 @@ rec {
buildVM = nodes: configurations:
import "${modulesPath}/../lib/eval-config.nix" {
inherit system;
inherit lib system;
modules = configurations ++ extraConfigurations;
baseModules = (import "${modulesPath}/module-list.nix") ++ [
../../nixos-modules/file-systems.nix

View File

@ -4,6 +4,7 @@
with import ./build-vms.nix {
inherit system localSystem crossSystem pkgs extraConfigurations;
inherit (flake) lib;
modulesPath = "${flake.inputs.nixpkgs}/nixos/modules";
};
with pkgs.buildPackages.buildPackages;

View File

@ -1,10 +0,0 @@
{
name = "lighttpd";
machine = { pkgs, ... }: {
imports = [ ../nixos-modules/systemd.nix ];
services.lighttpd = {
enable = true;
};
systemd.services.lighttpd.genode.enable = true;
};
}

View File

@ -1,12 +1,11 @@
{
name = "log";
machine = { pkgs, ... }: {
machine = { lib, pkgs, ... }: {
genode.init.children.log = {
binary = "${pkgs.genodePackages.test-log}/bin/test-log";
package = pkgs.genodePackages.test-log;
configFile = pkgs.writeText "test-log.dhall" ''
let Genode =
env:DHALL_GENODE
? https://git.sr.ht/~ehmry/dhall-genode/blob/master/package.dhall
let Genode = env:DHALL_GENODE
let Child = Genode.Init.Child

View File

@ -23,7 +23,7 @@
'';
};
in {
binary = "${testNim}/bin/test_nim";
package = testNim;
extraInputs = with pkgs.genodePackages; [ libc stdcxx ];
configFile = builtins.toFile "nim.dhall" ''
let Genode = env:DHALL_GENODE

View File

@ -5,7 +5,7 @@
all (f: any f specs) [ (spec: spec == "nova") (spec: spec == "x86") ];
machine = { pkgs, ... }: {
genode.init.children.vmm = {
binary = "${pkgs.genodePackages.test-vmm_x86}/bin/test-vmm_x86";
package = pkgs.genodePackages.test-vmm_x86;
configFile = ./vmm_x86.dhall;
coreROMs = [ "platform_info" ];
};