Table of Contents

Easy Multi-version upgrade of opnSense

WARNING

When I tried to do an upgrade from 24.1 to 24.7, the tool attempted to download from the wrong URL (FreeBSD13: instead of FreeBSD14:) and bricked my router. I ended up reinstalling. However, that is the only time the tool has caused problems for me.

-

I ran into a problem where the master node my fairly complex opnSense High Availability router set up ended up with some problems after about 3 years of running. I had completely undersized the virtual installation (10G) and the log files had filled the disk, causing it to become very unstable.

Fortunately, since it was HA, I was able to fail over to the secondary and keep things going. However, the problem was exacerbated by the fact I had not updated the firmware in almost 3 years.

I assumed I would need to do a complete re-install, but I found the excellent set of scripts, opnsense-update (https://github.com/opnsense/update) containing just the tool I needed, opnsense-bootstrap. With this, I was able to do an upgrade from 22.1 to 24.1 in one step, and doing the equivalent of a clean install. The result exceeded expectations.

Upgrade to 22.1

Fortunately, with a lot of sweating, I upgraded the system from 21.7 to 22.1. This was required as opnsense-upgrade needed a newer Python version than was available on 21.7. I made a snapshot of the disk image, then did the upgrade to 22.1. At one point, I was forced to revert the snapshot as the system was too corrupted to work correctly, but I was able to finally do it.

Perform the upgrade

I had a router with a similar configuration running 23.7, so I decided to only use opnsense-bootstrap to go that far. This required the following commands from the command line.

fetch https://raw.githubusercontent.com/opnsense/update/master/src/bootstrap/opnsense-bootstrap.sh.in
sh ./opnsense-bootstrap.sh.in -r 23.7

Result

The script removed the existing installation, then downloaded and installed 23.7. It appears to me that this was the equivalent of doing a fresh install, then importing the configuration, the difference being: