summaryrefslogtreecommitdiffstats
path: root/sys/boot
diff options
context:
space:
mode:
authorgordon <gordon@FreeBSD.org>2002-05-24 02:28:58 +0000
committergordon <gordon@FreeBSD.org>2002-05-24 02:28:58 +0000
commitfaffa2a33d5f9e1cbde291fc42d4d928e3066ac8 (patch)
treea14efaa6dbf6cec126fb9f178118ce4a5d5b10c0 /sys/boot
parentf6c55bbe1c2e913e94ff3b086b19f63cb9cc8a60 (diff)
downloadFreeBSD-src-faffa2a33d5f9e1cbde291fc42d4d928e3066ac8.zip
FreeBSD-src-faffa2a33d5f9e1cbde291fc42d4d928e3066ac8.tar.gz
Add support for reading an additional loader configuration file. By default,
this is called /boot/nextboot.conf. This file is required to have it's first line be nextboot_enable="YES" for it to be read. Also, this file is rewritten by the loader to nextboot_enable="NO"<space> after it is read. This makes it so the file is read exactly once. Finally, the nextboot.conf is removed shortly after the filesystems are mounted r/w. Caution should be taken as you can shoot yourself in the foot. This is only the loader piece. There will be a tool called nextboot(8) that will manage the nextboot.conf file for you. It is coming shortly. Reviewed by: dcs Approved by: jake (mentor)
Diffstat (limited to 'sys/boot')
-rw-r--r--sys/boot/forth/loader.4th2
-rw-r--r--sys/boot/forth/loader.conf4
-rw-r--r--sys/boot/forth/support.4th65
3 files changed, 70 insertions, 1 deletions
diff --git a/sys/boot/forth/loader.4th b/sys/boot/forth/loader.4th
index 3349c1f..8ffb02d 100644
--- a/sys/boot/forth/loader.4th
+++ b/sys/boot/forth/loader.4th
@@ -134,6 +134,7 @@ only forth definitions also support-functions
: start ( -- ) ( throws: abort & user-defined )
s" /boot/defaults/loader.conf" initialize
include_conf_files
+ include_nextboot_file
\ Will *NOT* try to load kernel and modules if no configuration file
\ was succesfully loaded!
any_conf_read? if
@@ -151,6 +152,7 @@ only forth definitions also support-functions
: initialize ( -- flag )
s" /boot/defaults/loader.conf" initialize
include_conf_files
+ include_nextboot_file
any_conf_read?
;
diff --git a/sys/boot/forth/loader.conf b/sys/boot/forth/loader.conf
index 4b636f8..87a1668 100644
--- a/sys/boot/forth/loader.conf
+++ b/sys/boot/forth/loader.conf
@@ -22,7 +22,9 @@ userconfig_script_load="NO"
userconfig_script_name="/boot/kernel.conf"
userconfig_script_type="userconfig_script"
-loader_conf_files="/boot/device.hints /boot/loader.conf /boot/loader.conf.local /boot/nextboot.conf"
+loader_conf_files="/boot/device.hints /boot/loader.conf /boot/loader.conf.local"
+nextboot_conf="/boot/nextboot.conf"
+nextboot_enable="NO"
verbose_loading="NO" # Set to YES for verbose loader output
diff --git a/sys/boot/forth/support.4th b/sys/boot/forth/support.4th
index d711094..9da74b7 100644
--- a/sys/boot/forth/support.4th
+++ b/sys/boot/forth/support.4th
@@ -208,10 +208,12 @@ structure: pnpinfo
\ Global variables
string conf_files
+string nextboot_conf_file
string password
create module_options sizeof module.next allot 0 module_options !
create last_module_option sizeof module.next allot 0 last_module_option !
0 value verbose?
+0 value nextboot?
\ Support string functions
@@ -660,6 +662,14 @@ only forth also support-functions also file-processing definitions also
s" loader_conf_files" assignment_type?
;
+: nextboot_flag?
+ s" nextboot_enable" assignment_type?
+;
+
+: nextboot_conf?
+ s" nextboot_conf" assignment_type?
+;
+
: verbose_flag?
s" verbose_loading" assignment_type?
;
@@ -713,6 +723,19 @@ only forth also support-functions also file-processing definitions also
conf_files .len ! conf_files .addr !
;
+: set_nextboot_conf
+ nextboot_conf_file .addr @ ?dup if
+ free-memory
+ then
+ value_buffer .addr @ c@ [char] " = if
+ value_buffer .addr @ char+ value_buffer .len @ 2 chars -
+ else
+ value_buffer .addr @ value_buffer .len @
+ then
+ strdup
+ nextboot_conf_file .len ! nextboot_conf_file .addr !
+;
+
: append_to_module_options_list ( addr -- )
module_options @ 0= if
dup module_options !
@@ -863,6 +886,10 @@ only forth also support-functions also file-processing definitions also
then
;
+: set_nextboot_flag
+ yes_value? to nextboot?
+;
+
: set_verbose
yes_value? to verbose?
;
@@ -890,6 +917,8 @@ only forth also support-functions also file-processing definitions also
: process_assignment
name_buffer .len @ 0= if exit then
loader_conf_files? if set_conf_files exit then
+ nextboot_flag? if set_nextboot_flag exit then
+ nextboot_conf? if set_nextboot_conf exit then
verbose_flag? if set_verbose exit then
execute? if execute_command exit then
password? if set_password exit then
@@ -939,6 +968,19 @@ support-functions definitions
repeat
;
+: peek_file
+ 0 to end_of_file?
+ reset_line_reading
+ O_RDONLY fopen fd !
+ fd @ -1 = if open_error throw then
+ reset_assignment_buffers
+ read_line
+ get_assignment
+ ['] process_assignment catch
+ ['] free_buffers catch
+ fd @ fclose
+;
+
only forth also support-functions definitions
\ Interface to loading conf files
@@ -1101,6 +1143,29 @@ variable current_conf_files
repeat
;
+: get_nextboot_conf_file ( -- addr len )
+ nextboot_conf_file .addr @ nextboot_conf_file .len @ strdup
+;
+
+: rewrite_nextboot_file ( -- )
+ get_nextboot_conf_file
+ O_WRONLY fopen fd !
+ fd @ -1 = if open_error throw then
+ fd @ s' nextboot_enable="NO" ' fwrite
+ fd @ fclose
+;
+
+: include_nextboot_file
+ get_nextboot_conf_file
+ ['] peek_file catch
+ nextboot? if
+ get_nextboot_conf_file
+ ['] load_conf catch
+ process_conf_errors
+ ['] rewrite_nextboot_file catch
+ then
+;
+
\ Module loading functions
: load_module?
OpenPOWER on IntegriCloud