-
Notifications
You must be signed in to change notification settings - Fork 5
/
default.nix
129 lines (95 loc) · 3.82 KB
/
default.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
let
bootstrap = (import <nixpkgs> {});
in
{
###### Configuration that is passed into the build system #######
# Certificate used for verification of update bundles
updateCert ? (bootstrap.lib.warn "Using dummy update certificate. Build artifacts can only be used for local development." ./pki/dummy/cert.pem)
# url from where updates should be fetched
, updateUrl ? "http://localhost:9000/"
, deployUrl ? "s3://dist-test.dividat.ch/releases/playos/test/"
# url where kiosk points
, kioskUrl ? "https://play.dividat.com"
, applicationPath ? ./application.nix
##### Allow disabling the build of unused artifacts when developing/testing #####
, buildInstaller ? true
, buildBundle ? true
, buildDisk ? true
, buildLive ? true
}:
let
application = import applicationPath;
pkgs = import ./pkgs (with application; {
applicationOverlays = application.overlays;
});
# lib.makeScope returns consistent set of packages that depend on each other (and is my new favorite nixpkgs trick)
components = with pkgs; lib.makeScope newScope (self: with self; {
inherit updateUrl deployUrl kioskUrl;
inherit (application) version safeProductName fullProductName;
greeting = lib.attrsets.attrByPath [ "greeting" ] (label: label) application;
# Controller
playos-controller = import ./controller {
pkgs = pkgs;
version = version;
bundleName = safeProductName;
updateUrl = updateUrl;
kioskUrl = kioskUrl;
};
# Documentations
docs = callPackage ./docs {};
# Certificate used for verification of update bundles
updateCert = copyPathToStore updateCert;
# System image as used in full installation
systemImage = callPackage ./system-image { application = application; };
# USB live system
live = callPackage ./live { application = application; };
# Installation script
install-playos = callPackage ./installer/install-playos {
grubCfg = ./bootloader/grub.cfg;
};
# Rescue system
rescueSystem = callPackage ./bootloader/rescue { application = application; };
# Installer ISO image
installer = callPackage ./installer {};
# Script to deploy updates
deploy-update = callPackage ./deployment/deploy-update { application = application; };
# RAUC bundle
unsignedRaucBundle = callPackage ./rauc-bundle {};
# NixOS system toplevel with test machinery
testingToplevel = callPackage ./testing/system { application = application; };
# Disk image containing pre-installed system
disk = if buildDisk then callPackage ./testing/disk {} else null;
# Script for spinning up VMs
run-in-vm = callPackage ./testing/run-in-vm {};
});
in
with pkgs; stdenv.mkDerivation {
name = "${components.safeProductName}-${components.version}";
buildInputs = [
rauc
(python3.withPackages(ps: with ps; [pyparted]))
components.install-playos
];
buildCommand = ''
mkdir -p $out
ln -s ${components.docs} $out/docs
mkdir -p $out/bin
cp ${components.run-in-vm} $out/bin/run-in-vm
chmod +x $out/bin/run-in-vm
# Certificate used to verify update bundles
ln -s ${updateCert} $out/cert.pem
''
+ lib.optionalString buildLive ''
ln -s ${components.live}/iso/${components.safeProductName}-live-${components.version}.iso $out/${components.safeProductName}-live-${components.version}.iso
''
# Installer ISO image
+ lib.optionalString buildInstaller ''
ln -s ${components.installer}/iso/${components.safeProductName}-installer-${components.version}.iso $out/${components.safeProductName}-installer-${components.version}.iso
''
# RAUC bundle
+ lib.optionalString buildBundle ''
ln -s ${components.unsignedRaucBundle} $out/${components.safeProductName}-${components.version}-UNSIGNED.raucb
cp ${components.deploy-update} $out/bin/deploy-update
chmod +x $out/bin/deploy-update
'';
}