Upgrading without 2 reboots

This is what I commonly do to upgrade a mikrotik:

/system package update check-for-updates
/system package update download
:execute “/system reboot”
:execute “/system routerboard upgrade”
:execute “/system reboot”

Unfortunately it requires 2 reboots, is there a way to achieve the same with only one reboot? Thanks for looking!

as per MT, flat out that’s not possible

Yup, two reboots.

You can set auto-update on RouterBOOT/firmware. That save one step at least, but still two reboots.

I’m not sure the firmware actually changes per release (beyond version#), I’d rather it only update if there an actually change…

I don’t do the 2nd reboot but I do set Auto Update for firmware.

  • either a power loss/recovery will take care of reboot at which point firmware will be in line with ROS. Doesn’t happen that often around here.
  • either a next install will take care of reboot (and then device will remain 1 version behind since a new one will be ready then but it is no biggy at all for 99% of releases). Happens more frequently then previous case.

What is possible to do to avoid double reboots, but requires quite some manual work:

  1. download main package of new ROS version for correct device platform
  2. open it using 7zip and extract correct routerboot firmware file. It’s inside etc/ folder, but most platform packages contain multiple firmware files. The correct one has name -.fwf, where
  • is exact string, returned by /system/routerboard/print in firmware-type field
    E.g. there are “ipq4000” and “ipq4000L” … and that ultimate “L” matters … a lot
    • is same as in npk name, e.g. “7.13beta1”
      So example firmware file name for hAP ac2 would be: ipq4000L-7.13beta1.fwf.
      I just tried: one can copy all the FWF files to device and routerboot updater will select the right one (and ignore the rest).
  1. push the file to device (e.g. using winbox or scp) to root of user-accessible storage (e.g. on hAP ac2 that means default RAM disk, not flash/ directory)
  2. on device go into /system/routerboard/ … it’ll show available “upgrade-firmware” … you should be able to execute upgrade

Then you proceed with ROS upgrade any way you’re used to (either by executing /system/packages/upgrade/install or by uploading npk files to device or any other way). When ROS upgrade procedure reboots the device to load new ROS, also new (already flashed) routerboot will load.

The routerboot upgrader, executed in bullet #4 above, will delete FWF file it used in the process. After that one can manually remove any FWF files, which were left behind in file storage (and this step is not necessary if root of file storage is RAM disk, which gets purged on reboot anyway).

And since this whole ordeal is possible to execute manually, I’m 100% sure it would be possible to do automatically. The only tricky part is to make the new fwf file available to routerboot installer prior to installing whole new version of ROS (which copies all the fwf files to flash anyway), but that shouldn’t be too hard either.

if the user can put all the fwf on another device, for example by ftp:
/tool fetch mode=ftp ascii=no upload=no address=ex.am.pl.e port=21 user=“uxer” password=“pazzword” keep-result=yes
src-path=“/disk1/firmware/[/system routerboard get firmware-type]-7.12.fwf”
dst-path=“$[/system routerboard get firmware-type]-7.12.fwf”
:delay 10s
/sys routerboard upgrade
/sys pack up check
/sys pack up in
But only do that afte some month the firmware is out and no tremendous bug are found…

I guess I never thought about just copying the “.fwf” file. That’s cleaver.

I take @holvoetn auto-update approach myself for firmware and in our defconf since it will update, at some point. Now RouterOS packages… that where auto-update is NOT best plan IMO & “waiting period” is generally good after a new RouterOS release.

But I’ve never seen an issue with keeping the firmware match if you update RouterOS…while I have seen the reverse: mismatched firmware has caused trouble for stuff like LTE modems in past…