Restore README
This commit is contained in:
parent
2033bd8af1
commit
3bfc0479a8
124
README.md
124
README.md
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
```
|
```
|
||||||
_____ _ _ __
|
_____ _ _ __
|
||||||
/ ___/(_)___ _(_) /
|
/ ___/(_)___ _(_) /
|
||||||
|
@ -8,6 +7,125 @@
|
||||||
/____/
|
/____/
|
||||||
```
|
```
|
||||||
|
|
||||||
[Sigil](https://git.sr.ht/~ehmry/sigil) is an aborted Genode distribution.
|
[Sigil](https://gitea.c3d2.de/ehmry/sigil) is an experimental operating system
|
||||||
|
distribution built on the [Genode OS framework](https://genode.org/), the
|
||||||
|
[Nix package manager](https://nixos.org/), and the NixOS modular configuration
|
||||||
|
system.
|
||||||
|
|
||||||
[Post-mortem report](https://gemini.spam.works/users/emery/sigil-report.gmi)
|
Sigil was initially financed by [NLnet](https://nlnet.nl/) and the
|
||||||
|
[Privacy and Trust Enhancing technologies (PET) fund](https://nlnet.nl/PET/)
|
||||||
|
under the name "Genodepkgs". The project halted in early 2021 due to
|
||||||
|
overwhelming technical challenges but is still intermittenly updated.
|
||||||
|
|
||||||
|
While it is unlikely that Sigil will ever manifest a viable OS, it does serve
|
||||||
|
as a testing ground for post-UNIX packaging and system distribution concepts.
|
||||||
|
It also serves as an extreme test case for Nixpkgs cross-compilation and
|
||||||
|
portability.
|
||||||
|
|
||||||
|
|
||||||
|
## Articles
|
||||||
|
[Genodepkgs post-mortem report](https://gemini.spam.works/users/emery/sigil-report.gmi)
|
||||||
|
|
||||||
|
|
||||||
|
## Repository layout
|
||||||
|
|
||||||
|
- Native packages are at [packages](./packages/default.nix)
|
||||||
|
|
||||||
|
- Existing Nixpkgs packages are patched at [overlay](./overlay/default.nix)
|
||||||
|
|
||||||
|
- Tests are at [tests](./tests/default.nix)
|
||||||
|
|
||||||
|
- NixOS modules at [nixos-modules](./nixos-modules)
|
||||||
|
|
||||||
|
|
||||||
|
## Packaging
|
||||||
|
|
||||||
|
Packaging is done using standard Nixpkgs methods, a `stdenv` is available for
|
||||||
|
cross-compilation. See [Solo5](./packages/solo5/default.nix) as an example.
|
||||||
|
|
||||||
|
|
||||||
|
### Cross-compiling Nixpkgs
|
||||||
|
|
||||||
|
Some existing packages from Nixpkgs can be built with little or no modification.
|
||||||
|
Nixpkgs is available at the path `.#legacyPackages.x86_64-linux-x86_64-genode`
|
||||||
|
(or `…-aarch64-genode`) and modifications to packages are made at an
|
||||||
|
[overlay](./overlay/default.nix). Some packages need patched, others require
|
||||||
|
additional features added to the Genode libc.
|
||||||
|
|
||||||
|
Packages that run on Linux as well as Genode should not be packaged here, those
|
||||||
|
should be added to Nixpkgs.
|
||||||
|
|
||||||
|
|
||||||
|
## Toolchain
|
||||||
|
|
||||||
|
The Genode Labs toolchain is available here only for Linux and in binary form.
|
||||||
|
However, an experimental LLVM cross-compiler is provided here. Bootstrapping GCC
|
||||||
|
has not been practical due to its recursive autotools build system.
|
||||||
|
|
||||||
|
The enter a shell with the toolchain:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
nix shell .#legacyPackages.x86_64-linux-x86_64-genode.stdenv.cc
|
||||||
|
|
||||||
|
x86_64-unknown-genode-clang++ -v
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Tips and tricks
|
||||||
|
|
||||||
|
### How to add missing Genode ports to a Genode depot package?
|
||||||
|
|
||||||
|
The missing ports as indicated by a depot build failure must be added to
|
||||||
|
[targets.nix](./packages/genodelabs/depot-targets.nix). For example:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
wifi_drv = {
|
||||||
|
depotInputs = with self; [ libcrypto ];
|
||||||
|
portInputs = with ports; [ dde_linux ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### How to add undefined ports?
|
||||||
|
|
||||||
|
Should a required port not be defined, it must be added to
|
||||||
|
[ports.nix](./packages/genodelabs/ports.nix). Initially it should be sufficient to
|
||||||
|
define the port as an empty attribute set, run the build again, and then add the
|
||||||
|
hash found in the successive build error.
|
||||||
|
|
||||||
|
To continue from the previous example:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
dde_linux = { };
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
And after the reattempting the build a fixed-output hash should be produced,
|
||||||
|
this must now be added to the port definitions.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
dde_linux = {
|
||||||
|
hash = "sha256-3G5Mprv9ZBNhDJRuVF6Nrkp3KbFaN10IKFq0OdyAY9M="; };
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Should the port preparation fail do to missing utilities, these must be added to
|
||||||
|
the port definition using a `nativeBuildInputs` attribute.
|
||||||
|
|
||||||
|
Note that the hash checked into `ports.nix` is an *output hash*. The port hash
|
||||||
|
within the Genode source tree is an *explicit input hash*.
|
||||||
|
|
||||||
|
|
||||||
|
## Legal
|
||||||
|
|
||||||
|
This repository is published under MIT licensing consistent with Nixpkgs.
|
||||||
|
|
||||||
|
> Note: MIT license does not apply to the packages built by Nixpkgs,
|
||||||
|
> merely to the files in this repository (the Nix expressions, build
|
||||||
|
> scripts, NixOS modules, etc.). It also might not apply to patches
|
||||||
|
> included in Nixpkgs, which may be derivative works of the packages to
|
||||||
|
> which they apply. The aforementioned artifacts are all covered by the
|
||||||
|
> licenses of the respective packages.
|
||||||
|
|
Loading…
Reference in New Issue