]> git.ozlabs.org Git - petitboot/log
petitboot
7 years agopo: Update translations petitboot-1.4.x v1.4.4
Samuel Mendoza-Jonas [Fri, 30 Jun 2017 01:51:45 +0000 (11:51 +1000)]
po: Update translations

Backport translations updates from master as of af51ccb8 "Fixup some
missing gettext calls".

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agoui/ncurses: Display multibyte strings correctly in textscreens
Samuel Mendoza-Jonas [Tue, 10 Oct 2017 04:36:27 +0000 (15:36 +1100)]
ui/ncurses: Display multibyte strings correctly in textscreens

In nc-textscreen each line of text is capped at a certain length to
avoid running off the side of the viewable screen. However it appears
the ncurses function mvwaddnstr() counts by byte instead of actual
character, causing strings which contain multibyte characters to be cut
short.

To avoid this check the displayed length of each string against the
screen width, and if under instruct mvwaddnstr() to print the whole
string.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
(cherry picked from commit eac7fc04e7ce07f6b1a6a0d19af86ae7f74ebc5e)

7 years agoui/ncurses: Don't modify config when clearing IPMI override
Samuel Mendoza-Jonas [Thu, 24 Aug 2017 01:43:45 +0000 (11:43 +1000)]
ui/ncurses: Don't modify config when clearing IPMI override

When safe mode is active the config displayed in nc-config is only a
subset of the actual config since device init has not yet occurred.
However when the "clear override" checkbox is ticked and the config
saved, the form will set the config as it is displayed, resulting in
device-specific config (eg. boot order and network settings) being
cleared. If the user only ticked the "clear override" checkbox this most
likely isn't what they intended.

Instead change the checkbox to a button which when pressed clears the
override and exits safe mode if active, without modifying the rest of
the configuration.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
(cherry picked from commit c30d76aabf5f548556ea25b1fac5eb707a9f737a)

7 years agodiscover/device-handler: Disable safe mode warning on reinit
Samuel Mendoza-Jonas [Wed, 23 Aug 2017 01:05:58 +0000 (11:05 +1000)]
discover/device-handler: Disable safe mode warning on reinit

If a user pressed "Rescan Devices" in safe mode the reinit would
complete successfully, but the big warning that safe mode is active
would remain. On reinit clear the safe_mode flag properly.

This has no functional change aside from clearing the UI warning - the
IPMI override remains active until cleared or a successful boot occurs.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
(cherry picked from commit b9b5fa357e5921eb752e62f7146339007d9f767f)

7 years agoconfigure.ac: correct name of device-mapper-devel for RHEL v1.4.3
Daniel Black [Tue, 6 Jun 2017 00:20:50 +0000 (10:20 +1000)]
configure.ac: correct name of device-mapper-devel for RHEL

The RHEL and Fedora package name for development device mapper library is device-mapper-devel

Signed-off-by: Daniel Black <daniel.black@au.ibm.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/platform-powerpc: Handle optional Get Device ID section
Samuel Mendoza-Jonas [Wed, 14 Jun 2017 02:01:35 +0000 (12:01 +1000)]
discover/platform-powerpc: Handle optional Get Device ID section

The 'auxiliary' section of the 'Get Device ID' response is optional,
and some platforms exclude it from the response entirely. However
Petitboot only recognises the response as valid if it includes the full
16 bytes.
Update get_ipmi_bmc_versions() to also handle responses of only 12 bytes.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/platform-powerpc: Correct aux revision format
Samuel Mendoza-Jonas [Thu, 27 Apr 2017 06:33:32 +0000 (16:33 +1000)]
discover/platform-powerpc: Correct aux revision format

The Auxiliary Firmware Revision Information should be displayed as four
hexadecimal bytes if a manufacturer-specific format is not known. Update
the "Firmware version" format to reflect this.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/device-handler: Include makedev() from sysmacros.h
Samuel Mendoza-Jonas [Thu, 27 Apr 2017 05:35:45 +0000 (15:35 +1000)]
discover/device-handler: Include makedev() from sysmacros.h

Include sys/sysmacros.h explicitly in response to the following error
message:

../discover/device-handler.c:1001:13: warning: In the GNU C Library, "makedev" is defined
 by <sys/sysmacros.h>. For historical compatibility, it is
 currently defined by <sys/types.h> as well, but we plan to
 remove this soon. To use "makedev", include <sys/sysmacros.h>
 directly. If you did not intend to use a system-defined macro
 "makedev", you should undefine it after including <sys/types.h>.
  id = makedev(1, handler->n_ramdisks);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/platform-powerpc: Don't fail early if nvram fails
Samuel Mendoza-Jonas [Thu, 27 Apr 2017 05:28:49 +0000 (15:28 +1000)]
discover/platform-powerpc: Don't fail early if nvram fails

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agoutil/hooks: Don't update DT when ttyS* console active v1.4.2
Samuel Mendoza-Jonas [Fri, 10 Mar 2017 05:44:33 +0000 (16:44 +1100)]
util/hooks: Don't update DT when ttyS* console active

Update 30-dtb-updates to not accidentally treat ttyS* consoles as tty*
and update linux,stdout-path with the VGA console details.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agoutils/hooks: Don't fail early if fb0 missing
Samuel Mendoza-Jonas [Wed, 8 Mar 2017 23:59:15 +0000 (10:59 +1100)]
utils/hooks: Don't fail early if fb0 missing

