External Media HowTo

Introduction

The use-case in this document covers how to set up the system to use configuration files from external media, e.g. USB or SD-card. It also details how to ensure the configuration is protected from any changes when the system is running, i.e. a read-only mode.

Directory Layout

In order to boot from an external media it needs to have to correct directory layout, otherwise the system will not be able to obtain the necessary files and will fail-over to a fallback.

The operating system assumes an external media device has the following file system layout:

/media/
|- config/
|  |- config0.cfg                            # Example name
|  |- startup-config.cfg   --> config0.cfg   # Symlink
|  `- startup-config.lnk                     # For fat based fs
|
`- certs/
   |- aacerts/
   |- cacerts/
   |- certs/
   |- crls/
   |- ocspcerts/
   |- ovpnkeys/
   `- private/

The startup-config.cfg file is a symbolic link to the currently active configuration file (or slot), here config0.cfg. On file systems like FAT, which do not support symbolic links, a Windows-style .lnk file is used instead. The file must be named startup-config.lnk and contain the name of the file it refers to, without any leading path component, in this example the text config0.cfg followed by an optional newline.

Populate Media

The media can be set up either offline, on a workstation using the above directory layout, or using the built-in media sync feature:

example:/#> media sync internal external
Copying files to external media ...

Now we can configure the boot config order to external, when we reboot we will read the configuration file from that media.

If the device is configured to boot using external media and an empty media is used, the media will be populated with factory default files at boot, provided the media is not set to be read-only, see more on that below.

Configuration

This section details how to set up the device to use configuration files from external media. Appropriate fallback methods are also discussed. All available boot configuration options can be found here:

Configure the systems media definitions

In order for the system to be able to recognize and use any external media device, they need to be defined using the media command. This command will allow the user to set up how a media device will be accessed on the device, and to what real physical device and/or partition on said device it will map to. By default two different media definitions exist:

  • internal: Special definition and representation of the built-in flash, this media definition cannot be changed or removed.

  • external: Base definition aimed to match the first partition located on any connected external physical media. If no partitions exist on the device this will also be a match in that case.

A more comprehensive example of how to make external media devices accessible on the system can be seen in the Access External Media Devices howto.

For additional information how to set up a media definition see the media command under the Boot Configuration Guide.

Set Up the Systems Configuration Order

The following commands define the order in which the system will attempt to obtain its startup configuration file.

example:/#> boot
example:/boot/#> config-order external:startup internal:startup

If an external media cannot be found the system will use the internal startup-config. Which can be useful to trigger a fail-over in case the external media is missing or damaged.

If the config-order setting only contains external and no media can be found, the system will trigger an alarm and start with the configured fallback:

example:/boot/#> config-fallback failsafe

The fail-safe option configured here starts the system with the safe-config configuration. Other fallback alternatives are: none which uses the no-config configuration, or reboot which causes the device to reboot until any of the media in config-order can be accessed.

Sync Configuration Files to Internal Media

The optional config-sync setting will when enabled automatically sync its configuration and certificates files to the systems built-in flash, represented by the internal media definition. The config-sync setting requires the user to provide the name of the external media to sync from. This action will then be performed during the initial part of the boot process.

This functionality allows for a configuration of the system where the external media would only need to be inserted once during the initial deployment. The easiest way to configure the system to act in this manner, can be achieved like this:

example:/boot/#> config-sync external
example:/boot/#> config-order internal:startup

Utilizing this setup would cause the system to copy any existing configuration from any inserted external media to the internal media, during the next reboot. It has also been configured with the config-order set to internal:startup. Therefore, the system will boot from the internal configuration, that now is the transferred configuration from the external media.

If the external media now is removed, the next time the system boots it will still boot according to the configuration defined by the config-order setting. Regardless if the config-sync flag is still set or not, this setting only cares about transferring the files, not how the system will actually boot.

Read-only Media

Set up any external media to be read only when booting:

example:/boot/#> media external
example:/boot/media-external/#> read-only
example:/boot/media-external/#> end
example:/boot/#>

Note: when a media has been configured read-only it must have the appropriate files present on the media, since no new information can be written to it when it has booted. This includes certificate files as well.

Customize Special Configuration Files

When defining the systems configuration order using the config-order command a media and a mode/file is always specified. The configuration files that are applied by the system in this case have a default that will be applied, unless the user override these. These are the names of the files mapped against the file/mode and the intended usage of their default files:

Mode/File Corresponding Config File Intended Usage
startup startup-config.cfg The normal startup configuration file of the system. This file is always updated anytime confiugration changes are saved normally on the device.
none no-config.cfg This configuration file is intended to be as the name indicates, as a no config. The default file will ensure that the system is started with ecentially no services enabled and all the ports of the device will be configured disabled. Hence, the device will only be accessible with a console connection.
safe safe-config.cfg This configuration file is intended to start the system in a safe state, where each port on the device will be individually separated from the rest. Each of these port interfaces will have DHCP enabled on them so that it is possible to assign them an IP address to make the device accessible. This so that the device should be recovrable since the user should be able to provide it with an accessible IP address.
net net-config.cfg This configuration file is applied on the system when it enters net boot mode. During the net boot process the device enters a special state where this configuration is applied in order to bring the system to a point where it is possible for it to obtain is startup configuration remotely. The default file will ensure that the device asks for a DHCP address on each port, independent of each other. Since it could be possible that the DHCP server is located on any of the ports, we need to send a discover on all of them.

In order to override these files it is possible to add a replacement manually in the intended configuration folder on the intended boot media. The folder structure was described earlier in this document. The replacement file simply needs to have the same name as the built-in default files described above. Anytime a replacement file is present on the selected configuration media, it will be used instead of the built-in default.

This could be especially useful for the net boot configuration file net-config.cfg, when the method of obtaining the configuration file needs to be more specific. Considering the default mentioned above, a DHCP discover will be sent on every port on the device. If you for instance want the initial discover to be sent on only a particular port, this could be achieved by adding an override version of the net-config.cfg under the configuration folder of the selected media.

Verify Setup

In order to see if the boot configuration looks like intended:

example:/boot/#> show
Bootstrap Configuration                                                       
Config-sync     : Disabled
Config-fallback : none

Config order                                                                  
#  MEDIA                      MODE                                            
1  internal                   startup


Certificate order                                                             
#  MEDIA                                                                      
1  internal


Media Configuration                                                           
#  NAME                       R/O  TIMEOUT  MATCH                             
1  internal                   No   -------  System Internal
2  external                   No   30       Partition number: 1

Net Configuration                                                             
Sync            : Disabled
Timeout         : 300
Mode            : dhcp
Client ID       :

Bootloader Configuration                                                      
Login Password  : Disabled

Rescue Mode
    Address     : None
    Netmask     : None
    Peer        : None
    Port        : -2