xref: /freebsd/stand/man/loader_lua.8 (revision 093cf790569775b80662926efea6d9d3464bde94)
1.\" Copyright (c) 1999 Daniel C. Sobral
2.\" All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\"
13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23.\" SUCH DAMAGE.
24.\"
25.\" $FreeBSD$
26.\"
27.Dd September 29, 2021
28.Dt LOADER_LUA 8
29.Os
30.Sh NAME
31.Nm loader_lua
32.Nd kernel bootstrapping final stage
33.Sh DESCRIPTION
34The program called
35.Nm
36is the final stage of
37.Fx Ns 's
38kernel bootstrapping process.
39On IA32 (i386) architectures, it is a
40.Pa BTX
41client.
42It is linked statically to
43.Xr libstand 3
44and usually located in the directory
45.Pa /boot .
46.Pp
47It provides a scripting language that can be used to
48automate tasks, do pre-configuration or assist in recovery
49procedures.
50This scripting language is roughly divided in
51two main components.
52The smaller one is a set of commands
53designed for direct use by the casual user, called "builtin
54commands" for historical reasons.
55The main drive behind these commands is user-friendliness.
56The bigger component is the Lua interpter.
57.Pp
58During initialization,
59.Nm
60will probe for a console and set the
61.Va console
62variable, or set it to serial console
63.Pq Dq Li comconsole
64if the previous boot stage used that.
65If multiple consoles are selected, they will be listed separated by spaces.
66Then, devices are probed,
67.Va currdev
68and
69.Va loaddev
70are set, and
71.Va LINES
72is set to 24.
73Next, Lua is initialized, and
74.Pa /boot/lua/loader.lua
75is processed if it exists.
76After that,
77.Pa /boot/loader.conf
78is processed if available.
79.Pp
80At this point, if an
81.Ic autoboot
82has not been tried, and if
83.Va autoboot_delay
84is not set to
85.Dq Li NO
86(not case sensitive), then an
87.Ic autoboot
88will be tried.
89If the system gets past this point,
90.Va prompt
91will be set and
92.Nm
93will engage interactive mode.
94Please note that historically even when
95.Va autoboot_delay
96is set to
97.Dq Li 0
98user will be able to interrupt autoboot process by pressing some key
99on the console while kernel and modules are being loaded.
100In some
101cases such behaviour may be undesirable, to prevent it set
102.Va autoboot_delay
103to
104.Dq Li -1 ,
105in this case
106.Nm
107will engage interactive mode only if
108.Ic autoboot
109has failed.
110.Sh BUILTIN COMMANDS
111In
112.Nm ,
113builtin commands take parameters from the command line.
114Presently,
115the only way to call them from a script is by using
116.Pa evaluate
117on a string.
118If an error condition occurs, an exception will be generated,
119which can be intercepted using Lua exception handling.
120If not intercepted, an error message will be displayed and
121the interpreter's state will be reset, emptying the stack and restoring
122interpreting mode.
123.Pp
124The commands are described in the
125.Xr loader_simp 8
126.Dq BUILTIN COMMANDS
127section.
128.Ss BUILTIN ENVIRONMENT VARIABLES
129The environment variables common to all interpreters are described in the
130.Xr loader_simp 8
131.Dq BUILTIN ENVIRONMENT VARIABLES
132section.
133.Ss BUILTIN PARSER
134When a builtin command is executed, the rest of the line is taken
135by it as arguments, and it is processed by a special parser which
136is not used for regular Lua commands.
137.Sh SECURITY
138Access to the
139.Nm
140command line provides several ways of compromising system security,
141including, but not limited to:
142.Pp
143.Bl -bullet
144.It
145Booting from removable storage, by setting the
146.Va currdev
147or
148.Va loaddev
149variables
150.It
151Executing binary of choice, by setting the
152.Va init_path
153or
154.Va init_script
155variables
156.It
157Overriding ACPI DSDT to inject arbitrary code into the ACPI subsystem
158.El
159.Pp
160One can prevent unauthorized access
161to the
162.Nm
163command line by setting the
164.Va password ,
165or setting
166.Va autoboot_delay
167to -1.
168See
169.Xr loader.conf 5
170for details.
171In order for this to be effective, one should also configure the firmware
172(BIOS or UEFI) to prevent booting from unauthorized devices.
173.Sh MD
174Memory disk (MD) can be used when the
175.Nm
176was compiled with
177.Va MD_IMAGE_SIZE .
178The size of the memory disk is determined by
179.Va MD_IMAGE_SIZE .
180If MD available, a file system can be embedded into the
181.Nm
182with
183.Pa /sys/tools/embed_mfs.sh .
184Then, MD will be probed and be set to
185.Va currdev
186during initialization.
187.Pp
188Currently, MD is only supported in
189.Xr loader.efi 8 .
190.Sh FILES
191.Bl -tag -width /usr/share/examples/bootforth/ -compact
192.It Pa /boot/loader
193.Nm
194itself.
195.It Pa /boot/defaults/loader.conf
196.It Pa /boot/lua/loader.lua
197Loader init
198.It Pa /boot/loader.conf
199.It Pa /boot/loader.conf.local
200.Nm
201configuration files, as described in
202.Xr loader.conf 5 .
203.Sh EXAMPLES
204Boot in single user mode:
205.Pp
206.Dl boot -s
207.Pp
208Load the kernel, a splash screen, and then autoboot in five seconds.
209Notice that a kernel must be loaded before any other
210.Ic load
211command is attempted.
212.Bd -literal -offset indent
213load kernel
214load splash_bmp
215load -t splash_image_data /boot/chuckrulez.bmp
216autoboot 5
217.Ed
218.Pp
219Set the disk unit of the root device to 2, and then boot.
220This would be needed in a system with two IDE disks,
221with the second IDE disk hardwired to ada2 instead of ada1.
222.Bd -literal -offset indent
223set root_disk_unit=2
224boot /boot/kernel/kernel
225.Ed
226.Pp
227Set the default device used for loading a kernel from a ZFS filesystem:
228.Bd -literal -offset indent
229set currdev=zfs:tank/ROOT/knowngood:
230.Ed
231.Pp
232.Sh ERRORS
233The following values are thrown by
234.Nm :
235.Bl -tag -width XXXXX -offset indent
236.It 100
237Any type of error in the processing of a builtin.
238.It -1
239.Ic Abort
240executed.
241.It -2
242.Ic Abort"
243executed.
244.It -56
245.Ic Quit
246executed.
247.It -256
248Out of interpreting text.
249.It -257
250Need more text to succeed -- will finish on next run.
251.It -258
252.Ic Bye
253executed.
254.It -259
255Unspecified error.
256.El
257.Sh SEE ALSO
258.Xr libstand 3 ,
259.Xr loader.conf 5 ,
260.Xr tuning 7 ,
261.Xr boot 8 ,
262.Xr btxld 8
263.Sh HISTORY
264The
265.Nm
266first appeared in
267.Fx 12.0 .
268