Pre configuring sd cards before deployment

The ability to use the customised download option, which enables the install package to automatically add the device to the account and setup options such as wifi etc is great, but on a large scale can multiple sd cards be prepared for deployment in advance of installing the hardware?

For example, I would like to download the customised info-beamer OS, copy to micro sd cards, apply custom branding etc to the config folder and have these ready to be inserted into raspberry Pi’s on site.

Are there any potential issues with this approach?

The plan is then to visit sites with a supply of prepared sd cards and Pi’s.

No issues. That’s how it’s intended to work. You can copy the installation files to any number of SD cards in advance and use them in any Pi. The customized download option doesn’t add anything device specific.

Once an SD card is placed in a Pi and registered, swapping it to another Pi will require a new registration. So you cannot create “pre-registered SD cards” by inserting them in a single Pi and adding that to your account. Instead you would use the connect-key feature that allows a Pi to self-register.

A useful feature is also that if you swap such a card into a Pi that has already been registered, it will register itself and will be automatically assigned the same setup that the Pi previously had. This can be used to ship out replacement SD cards if needed: The person at the Pi can remove the old card, insert the new one and the device would self-register and start showing the previous content automatically.

Btw: although that’s not exposed in the customized download UI on https://info-beamer.com/download: You can also include branding and any other configuration file using the customize API call. Here’s an example of how that might look like when used within a browser environment to create a button that generates a custom download with branding and other configuration options included:

async download() { 
  let branding_jpg = (await Vue.http.get('/branding.jpg', {
    responseType: 'blob'
  })).bodyBlob
  let fd = new FormData()
  fd.append('channel', 'testing')
  fd.append('filename', 'install.zip')
  fd.append('connect', 'yes')
  fd.append('/config/audio', 'hdmi')
  fd.append('/config/branding.jpg', branding_jpg)
  fd.append('/config/p2p', '')
  fd.append('/config/prefer_wired', '')
  fd.append('/config/scaling_governor', 'performance')
  fd.append('/config/screen-settings.txt', [
    'hdmi_group=2\n',
    'hdmi_mode=82\n',
  ].join(''))
  fd.append('/config/userconfig.txt', [
    'hdmi_pixel_encoding=2\n',
  ].join(''))
  let custom = await Vue.http.post(API_BASE + 'os/customize', fd)
  window.location.href = custom.data.download_url
}
1 Like

Awesome :slight_smile:

As usual, you’ve thought of everything!