Update README
parent
b0cd6b04fc
commit
ecf6f909a9
170
README.md
170
README.md
|
@ -19,13 +19,7 @@
|
|||
|
||||
[Cachix](https://app.cachix.org/cache/genodepkgs)
|
||||
|
||||
# Current status
|
||||
|
||||
Work here has slowed as effort is focused on a native [Dhall
|
||||
evaluator](https://git.sr.ht/~ehmry/dhall-nim) for Genode. This will allow for
|
||||
dynamic on-target reconfiguration.
|
||||
|
||||
## Repository layout
|
||||
# Repository layout
|
||||
|
||||
- Native packages are at [packages](./packages/default.nix)
|
||||
|
||||
|
@ -33,103 +27,7 @@ dynamic on-target reconfiguration.
|
|||
|
||||
- Tests are at [tests](./tests/default.nix)
|
||||
|
||||
- NixOS module at [nixos-modules](./nixos-modules)
|
||||
|
||||
# Installation
|
||||
|
||||
This repository contains an experimental NixOS module that can be used to build
|
||||
and boot Genode using a shared Nix store. Hardware support is limited, and the
|
||||
system does not support any dynamic reconfiguration.
|
||||
|
||||
NixOS must be installed on the target first, with many caveats. First of which,
|
||||
the block driver is hard-coded to use the media on the first AHCI port, port
|
||||
selection or NVMe simply hasn't been implemented within the Nix module.
|
||||
|
||||
These instructions are non-normative have not be tested exactly as follows. This
|
||||
probably wont work for you.
|
||||
|
||||
### Step 1: Install NixOS
|
||||
|
||||
Format the first AHCI drive with a GUID Partition Table. */nix/store must be
|
||||
placed on a partition with the partition type
|
||||
`24b69406-18a1-428d-908e-d21a1437122c` and formatted with an Ext2 file-system.*
|
||||
Install NixOS, using Grub to boot. Use the `nixos-unstable` channel. See
|
||||
https://nixos.org/nixos/manual/index.html#ch-installation.
|
||||
|
||||
### Step 2: Build Genode
|
||||
|
||||
As mentioned before, the NixOS installation must be built from the
|
||||
`nixos-unstable` channel. This is to ensure that the `nixos-rebuild` utility is
|
||||
built with suport for taking configuration from Nix flakes.
|
||||
|
||||
Create a file a `/etc/nixos/flake.nix` (or study the `nixos-rebuild` manual)
|
||||
with something similar to the following content:
|
||||
|
||||
```nix
|
||||
{
|
||||
description = "Example configuration flake";
|
||||
|
||||
inputs = {
|
||||
genodepkgs.url = "git+https://git.sr.ht/~ehmry/genodepkgs";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
};
|
||||
|
||||
outputs = { self, genodepkgs, nixpkgs }: {
|
||||
|
||||
nixosConfigurations.${your-hostname-here} = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
|
||||
./configuration.nix
|
||||
|
||||
genodepkgs.nixosModules.genodeHost
|
||||
|
||||
{
|
||||
genode.fbDriver = "intel"; # or "vesa"
|
||||
genode.guests = {
|
||||
# Add two NixOS guest VMs to the Genode side:
|
||||
|
||||
nixos = {
|
||||
config = { config, lib, pkgs, ... }: {
|
||||
users.users.root.password = "nixos";
|
||||
services.openssh.permitRootLogin = lib.mkDefault "yes";
|
||||
services.mingetty.autologinUser = lib.mkDefault "root";
|
||||
};
|
||||
};
|
||||
|
||||
tor-browser = {
|
||||
memorySize = 1024;
|
||||
config = { config, lib, pkgs, ... }: {
|
||||
services.cage = {
|
||||
enable = true;
|
||||
program = "${pkgs.tor-browser-bundle-bin}/bin/tor-browser";
|
||||
};
|
||||
users.users.demo.isNormalUser = true;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
Do a `nixos-rebuild boot`. *Grub must be in use, UEFI booting is optional.*
|
||||
|
||||
## Reboot
|
||||
|
||||
Reboot and select the Genode entry from the Grub menu. Hopefully the display
|
||||
will come up quickly, and the VMs will boot. *The VMs will take a long time to
|
||||
come up initially,* this is because the VDI disk images are copied from
|
||||
/nix/store to a mutable area of the file-system.
|
||||
|
||||
Thats all for now, patches are welcome.
|
||||
|
||||
- NixOS modules at [nixos-modules](./nixos-modules)
|
||||
|
||||
# Contributing
|
||||
|
||||
|
@ -137,34 +35,8 @@ Patches can be submitted and issues reported via the
|
|||
[mailing list](https://lists.sr.ht/~ehmry/genodepkgs). The mailing list is the
|
||||
minimum viable mechanism for community development, and may be replaced later.
|
||||
|
||||
The worksites at the moment are:
|
||||
|
||||
- Documentation
|
||||
|
||||
- Packaging multi-component scenarios
|
||||
|
||||
- Graphical launcher
|
||||
|
||||
- Port Boehm-Demers-Weiser GC to Genode
|
||||
|
||||
- ARM, i686
|
||||
|
||||
- Patching standard Nixpkgs packages by overlay. Explore Workflow and tooling
|
||||
for building emulated UNIX environments.
|
||||
|
||||
- LLVM testing and upstreaming patches.
|
||||
|
||||
- Formalizing Dhall configuration types.
|
||||
|
||||
- NixOS modules for constructing a reasonably usable Genode system. Reusing the
|
||||
module system from NixOS is advantageous because a dual boot system can
|
||||
share a `/nix/store` and be updated simultaneously.
|
||||
|
||||
- NixOS module for NixOS guests with the ARM VMM.
|
||||
|
||||
- Configuration validation via a service routing prover.
|
||||
|
||||
- Fix Ncurses build
|
||||
Issues may also be reported at the
|
||||
[ticket tracker](https://todo.sr.ht/~ehmry/genodepkgs).
|
||||
|
||||
# Nix Flakes
|
||||
|
||||
|
@ -218,49 +90,19 @@ nix shell .#legacyPackages.x86_64-linux-x86_64-genode.stdenv.cc
|
|||
x86_64-unknown-genode-clang++ -v
|
||||
```
|
||||
|
||||
# Testing
|
||||
|
||||
Tests are performed using QEMU, the test artifacts are built as follows:
|
||||
|
||||
```shell
|
||||
# Build a test log from a QEMU test run:
|
||||
nix build .#checks.x86_64-linux.nova-x86
|
||||
|
||||
# Build a tarball of the Nix store internal to a test VM:
|
||||
nix build .#checks.x86_64-linux.nova-x86.nodes.machine.store
|
||||
|
||||
# Build the XML configuration of the test VM:
|
||||
nix build .#checks.x86_64-linux.nova-x86.nodes.machine.xml
|
||||
|
||||
# Build the Dhall boot description of the test run:
|
||||
nix build .#checks.x86_64-linux.nova-x86.nodes.machine.config
|
||||
```
|
||||
|
||||
# System description format
|
||||
|
||||
The high-level interface to system building are boot descriptions. These Dhall
|
||||
documents describe the configuration of an [Init](https://genode.org/documentation/genode-foundations/19.05/system_configuration/The_init_component.html)
|
||||
instance and a store of ROM (Read-Only Memory) modules. These description can be
|
||||
used to build firmware-like binary images or merged and nested within other
|
||||
descriptions. In theory these descriptions can arrange file-systems, but those
|
||||
functions are missing.
|
||||
|
||||
The description schema is documented as code:
|
||||
https://git.sr.ht/~ehmry/dhall-genode/tree/master/Boot/package.dhall
|
||||
|
||||
# Tips and tricks
|
||||
|
||||
## How to build a Genode make target?
|
||||
|
||||
```nix
|
||||
let flake = getFlake "genodepkgs";
|
||||
let flake = builtins.getFlake "genodepkgs";
|
||||
in flake.packages.x86_64-linux-x86_64-genode.genodeSources.make "app/ping"
|
||||
```
|
||||
|
||||
## How to build a Genode depot package?
|
||||
|
||||
```nix
|
||||
let flake = getFlake "genodepkgs";
|
||||
let flake = builtins.getFlake "genodepkgs";
|
||||
in flake.packages.x86_64-linux-x86_64-genode.genodeSources.depot "wifi_drv"
|
||||
```
|
||||
|
||||
|
|
Loading…
Reference in New Issue