30-dtb-updates would exit early if the 'fb0' file was missing, however
the set_stdout() step does not depend on this.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover: Track both configured and current autoboot settings
Samuel Mendoza-Jonas [Wed, 25 Jan 2017 03:45:37 +0000 (14:45 +1100)]
discover: Track both configured and current autoboot settings

If autoboot is enabled but later disabled or cancelled by, for example,
an IPMI override then the nc-config screen will set the autoboot widget
as disabled. If the user then makes and saves a change in nc-config,
autoboot will also be saved as disabled. This accidental change is
particularly awkward if the user is attempting to remove an IPMI
override.

Instead only ever change the autoboot setting if the user explicitly
changes it. Use a new helper function 'config_autoboot_active()' to
determine the current autoboot status where needed.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agoui/ncurses: Fix adding unnecessary leading slashes to paths
Samuel Mendoza-Jonas [Mon, 20 Feb 2017 05:24:47 +0000 (16:24 +1100)]
ui/ncurses: Fix adding unnecessary leading slashes to paths

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/sysinfo: Fix useless error message
Samuel Mendoza-Jonas [Mon, 16 Jan 2017 03:28:57 +0000 (14:28 +1100)]
discover/sysinfo: Fix useless error message

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agoprocess: Cancel all asynchronous jobs on reinit v1.4.1
Samuel Mendoza-Jonas [Mon, 23 Jan 2017 03:53:32 +0000 (14:53 +1100)]
process: Cancel all asynchronous jobs on reinit

If an asynchronous job is running over a reinit, the process can return
and run its callback function after the reinit. This becomes a problem
if the callback function accesses pointers that were only valid before
the reinit (eg. device structs).
If a reinit is requested explicitly stop all active asynchronous jobs
and clear their callback functions before the reinit.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/device-handler: Cancel pending boot on reinit
Samuel Mendoza-Jonas [Mon, 23 Jan 2017 03:53:08 +0000 (14:53 +1100)]
discover/device-handler: Cancel pending boot on reinit

When a reinit is requested device_handler_cancel_default() is
called, however as the name suggests this only cancels the boot task if
it is the result of a default boot option. We also want to cancel a boot
task if it was executed manually because it may have outstanding
asynchronous transfers running, so explicitly cancel it during reinit.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/device-handler: Process queue after device added
Samuel Mendoza-Jonas [Tue, 24 Jan 2017 03:52:20 +0000 (14:52 +1100)]
discover/device-handler: Process queue after device added

In device_handler_discover() we process the unresolved boot options
queue first. However the discover_device in question has not yet been
added to handler->devices so when a parser tries to search for a
matching device it will fail.
The discover_device will be added to the handler if it has not already
in device_handler_discover_context_commit() so move the call to
process_boot_option_queue() after it.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/network: Ignore interfaces with pre-existing MAC address
Samuel Mendoza-Jonas [Thu, 12 Jan 2017 00:12:42 +0000 (11:12 +1100)]
discover/network: Ignore interfaces with pre-existing MAC address

Petitboot uses the MAC address of network interfaces as a unique
identifier. This can cause a crash in pb-discover on a machine that has
multiple interfaces with the same MAC address.
While duplicate MAC addresses are rare and imply an issue with the
larger system configuration Petitboot should handle this gracefully, so
log a warning and ignore any interfaces other than the first to appear
that share a MAC address.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/network: Ensure interfaces have device before configuring
Samuel Mendoza-Jonas [Wed, 21 Dec 2016 04:46:09 +0000 (15:46 +1100)]
discover/network: Ensure interfaces have device before configuring

Reorganise network_handle_nlmsg() slightly to create interface->dev just
before calling configure_interface() rather than only for brand new
interfaces. This ensures existing interfaces which have had ->dev
removed but receive a new configure event do not access a NULL pointer
during the configuration process.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/network: Search by UUID only if available
Samuel Mendoza-Jonas [Fri, 23 Dec 2016 01:01:26 +0000 (12:01 +1100)]
discover/network: Search by UUID only if available

When registering a new discover device it is possible the device does
not have an associated UUID, for example when created via
device_handler_process_url(). Fall back to find_interface_by_name() in
this case.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agoui/ncurses: Display IP address in nc-sysinfo v1.4.0
Samuel Mendoza-Jonas [Mon, 19 Dec 2016 04:59:04 +0000 (15:59 +1100)]
ui/ncurses: Display IP address in nc-sysinfo

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover: Record IP address of network interfaces
Samuel Mendoza-Jonas [Mon, 19 Dec 2016 04:56:49 +0000 (15:56 +1100)]
discover: Record IP address of network interfaces

If an interface has a valid IP address (either via DHCP or static
config) store it in the interface_info struct so it can be referenced
later.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agoui/ncurses: Don't announce pb-discover connection
Samuel Mendoza-Jonas [Wed, 14 Dec 2016 03:52:11 +0000 (14:52 +1100)]
ui/ncurses: Don't announce pb-discover connection

The "Connected to pb-discover!" message is more useful for development
than actual use; for users the more important messages are related to
device and configuration parsing. Drop the message to slightly reduce
the level of noise on start up.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover: Maintain a backlog of status updates
Samuel Mendoza-Jonas [Wed, 14 Dec 2016 03:44:23 +0000 (14:44 +1100)]
discover: Maintain a backlog of status updates

