forked from cleverca22/not-os
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstage-1.nix
64 lines (57 loc) · 1.6 KB
/
stage-1.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
{ pkgs, config, ... }:
let
modules = pkgs.makeModulesClosure {
rootModules = config.boot.initrd.availableKernelModules ++ config.boot.initrd.kernelModules;
allowMissing = true;
kernel = config.system.build.kernel;
};
bootStage1 = pkgs.writeScript "stage1" ''
#!${pkgs.stdenv.shell}
echo
echo "[1;32m<<< NotOS Stage 1 >>>[0m"
echo
export PATH=${pkgs.busybox}/bin/
mkdir -p /proc /sys /dev /etc/udev /tmp /run/ /lib/ /mnt/
mount -t devtmpfs devtmpfs /dev/
mount -t proc proc /proc
ln -s ${modules}/lib/modules /lib/modules
modprobe virtio
modprobe virtio_pci
modprobe virtio_net
modprobe virtio_rng
modprobe virtio_blk
modprobe virtio_console
modprobe squashfs
modprobe tun
modprobe loop
root=/dev/vda
for o in $(cat /proc/cmdline); do
case $o in
systemConfig=*)
set -- $(IFS==; echo $o)
sysconfig=$2
;;
root=*)
set -- $(IFS==; echo $o)
root=$2
;;
esac
done
mount -t tmpfs root /mnt/
chmod 755 /mnt/
mkdir -p /mnt/nix/store/
mount $root /mnt/nix/store/ -t squashfs
exec env -i $(type -P switch_root) /mnt/ $sysconfig/init
exec ${pkgs.stdenv.shell}
'';
initialRamdisk = pkgs.makeInitrd {
contents = [ { object = bootStage1; symlink = "/init"; } ];
};
in
{
config = {
system.build.bootStage1 = bootStage1;
system.build.initialRamdisk = initialRamdisk;
boot.initrd.availableKernelModules = [ "squashfs" "virtio" "virtio_pci" "virtio_blk" "virtio_net" "tun" "virtio-rng" "loop" ];
};
}