106 lines
3.4 KiB
Lua
106 lines
3.4 KiB
Lua
-- Initialise global variables related to booting.
|
|
_G._KERNEL_ROOT = "/"
|
|
_G._KERNEL_LOCS = {}
|
|
_G._BOOT_DEFAULT = nil
|
|
_G._PELICAN_DEBUG = false
|
|
_G._PELICAN_VERSION = "0.1.0"
|
|
_G._PELICAN_CONFIG_LOCATION = ""
|
|
|
|
print("Pelican " .. _G._PELICAN_VERSION)
|
|
print("Searching for Pelican configuration.")
|
|
local directories = {}
|
|
directories[1] = "/"
|
|
local x = 2
|
|
local s = 1
|
|
local v = true
|
|
while v and _G._PELICAN_CONFIG_LOCATION == "" do
|
|
local files = fs.list(directories[s])
|
|
for i = 1, #files do
|
|
if fs.isDir(fs.combine(directories[s], files[i])) then
|
|
table.insert(directories, x, directories[s] .. files[i])
|
|
x = x + 1
|
|
elseif fs.getName(fs.combine(directories[s], files[i])) == "pelican.conf.lua" then
|
|
_G._PELICAN_CONFIG_LOCATION = fs.combine(directories[s], files[i])
|
|
end
|
|
end
|
|
table.remove(directories, s)
|
|
s = s + 1
|
|
if directories[s] == nil then
|
|
v = false
|
|
end
|
|
end
|
|
|
|
if _G._PELICAN_CONFIG_LOCATION ~= "" then
|
|
print("Found config at " .. _G._PELICAN_CONFIG_LOCATION .. ".")
|
|
dofile(_G._PELICAN_CONFIG_LOCATION)
|
|
print("Config applied!")
|
|
else
|
|
print("No config found.")
|
|
if not _G._PELICAN_DEBUG then
|
|
term.clear()
|
|
term.setCursorPos(1, 1)
|
|
end
|
|
end
|
|
|
|
if #_G._KERNEL_LOCS ~= 0 and _G._BOOT_DEFAULT == nil then
|
|
print("")
|
|
if not _G._PELICAN_DEBUG then
|
|
term.clear()
|
|
term.setCursorPos(1, 1)
|
|
end
|
|
print("These kernels are available to boot to: ")
|
|
for i = 1, #_G._KERNEL_LOCS do
|
|
print(i.. ". " .. _G._KERNEL_LOCS[i])
|
|
end
|
|
print("To boot one of these kernels, type boot followed by the index number.")
|
|
print("Just type boot to boot kernel #1.")
|
|
print("")
|
|
end
|
|
|
|
local boot = false
|
|
|
|
if _G._BOOT_DEFAULT ~= nil and _G._KERNEL_LOCS[_G._BOOT_DEFAULT] ~= nil then
|
|
boot = _G._KERNEL_LOCS[_G._BOOT_DEFAULT]
|
|
end
|
|
|
|
if not boot then
|
|
print("No default kernel set. Dropping to shell.")
|
|
|
|
while not boot do
|
|
write("> ")
|
|
local cmd = read()
|
|
if cmd == "restart" or cmd == "reboot" then
|
|
os.reboot()
|
|
elseif cmd:find("^boot") and cmd ~= "boot" then
|
|
cmd = cmd:gsub("boot ", "")
|
|
if _G._KERNEL_LOCS[tonumber(cmd)] then
|
|
boot = _G._KERNEL_LOCS[tonumber(cmd)]
|
|
elseif fs.exists(cmd) then
|
|
boot = cmd
|
|
else
|
|
print("Please enter a valid kernel index number or kernel path.")
|
|
end
|
|
elseif cmd == "boot" then
|
|
if _G._KERNEL_LOCS[1] then
|
|
boot = _G._KERNEL_LOCS[1]
|
|
else
|
|
print("Please enter a kernel path.")
|
|
end
|
|
elseif cmd == "shutdown" or cmd == "poweroff" or cmd == "halt" then
|
|
os.shutdown()
|
|
elseif cmd == "help" then
|
|
print("shutdown - halts execution")
|
|
print("boot - executes a kernel")
|
|
print("restart - restarts computer")
|
|
print("help - prints help information")
|
|
print("version - prints version information")
|
|
elseif cmd == "version" then
|
|
print("Pelican boot loader version " .. _G._PELICAN_VERSION)
|
|
print("This software is licensed under the GNU General Public License.")
|
|
print("More information about this software can be found online at:")
|
|
print("https://git.colean.cc/canaryos/pelican")
|
|
end
|
|
end
|
|
end
|
|
|
|
dofile(boot)
|