Add status updates to a persistent list in the discover_server struct,
and send each client the backlog on connect. This avoids clients missing
useful messages from early init. Clients will only show this in the
backlog screen to avoid flooding the client's status line.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/paths: Announce download completion
Samuel Mendoza-Jonas [Tue, 13 Dec 2016 02:36:28 +0000 (13:36 +1100)]
discover/paths: Announce download completion

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/paths: Parse Busybox progress information
Samuel Mendoza-Jonas [Fri, 16 Dec 2016 05:04:46 +0000 (16:04 +1100)]
discover/paths: Parse Busybox progress information

Several busybox utilities (tftp and wget in particular) use a common
format for progress bar output. Add a stdout callback that recognises
this format and passes progress information to
device_handler_status_download().
If Petitboot has been explicitly built with busybox support set
busybox_progress_cb() as the default stdout callback for
load_url_async().

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/device-handler: Add aggregated download progress updates
Samuel Mendoza-Jonas [Fri, 16 Dec 2016 05:03:48 +0000 (16:03 +1100)]
discover/device-handler: Add aggregated download progress updates

Several processes run by Petitboot output progress information while
running. Add device_handler_status_download() which process callers can
call to register and update progress information (percentage and current
size).
A list of 'progress_info' structs holds this progress information, and
on each call to device_handler_status_download() the information is
combined and displayed as a single status update for readability.
On completion device_handler_status_download_remove() is called to
remove old progress information from the list.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/paths: Add stdout callback parameter for load_url_async()
Samuel Mendoza-Jonas [Mon, 19 Dec 2016 00:41:23 +0000 (11:41 +1100)]
discover/paths: Add stdout callback parameter for load_url_async()

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agolib/process: Allow process output to be retrieved on each event
Samuel Mendoza-Jonas [Fri, 21 Oct 2016 04:54:52 +0000 (15:54 +1100)]
lib/process: Allow process output to be retrieved on each event

Allow a custom callback function to be set when registering the IO
waiter for asynchronous processes.

To allow output from processes to be parsed as it is received, add
process_stdout_custom() which passes a new "line" parameter to
process_read_stdout_once() in order to consume output as it appears.

Users of a custom IO callback will only have access to the process_info
struct which is internal to lib/process; the function
procinfo_get_process() is added to allow these callers to access process
information.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/boot: Improve kexec error reporting
Samuel Mendoza-Jonas [Fri, 2 Dec 2016 04:18:36 +0000 (15:18 +1100)]
discover/boot: Improve kexec error reporting

Update kexec_load() to preserve output from the call to `kexec -l`. On
error retrieve the resulting error message and update the status line
with it to provide a more informative error message.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agoui/ncurses/text-screen: trim long lines
Jeremy Kerr [Wed, 14 Dec 2016 04:20:53 +0000 (12:20 +0800)]
ui/ncurses/text-screen: trim long lines

When a text_screen is given a long line, it'll wrap to the next,
overstepping the left margin.

We already have folded text for flowed text screens, so just trim long
lines at the correct column.

This exposes an off-by-one with the automatic wrapping in
text_screen_set_text(), where we may overrun the last char, so fix that
too.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/status: Add status messages for payload download results
Jeremy Kerr [Tue, 13 Dec 2016 04:00:08 +0000 (12:00 +0800)]
discover/status: Add status messages for payload download results

... using the URL which is now present in the load_result.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/status: Use full URL in parse status message
Jeremy Kerr [Tue, 13 Dec 2016 01:15:04 +0000 (09:15 +0800)]
discover/status: Use full URL in parse status message

->conf_url is the base address, we want the actual loaded URL.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/status: Add parse status for GRUB2, yaboot & kboot parsers
Jeremy Kerr [Mon, 12 Dec 2016 13:20:22 +0000 (21:20 +0800)]
discover/status: Add parse status for GRUB2, yaboot & kboot parsers

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/status: make boot status calls more consistent
Jeremy Kerr [Mon, 12 Dec 2016 13:07:10 +0000 (21:07 +0800)]
discover/status: make boot status calls more consistent

Capitals where suitable, remove underscore from kexec_load, use
translated strings for payload names.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/status: report on PXE download failures
Jeremy Kerr [Tue, 13 Dec 2016 02:13:24 +0000 (10:13 +0800)]
discover/status: report on PXE download failures

Add dev_err messages on both autoconfiguration and
specified-configuration download failures.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/status: report attempts at PXE configuration download
Jeremy Kerr [Mon, 12 Dec 2016 12:10:43 +0000 (20:10 +0800)]
discover/status: report attempts at PXE configuration download

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/status: Be more specific about DHCP event status message
Jeremy Kerr [Mon, 12 Dec 2016 10:16:33 +0000 (18:16 +0800)]
discover/status: Be more specific about DHCP event status message

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/status: report status on link configuration
Jeremy Kerr [Mon, 12 Dec 2016 09:58:17 +0000 (17:58 +0800)]
discover/status: report status on link configuration

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover/status: remove completion messages
Jeremy Kerr [Mon, 12 Dec 2016 09:34:42 +0000 (17:34 +0800)]
discover/status: remove completion messages

