# SYNOPSIS
-__novaboot__ --help
+**novaboot** --help
-__novaboot__ \[option\]... \[--\] script...
+**novaboot** \[option\]... \[--\] script...
-__./script__ \[option\]...
+**./script** \[option\]...
# DESCRIPTION
standard output if that is possible.
Typical way of using novaboot is to make the novaboot script
-executable and set its first line to _\#!/usr/bin/env novaboot_. Then,
+executable and set its first line to _#!/usr/bin/env novaboot_. Then,
booting a particular OS configuration becomes the same as executing a
local program - the novaboot script.
configurations.
Note that the options needed for a specific target can be stored in a
-["CONFIGURATION FILE"](#configuration-file). Then it is sufficient to use only the __\-t__
+["CONFIGURATION FILE"](#configuration-file). Then it is sufficient to use only the **-t**
option to specify the name of the target.
# PHASES AND OPTIONS
In this case the current working directory is used as a starting point
for configuration file search.
-- \-c, --config=_filename_
+- -c, --config=_filename_
Use the specified configuration file instead of the default one(s).
## Command line processing phase
-- \--dump-config
+- --dump-config
Dump the current configuration to stdout end exits. Useful as an
initial template for a configuration file.
-- \-h, --help
+- -h, --help
- Print short (__\-h__) or long (__\--help__) help.
+ Print short (**-h**) or long (**--help**) help.
-- \-t, --target=_target_
+- -t, --target=_target_
This option serves as a user configurable shortcut for other novaboot
options. The effect of this option is the same as the options stored
This phases allows to modify the parsed novaboot script before it is
used in the later phases.
-- \-a, --append=_parameters_
+- -a, --append=_parameters_
Append a string to the first `load` line in the novaboot script. This
can be used to append parameters to the kernel's or root task's
command line. Can appear multiple times.
-- \-b, --bender
+- -b, --bender
Use `bender` chainloader. Bender scans the PCI bus for PCI serial
ports and stores the information about them in the BIOS data area for
use by the kernel.
-- \--chainloader=_chainloader_
+- --chainloader=_chainloader_
Chainloader that is loaded before the kernel and other files specified
in the novaboot script. E.g. 'bin/boot/bender promisc'.
-- \--dump
+- --dump
Print the modules to boot and their parameters after this phase
finishes. Then exit. This is useful for seeing the effect of other
options in this section.
-- \-k, --kernel=`file`
+- -k, --kernel=`file`
Replace the first word on the first `load` line in the novaboot
script with `file`.
-- \--scriptmod=_perl expression_
+- --scriptmod=_perl expression_
When novaboot script is read, _perl expression_ is executed for every
line (in $\_ variable). For example, `novaboot
- --scriptmod=s/sigma0/omega6/g` replaces every occurrence of _sigma0_
+ \--scriptmod=s/sigma0/omega6/g` replaces every occurrence of _sigma0_
in the script with _omega6_.
When this option is present, it overrides _$script\_modifier_ variable
novaboot scripts. Finally, binaries can be generated in this phases by
running `scons` or `make`.
-- \--build-dir=_directory_
+- --build-dir=_directory_
Overrides the default build directory location.
See also ["BUILDDIR"](#builddir) variable.
-- \-g, --grub\[=_filename_\]
+- -g, --grub\[=_filename_\]
Generates grub bootloader menu file. If the _filename_ is not
specified, `menu.lst` is used. The _filename_ is relative to the
- build directory (see __\--build-dir__).
+ build directory (see **--build-dir**).
-- \--grub-preamble=_prefix_
+- --grub-preamble=_prefix_
Specifies the _preable_ that is at the beginning of the generated
GRUB or GRUB2 config files. This is useful for specifying GRUB's
timeout.
-- \--grub-prefix=_prefix_
+- --grub-prefix=_prefix_
Specifies _prefix_ that is put in front of every file name in GRUB's
`menu.lst`. The default value is the absolute path to the build directory.
If the _prefix_ contains string $NAME, it will be replaced with the
- name of the novaboot script (see also __\--name__).
+ name of the novaboot script (see also **--name**).
-- \--grub2\[=_filename_\]
+- --grub2\[=_filename_\]
Generate GRUB2 menuentry in _filename_. If _filename_ is not
specified `grub.cfg` is used. The content of the menuentry can be
- customized with __\--grub-preable__, __\--grub2-prolog__ or
- __\--grub\_prefix__ options.
+ customized with **--grub-preable**, **--grub2-prolog** or
+ **--grub\_prefix** options.
In order to use the the generated menuentry on your development
machine that uses GRUB2, append the following snippet to
source /path/to/nul/build/grub.cfg
fi
-- \--grub2-prolog=_prolog_
+- --grub2-prolog=_prolog_
Specifies text _preable_ that is put at the beginning of the entry
GRUB2 entry.
-- \-m, --make\[=make command\]
+- -m, --make\[=make command\]
Runs `make` to build files that are not generated by novaboot itself.
-- \--name=_string_
+- --name=_string_
Use the name _string_ instead of the name of the novaboot script.
This name is used for things like a title of grub menu or for the
server directory where the boot files are copied to.
-- \--no-file-gen
+- --no-file-gen
- Do not generate files on the fly (i.e. "<" syntax) except for the
- files generated via "<<WORD" syntax.
+ Do not run external commands to generate files (i.e. "<" syntax and
+ `run` keyword). This switch does not influence generation of files
+ specified with "<<WORD" syntax.
-- \-p, --pulsar\[=mac\]
+- -p, --pulsar\[=mac\]
Generates pulsar bootloader configuration file named `config-_mac_`
The _mac_ string is typically a MAC address and defaults to
_novaboot_.
-- \--scons\[=scons command\]
+- --scons\[=scons command\]
Runs `scons` to build files that are not generated by novaboot
itself.
-- \--strip-rom
+- --strip-rom
Strip _rom://_ prefix from command lines and generated config files.
The _rom://_ prefix is used by NUL. For NRE, it has to be stripped.
-- \--gen-only
+- --gen-only
Exit novaboot after file generation phase.
checked whether the target is not occupied by another novaboot
user/instance.
-- \--amt=_"\[user\[:password\]@\]host\[:port\]_
+- --amt=_"\[user\[:password\]@\]host\[:port\]_
Use Intel AMT technology to control the target machine. WS management
is used to powercycle it and Serial-Over-Lan (SOL) for input/output.
used. The _port_ specifies a TCP port for SOL. If not specified, the
default is 16992. Default _user_ is admin.
-- \--iprelay=_addr\[:port\]_
+- --ider
+
+ Use Intel AMT technology for IDE redirection. This allows the target
+ machine to boot from nonvaboot created ISO image.
+
+ The experimental _amtider_ utility needed by this option can be
+ obtained from https://github.com/wentasah/amtterm.
+
+- --iprelay=_addr\[:port\]_
Use TCP/IP relay and serial port to access the target's serial port
and powercycle it. The IP address of the relay is given by _addr_
Note: This option is supposed to work with HWG-ER02a IP relays.
-- \-s, --serial\[=device\]
+- -s, --serial\[=device\]
Target's serial line is connected to host's serial line (device). The
default value for device is `/dev/ttyUSB0`.
The value of this option is exported in NB\_NOVABOOT environment
variable to all subprocesses run by `novaboot`.
-- \--stty=_settings_
+- --stty=_settings_
Specifies settings passed to `stty` invoked on the serial line
- specified with __\--serial__ option. If this option is not given,
+ specified with **--serial** option. If this option is not given,
`stty` is called with `raw -crtscts -onlcr 115200` settings.
-- \--remote-cmd=_cmd_
+- --remote-cmd=_cmd_
Command that mediates connection to the target's serial line. For
example `ssh server 'cu -l /dev/ttyS0'`.
-- \--remote-expect=_string_
+- --remote-expect=_string_
Wait for reception of _string_ after establishing the the remote
connection before continuing.
-
-
## File deployment phase
In some setups, it is necessary to copy the files needed for booting
to a particular location, e.g. to a TFTP boot server or to the
`/boot` partition.
-- \-d, --dhcp-tftp
+- -d, --dhcp-tftp
Turns your workstation into a DHCP and TFTP server so that the OS can
be booted via PXE BIOS (or similar mechanism) on the test machine
directly connected by a plain Ethernet cable to your workstation.
- The DHCP and TFTP servers require root privileges and `novaboot`
+ The DHCP and TFTP servers requires root privileges and `novaboot`
uses `sudo` command to obtain those. You can put the following to
- _/etc/sudoers_ to allow running the necessary commands without
- asking for password.
+ _/etc/sudoers_ to allow running the necessary commands without asking
+ for password.
- 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 --foreground --secure -v -v -v --pidfile tftpd.pid *, /usr/bin/touch dhcpd.leases, /usr/bin/pkill --pidfile=dhcpd.pid, /usr/bin/pkill --pidfile=tftpd.pid
+ 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
your_login ALL=NOPASSWD: NOVABOOT
-- \--iso\[=filename\]
+- --tftp
+
+ Starts a TFTP server on your workstation. This is similar to
+ **--dhcp-tftp** except that DHCP server is not started.
+
+ The TFTP server require root privileges and `novaboot` uses `sudo`
+ command to obtain those. You can put the following to _/etc/sudoers_
+ to allow running the necessary commands without asking for password.
+
+ Cmnd_Alias NOVABOOT = /usr/sbin/in.tftpd --listen --secure -v -v -v --pidfile tftpd.pid *, /usr/bin/pkill --pidfile=tftpd.pid
+ your_login ALL=NOPASSWD: NOVABOOT
+
+- --tftp-port=_port_
+
+ Port to run the TFTP server on. Implies **--tftp**.
+
+- --iso\[=filename\]
Generates the ISO image that boots NOVA system via GRUB. If no filename
is given, the image is stored under _NAME_.iso, where _NAME_ is the name
- of the novaboot script (see also __\--name__).
+ of the novaboot script (see also **--name**).
-- \--server\[=\[\[user@\]server:\]path\]
+- --server\[=\[\[user@\]server:\]path\]
- Copy all files needed for booting to another location (implies __\-g__
- unless __\--grub2__ is given). The files will be copied (by __rsync__
+ Copy all files needed for booting to another location (implies **-g**
+ unless **--grub2** is given). The files will be copied (by **rsync**
tool) to the directory _path_. If the _path_ contains string $NAME,
it will be replaced with the name of the novaboot script (see also
- __\--name__).
+ **--name**).
-- \--concat
+- --concat
- If __\--server__ is used and its value ends with $NAME, then after
+ If **--server** is used and its value ends with $NAME, then after
copying the files, a new bootloader configuration file (e.g. menu.lst)
- is created at _path-wo-name_, i.e. the path specified by __\--server__
+ is created at _path-wo-name_, i.e. the path specified by **--server**
with $NAME part removed. The content of the file is created by
concatenating all files of the same name from all subdirectories of
_path-wo-name_ found on the "server".
-- \--rsync-flags=_flags_
+- --rsync-flags=_flags_
Specifies which _flags_ are appended to `rsync` command line when
- copying files as a result of _\--server_ option.
+ copying files as a result of _--server_ option.
## Target power-on and reset phase
-- \--on, --off
+- --on, --off
- Switch on/off the target machine. Currently it works only with
- __\--iprelay__ or __\--amt__.
+ Switch on/off the target machine and exit. The script (if any) is
+ completely ignored. Currently it works only with **--iprelay** or
+ **--amt**.
-- \-Q, --qemu\[=_qemu-binary_\]
+- -Q, --qemu\[=_qemu-binary_\]
Boot the configuration in qemu. Optionally, the name of qemu binary
can be specified as a parameter.
-- \--qemu-append=_flags_
+- --qemu-append=_flags_
Append _flags_ to the default qemu flags (QEMU\_FLAGS variable or
`-cpu coreduo -smp 2`).
-- \-q, --qemu-flags=_flags_
+- -q, --qemu-flags=_flags_
Replace the default qemu flags (QEMU\_FLAGS variable or `-cpu coreduo
- -smp 2`) with _flags_ specified here.
+ \-smp 2`) with _flags_ specified here.
-- \--reset-cmd=_cmd_
+- --reset-cmd=_cmd_
Command that resets the target.
## Interaction with the bootloader on the target
-- \--uboot
+- --uboot\[=_prompt_\]
Interact with uBoot bootloader to boot the thing described in the
- novaboot script. Implementation of this option is currently tied to a
- particular board that we use. It may be subject to changes in the
- future!
+ novaboot script. _prompt_ specifies the U-Boot's prompt (default is
+ "=> ", other common prompts are "U-Boot> " or "U-Boot# ").
+ Implementation of this option is currently tied to a particular board
+ that we use. It may be subject to changes in the future!
-- \--uboot-init
+- --uboot-init
Command(s) to send the U-Boot bootloader before loading the images and
- booting them.
+ booting them. This option can be given multiple times. After sending
+ commands from each option novaboot waits for U-Boot _prompt_.
## Target interaction phase
stdin is a TTY, it is redirected to the target's serial input allowing
interactive work with the target.
-- \--exiton=_string_
+- --exiton=_string_
When _string_ is sent by the target, novaboot exits. This option can
be specified multiple times.
- If _string_ is `-re`, then the next __\--exiton__'s _string_ is
+ If _string_ is `-re`, then the next **--exiton**'s _string_ is
treated as regular expression. For example:
--exiton -re --exiton 'error:.*failed'
-- \-i, --interactive
+- -i, --interactive
Setup things for interactive use of target. Your terminal will be
switched to raw mode. In raw mode, your system does not process input
to the target and does no longer interrupt novaboot. Use "~~."
sequence to exit novaboot.
-- \--expect=_string_
+- --expect=_string_
When _string_ is received from the target, send the string specified
- with the subsequent __\--send\*__ option to the target.
+ with the subsequent **--send\*** option to the target.
-- \--expect-re=_regex_
+- --expect-re=_regex_
When target's output matches regular expression _regex_, send the
- string specified with the subsequent __\--send\*__ option to the target.
+ string specified with the subsequent **--send\*** option to the target.
-- \--expect-raw=_perl-code_
+- --expect-raw=_perl-code_
Provides direct control over Perl's Expect module.
-- \--send=_string_
+- --send=_string_
Send _string_ to the target after the previously specified
- __\--expect\*__ was matched in the target's output. The _string_ may
+ **--expect\*** was matched in the target's output. The _string_ may
contain escape sequences such as "\\n".
Note that _string_ is actually interpreted by Perl, so it can contain
Example: `--expect='login: ' --send='root\n'`
-- \--sendcont=_string_
+- --sendcont=_string_
- Similar to __\--send__ but continue expecting more input.
+ Similar to **--send** but continue expecting more input.
Example: `--expect='Continue?' --sendcont='yes\n'`
The syntax tries to mimic POSIX shell syntax. The syntax is defined
with the following rules.
-Lines starting with "\#" and empty lines are ignored.
+Lines starting with "#" and empty lines are ignored.
Lines that end with "\\" are concatenated with the following line after
removal of the final "\\" and leading whitespace of the following line.
Lines starting with `load` keyword represent modules to boot. The
word after `load` is a file name (relative to the build directory
-(see __\--build-dir__) of the module to load and the remaining words are
+(see **--build-dir**) of the module to load and the remaining words are
passed to it as the command line parameters.
When the `load` line ends with "<<WORD" then the subsequent lines
absolute path of the directory containing the interpreted novaboot
script.
+Lines starting with `run` keyword contain shell commands that are run
+during file generation phase. This is the same as the "< CMD" syntax
+for `load` keyboard except that the command's output is not
+redirected to a file. The ordering of commands is the same as they
+appear in the novaboot script.
+
Example (Linux):
#!/usr/bin/env novaboot
load bzImage console=ttyS0,115200
+ run make -C buildroot
load rootfs.cpio < gen_cpio buildroot/images/rootfs.cpio "myapp->/etc/init.d/S99myapp"
Example (NOVA User Land - NUL):
- QEMU
- Use a specific qemu binary (can be overridden with __\-Q__) and flags
+ Use a specific qemu binary (can be overridden with **-Q**) and flags
when booting this script under qemu. If QEMU\_FLAGS variable is also
specified flags specified in QEMU variable are replaced by those in
QEMU\_FLAGS.
- QEMU\_FLAGS
- Use specific qemu flags (can be overridden with __\-q__).
+ Use specific qemu flags (can be overridden with **-q**).
- WVDESC
Novaboot can read its configuration from one or more files. By
default, novaboot looks for files named `.novaboot` as described in
["Configuration reading phase"](#configuration-reading-phase). Alternatively, its location can be
-specified with the __\-c__ switch or with the NOVABOOT\_CONFIG
+specified with the **-c** switch or with the NOVABOOT\_CONFIG
environment variable. The configuration file has perl syntax and
should set values of certain Perl variables. The current configuration
-can be dumped with the __\--dump-config__ switch. Some configuration
+can be dumped with the **--dump-config** switch. Some configuration
variables can be overridden by environment variables (see below) or by
command line switches.
- $default\_target
Default target (see below) to use when no target is explicitly
- specified on command line with the __\--target__ option.
+ specified on command line with the **--target** option.
- %targets
- Hash of shortcuts to be used with the __\--target__ option. If the hash
+ Hash of shortcuts to be used with the **--target** option. If the hash
contains, for instance, the following pair of values
'mybox' => '--server=boot:/tftproot --serial=/dev/ttyUSB0 --grub',
- NOVABOOT\_BENDER
- Defining this variable has the same meaning as __\--bender__ option.
+ Defining this variable has the same meaning as **--bender** option.
# AUTHORS