~ehmry/sigil

e4ed185e8bb1ce1e67f363439d135edd782adad3 — Emery Hemingway 4 years ago a60ccd1
rsync package overrides
4 files changed, 164 insertions(+), 6 deletions(-)

M overlay/default.nix
M tests/posix.dhall
A tests/rsync.dhall
A tests/rsync.nix
M overlay/default.nix => overlay/default.nix +5 -0
@@ 1,6 1,9 @@
final: prev:
with prev;
let
  overrideHost = drv: attrs:
    if hostPlatform.isGenode then drv.override attrs else drv;

  overrideHostAttrs = drv: f:
    if hostPlatform.isGenode then drv.overrideAttrs f else drv;



@@ 89,6 92,8 @@ in {
      "rm $out/bin/c_rehash"; # eliminate the perl runtime dependency
  });

  rsync = overrideHost rsync { enableACLs = false; };

  solo5-tools = callPackage ./solo5-tools { };

  tup = prev.tup.overrideAttrs (attrs: { setupHook = ./tup/setup-hook.sh; });

M tests/posix.dhall => tests/posix.dhall +8 -6
@@ 24,11 24,13 @@ in  λ(params : { bash : Text, coreutils : Text, script : Text }) →
                      Child.Attributes::{
                      , binary = "vfs"
                      , config = Init.Config::{
                        , attributes = toMap { ld_verbose = "yes" }
                        , content =
                          [ Prelude.XML.text
                              ''
                              <vfs>
                              <dir name="dev"> <log name="stdout" label="stdout"/> <log name="stderr" label="stderr"/> <null/> <pipe/> <rtc/> <zero/> </dir>
                              <dir name="dev"> <log name="stdout" label="stdout"/> <log name="stderr" label="stderr"/> <null/> <rtc/> <zero/> </dir>
                              <dir name="pipe"> <pipe/> </dir>
                              <dir name="usr"><dir name="bin"><symlink name="env" target="${params.coreutils}/bin/env"/></dir></dir>
                              <dir name="tmp"><ram/></dir>
                              <dir name="nix"><fs label="nix" root="nix"/></dir>


@@ 41,7 43,7 @@ in  λ(params : { bash : Text, coreutils : Text, script : Text }) →
                        }
                      , provides = [ "File_system" ]
                      , resources = Genode.Init.Resources::{
                        , caps = 256
                        , caps = 512
                        , ram = Genode.units.MiB 8
                        }
                      , routes =


@@ 58,7 60,7 @@ in  λ(params : { bash : Text, coreutils : Text, script : Text }) →
                      , provides = [ "ROM" ]
                      , resources = Init.Resources::{
                        , caps = 256
                        , ram = Genode.units.MiB 4
                        , ram = Genode.units.MiB 8
                        }
                      , routes =
                        [ Init.ServiceRoute.parentLabel


@@ 75,7 77,7 @@ in  λ(params : { bash : Text, coreutils : Text, script : Text }) →
                        , content =
                              [ Prelude.XML.text
                                  ''
                                  <libc stdin="/dev/null" stdout="/dev/stdout" stderr="/dev/stderr" pipe="/dev/pipe" rtc="/dev/rtc"/>
                                  <libc stdin="/dev/null" stdout="/dev/stdout" stderr="/dev/stderr" pipe="/pipe" rtc="/dev/rtc"/>
                                  <vfs> <fs/> </vfs>
                                  ''
                              ]


@@ 92,8 94,8 @@ in  λ(params : { bash : Text, coreutils : Text, script : Text }) →
                        }
                      , exitPropagate = True
                      , resources = Genode.Init.Resources::{
                        , caps = 256
                        , ram = Genode.units.MiB 8
                        , caps = 1024
                        , ram = Genode.units.MiB 32
                        }
                      , routes =
                        [ Init.ServiceRoute.child "File_system" "vfs"

A tests/rsync.dhall => tests/rsync.dhall +121 -0
@@ 0,0 1,121 @@
let Test = ./test.dhall ? env:DHALL_GENODE_TEST

let Genode = Test.Genode

let Prelude = Genode.Prelude

let XML = Prelude.XML

let Init = Genode.Init

let Child = Init.Child

in  λ(params : { bash : Text, coreutils : Text, script : Text }) →
      let init =
            Init::{
            , verbose = True
            , routes =
              [ Init.ServiceRoute.parent "Timer"
              , Init.ServiceRoute.parent "Rtc"
              ]
            , children = toMap
                { vfs =
                    Child.flat
                      Child.Attributes::{
                      , binary = "vfs"
                      , config = Init.Config::{
                        , content =
                          [ Prelude.XML.text
                              ''
                              <vfs>
                              <dir name="dev"> <log name="stdout" label="stdout"/> <log name="stderr" label="stderr"/> <null/> <rtc/> <zero/> </dir>
                              <dir name="pipe"> <pipe/> </dir>
                              <dir name="usr"><dir name="bin"><symlink name="env" target="${params.coreutils}/bin/env"/></dir></dir>
                              <dir name="tmp"><ram/></dir>
                              <dir name="nix"><fs label="nix" root="nix"/></dir>
                              </vfs>
                              ''
                          ]
                        , defaultPolicy = Some Init.Config.DefaultPolicy::{
                          , attributes = toMap { root = "/", writeable = "yes" }
                          }
                        }
                      , provides = [ "File_system" ]
                      , resources = Genode.Init.Resources::{
                        , caps = 256
                        , ram = Genode.units.MiB 8
                        }
                      , routes =
                          Prelude.List.map
                            Text
                            Init.ServiceRoute.Type
                            Init.ServiceRoute.parent
                            [ "File_system", "Rtc" ]
                      }
                , store_rom =
                    Child.flat
                      Child.Attributes::{
                      , binary = "cached_fs_rom"
                      , provides = [ "ROM" ]
                      , resources = Init.Resources::{
                        , caps = 256
                        , ram = Genode.units.MiB 4
                        }
                      , routes =
                        [ Init.ServiceRoute.parentLabel
                            "File_system"
                            (None Text)
                            (Some "nix")
                        ]
                      }
                , shell =
                    Child.flat
                      Child.Attributes::{
                      , binary = "bash"
                      , config = Genode.Init.Config::{
                        , content =
                              [ Prelude.XML.text
                                  ''
                                  <libc stdin="/dev/null" stdout="/dev/stdout" stderr="/dev/stderr" pipe="/pipe" rtc="/dev/rtc"/>
                                  <vfs> <fs/> </vfs>
                                  ''
                              ]
                            # Prelude.List.map
                                Text
                                XML.Type
                                ( λ(x : Text) →
                                    XML.leaf
                                      { name = "arg"
                                      , attributes = toMap { value = x }
                                      }
                                )
                                [ "bash", params.script ]
                        }
                      , exitPropagate = True
                      , resources = Genode.Init.Resources::{
                        , caps = 1024
                        , ram = Genode.units.MiB 32
                        }
                      , routes =
                        [ Init.ServiceRoute.child "File_system" "vfs"
                        , { service =
                            { name = "ROM"
                            , label =
                                Init.LabelSelector.Type.Partial
                                  { prefix = Some "/nix/store/"
                                  , suffix = None Text
                                  }
                            }
                          , route =
                              Init.Route.Type.Child
                                { name = "store_rom"
                                , label = None Text
                                , diag = None Bool
                                }
                          }
                        ]
                      }
                }
            }

      in  Test::{ children = Test.initToChildren init }

A tests/rsync.nix => tests/rsync.nix +30 -0
@@ 0,0 1,30 @@
{ pkgs, legacyPackages, ... }:
with pkgs;

let
  inherit (legacyPackages) bash coreutils;
  script = with legacyPackages;
    writeTextFile {
      name = "rsync.sh";
      text = ''
        export PATH=${
          lib.makeSearchPathOutput "bin" "bin"
          (with legacyPackages; [ bash coreutils rsync ])
        }
        set -v
        rsync --version
        rsync -r /nix
      '';
    };
in rec {
  name = "rsync";
  machine = {
    config = ''
      ${
        ./posix.dhall
      } { bash = \"${bash}\", coreutils = \"${coreutils}\", script = \"${script}\" }'';
    inputs = map pkgs.genodeSources.depot [ "libc" "posix" "vfs_pipe" "vfs" ]
      ++ [ bash ];
    extraPaths = [ script ] ++ (with legacyPackages; [ coreutils rsync ]);
  };
}