The completion messages are unconditional, so don't really indicate
anything. In fact, the dhcp completion status is misleading, as we may
still be processing the context through pxe callbacks.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover: Add reference to url in load_url_result
Jeremy Kerr [Tue, 13 Dec 2016 01:13:50 +0000 (09:13 +0800)]
discover: Add reference to url in load_url_result

We may want to access the loaded URL in a async handler.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover: add handler reference to struct discover_context
Jeremy Kerr [Mon, 12 Dec 2016 11:58:32 +0000 (19:58 +0800)]
discover: add handler reference to struct discover_context

Since the device handler provides the status message functions, we need
a pointer to it for device discovery (which we use a struct
discover_context for).

This change adds a 'handler' member to struct discover_context, to allow
status reporting. Since we now have a handler, there's no need for the
network pointer, so provide an accessor function instead.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover: Use device_handler_status_dev_* for device-specific status
Jeremy Kerr [Mon, 12 Dec 2016 07:58:57 +0000 (15:58 +0800)]
discover: Use device_handler_status_dev_* for device-specific status

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover: Add device-specific status reporting functions
Jeremy Kerr [Mon, 12 Dec 2016 07:43:21 +0000 (15:43 +0800)]
discover: Add device-specific status reporting functions

Most of our status reporting is against a specific device, so add
status reporting functions that take a struct discover_device and use a
stnadard prefix.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover: use helpers for status reporting
Jeremy Kerr [Mon, 12 Dec 2016 07:26:32 +0000 (15:26 +0800)]
discover: use helpers for status reporting

Now that we have helpers for simpler status reporting, use those instead
of constructing a struct status everywhere.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover: Add helpers for status reporting
Jeremy Kerr [Thu, 8 Dec 2016 02:08:15 +0000 (13:08 +1100)]
discover: Add helpers for status reporting

This change adds a couple of helpers for the status reporting API,
allowing callers to provide just a set of printf-style arguments, rather
than having to build up a struct status.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agodiscover: separate status-reporting function from boot() callback
Jeremy Kerr [Wed, 7 Dec 2016 00:43:08 +0000 (11:43 +1100)]
discover: separate status-reporting function from boot() callback

Currently, the device_discover_boot_status function is both used for
internal status updates, as well as the callback passed to boot().

This change splits this into two functions; one for the latter and one
for the former. The latter just has a void * for its first argument, to
match the boot_status_fn type.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agoui/ncurses: remove "Info:" / "Error:" prefix from status area
Jeremy Kerr [Tue, 13 Dec 2016 02:00:22 +0000 (10:00 +0800)]
ui/ncurses: remove "Info:" / "Error:" prefix from status area

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agoui/ncurses: Add status log UI
Jeremy Kerr [Tue, 6 Dec 2016 06:23:28 +0000 (17:23 +1100)]
ui/ncurses: Add status log UI

Currently, status messages from the server are displayed in a single
line at the bottom of the main menu UI, and are lost once a new status
is reported.

This change adds a facility for the UI to collect and display the status
messages from the server, in a dedicated UI screen. This allows a user
to look back through the discovery & boot process.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agotypes: Remove detail and progress from struct status
Jeremy Kerr [Wed, 7 Dec 2016 00:30:27 +0000 (11:30 +1100)]
types: Remove detail and progress from struct status

Nothing used these, and the serialisation was buggy anyway.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
7 years agotypes: shorten boot_status definitions
Jeremy Kerr [Wed, 7 Dec 2016 00:13:36 +0000 (11:13 +1100)]
types: shorten boot_status definitions

struct boot_status is a bit misnamed; we report status on things that
aren't just the boot status (eg, discovery).

This change refactors struct boot_status into just struct status. We
give the type enum a name, and shorten the enum values to suit.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/ncurses: Make server connect message more clear v1.3.2
Samuel Mendoza-Jonas [Thu, 3 Nov 2016 05:46:20 +0000 (16:46 +1100)]
ui/ncurses: Make server connect message more clear

The current message mentions a "server" which can give the misleading
impression that the UI is waiting for a remote network server. The delay
is actually in waiting for the pb-discover process to be ready, so
update the message to reflect that.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/platform-powerpc: Reject bootdevs with empty UUIDs
Samuel Mendoza-Jonas [Tue, 22 Nov 2016 00:00:42 +0000 (11:00 +1100)]
discover/platform-powerpc: Reject bootdevs with empty UUIDs

If a "uuid:" label is set in the petitboot,bootdevs parameter without a
matching UUID, the UUID is unintentionally accepted and set to NULL.
This can cause a segfault in nc-config when device UUIDs are compared
against the autoboot option. Instead treat options like this as
malformed.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/platform-powerpc: Deprecate petitboot,bootdev parameter
Samuel Mendoza-Jonas [Tue, 22 Nov 2016 00:00:01 +0000 (11:00 +1100)]
discover/platform-powerpc: Deprecate petitboot,bootdev parameter

The "petitboot,bootdevs" parameter has been around long enough now that
there shouldn't be anyone still transitioning over from the old
"petitboot,bootdev" parameter. Drop this parameter to simplify the
populate_bootdev_config() logic.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/platform-powerpc: Remove unused max_partition_size
Samuel Mendoza-Jonas [Thu, 27 Oct 2016 05:24:56 +0000 (16:24 +1100)]
discover/platform-powerpc: Remove unused max_partition_size

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoSupport HTTP(S) proxies when downloading resources
Samuel Mendoza-Jonas [Thu, 27 Oct 2016 03:56:05 +0000 (14:56 +1100)]
Support HTTP(S) proxies when downloading resources

