From 7a2307feae9e0b427c09854ea3bcaa0350df354c Mon Sep 17 00:00:00 2001 From: ericbsd Date: Tue, 21 Apr 2026 20:41:02 -0300 Subject: [PATCH 1/8] loader: add hidden boot menu option and fix verbose/mute interaction Add loader_menu_hidden="YES" support to hide the boot menu during the autoboot countdown. Instead of drawing the full menu immediately, a minimal "Press any key for boot menu..." prompt is shown. Pressing any key reveals the menu; otherwise the system boots when the countdown expires. The countdown duration is controlled by autoboot_delay. Also force boot_mute=NO when verbose boot is enabled from the menu, so that verbose output is not silenced by the default boot_mute="YES". Disabling verbose leaves boot_mute untouched per loader.conf. --- stand/defaults/loader.conf | 3 +- stand/defaults/loader.conf.5 | 11 +++++++ stand/lua/core.lua | 1 + stand/lua/menu.lua | 59 +++++++++++++++++++++++++++++++----- 4 files changed, 65 insertions(+), 9 deletions(-) diff --git a/stand/defaults/loader.conf b/stand/defaults/loader.conf index a6089f10f13c..352a8faad04d 100644 --- a/stand/defaults/loader.conf +++ b/stand/defaults/loader.conf @@ -105,6 +105,7 @@ audit_event_type="etc_security_audit_event" #geom_eli_passphrase_prompt="NO" # Prompt for geli(8) passphrase to mount root bootenv_autolist="YES" # Auto populate the list of ZFS Boot Environments #beastie_disable="NO" # Turn the beastie boot menu on and off +loader_menu_hidden="YES" # Set to YES to hide boot menu; press any key during autoboot to reveal it efi_max_resolution="1x1" # Set the max resolution for EFI loader to use: # 480p, 720p, 1080p, 1440p, 2160p/4k, 5k, or # WidthxHeight (e.g. 1920x1080) @@ -239,4 +240,4 @@ loader_menu_title="Welcome to GhostBSD" boot_mute="YES" # Speed up boot time -autoboot_delay="5" +autoboot_delay="2" diff --git a/stand/defaults/loader.conf.5 b/stand/defaults/loader.conf.5 index 36883bbe7807..1ef83b554534 100644 --- a/stand/defaults/loader.conf.5 +++ b/stand/defaults/loader.conf.5 @@ -421,6 +421,17 @@ be displayed. If set to .Dq YES , the beastie boot menu will be skipped. +.It Va loader_menu_hidden +If set to +.Dq YES , +the boot menu will not be drawn during the autoboot countdown. +Instead, a single line prompt +.Pq Dq Li "Press any key for boot menu..." +is displayed. +If a key is pressed, the full menu is revealed; otherwise the system boots +normally when the countdown expires. +The countdown duration is controlled by +.Va autoboot_delay . .It Va loader_autoboot_show Pq Dq Li YES If set to .Dq NO , diff --git a/stand/lua/core.lua b/stand/lua/core.lua index c276f61e5904..2e7ebef905c2 100644 --- a/stand/lua/core.lua +++ b/stand/lua/core.lua @@ -113,6 +113,7 @@ function core.setVerbose(verbose) if verbose then loader.setenv("boot_verbose", "YES") + loader.setenv("boot_mute", "NO") else loader.unsetenv("boot_verbose") end diff --git a/stand/lua/menu.lua b/stand/lua/menu.lua index fb0645eb46ba..99b2668dcec2 100644 --- a/stand/lua/menu.lua +++ b/stand/lua/menu.lua @@ -517,16 +517,28 @@ function menu.run() return end - menu.draw(menu.default) + local hidden = loader.getenv("loader_menu_hidden") + if hidden ~= nil and hidden:lower() == "yes" then + if delay ~= nil then + autoboot_key = menu.autoboothidden(delay) + -- nil means timed out and booted + if autoboot_key == nil then + return + end + end + menu.draw(menu.default) + else + menu.draw(menu.default) - if delay ~= nil then - autoboot_key = menu.autoboot(delay) + if delay ~= nil then + autoboot_key = menu.autoboot(delay) - -- autoboot_key should return the key pressed. It will only - -- return nil if we hit the timeout and executed the timeout - -- command. Bail out. - if autoboot_key == nil then - return + -- autoboot_key should return the key pressed. It will only + -- return nil if we hit the timeout and executed the timeout + -- command. Bail out. + if autoboot_key == nil then + return + end end end @@ -580,6 +592,37 @@ function menu.autoboot(delay) return nil end +function menu.autoboothidden(delay) + local endtime = loader.time() + delay + local time + local last + repeat + time = endtime - loader.time() + if last == nil or last ~= time then + last = time + screen.setcursor(1, 1) + printc("Press any key for boot menu... " .. time .. " ") + screen.defcursor() + end + if io.ischar() then + local ch = io.getchar() + screen.setcursor(1, 1) + printc(string.rep(" ", 79)) + screen.defcursor() + if ch == core.KEY_ENTER then + break + end + return ch + end + + loader.delay(50000) + until time <= 0 + + local cmd = loader.getenv("menu_timeout_command") or "boot" + cli_execute_unparsed(cmd) + return nil +end + -- CLI commands function cli.menu() menu.run() From fe83a5c69a157d40ee5fe7d9ae428174923583d7 Mon Sep 17 00:00:00 2001 From: ericbsd Date: Tue, 21 Apr 2026 21:09:04 -0300 Subject: [PATCH 2/8] menu: remove check for core.KEY_ENTER in input loop --- stand/lua/menu.lua | 3 --- 1 file changed, 3 deletions(-) diff --git a/stand/lua/menu.lua b/stand/lua/menu.lua index 99b2668dcec2..37a71ed7f8bf 100644 --- a/stand/lua/menu.lua +++ b/stand/lua/menu.lua @@ -609,9 +609,6 @@ function menu.autoboothidden(delay) screen.setcursor(1, 1) printc(string.rep(" ", 79)) screen.defcursor() - if ch == core.KEY_ENTER then - break - end return ch end From 8e814536b2aadc7e9ccfdb96a01c8d18ab324c12 Mon Sep 17 00:00:00 2001 From: ericbsd Date: Sat, 25 Apr 2026 10:14:58 -0300 Subject: [PATCH 3/8] mk: fix LIBKRB5PROFILE path typo in src.libnames.mk LIBKRB5PROFILE referenced the undefined variable LIBPROFILEDIR instead of LIBKRB5PROFILEDIR (defined on the preceding line), causing the linker to fail to find libkrb5profile.a when building libkrb5.so. This left all profile_* symbols missing from the version script, producing a cascade of "version script assignment of 'krb5_3_MIT' to symbol ... failed: symbol not defined" errors during buildworld --- share/mk/src.libnames.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/mk/src.libnames.mk b/share/mk/src.libnames.mk index 945df60769fc..a24b457e7873 100644 --- a/share/mk/src.libnames.mk +++ b/share/mk/src.libnames.mk @@ -852,7 +852,7 @@ LIBKRB5SS?= ${LIBKRB5SUPPORTDIR}/libkrb5ss${PIE_SUFFIX}.a LIBKRB5SUPPORTDIR= ${_LIB_OBJTOP}/krb5/util/support LIBKRB5SUPPORT?= ${LIBKRB5SUPPORTDIR}/libkrb5support${PIE_SUFFIX}.a LIBKRB5PROFILEDIR= ${_LIB_OBJTOP}/krb5/util/profile -LIBKRB5PROFILE?= ${LIBPROFILEDIR}/libkrb5profile${PIE_SUFFIX}.a +LIBKRB5PROFILE?= ${LIBKRB5PROFILEDIR}/libkrb5profile${PIE_SUFFIX}.a LIBVERTODIR= ${_LIB_OBJTOP}/krb5/util/verto LIBVERTO?= ${LIBVERTODIR}/libverto${PIE_SUFFIX}.a .else From 096f3d79f5f2e4863a2a7a16ae248a57c6f90d40 Mon Sep 17 00:00:00 2001 From: ericbsd Date: Sat, 25 Apr 2026 20:46:18 -0300 Subject: [PATCH 4/8] bump version to 26.2-R15.1a1 --- sys/conf/package-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/conf/package-version b/sys/conf/package-version index c2c7664a20b7..3d571928cae0 100644 --- a/sys/conf/package-version +++ b/sys/conf/package-version @@ -1 +1 @@ -26.1-R15.0b3 +26.2-R15.1a1 From 0ec8a2ce52587e8243e108d660be18f3d4d879ad Mon Sep 17 00:00:00 2001 From: ericbsd Date: Sun, 26 Apr 2026 16:45:37 -0300 Subject: [PATCH 5/8] Add metadata for ghostbsd-cert package FreeBSD 15.0 requires UCL metadata files for custom packages in release/packages/ucl/. Add ghostbsd-cert-all.ucl to enable package creation for the GhostBSD repository certificate. Fixes package creation failure in pkgbase build. --- release/packages/ucl/ghostbsd-cert-all.ucl | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 release/packages/ucl/ghostbsd-cert-all.ucl diff --git a/release/packages/ucl/ghostbsd-cert-all.ucl b/release/packages/ucl/ghostbsd-cert-all.ucl new file mode 100644 index 000000000000..52590ea92afc --- /dev/null +++ b/release/packages/ucl/ghostbsd-cert-all.ucl @@ -0,0 +1,14 @@ +/* + * GhostBSD Certificate Package + */ + +comment = "GhostBSD Package Repository Certificate" + +desc = < Date: Sun, 26 Apr 2026 18:54:49 -0300 Subject: [PATCH 6/8] Add ssl subdirectory to share/keys/Makefile Without ssl in SUBDIR, the ghostbsd-cert package has no files to install. This was fixed on releng/15.0 but not carried over. --- share/keys/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/keys/Makefile b/share/keys/Makefile index 98e17356e75a..187fcf87998e 100644 --- a/share/keys/Makefile +++ b/share/keys/Makefile @@ -1,3 +1,3 @@ -SUBDIR= pkg pkgbase-15 +SUBDIR= pkg pkgbase-15 ssl .include From eb7c3d3cf2ccc6e498f3c4df85aeb49634fdc8f4 Mon Sep 17 00:00:00 2001 From: ericbsd Date: Thu, 13 Nov 2025 19:26:10 -0400 Subject: [PATCH 7/8] Updated gfx-glogo.lua and fixed ghostbsd-logo.png position The gfx-glogo.lua file was outdated I did bring up to date. --- stand/lua/gfx-glogo.lua | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/stand/lua/gfx-glogo.lua b/stand/lua/gfx-glogo.lua index 3d5d774dc764..2343ad3c2a94 100644 --- a/stand/lua/gfx-glogo.lua +++ b/stand/lua/gfx-glogo.lua @@ -29,24 +29,29 @@ return { logo = { - graphic = { - " ,gggggg. ", - " ,agg9* .g) ", - " .agg* ._.,gg* ", - " ,gga* (ggg*' ", - " ,ga* ,ga* ", - " ,ga' .ag* ", - " ,ga' .agga' ", - " 9g' .agg'g*,a ", - " 'gggg*',gga' ", - " .gg*' ", - " .gga* ", - " .gga* ", - " (ga* " + ascii = { + image = { + " ,gggggg. ", + " ,agg9* .g) ", + " .agg* ._.,gg* ", + " ,gga* (ggg*' ", + " ,ga* ,ga* ", + " ,ga' .ag* ", + " ,ga' .agga' ", + " 9g' .agg'g*,a ", + " 'gggg*',gga' ", + " .gg*' ", + " .gga* ", + " .gga* ", + " (ga* " + }, + requires_color = false, + shift = {x = 5, y = 3}, + }, + fb = { + image = "/boot/images/ghostbsd-logo.png", + width = 15, + shift = {x = 2, y = -2}, }, - requires_color = false, - shift = {x = 5, y = 3}, - image = "/boot/images/ghostbsd-logo.png", - image_rl = 15 } } \ No newline at end of file From 99546d844ed9e49cc0d81debd53282d08c9d8544 Mon Sep 17 00:00:00 2001 From: ericbsd Date: Mon, 27 Apr 2026 22:49:08 -0300 Subject: [PATCH 8/8] menu: update boot prompt message and handle Enter key to boot immediately --- stand/lua/menu.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/stand/lua/menu.lua b/stand/lua/menu.lua index 37a71ed7f8bf..f3829c2234fa 100644 --- a/stand/lua/menu.lua +++ b/stand/lua/menu.lua @@ -601,7 +601,7 @@ function menu.autoboothidden(delay) if last == nil or last ~= time then last = time screen.setcursor(1, 1) - printc("Press any key for boot menu... " .. time .. " ") + printc("[Enter] boot now, any other key for boot menu... " .. time .. " ") screen.defcursor() end if io.ischar() then @@ -609,6 +609,9 @@ function menu.autoboothidden(delay) screen.setcursor(1, 1) printc(string.rep(" ", 79)) screen.defcursor() + if ch == core.KEY_ENTER then + break + end return ch end