diff options
Diffstat (limited to 'usr/src/boot/forth')
-rw-r--r-- | usr/src/boot/forth/Makefile | 11 | ||||
-rw-r--r-- | usr/src/boot/forth/brand-smartos.4th | 38 | ||||
-rw-r--r-- | usr/src/boot/forth/loader.4th | 18 | ||||
-rw-r--r-- | usr/src/boot/forth/loader.rc | 10 | ||||
-rw-r--r-- | usr/src/boot/forth/logo-smartos.4th | 41 | ||||
-rw-r--r-- | usr/src/boot/forth/menu-commands.4th | 114 | ||||
-rw-r--r-- | usr/src/boot/forth/menu.4th | 44 | ||||
-rw-r--r-- | usr/src/boot/forth/support.4th | 15 | ||||
-rw-r--r-- | usr/src/boot/forth/triton-logo.png | bin | 0 -> 13720 bytes | |||
-rw-r--r-- | usr/src/boot/forth/triton.menu.rc | 109 | ||||
-rw-r--r-- | usr/src/boot/forth/triton.png | bin | 0 -> 2561 bytes |
11 files changed, 395 insertions, 5 deletions
diff --git a/usr/src/boot/forth/Makefile b/usr/src/boot/forth/Makefile index 5de1fc3878..5d43a4e9ad 100644 --- a/usr/src/boot/forth/Makefile +++ b/usr/src/boot/forth/Makefile @@ -11,6 +11,8 @@ # # Copyright 2022 Toomas Soome <tsoome@me.com> +# Copyright 2022 Joyent, Inc. +# Copyright 2022 MNX Cloud, Inc. # include $(SRC)/Makefile.master @@ -27,6 +29,7 @@ FORTH = beastie.4th FORTH += beadm.4th FORTH += brand.4th FORTH += brand-illumos.4th +FORTH += brand-smartos.4th FORTH += check-password.4th FORTH += color.4th FORTH += delay.4th @@ -40,6 +43,7 @@ FORTH += logo-fbsdbw.4th FORTH += logo-illumos.4th FORTH += logo-orb.4th FORTH += logo-orbbw.4th +FORTH += logo-smartos.4th FORTH += menu.4th FORTH += menu.rc FORTH += menu-commands.4th @@ -51,6 +55,8 @@ FORTH += support.4th FORTH += version.4th FILES += illumos-logo.png FILES += illumos-brand.png +FILES += triton-logo.png +FILES += triton.png FILES += loader.rc all clean clobber: @@ -64,6 +70,11 @@ $(ROOT_BOOT)/%: % $(ROOT_BOOT) $(ROOT_BOOT_DEFAULTS)/%: % $(ROOT_BOOT_DEFAULTS) $(INS.file) +$(ROOT_BOOT_FORTH)/menu.rc: triton.menu.rc $(ROOT_BOOT_FORTH) + $(RM) $@; \ + $(INS) -s -m $(FILEMODE) -f $(@D) triton.menu.rc; \ + $(MV) $(@D)/triton.menu.rc $@ + $(ROOT_BOOT_FORTH)/%: % $(ROOT_BOOT_FORTH) $(INS.file) diff --git a/usr/src/boot/forth/brand-smartos.4th b/usr/src/boot/forth/brand-smartos.4th new file mode 100644 index 0000000000..acdbcf13af --- /dev/null +++ b/usr/src/boot/forth/brand-smartos.4th @@ -0,0 +1,38 @@ +\ +\ This file and its contents are supplied under the terms of the +\ Common Development and Distribution License ("CDDL"), version 1.0. +\ You may only use this file in accordance with the terms of version +\ 1.0 of the CDDL. +\ +\ A full copy of the text of the CDDL should have accompanied this +\ source. A copy of the CDDL is also available via the Internet at +\ http://www.illumos.org/license/CDDL. +\ + +\ +\ Copyright 2019 Joyent, Inc. +\ Copyright 2022 MNX Cloud, Inc. +\ + +2 brandX ! 1 brandY ! \ Initialize brand placement defaults + +: brand+ ( x y c-addr/u -- x y' ) + 2swap 2dup at-xy 2swap \ position the cursor + type \ print to the screen + 1+ \ increase y for next time we're called +; + +: brand ( x y -- ) \ "triton" [wide] logo in B/W (7 rows x 42 columns) + + 0 1 1 0 0 s" /boot/triton-logo.png" fb-putimage if 2drop exit then + + s" " brand+ + s" ##### #### # ##### ### # # " brand+ + s" # # # # # # # ## # " brand+ + s" # #### # # # # # # # " brand+ + s" # # # # # # # # ## " brand+ + s" # # # # # # # # ## " brand+ + s" # # # # # ### # # TM " brand+ + + 2drop +; diff --git a/usr/src/boot/forth/loader.4th b/usr/src/boot/forth/loader.4th index d010b72a33..9bd01644e0 100644 --- a/usr/src/boot/forth/loader.4th +++ b/usr/src/boot/forth/loader.4th @@ -606,6 +606,24 @@ only forth definitions also support-functions then ; +create pathname 1024 chars allot + +: set-platform ( c-addr u -- ) + 2dup + pathname place + s" /platform/i86pc/kernel/amd64/unix" pathname append + pathname count s" bootfile" setenv + pathname count erase + 2dup + pathname place + s" /platform/i86pc/amd64/boot_archive" pathname append + pathname count s" boot_archive" set-module-path + pathname count erase + pathname place + s" /platform/i86pc/amd64/boot_archive.hash" pathname append + pathname count s" boot_archive.hash" set-module-path +; + \ Words to be used inside configuration files : retry false ; \ For use in load error commands diff --git a/usr/src/boot/forth/loader.rc b/usr/src/boot/forth/loader.rc index 32f6bf8043..989a014da4 100644 --- a/usr/src/boot/forth/loader.rc +++ b/usr/src/boot/forth/loader.rc @@ -2,6 +2,16 @@ \ \ Includes additional commands include /boot/forth/loader.4th + +\ For SmartOS, override the default color scheme back to the more traditional +\ black background and white foreground. +set tem.fg_color=white +set tem.bg_color=black + +\ As another SmartOS customization, work around OS-8160 by limiting the size of +\ the framebuffer. +framebuffer set 1024x768 + try-include /boot/loader.rc.local \ Reads and processes loader.conf variables diff --git a/usr/src/boot/forth/logo-smartos.4th b/usr/src/boot/forth/logo-smartos.4th new file mode 100644 index 0000000000..f897c45165 --- /dev/null +++ b/usr/src/boot/forth/logo-smartos.4th @@ -0,0 +1,41 @@ +\ +\ This file and its contents are supplied under the terms of the +\ Common Development and Distribution License ("CDDL"), version 1.0. +\ You may only use this file in accordance with the terms of version +\ 1.0 of the CDDL. +\ +\ A full copy of the text of the CDDL should have accompanied this +\ source. A copy of the CDDL is also available via the Internet at +\ http://www.illumos.org/license/CDDL. +\ + +\ +\ Copyright 2019 Joyent, Inc. +\ + +52 logoX ! 11 logoY ! \ Initialize logo placement defaults + +: logo+ ( x y c-addr/u -- x y' ) + 2swap 2dup at-xy 2swap \ position the cursor + [char] @ escc! \ replace @ with Esc + type \ print to the screen + 1+ \ increase y for next time we're called +; + +: logo ( x y -- ) \ color Illumos logo + + 0 0 0 0 0 s" /boot/triton.png" fb-putimage if 2drop exit then + + s" @[31m--@[0;31m+--@[1;31m*@[0;33m--@[1;33m*" logo+ + s" @[31m|@[1m\@[0m @[31m|\ |@[33m\ @[1m|\" logo+ + s" @[31m| @[1m\@[0;31m|@[37m @[31m\| @[33m\@[1m| \" logo+ + s" @[31m+--@[1;31m*@[31m--+@[0;33m--@[1;33m*@[33m--@[33m*" logo+ + s" |@[31m\ |\ |\ @[33m|@[1m\ |" logo+ + s" | @[31m\| \| \@[33m| @[1m\|" logo+ + s" @[1m*@[0m--+@[31m--+@[33m--+@[1m--+" logo+ + s" @[1m \ |@[0;34m\ |\ |@[1m\ |" logo+ + s" @[1m \| @[0;34m\| \| @[1m\|" logo+ + s" @[1m *--+@[0;34m--@[1;34m*@[34m--@[34m*" logo+ + + 2drop +; diff --git a/usr/src/boot/forth/menu-commands.4th b/usr/src/boot/forth/menu-commands.4th index 5fe6c8c62f..4938608fb5 100644 --- a/usr/src/boot/forth/menu-commands.4th +++ b/usr/src/boot/forth/menu-commands.4th @@ -41,6 +41,43 @@ variable kmdb_state also menu-namespace also menu-command-helpers +\ PATH_MAX + 6 +create chaincmd 1030 chars allot + +\ +\ Rollback to previous platform image. +\ Used by Joyent Triton +\ +: rollback_boot ( N -- NOTREACHED ) + dup + s" prev-platform" getenv s" bootfile" setenv + s" prev-archive" getenv s" boot_archive" set-module-path + s" prev-hash" getenv s" boot_archive.hash" set-module-path + 0 boot ( state -- ) +; + +\ +\ Boot from ipxe kernel +\ Used by Joyent Triton when booted in BIOS/CSM mode +\ +: ipxe_boot ( N -- NOTREACHED ) + dup + s" ipxe-bootfile" getenv s" bootfile" setenv + s" ipxe-archive" getenv s" boot_archive" set-module-path + s" boot_archive.hash" disable-module + 0 boot ( state -- ) +; + +\ +\ Chainload the ipxe EFI binary +\ Used by Joyent Triton when booted in UEFI mode +\ +: ipxe_chainload ( N -- NOTREACHED ) + s" chain " chaincmd place + s" ipxe-efi" getenv chaincmd append + chaincmd count evaluate +; + \ \ Boot \ @@ -102,6 +139,25 @@ also menu-namespace also menu-command-helpers ; \ +\ Platform-image selection for standalone SmartOS is mostly in pi.rc. +\ We will also steal a boot environment routine in pi_draw_screen (way below). + +: init_pi ( -- ) + s" bootpi" getenv? 0= if + s" default" s" bootpi" setenv + then + + \ Reset the "options" text to show current bootpi selected. + s" set menu_optionstext=${pitext}${bootpi}" evaluate + s" set pimenu_optionstext=${pitext}${bootpi}" evaluate +; + +\ Shorter than inlining this in pi.rc. +: pi_unload ( -- ) + s" unload" evaluate +; + +\ \ Single User Mode \ @@ -246,6 +302,53 @@ also menu-namespace also menu-command-helpers ; \ +\ Disaster Recovery boot +\ + +: rescue_enabled? ( -- flag ) + s" noimport" getenv -1 <> dup if + swap drop ( c-addr flag -- flag ) + then +; + +: rescue_enable ( -- ) + s" set noimport=true" evaluate + s" smartos" getenv? if + s" set standalone=true" evaluate + s" set smartos=false" evaluate + then +; + +: rescue_disable ( -- ) + s" noimport" unsetenv + s" standalone" unsetenv + s" smartos" getenv? if + s" set smartos=true" evaluate + then +; + +: init_rescue ( N -- N ) + rescue_enabled? if + toggle_menuitem ( n -- n ) + then +; + +: toggle_rescue ( N -- N TRUE ) + toggle_menuitem + menu-redraw + + \ Now we're going to make the change effective + + dup toggle_stateN @ 0= if + rescue_disable + else + rescue_enable + then + + TRUE \ loop menu again +; + +\ \ Escape to Prompt \ @@ -505,6 +608,17 @@ also menu-namespace also menu-command-helpers menu-init \ Initialize menu and draw bounding box (in menu.4th) ; +\ PI reuse of be_draw_screen, plus some other things to be used by pi.rc. + +: pi_draw_screen ( -- TRUE ) + \ So we can make SURE we have the current boot PI on display. + init_pi + + be_draw_screen + menu-redraw + TRUE +; + \ \ Select a boot environment \ diff --git a/usr/src/boot/forth/menu.4th b/usr/src/boot/forth/menu.4th index 1fd20811c6..fee6ec3806 100644 --- a/usr/src/boot/forth/menu.4th +++ b/usr/src/boot/forth/menu.4th @@ -3,6 +3,7 @@ \ Copyright (c) 2006-2015 Devin Teske <dteske@FreeBSD.org> \ Copyright 2020 OmniOS Community Edition (OmniOSce) Association. \ All rights reserved. +\ Copyright 2019 Joyent, Inc. \ \ Redistribution and use in source and binary forms, with or without \ modification, are permitted provided that the following conditions @@ -332,7 +333,7 @@ also menu-infrastructure definitions \ Print the frame caption at (x,y) s" loader_menu_title" getenv dup -1 = if - drop s" Welcome to illumos" + drop s" Welcome to SmartOS" then TRUE ( use default alignment ) s" loader_menu_title_align" getenv dup -1 <> if @@ -549,14 +550,39 @@ also menu-infrastructure definitions then ; -\ Takes an integer on the stack and updates the timeout display. +: do_ipxe ( -- bool) + \ getenv? leaves -1 on stack if the env var exists. Thus if both + \ headnode and ipxe exist then the sum of what will be left on the + \ stack should be -2. + s" headnode" getenv? s" ipxe" getenv? + -2 = if + s" ipxe" getenv s" true" compare 0= if + true + else + false + then + else + false + then +; + +\ Takes a single integer on the stack and updates the timeout display. The +\ integer must be between 0 and 9 (we will only update a single digit in the +\ source message). \ : menu-timeout-update ( N -- ) \ Enforce minimum dup 0 < if drop 0 then - menu_timeout_x @ menu_timeout_y @ at-xy \ position cursor + s" headnode" getenv? if + do_ipxe if + s" Autoboot in N seconds from PXE. [Space] to pause" ( n -- n c-addr/u ) + else + s" Autoboot in N seconds from the USB Key. [Space] to pause" ( n -- n c-addr/u ) + then + else + s" Autoboot in N seconds. [Space] to pause" ( n -- n c-addr/u ) + then dup 0> if s" Autoboot in " type @@ -1012,8 +1038,16 @@ also menu-namespace dup over 13 = swap 10 = or if drop ( no longer needed ) cursor-normal cursor-set - s" boot" evaluate - exit ( pedantic; never reached ) + do_ipxe if + s" efi-version" getenv? if + s" ipxe_chainload" evaluate + else + s" ipxe_boot" evaluate + then + else + s" boot" evaluate + exit ( pedantic; never reached ) + then then dup menureboot @ = if 0 reboot then diff --git a/usr/src/boot/forth/support.4th b/usr/src/boot/forth/support.4th index 2abf48f70b..961d3b528a 100644 --- a/usr/src/boot/forth/support.4th +++ b/usr/src/boot/forth/support.4th @@ -245,6 +245,21 @@ create last_module_option sizeof module.next allot 0 last_module_option ! then ; +\ Place string into an allocated buffer +\ +\ e.g +\ create mystring 32 chars allot +\ s" Burning down " mystring place +\ +: place over over >r >r char+ swap chars move r> r> c! ; + +\ Append string +\ +\ e.g. +\ s" the house!" mystring append +\ +: append over over >r >r count chars + swap chars move r> r> dup >r c@ + r> c! ; + \ execute xt for each device listed in console variable. \ this allows us to have device specific output for logos, menu frames etc : console-iterate { xt | caddr clen taddr tlen -- } diff --git a/usr/src/boot/forth/triton-logo.png b/usr/src/boot/forth/triton-logo.png Binary files differnew file mode 100644 index 0000000000..79e917b1e8 --- /dev/null +++ b/usr/src/boot/forth/triton-logo.png diff --git a/usr/src/boot/forth/triton.menu.rc b/usr/src/boot/forth/triton.menu.rc new file mode 100644 index 0000000000..3dddb7ffe7 --- /dev/null +++ b/usr/src/boot/forth/triton.menu.rc @@ -0,0 +1,109 @@ +\ Menu.rc +\ +\ Load required Forth modules +include /boot/forth/version.4th +include /boot/forth/brand.4th +include /boot/forth/menu.4th +include /boot/forth/menu-commands.4th +include /boot/forth/shortcuts.4th + +\ Screen prep +clear \ clear the screen (see `screen.4th') +print_version \ print version string (bottom-right; see `version.4th') +draw-beastie \ draw freebsd mascot (on right; see `beastie.4th') +draw-brand \ draw the FreeBSD title (top-left; see `brand.4th') +menu-init \ initialize the menu area (see `menu.4th') + +\ Initialize main menu constructs (see `menu.4th') +\ NOTE: To use `non-ansi' variants, add `loader_color=0' to loader.conf(5) +\ NOTE: ANSI variants can use `^' in place of literal `Esc' (ASCII 27) + +\ +\ MAIN MENU +\ + +set menuset_name1="main" + +set mainmenu_init[1]="init_boot" + +set mainmenu_caption[1]="Boot SmartOS [Enter]" +set mainansi_caption[1]="^[1mB^[moot SmartOS ^[1m[Enter]^[m" +set mainmenu_command[1]="boot" +\ keycode set by init_boot + +set mainmenu_caption[2]="[Esc]ape to loader prompt" +set mainmenu_command[2]="goto_prompt" +set mainmenu_keycode[2]=27 +set mainansi_caption[2]="^[1mEsc^[mape to loader prompt" + +\ Enable built-in "Reboot" trailing menuitem +\ NOTE: appears before menu_options if configured +\ +set mainmenu_reboot + +\ Enable "Options:" separator. When set to a numerical value (1-8), a visual +\ separator is inserted before that menuitem number. +\ +set mainmenu_options=4 + +set mainmenu_caption[4]="Configure Boot [O]ptions..." +set mainmenu_command[4]="2 goto_menu" +set mainmenu_keycode[4]=111 +set mainansi_caption[4]="Configure Boot ^[1mO^[mptions..." + +\ +\ If available, load the "Platform Image Selection" option. +\ +try-include /os/pi.rc + +\ +\ BOOT OPTIONS MENU +\ + +set menuset_name2="options" + +set optionsmenu_caption[1]="Back to Main Menu [Backspace]" +set optionsmenu_command[1]="1 goto_menu" +set optionsmenu_keycode[1]=8 +set optionsansi_caption[1]="Back to Main Menu ^[1m[Backspace]^[m" + +set optionsmenu_options=2 +set optionsmenu_optionstext="Boot Options:" + +set optionsmenu_osconsole=2 +set optionsmenu_command[2]="cycle_osconsole" +set optionsmenu_keycode[2]=99 + +set optionsmenu_init[3]="init_verbose" +set optionsmenu_caption[3]="[V]erbose............. Off" +set optionstoggled_text[3]="[V]erbose............. On" +set optionsmenu_command[3]="toggle_verbose" +set optionsmenu_keycode[3]=118 +set optionsansi_caption[3]="^[1mV^[merbose............... ^[34;1mOff^[m" +set optionstoggled_ansi[3]="^[1mV^[merbose............... ^[32;7mOn^[m" + +set optionsmenu_kmdb=4 +set optionsmenu_command[4]="cycle_kmdb" +set optionsmenu_keycode[4]=107 + +set optionsmenu_init[5]="init_rescue" +set optionsmenu_caption[5]="[R]escue Mode......... Off" +set optionstoggled_text[5]="[R]escue Mode......... On" +set optionsmenu_command[5]="toggle_rescue" +set optionsmenu_keycode[5]=114 +set optionsansi_caption[5]="^[1mR^[mescue Mode........... ^[34;1mOff^[m" +set optionstoggled_ansi[5]="^[1mR^[mescue Mode........... ^[32;7mOn^[m" + +\ Enable automatic booting (add ``autoboot_delay=N'' to loader.conf(5) to +\ customize the timeout; default is 10-seconds) +\ +set menu_timeout_command="boot" + +\ Include optional elements defined in a local file +\ +try-include /boot/menu.rc.local + +\ Display the main menu (see `menu.4th') +set menuset_initial=1 +menuset-loadinitial +menu-display diff --git a/usr/src/boot/forth/triton.png b/usr/src/boot/forth/triton.png Binary files differnew file mode 100644 index 0000000000..9b7e9a94b6 --- /dev/null +++ b/usr/src/boot/forth/triton.png |