Allow the user to specify a HTTP and HTTPS proxy server. The discover
server will set the http_proxy and https_proxy environment variables,
enabling the proxy servers for any further HTTP(S) requests.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/ncurses: Spin child to ensure autoboot cancelled on exit
Samuel Mendoza-Jonas [Wed, 23 Nov 2016 00:48:07 +0000 (11:48 +1100)]
ui/ncurses: Spin child to ensure autoboot cancelled on exit

If the client is not connected to the server instance when exiting, fork
and have the child process spin until the server is available and can be
told to cancel autoboot. This prevents the scenario of a user exiting
the UI and having the server continue to autoboot while they are using
the command line.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoutils: Rename 30-dtb_updates to 30-dtb-updates
Arthur Heymans [Tue, 18 Oct 2016 11:21:06 +0000 (13:21 +0200)]
utils: Rename 30-dtb_updates to 30-dtb-updates

This is more consistent with other files in utils/hooks.

Signed-off-by: Arthur Heymans <arthur@aheymans.xyz>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/pxe-parser: Parse only the first config v1.3.1
Samuel Mendoza-Jonas [Fri, 23 Sep 2016 03:06:48 +0000 (13:06 +1000)]
discover/pxe-parser: Parse only the first config

Commit 2163af5 "discover/pxe-parser: Retrieve configs asynchronously"
added asynchronous loading of remote pxe filenames, but made an
unintended change in behaviour to the PXE parser. Previously the parser
would try a list of possible filenames, and parse the first one it
found. However the above commit spawns an asynchronous job for every
filename, and parses any that can be retrieved. It is a common
configuration to have a machine-specific config and a 'fallback' default
config, and the change means we could erroneously retrieve and parse
both configs.

Update the PXE parser so that asynchronous jobs are spawned
sequentially. That is, spawn a job for the first filename and if not
successful spawn another job for the next filename, and so on. Once a
remote config is successfully retrieved, parse it and stop.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agolib/file: Fix errors found by Coverity scan
Samuel Mendoza-Jonas [Wed, 7 Sep 2016 05:36:40 +0000 (15:36 +1000)]
lib/file: Fix errors found by Coverity scan

Fix several errors in copy_file_secure_dest() found by Coverity and some
minor formatting issues:

143603: Correctly handle mkstemp() return value
143605: Avoid accessing dest_filename[-1] on readlink() error
143606, 143610: Avoid accessing dest_filename[sizeof(dest_filename)]
143607: Fix incorrectly passing sizeof(pointer) to fread()
143608, 143611: Cleanup resources on early exit
143609: Explicitly set umask before calling mkstemp()

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoutils/hooks: Rename 30-add-offb to 30-dtb-updates v1.3.0
Samuel Mendoza-Jonas [Thu, 8 Sep 2016 01:45:21 +0000 (11:45 +1000)]
utils/hooks: Rename 30-add-offb to 30-dtb-updates

30-add-offb now performs functions other than just setting offb
information, so rename it to a more accurate '30-dtb-updates'.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoConsolidate petitboot,tty and petitboot,console
Samuel Mendoza-Jonas [Tue, 9 Aug 2016 06:16:48 +0000 (16:16 +1000)]
Consolidate petitboot,tty and petitboot,console

Commit ce54f86 "Add petitboot,tty and track available consoles" added
the petitboot,tty parameter, but the petitboot,console parameter is also
recognised by Petitboot. These are ultimately handled by the 30-add-offb
and 80-set-stdout hooks respectively, but exist for mostly the same
purpose.

