lualoader: Revert to ASCII menu frame for serial console

The box drawing characters we use aren't necessarily safe with a serial
console; for instance, in the report by npn@, these were causing his xterm
to send back a sequence that lua picked up as input and halted the boot.
This is less than ideal.

Fallback to ASCII frames for console with 'comconsole' in it.  This is a
partial revert r338108 by imp@ -- instead of removing the menu entirely and
disabling color/cursor sequences, just reverting the default frame to ASCII
is enough to not break in this setup.

Reported by:	npn
Triaged and recommended by:	tsoome
This commit is contained in:
Kyle Evans 2019-09-10 21:30:38 +00:00
parent da327cd22e
commit 90a2541772
2 changed files with 18 additions and 1 deletions

View File

@ -325,6 +325,16 @@ function core.isZFSBoot()
return false
end
function core.isSerialConsole()
local c = loader.getenv("console")
if c ~= nil then
if c:find("comconsole") ~= nil then
return true
end
end
return false
end
function core.isSerialBoot()
local s = loader.getenv("boot_serial")
if s ~= nil then

View File

@ -144,13 +144,20 @@ local function drawmenu(menudef)
return alias_table
end
local function defaultframe()
if core.isSerialConsole() then
return "ascii"
end
return "double"
end
local function drawbox()
local x = menu_position.x - 3
local y = menu_position.y - 1
local w = frame_size.w
local h = frame_size.h
local framestyle = loader.getenv("loader_menu_frame") or "double"
local framestyle = loader.getenv("loader_menu_frame") or defaultframe()
local framespec = drawer.frame_styles[framestyle]
-- If we don't have a framespec for the current frame style, just don't
-- draw a box.