]> rtime.felk.cvut.cz Git - novaboot.git/blob - README.md
Add --exiton-re option
[novaboot.git] / README.md
1 # NAME
2
3 novaboot - A tool for booting various operating systems on various hardware or in qemu
4
5 # SYNOPSIS
6
7 **novaboot** --help
8
9 **novaboot** \[option\]... \[--\] script...
10
11 **./script** \[option\]...
12
13 # DESCRIPTION
14
15 This program makes booting of an operating system (e.g. NOVA or Linux)
16 as simple as running a local program. It facilitates booting on local
17 or remote hosts or in emulators such as qemu. Novaboot operation is
18 controlled by command line options and by a so called novaboot script,
19 which can be thought as a generalization of bootloader configuration
20 files (see ["NOVABOOT SCRIPT SYNTAX"](#novaboot-script-syntax)). Based on this input,
21 novaboot setups everything for the target host to boot the desired
22 configuration, i.e. it generates the bootloader configuration file in
23 the proper format, deploy the binaries and other needed files to
24 required locations, perhaps on a remote boot server and reset the
25 target host. Finally, target host's serial output is redirected to
26 standard output if that is possible.
27
28 Typical way of using novaboot is to make the novaboot script
29 executable and set its first line to _#!/usr/bin/env novaboot_. Then,
30 booting a particular OS configuration becomes the same as executing a
31 local program - the novaboot script.
32
33 For example, with `novaboot` you can:
34
35 1. Run an OS in Qemu. This is the default action when no other action is
36 specified by command line switches. Thus running `novaboot ./script`
37 (or `./script` as described above) will run Qemu and make it boot the
38 configuration specified in the `script`.
39 2. Create a bootloader configuration file (currently supported
40 bootloaders are GRUB, GRUB2, ISOLINUX, Pulsar and U-Boot) and copy it
41 with all other files needed for booting to a remote boot server.
42
43         ./script --server=192.168.1.1:/tftp --iprelay=192.168.1.2
44
45     This command copies files to the TFTP server and uses
46     TCP/IP-controlled relay to reset the target host and receive its
47     serial output.
48
49 3. Run DHCP and TFTP server on developer's machine to PXE-boot the target
50 machine from it. E.g.
51
52         ./script --dhcp-tftp
53
54     When a PXE-bootable machine is connected via Ethernet to developer's
55     machine, it will boot the configuration described in the _script_.
56
57 4. Create bootable ISO images. E.g.
58
59         novaboot --iso -- script1 script2
60
61     The created ISO image will use ISOLINUX bootloader installed on it and
62     the boot menu will allow selecting between _script1_ and _script2_
63     configurations.
64
65 Note that the options needed for a specific target can be stored in a
66 ["CONFIGURATION FILE"](#configuration-file). Then it is sufficient to use only the **-t**
67 option to specify the name of the target.
68
69 # PHASES AND OPTIONS
70
71 Novaboot performs its work in several phases. Each phase can be
72 influenced by several command line options, certain phases can be
73 skipped. The list of phases (in the execution order) and the
74 corresponding options follow.
75
76 ## Configuration reading phase
77
78 After starting, novaboot reads configuration files. Their content is
79 described in section ["CONFIGURATION FILE"](#configuration-file). By default,
80 configuration is read from two locations. First from the configuration
81 directory and second from `.novaboot` files along the path to the
82 current directory. The later read files override settings from the
83 former ones.
84
85 Configuration directory is determined by the content of
86 NOVABOOT\_CONFIG\_DIR environment variable defaulting to
87 `/etc/novaboot.d`. Files in this directory with names consisting
88 solely from English letters, numbers, dashes '-' and underscores '\_'
89 (note that dot '.' is not included) are read in alphabetical order.
90
91 Then novaboot searches for files named `.novaboot` starting from the
92 directory of the novaboot script (or working directory, see bellow)
93 and continuing upwards up to the root directory. The found
94 configuration files are then read in the opposite order (i.e. from the
95 root directory downwards). This allows to have, for example, user
96 specific configuration in `~/.novaboot` and project specific one in
97 `~/project/.novaboot`.
98
99 In certain cases, the location of the novaboot script cannot be
100 determined in this early phase. This happens either when the script is
101 read from the standard input or when novaboot is invoked explicitly as
102 in the example ["4."](#4) above. In this case the current working
103 directory is used as a starting point for configuration file search
104 instead of the novaboot script directory.
105
106 - -c, --config=_filename_
107
108     Use the specified configuration file instead of the default one(s).
109
110 ## Command line processing phase
111
112 - --dump-config
113
114     Dump the current configuration to stdout end exits. Useful as an
115     initial template for a configuration file.
116
117 - -h, --help
118
119     Print short (**-h**) or long (**--help**) help.
120
121 - -t, --target=_target_
122
123     This option serves as a user configurable shortcut for other novaboot
124     options. The effect of this option is the same as the options stored
125     in the `%targets` configuration variable under key _target_. See
126     also ["CONFIGURATION FILE"](#configuration-file).
127
128 ## Script preprocessing phase
129
130 This phases allows to modify the parsed novaboot script before it is
131 used in the later phases.
132
133 - -a, --append=_parameters_
134
135     Append a string to the first `load` line in the novaboot script. This
136     can be used to append parameters to the kernel's or root task's
137     command line. This option can appear multiple times.
138
139 - -b, --bender
140
141     Use `bender` chainloader. Bender scans the PCI bus for PCI serial
142     ports and stores the information about them in the BIOS data area for
143     use by the kernel.
144
145 - --chainloader=_chainloader_
146
147     Specifies a chainloader that is loaded before the kernel and other
148     files specified in the novaboot script. E.g. 'bin/boot/bender
149     promisc'.
150
151 - --dump
152
153     Print the modules to boot and their parameters after this phase
154     finishes. Then exit. This is useful for seeing the effect of other
155     options in this section.
156
157 - -k, --kernel=`file`
158
159     Replace the first word on the first `load` line in the novaboot
160     script with `file`.
161
162 - --scriptmod=_perl expression_
163
164     When novaboot script is read, _perl expression_ is executed for every
165     line (in $\_ variable). For example, `novaboot
166     \--scriptmod=s/sigma0/omega6/g` replaces every occurrence of _sigma0_
167     in the script with _omega6_.
168
169     When this option is present, it overrides _$script\_modifier_ variable
170     from the configuration file, which has the same effect. If this option
171     is given multiple times all expressions are evaluated in the command
172     line order.
173
174 ## File generation phase
175
176 In this phase, files needed for booting are generated in a so called
177 _build directory_ (see ["--build-dir"](#build-dir)). In most cases configuration
178 for a bootloader is generated automatically by novaboot. It is also
179 possible to generate other files using _heredoc_ or _"<"_ syntax in
180 novaboot scripts. Finally, binaries can be generated in this phases by
181 running `scons` or `make`.
182
183 - --build-dir=_directory_
184
185     Overrides the default build directory location.
186
187     The default build directory location is determined as follows: If the
188     configuration file defines the `$builddir` variable, its value is
189     used. Otherwise, it is the directory that contains the first processed
190     novaboot script.
191
192     See also ["BUILDDIR"](#builddir) variable.
193
194 - -g, --grub\[=_filename_\]
195
196     Generates grub bootloader menu file. If the _filename_ is not
197     specified, `menu.lst` is used. The _filename_ is relative to the
198     build directory (see **--build-dir**).
199
200 - --grub-preamble=_prefix_
201
202     Specifies the _preable_ that is at the beginning of the generated
203     GRUB or GRUB2 config files. This is useful for specifying GRUB's
204     timeout.
205
206 - --prefix=_prefix_
207
208     Specifies _prefix_ (e.g. `/srv/tftp`) that is put in front of every
209     file name in generated bootloader configuration files (or in U-Boot
210     commands).
211
212     If the _prefix_ contains string $NAME, it will be replaced with the
213     name of the novaboot script (see also **--name**).
214
215     If the _prefix_ contains string $BUILDDIR, it will be replaced with
216     the build directory (see also **--build-dir**).
217
218 - --grub-prefix
219
220     Alias for **--prefix**.
221
222 - --grub2\[=_filename_\]
223
224     Generate GRUB2 menu entry in _filename_. If _filename_ is not
225     specified `grub.cfg` is used. The content of the menu entry can be
226     customized with **--grub-preamble**, **--grub2-prolog** or
227     **--grub\_prefix** options.
228
229     In order to use the the generated menu entry on your development
230     machine that uses GRUB2, append the following snippet to
231     `/etc/grub.d/40_custom` file and regenerate your grub configuration,
232     i.e. run update-grub on Debian/Ubuntu.
233
234         if [ -f /path/to/nul/build/grub.cfg ]; then
235           source /path/to/nul/build/grub.cfg
236         fi
237
238 - --grub2-prolog=_prolog_
239
240     Specifies text that is put at the beginning of the GRUB2 menu entry.
241
242 - -m, --make\[=make command\]
243
244     Runs `make` to build files that are not generated by novaboot itself.
245
246 - --name=_string_
247
248     Use the name _string_ instead of the name of the novaboot script.
249     This name is used for things like a title of grub menu or for the
250     server directory where the boot files are copied to.
251
252 - --no-file-gen
253
254     Do not run external commands to generate files (i.e. "<" syntax and
255     `run` keyword). This switch does not influence generation of files
256     specified with "<<WORD" syntax.
257
258 - -p, --pulsar\[=mac\]
259
260     Generates pulsar bootloader configuration file named `config-_mac_`
261     The _mac_ string is typically a MAC address and defaults to
262     _novaboot_.
263
264 - --scons\[=scons command\]
265
266     Runs `scons` to build files that are not generated by novaboot
267     itself.
268
269 - --strip-rom
270
271     Strip _rom://_ prefix from command lines and generated config files.
272     The _rom://_ prefix is used by NUL. For NRE, it has to be stripped.
273
274 - --gen-only
275
276     Exit novaboot after file generation phase.
277
278 ## Target connection check
279
280 If supported by the target, the connection to it is made and it is
281 checked whether the target is not occupied by another novaboot
282 user/instance.
283
284 - --amt=_"\[user\[:password\]@\]host\[:port\]_
285
286     Use Intel AMT technology to control the target machine. WS management
287     is used to powercycle it and Serial-Over-Lan (SOL) for input/output.
288     The hostname or (IP address) is given by the _host_ parameter. If
289     _password_ is not specified, environment variable AMT\_PASSWORD is
290     used. The _port_ specifies a TCP port for SOL. If not specified, the
291     default is 16992. Default _user_ is admin.
292
293 - --iprelay=_addr\[:port\]_
294
295     Use TCP/IP relay and serial port to access the target's serial port
296     and powercycle it. The IP address of the relay is given by _addr_
297     parameter. If _port_ is not specified, it default to 23.
298
299     Note: This option is supposed to work with HWG-ER02a IP relays.
300
301 - -s, --serial\[=device\]
302
303     Target's serial line is connected to host's serial line (device). The
304     default value for device is `/dev/ttyUSB0`.
305
306     The value of this option is exported in NB\_NOVABOOT environment
307     variable to all subprocesses run by `novaboot`.
308
309 - --stty=_settings_
310
311     Specifies settings passed to `stty` invoked on the serial line
312     specified with **--serial** option. If this option is not given,
313     `stty` is called with `raw -crtscts -onlcr 115200` settings.
314
315 - --remote-cmd=_cmd_
316
317     Command that mediates connection to the target's serial line. For
318     example `ssh server 'cu -l /dev/ttyS0'`.
319
320 - --remote-expect=_string_
321
322     Wait for reception of _string_ after establishing the the remote
323     connection before continuing.
324
325 ## File deployment phase
326
327 In some setups, it is necessary to copy the files needed for booting
328 to a particular location, e.g. to a TFTP boot server or to the
329 `/boot` partition.
330
331 - -d, --dhcp-tftp
332
333     Turns your workstation into a DHCP and TFTP server so that the OS can
334     be booted via PXE BIOS (or similar mechanism) on the test machine
335     directly connected by a plain Ethernet cable to your workstation.
336
337     The DHCP and TFTP servers requires root privileges and `novaboot`
338     uses `sudo` command to obtain those. You can put the following to
339     _/etc/sudoers_ to allow running the necessary commands without asking
340     for password.
341
342         Cmnd_Alias NOVABOOT = /bin/ip a add 10.23.23.1/24 dev eth0, /bin/ip l set dev eth0 up, /usr/sbin/dhcpd -d -cf dhcpd.conf -lf dhcpd.leases -pf dhcpd.pid, /usr/sbin/in.tftpd --listen --secure -v -v -v --pidfile tftpd.pid *, /usr/bin/touch dhcpd.leases, /usr/bin/pkill --pidfile=dhcpd.pid, /usr/bin/pkill --pidfile=tftpd.pid
343         your_login ALL=NOPASSWD: NOVABOOT
344
345 - --tftp
346
347     Starts a TFTP server on your workstation. This is similar to
348     **--dhcp-tftp** except that DHCP server is not started.
349
350     The TFTP server require root privileges and `novaboot` uses `sudo`
351     command to obtain those. You can put the following to _/etc/sudoers_
352     to allow running the necessary commands without asking for password.
353
354         Cmnd_Alias NOVABOOT =  /usr/sbin/in.tftpd --listen --secure -v -v -v --pidfile tftpd.pid *, /usr/bin/pkill --pidfile=tftpd.pid
355         your_login ALL=NOPASSWD: NOVABOOT
356
357 - --tftp-port=_port_
358
359     Port to run the TFTP server on. Implies **--tftp**.
360
361 - --iso\[=filename\]
362
363     Generates the ISO image that boots NOVA system via GRUB. If no filename
364     is given, the image is stored under _NAME_.iso, where _NAME_ is the name
365     of the novaboot script (see also **--name**).
366
367 - --server\[=\[\[user@\]server:\]path\]
368
369     Copy all files needed for booting to another location. The files will
370     be copied (by **rsync** tool) to the directory _path_. If the _path_
371     contains string $NAME, it will be replaced with the name of the
372     novaboot script (see also **--name**).
373
374 - --rsync-flags=_flags_
375
376     Specifies which _flags_ are appended to `rsync` command line when
377     copying files as a result of _--server_ option.
378
379 - --concat
380
381     If **--server** is used and its value ends with $NAME, then after
382     copying the files, a new bootloader configuration file (e.g. menu.lst)
383     is created at _path-wo-name_, i.e. the path specified by **--server**
384     with $NAME part removed. The content of the file is created by
385     concatenating all files of the same name from all subdirectories of
386     _path-wo-name_ found on the "server".
387
388 - --ider
389
390     Use Intel AMT technology for IDE redirection. This allows the target
391     machine to boot from novaboot created ISO image. Implies **--iso**.
392
393     The experimental `amtider` utility needed by this option can be
394     obtained from https://github.com/wentasah/amtterm.
395
396 ## Target power-on and reset phase
397
398 At this point, the target is reset (or switched on/off). There is
399 several ways how this can be accomplished. Resetting a physical target
400 can currently be accomplished by the following options: **--amt**,
401 **--iprelay**, **--reset-cmd**.
402
403 - --on, --off
404
405     Switch on/off the target machine and exit. The script (if any) is
406     completely ignored. Currently it works only with **--iprelay** or
407     **--amt**.
408
409 - -Q, --qemu\[=_qemu-binary_\]
410
411     Boot the configuration in qemu. Optionally, the name of qemu binary
412     can be specified as a parameter.
413
414 - --qemu-append=_flags_
415
416     Append _flags_ to the default qemu flags (QEMU\_FLAGS variable or
417     `-cpu coreduo -smp 2`).
418
419 - -q, --qemu-flags=_flags_
420
421     Replace the default qemu flags (QEMU\_FLAGS variable or `-cpu coreduo
422     \-smp 2`) with _flags_ specified here.
423
424 - --reset-cmd=_cmd_
425
426     Command that resets the target.
427
428 - --no-reset, --reset
429
430     Disable/enable reseting of the target.
431
432 ## Interaction with the bootloader on the target
433
434 - --uboot\[=_prompt_\]
435
436     Interact with U-Boot bootloader to boot the thing described in the
437     novaboot script. _prompt_ specifies the U-Boot's prompt (default is
438     "=> ", other common prompts are "U-Boot> " or "U-Boot# ").
439     Implementation of this option is currently tied to a particular board
440     that we use. It may be subject to changes in the future!
441
442 - --uboot-init
443
444     Command(s) to send the U-Boot bootloader before loading the images and
445     booting them. This option can be given multiple times. After sending
446     commands from each option novaboot waits for U-Boot _prompt_.
447
448     If the command contains string _$NB\_MYIP_ then this string is
449     replaced by IPv4 address of eth0 interface. Similarly _$NB\_PREFIX_ is
450     replaced with prefix given by **--prefix**.
451
452     See also `uboot` keyword in ["NOVABOOT SCRIPT SYNTAX"](#novaboot-script-syntax)).
453
454 - --uboot-addr _name_=_address_
455
456     Load address of U-Boot's `tftpboot` command for loading _name_,
457     where name is one of _kernel_, _ramdisk_ or _fdt_ (flattened device
458     tree).
459
460 ## Target interaction phase
461
462 In this phase, target's serial output is redirected to stdout and if
463 stdin is a TTY, it is redirected to the target's serial input allowing
464 interactive work with the target.
465
466 - --exiton=_string_
467
468     When _string_ is sent by the target, novaboot exits. This option can
469     be specified multiple times.
470
471     If _string_ is `-re`, then the next **--exiton**'s _string_ is
472     treated as regular expression. For example:
473
474         --exiton -re --exiton 'error:.*failed'
475
476 - --exiton-re=_regex_
477
478     The same as --exiton -re --exiton _regex_.
479
480 - -i, --interactive
481
482     Setup things for interactive use of target. Your terminal will be
483     switched to raw mode. In raw mode, your system does not process input
484     in any way (no echoing of entered characters, no interpretation
485     special characters). This, among others, means that Ctrl-C is passed
486     to the target and does no longer interrupt novaboot. Use "~~."
487     sequence to exit novaboot.
488
489 - --expect=_string_
490
491     When _string_ is received from the target, send the string specified
492     with the subsequent **--send\*** option to the target.
493
494 - --expect-re=_regex_
495
496     When target's output matches regular expression _regex_, send the
497     string specified with the subsequent **--send\*** option to the target.
498
499 - --expect-raw=_perl-code_
500
501     Provides direct control over Perl's Expect module.
502
503 - --send=_string_
504
505     Send _string_ to the target after the previously specified
506     **--expect\*** was matched in the target's output. The _string_ may
507     contain escape sequences such as "\\n".
508
509     Note that _string_ is actually interpreted by Perl, so it can contain
510     much more that escape sequences. This behavior may change in the
511     future.
512
513     Example: `--expect='login: ' --send='root\n'`
514
515 - --sendcont=_string_
516
517     Similar to **--send** but continue expecting more input.
518
519     Example: `--expect='Continue?' --sendcont='yes\n'`
520
521 # NOVABOOT SCRIPT SYNTAX
522
523 The syntax tries to mimic POSIX shell syntax. The syntax is defined
524 with the following rules.
525
526 Lines starting with "#" and empty lines are ignored.
527
528 Lines that end with "\\" are concatenated with the following line after
529 removal of the final "\\" and leading whitespace of the following line.
530
531 Lines of the form _VARIABLE=..._ (i.e. matching '^\[A-Z\_\]+=' regular
532 expression) assign values to internal variables. See ["VARIABLES"](#variables)
533 section.
534
535 Lines starting with `load` keyword represent modules to boot. The
536 word after `load` is a file name (relative to the build directory
537 (see **--build-dir**) of the module to load and the remaining words are
538 passed to it as the command line parameters.
539
540 When the `load` line ends with "<<WORD" then the subsequent lines
541 until the line containing solely WORD are copied literally to the file
542 named on that line. This is similar to shell's heredoc feature.
543
544 When the `load` line ends with "< CMD" then command CMD is executed
545 with `/bin/sh` and its standard output is stored in the file named on
546 that line. The SRCDIR variable in CMD's environment is set to the
547 absolute path of the directory containing the interpreted novaboot
548 script.
549
550 Lines starting with `run` keyword contain shell commands that are run
551 during file generation phase. This is the same as the "< CMD" syntax
552 for `load` keyboard except that the command's output is not
553 redirected to a file. The ordering of commands is the same as they
554 appear in the novaboot script.
555
556 Lines starting with `uboot` represent U-Boot commands that are sent
557 to the target if **--uboot** option is given. Having a U-Boot line in
558 the novaboot script is the same as passing an equivalent
559 **--uboot-init** option to novaboot. The `uboot` keyword can be
560 suffixed with timeout specification. The syntax is `uboot:Ns`, where
561 `N` is the whole number of seconds. If the U-Boot command prompt does
562 not appear before the timeout, novaboot fails. The default timeout is
563 10 seconds.
564
565 Example (Linux):
566
567     #!/usr/bin/env novaboot
568     load bzImage console=ttyS0,115200
569     run  make -C buildroot
570     load rootfs.cpio < gen_cpio buildroot/images/rootfs.cpio "myapp->/etc/init.d/S99myapp"
571
572 Example (NOVA User Land - NUL):
573
574     #!/usr/bin/env novaboot
575     WVDESC=Example program
576     load bin/apps/sigma0.nul S0_DEFAULT script_start:1,1 \
577                              verbose hostkeyb:0,0x60,1,12,2
578     load bin/apps/hello.nul
579     load hello.nulconfig <<EOF
580     sigma0::mem:16 name::/s0/log name::/s0/timer name::/s0/fs/rom ||
581     rom://bin/apps/hello.nul
582     EOF
583
584 This example will load three modules: `sigma0.nul`, `hello.nul` and
585 `hello.nulconfig`. sigma0 receives some command line parameters and
586 `hello.nulconfig` file is generated on the fly from the lines between
587 `<<EOF` and `EOF`.
588
589 ## VARIABLES
590
591 The following variables are interpreted in the novaboot script:
592
593 - BUILDDIR
594
595     Novaboot chdir()s to this directory before file generation phase. The
596     directory name specified here is relative to the build directory
597     specified by other means (see ["--build-dir"](#build-dir)).
598
599 - EXITON
600
601     Assigning this variable has the same effect as specifying ["--exiton"](#exiton)
602     option.
603
604 - HYPERVISOR\_PARAMS
605
606     Parameters passed to hypervisor. The default value is "serial", unless
607     overridden in configuration file.
608
609 - KERNEL
610
611     The kernel to use instead of the hypervisor specified in the
612     configuration file with the `$hypervisor` variable. The value should
613     contain the name of the kernel image as well as its command line
614     parameters. If this variable is defined and non-empty, the variable
615     HYPERVISOR\_PARAMS is not used.
616
617 - NO\_BOOT
618
619     If this variable is 1, the system is not booted. This is currently
620     only implemented for U-Boot bootloader where it is useful for
621     interacting with the bootloader without booting the system - e.g. for
622     flashing.
623
624 - QEMU
625
626     Use a specific qemu binary (can be overridden with **-Q**) and flags
627     when booting this script under qemu. If QEMU\_FLAGS variable is also
628     specified flags specified in QEMU variable are replaced by those in
629     QEMU\_FLAGS.
630
631 - QEMU\_FLAGS
632
633     Use specific qemu flags (can be overridden with **-q**).
634
635 - WVDESC
636
637     Description of the WvTest-compliant program.
638
639 - WVTEST\_TIMEOUT
640
641     The timeout in seconds for WvTest harness. If no complete line appears
642     in the test output within the time specified here, the test fails. It
643     is necessary to specify this for long running tests that produce no
644     intermediate output.
645
646 # CONFIGURATION FILE
647
648 Novaboot can read its configuration from one or more files. By
649 default, novaboot looks for files named `.novaboot` as described in
650 ["Configuration reading phase"](#configuration-reading-phase). Alternatively, configuration file
651 location can be specified with the **-c** switch or with the
652 NOVABOOT\_CONFIG environment variable. The configuration file has Perl
653 syntax and should set values of certain Perl variables. The current
654 configuration can be dumped with the **--dump-config** switch. Some
655 configuration variables can be overridden by environment variables
656 (see below) or by command line switches.
657
658 Supported configuration variables include:
659
660 - $builddir
661
662     Build directory location relative to the location of the configuration
663     file.
664
665 - $default\_target
666
667     Default target (see below) to use when no target is explicitly
668     specified on command line with the **--target** option.
669
670 - %targets
671
672     Hash of target definitions to be used with the **--target** option. The
673     key is the identifier of the target, the value is the string with
674     command line options. For instance, if the configuration file contains:
675
676         $targets{'mybox'} = '--server=boot:/tftproot --serial=/dev/ttyUSB0 --grub',
677
678     then the following two commands are equivalent:
679
680         ./script --server=boot:/tftproot --serial=/dev/ttyUSB0 --grub
681         ./script -t mybox
682
683 # ENVIRONMENT VARIABLES
684
685 Some options can be specified not only via config file or command line
686 but also through environment variables. Environment variables override
687 the values from configuration file and command line parameters
688 override the environment variables.
689
690 - NOVABOOT\_CONFIG
691
692     Name of the novaboot configuration file to use instead of the default
693     one(s).
694
695 - NOVABOOT\_CONFIG\_DIR
696
697     Name of the novaboot configuration directory. When not specified
698     `/etc/novaboot.d` is used.
699
700 - NOVABOOT\_BENDER
701
702     Defining this variable has the same meaning as **--bender** option.
703
704 # AUTHORS
705
706 Michal Sojka <sojka@os.inf.tu-dresden.de>