Post

Unattended Updates

Picture forty switches spread over a dozen substations. A new release has just come out, and somebody has to log in to every one of them, run upgrade, and reboot in a service window. Most of the time that somebody would rather let the switches do it themselves.

Infix v26.09 introduces support for unattended updates. A unit follows a release feed on a schedule you set, and when a newer release shows up it installs it and either reboots or waits for you. You don’t need a script on the outside or a management agent to keep alive.

Figure 1: The A/B layout from Immutable by Design. An upgrade writes the slot you are not running from and only then flips the boot order.

What makes this possible is the layout in Figure 1. An upgrade, manual or not, goes to the inactive slot, so the release you are running stays untouched in the other one. If the new release does not work out, set boot-order takes you back to it with a reboot. Automatic fallback, where the bootloader notices a failed boot and switches back on its own, is in the works.

Getting Started

The factory configuration already follows the Infix releases on GitHub and comes with two schedules, nightly and weekly, both at 03:00. So all it takes is pointing the feature at one of them:

1
2
3
admin@example:/> configure system
admin@example:/config/system/> set software unattended-update schedule weekly
admin@example:/config/system/> leave

By default the unit installs the new release and then waits for you to reboot it. To have it reboot right away instead, so the whole update happens inside the window:

1
admin@example:/config/system/> set software unattended-update reboot immediate

Until automatic fallback is in place, save that for units you can easily reach if a release does not boot.

If you would rather only hear about new releases, point check-update at a schedule instead. It reads the same feed and leaves a notice at the next login and on the WebUI dashboard, but installs nothing.

Your Own Feed

The update source is a plain RSS or Atom feed, so following a fork, a staging channel, or a feed of your own is a matter of changing update-url. Any static web server will do, with the feed and the .pkg files laid out the same way GitHub does it. The documentation has an example feed.

That also gives you staged rollouts for free. Put a few canary units on a feed that gets the release first, and move the rest over a week later.

Checking the Status

show software tells you which schedule drives what, and how the last check and install went:

1
2
3
4
5
6
7
8
admin@example:/> show software
...
Software updates
  Source       : https://github.com/kernelkit/infix/releases.atom
  Check        : nightly (daily at 03:00)
  Unattended   : weekly (sunday at 03:00), reboot manual
  Last check   : 2026-09-30T03:00:12Z, latest v26.08.1, up to date
  Last install : 2026-09-28T03:02:41Z, installed v26.08.1, reboot pending

The details end up in /var/log/messages, and the same status is in the operational datastore for anything that polls over NETCONF or RESTCONF. NETCONF and RESTCONF notifications for update events are coming soon, so a management system will not have to poll at all.

Staying Current

Configure it once, and every unit keeps itself on the latest release, on your schedule and through your feed if you want one. The substations stay current, and the service window is somebody’s quiet Sunday night instead of a road trip. Try it on a unit or two, then let the rest follow.

This post is licensed under CC BY 4.0 by the author.