We consolidate these down to just the original petitboot,console
parameter. If the contents of petitboot,console have been configured by
Petitboot (ie. it is of the form /dev/dev# [ Description ]) we behave as
normal, otherwise we assume that petitboot,console contains a full
OF path to the intended console device and do not allow it to be
modified. This follows petitboot,console's original intent to be a debug
aid, and takes precedence over any other use.
The 80-set-stdout hook is removed as 30-add-offb now accounts for both
use cases.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoUse 'consoles' instead of 'tty' to refer to interfaces
Samuel Mendoza-Jonas [Tue, 9 Aug 2016 06:01:49 +0000 (16:01 +1000)]
Use 'consoles' instead of 'tty' to refer to interfaces

'Console' is more readily understandable and technically more correct
than 'tty' for referring to the interfaces that Petitboot starts a UI on.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/ncurses: Display warning when net override active
Samuel Mendoza-Jonas [Tue, 6 Sep 2016 03:30:39 +0000 (13:30 +1000)]
ui/ncurses: Display warning when net override active

If the current interface config has been set by an IPMI network
override, display a warning in nc-config that saving the current config
will overwrite any saved interface config.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover: Avoid writing network overrides to NVRAM
Samuel Mendoza-Jonas [Tue, 6 Sep 2016 03:30:30 +0000 (13:30 +1000)]
discover: Avoid writing network overrides to NVRAM

Explicitly keep track of whether the current interface config was set by
an IPMI network override, and avoid overwriting any saved config unless
the override was marked persistent.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/network: Add find_interface_by_uuid
Samuel Mendoza-Jonas [Mon, 5 Sep 2016 04:22:07 +0000 (14:22 +1000)]
discover/network: Add find_interface_by_uuid

Currently in network_register_device() and network_unregister_device()
the appropriate interface is searched for by name. However it is
possible in some scenarios for multiple interfaces to have the same
name, so instead search by UUID to be sure that the correct interface is
being selected.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover: Pass UUID to discover_device_create()
Samuel Mendoza-Jonas [Mon, 5 Sep 2016 04:21:23 +0000 (14:21 +1000)]
discover: Pass UUID to discover_device_create()

Currently discover_device_create() will search for existing discover
devices by id to determine if a new device is required. However it is
possible under some circumstances for distinct devices to have the same
name. This is especially troublesome if the following network events are
seen in network_handle_nlmsg():

- New interface, 'foo' with uuid x:x:x:x:x:x
-> new discover device created with
dev->device->id = 'foo'
dev->uuid = x:x:x:x:x:x
- New interface, 'foo' with uuid y:y:y:y:y:y
-> existing device 'foo' found
dev->uuid = y:y:y:y:y:y

This can occur if an interface rename event arrives *after* an old name
is reused, where temporarily Petitboot will see two distinct network
interfaces with the same name. Now the two interfaces point to the same
discover device, which can quickly result in a segfault if a 'remove'
event occurs for one of the interfaces and the discover device is freed.

To generally avoid this a 'uuid' parameter is added to
discover_device_create(), which if present allows existing devices to be
looked up by UUID rather than just their name.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoutils: Always pass MAC address in pb-udhcpc
Samuel Mendoza-Jonas [Mon, 5 Sep 2016 04:21:44 +0000 (14:21 +1000)]
utils: Always pass MAC address in pb-udhcpc

pb-udhcpc currently only passes the interface's MAC address for an 'add'
event, however it is useful to know it for any user event concerning a
network interface. Pass it to pb-event in all cases.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover: Deprecate 'conf' user event
Samuel Mendoza-Jonas [Mon, 5 Sep 2016 04:18:18 +0000 (14:18 +1000)]
discover: Deprecate 'conf' user event

The 'conf' user event is functionally very similar to the 'url' event,
in that both events result in downloading a specified configuration file
and passing it to iterate_parsers().
The 'url' event additionally allows downloading files from a directory
path and is also accessed by the UI via pb-protocol, so remove the
'conf' event and associated functions in favour of 'url' and
device_handler_process_url().

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/event: Ensure event struct exists for async callers
Samuel Mendoza-Jonas [Thu, 1 Sep 2016 04:32:03 +0000 (14:32 +1000)]
discover/event: Ensure event struct exists for async callers

When handling an event, user_event_handle_message() creates an event
struct with relevant parameters. Once user_event_handle_message() is
finished it frees the struct.
However in the case of a dhcp or add_url event, asynchronous jobs may be
spawned that will later reference the event struct. In particular this
becomes a problem when pxe_process_pair() handles an IPAPPEND name/value
pair and tries to access event->device.

In the case of dhcp and add_url events, we avoid this by changing the
event struct's talloc parent to the discover_context struct which
persists until all async pxe jobs have completed.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoAdd encrypted file support
tpearson@raptorengineering.com [Thu, 18 Aug 2016 09:46:47 +0000 (04:46 -0500)]
Add encrypted file support

In certain cases, such as network booting over an untrusted connection,
it may be useful to fully encrypt and sign the kernel files.

Enable fully encrypted boot using builtin keyring via the addition of
the string "ENCRYPTED" to the first line of the /etc/pb-lockdown file.
This disables detached (plaintext) signature verification.

Signed-off-by: Timothy Pearson <tpearson@raptorengineering.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoDisable shell access when lockdown is active
tpearson@raptorengineering.com [Thu, 18 Aug 2016 09:46:14 +0000 (04:46 -0500)]
Disable shell access when lockdown is active

This patch disables direct command line access when the /etc/pb-lockdown
file is present.

Signed-off-by: Timothy Pearson <tpearson@raptorengineering.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoAdd support for GPG signature enforcement on booted
tpearson@raptorengineering.com [Thu, 18 Aug 2016 09:45:47 +0000 (04:45 -0500)]
Add support for GPG signature enforcement on booted

kernels and related blobs

This can be used to implement a form of organization-controlled secure boot,
whereby kernels may be loaded from a variety of sources but they will only
boot if a valid signature file is found for each component, and only if the
signature is listed in the /etc/pb-lockdown file.

Signed-off-by: Timothy Pearson <tpearson@raptorengineering.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
(Minor build fixes and gpgme.m4, comment on secure boot in gpg.c)

8 years agodiscover/network: Ignore tun devices v1.2.3
Samuel Mendoza-Jonas [Thu, 30 Jun 2016 06:13:58 +0000 (16:13 +1000)]
discover/network: Ignore tun devices

In some environments a default 'tun' device is created. Petitboot
doesn't use this and it clutters up the list of network devices, so
ignore it if it is encountered.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/ncurses: Treat left/right arrow keys properly
Samuel Mendoza-Jonas [Fri, 19 Aug 2016 01:55:57 +0000 (11:55 +1000)]
ui/ncurses: Treat left/right arrow keys properly

It turns out ncurses helpfully provides REQ_LEFT_FIELD and
REQ_RIGHT_FIELD to navigate between visually horizontal fields. Update
widgetset_process_key() to use these for KEY_LEFT and KEY_RIGHT
respectively.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/boot: Always pass --append to kexec
Samuel Mendoza-Jonas [Fri, 19 Aug 2016 04:39:28 +0000 (14:39 +1000)]
discover/boot: Always pass --append to kexec

If we don't specify command line arguments for the next kernel, kexec
will add the contents of /chosen/bootargs if present. This is unintended
and not obvious to the user, so explicitly add append="" to the kexec
arguments if we have none to add instead.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agohooks/set-stdout: move hook to after automatic stdout settings v1.2.2
Jeremy Kerr [Fri, 5 Aug 2016 07:05:12 +0000 (15:05 +0800)]
hooks/set-stdout: move hook to after automatic stdout settings

If a console is defined in NVRAM, we want it to take precedence over
anything that 30-add-offb calculates automatically. This change shifts
the 20-set-stdout script to later in the hook processing, so that it
will override any automatic settings.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agohooks/add-offb: Add leading slash to HVC node paths
Jeremy Kerr [Fri, 5 Aug 2016 07:05:11 +0000 (15:05 +0800)]
hooks/add-offb: Add leading slash to HVC node paths

We need an absolute path to the serial@N device. It looks like some
kernels aren't reading the current path correctly, leading to no console
output.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Acked-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoREADME.md: Add README file
Samuel Mendoza-Jonas [Fri, 20 May 2016 07:01:44 +0000 (17:01 +1000)]
README.md: Add README file

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover: Add 'sync' user event
Samuel Mendoza-Jonas [Tue, 26 Jul 2016 05:45:37 +0000 (15:45 +1000)]
discover: Add 'sync' user event

Add a user event named 'sync' that causes the discover server to merge
the devicemapper snapshots of mounted devices. This is particularly
useful as a debug aid (for example, when copying logs to a USB device),
as the server will otherwise only sync changes to mounted devices in
response to parser actions.

The command can be called as

pb-event sync@device

to sync a particular device, or as

pb-event sync@all

to sync all devices with snapshots.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/ncurses: Call widget process_key handlers first
Samuel Mendoza-Jonas [Thu, 21 Jul 2016 03:03:28 +0000 (13:03 +1000)]
ui/ncurses: Call widget process_key handlers first

Adding KEY_LEFT and KEY_RIGHT brought to light the problem that
widgetset_process_keys() may handle keystrokes that would have also been
handled by a widget's process_keys function. In particular the cursor
in a textbox widget could no longer be moved with the left/right keys.

This updates widgetset_process_keys() to call the focussed widget's
process_keys function before handling the key in any other way. All of
the widget process_keys functions correctly return false if the key is
not relevant to the widget except for textbox_process_key() which is
updated to ignore the main navigational keys.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/device-handler: Remove default option if device removed v1.2.1
Samuel Mendoza-Jonas [Wed, 29 Jun 2016 05:43:20 +0000 (15:43 +1000)]
discover/device-handler: Remove default option if device removed

If one of a device's boot options is the current default boot option,
make sure the default boot is cancelled before the device is removed.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/network: Mark interfaces configured once configured
Samuel Mendoza-Jonas [Thu, 16 Jun 2016 05:18:30 +0000 (15:18 +1000)]
discover/network: Mark interfaces configured once configured

In some cases additional netlink messages can be received for an
already-configured interface without any relevant changes. This can
result in multiple DHCP requests for the same interface.
Once an interface has been configured mark it as IFSTATE_CONFIGURED
to avoid configuring it again.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/platform-powerpc: Use IPMI on BMC-based machines only
Samuel Mendoza-Jonas [Wed, 13 Jul 2016 03:49:11 +0000 (13:49 +1000)]
discover/platform-powerpc: Use IPMI on BMC-based machines only

With a kernel that has IPMI support Petitboot will try to use direct
IPMI, however on FSP machines this is not fully functional. Use direct
IPMI only on BMC-based machines, and use sysparams otherwise.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/device-handler: Ignore options without kernel
Samuel Mendoza-Jonas [Wed, 6 Jul 2016 06:05:46 +0000 (16:05 +1000)]
discover/device-handler: Ignore options without kernel

All boot options must at least have a boot image; ignore any options
that do not before trying to resolve them.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/ncurses: Properly set focus when updating subset
Samuel Mendoza-Jonas [Wed, 13 Jul 2016 06:43:22 +0000 (16:43 +1000)]
ui/ncurses: Properly set focus when updating subset

When a subset widget is made empty focus is switched to the first
visible field. It should actually be set to the first visible and active
field, otherwise we can try to focus an un-selectable label.

While we're here, also properly set the visibility for the autoboot
enable/disable widget.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/ncurses: Update keybindings for subsets
Samuel Mendoza-Jonas [Tue, 12 Jul 2016 04:18:18 +0000 (14:18 +1000)]
ui/ncurses: Update keybindings for subsets

We now use KEY_LEFT and KEY_RIGHT for general navigation; update
subset_process_key() to use the following keybindings:

Reorder items up/down: Minus/Plus keys (-/+)
Delete item: Delete or Backspace

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/ncurses: define KEY_DC (delete key)
Samuel Mendoza-Jonas [Tue, 12 Jul 2016 06:24:20 +0000 (16:24 +1000)]
ui/ncurses: define KEY_DC (delete key)

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoutils/hooks: Set linux,stdout-path for primary console v1.2.0
Samuel Mendoza-Jonas [Tue, 7 Jun 2016 06:25:09 +0000 (16:25 +1000)]
utils/hooks: Set linux,stdout-path for primary console

If the boot_tty environment variable is set, determine which device path
to set in the linux,stdout-path property, which will instruct the next
kernel to use it as the primary console.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/ncurses: List available consoles in nc-config
Samuel Mendoza-Jonas [Wed, 8 Jun 2016 04:11:10 +0000 (14:11 +1000)]
ui/ncurses: List available consoles in nc-config

Include a list of available consoles as specified by the discover server
in nc-config from which the user can select a default. The selected
console specifies the which console to be set as the primary console
when a kernel is kexec'd.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/common: Set current console on boot command
Samuel Mendoza-Jonas [Wed, 8 Jun 2016 04:10:28 +0000 (14:10 +1000)]
ui/common: Set current console on boot command

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/boot: Set boot_tty variable before kexec
Samuel Mendoza-Jonas [Wed, 8 Jun 2016 03:51:37 +0000 (13:51 +1000)]
discover/boot: Set boot_tty variable before kexec

If boot_tty is set or a boot command is sent manually from a certain
console, set the boot_tty environment variable to be used by a boot hook
before kexec.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover: Add petitboot,tty and track available consoles
Samuel Mendoza-Jonas [Wed, 8 Jun 2016 03:51:28 +0000 (13:51 +1000)]
discover: Add petitboot,tty and track available consoles

Add the NVRAM parameter petitboot,tty which sets the default console to
use when booting a kernel.
In load_config() construct a list of available consoles depending on the
current platform. A future patch depending on firmware changes will
allow this list to be constructed dynamically.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agolib: Add support for tracking boot consoles
Samuel Mendoza-Jonas [Tue, 7 Jun 2016 06:23:52 +0000 (16:23 +1000)]
lib: Add support for tracking boot consoles

Add tty_list and boot_tty to the config struct to keep track of
available console interfaces and the default console to set as primary
respectively.
Also add a tty field to the boot_command struct so that the current
console can be sent to the discover server during a manual boot command.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/pxe-parser: Retrieve configs asynchronously
Samuel Mendoza-Jonas [Mon, 16 May 2016 06:06:30 +0000 (16:06 +1000)]
discover/pxe-parser: Retrieve configs asynchronously

Depending on the configuration of the DHCP server and the network, tftp
requests made by the pxe parser can timeout. The pxe parser makes these
requests synchronously so several timeouts can block the server
completely for several minutes, leaving the server unresponsive to UI
requests.

Rework the pxe parser such that it handles the result of each tftp
request in a callback, which can complete after iterate_parsers() has
returned. Each callback is allocated its own conf_context which takes a
talloc reference on the discover_context so that each callback can
commit new boot options after the initial iterate loop has completed.
This also means talloc_unlink must be used instead by the original
parent of the discover_context.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoUpdate tests to support changes to pxe_parser
Samuel Mendoza-Jonas [Mon, 23 May 2016 05:56:22 +0000 (15:56 +1000)]
Update tests to support changes to pxe_parser

Substitute load_url_async() when running tests to support direct
callers of load_url_async() who will expect to read a file in a
callback.
Stub out device_handler_discover_context_commit() since it will remove
discover_options from the given discover_context, but the tests will
check the discover_context to count boot_options.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/device-handler: Make boot_status() public
Samuel Mendoza-Jonas [Thu, 9 Jun 2016 01:47:20 +0000 (11:47 +1000)]
discover/device-handler: Make boot_status() public

Rename boot_status() to device_handler_boot_status() and make it
accessible by files that include device-handler.h. This enables the boot
status to be updated from additional callers, in particular within
parser functions.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agolib/pb-config: Properly initialise interface_config
Samuel Mendoza-Jonas [Mon, 27 Jun 2016 04:42:29 +0000 (14:42 +1000)]
lib/pb-config: Properly initialise interface_config

The addition of the "url" field is not reflected in
config_copy_interface() which leaves the pointer uninitialised, causing
a potential segfault later on.

Copy the field from the source config, and use talloc_zero() for the
interface_config struct to prevent this more generally.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agodiscover/platform-powerpc: Return bootdev error correctly v1.1.1
Samuel Mendoza-Jonas [Wed, 1 Jun 2016 06:39:18 +0000 (16:39 +1000)]
discover/platform-powerpc: Return bootdev error correctly

In one case get_ipmi_bootdev_ipmi() can return 0 on an error, which
leads to bootdev being treated as a valid bootdev despite being
uninitialised. If the planets line up correctly and bootdev is less than
or equal to IPMI_BOOTDEV_SETUP, Petitboot will incorrectly apply an IPMI
override.

Update the error return value in get_ipmi_bootdev_ipmi(), and properly
initialise bootdev.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
8 years agoui/ncurses: Remember to abort boot on server connect
Samuel Mendoza-Jonas [Thu, 26 May 2016 06:08:19 +0000 (16:08 +1000)]
ui/ncurses: Remember to abort boot on server connect

The UI can now come up before the server, but in order for a key press
to cancel autoboot a key has to be pressed once the server connects.
Instead remember to cancel autoboot if a key has been pressed at any
point.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>