1
1
mirror of https://github.com/NixOS/mobile-nixos.git synced 2024-12-15 19:23:01 +03:00
mobile-nixos/boot/init/init.rb
Samuel Dionne-Riel aa1c2f3744 boot/init: Harmonized failure methods
- Code is now more of a title
 - Only one code path exists to the applet
2020-11-12 23:13:20 -05:00

53 lines
1.5 KiB
Ruby

begin
# TODO: Allow defining depending on stage-0/stage-1.
STAGE = 1
LOADER = "/loader"
log("************************")
log("* Mobile NixOS stage-#{STAGE} *")
log("************************")
log("")
# Since we would like to *somewhat* guesstimate how long it took to get to the
# actual init program, we can print the CLOCK_MONOTONIC at startup.
# It's not perfect, but that gets us halfway there I guess.
log("init started ~#{"%.6f" % (Process.clock_gettime(Process::CLOCK_MONOTONIC))}s after kernel boot time.")
log("Built for device #{Configuration["device"]["name"]}")
log("")
# This file is a hard-coded map of non-implicit tasks.
# To these tasks, add all Singleton tasks found under tasks/*
# Without any added dependency, show a first splash ASAP
Tasks::Splash.instance()
# Some software (mainly extfs tools) bark angrily and fail when this is missing.
Tasks::Symlink.new("/proc/mounts", "/etc/mtab")
Mounting.create_special_mount_points()
Mounting.create_boot_mount_points()
[
"/etc/udev",
"/var/log",
].each do |dir|
Tasks::Directory.new(dir)
end
Tasks::Modules.new(*Configuration["kernel"]["modules"])
Tasks::go()
$logger.fatal("Tasks all ran, but we're still here...")
System.failure(
"Boot process failed to switch to stage-2",
"The stage-1 init did not detect any failure condition, but failed to switch to stage-2.\n\n" +
"It shouldn't happen, yet here we are.",
color: "ff0000"
)
rescue => e
# Then fail
System.failure("Uncaught Exception", e.inspect, color: "765300", status: 99)
end