OPNsenseXLI · Upgrades and Plugin ManagementPre-upgrade validation
Pre-upgrade validation — the checklist before the reboot
What you'll learn
- Execute the pre-upgrade validation checklist in the right order
- Verify the backup is restorable before relying on it for rollback
- Confirm every installed plugin is compatible with the target release
- Validate the boot environment exists and the rollback path is intact
Prerequisites
Verified against OPNsense 25.x · FreeBSD 14.x · PF (FreeBSD packet filter) FreeBSD 14.x · Unbound 1.20+ · Kea DHCP OPNsense 25.x plugin · WireGuard in-kernel + OPNsense plugin · strongSwan (IPsec plugin) OPNsense 25.x plugin · OpenVPN 2.6.x · Suricata 7.x · 2026-08-14
The upgrade does not start when the GUI shows “Firmware update available”. The upgrade starts when the operator begins the validation. A skipped validation is the difference between a 30-minute maintenance window and a 4-hour incident.
This lesson covers the pre-upgrade validation checklist in execution order: the backup, the plugin compatibility review, the hardware headroom check, the dependency review, and the boot-environment confirmation. Every item has a pass/fail signal. The operator does not click “Upgrade” until every item passes.
The validation order
The checklist is ordered by what fails most often and what costs the most when it fails:
- Backup restorable. A backup file that cannot be restored is not a backup.
- Boot environment exists. The rollback path must be intact before the upgrade begins.
- Plugin compatibility. An incompatible plugin bricks the firewall after reboot.
- Hardware headroom. A disk that is 95% full cannot install the new firmware.
- Dependency review. API consumers, monitoring, and external automation that depend on the firewall must be ready.
- Change ticket open. The upgrade must be tracked.
The order matters: the operator validates the rollback path before validating anything else, because the rollback is the safety net. A failed validation at step 1 aborts the upgrade before any state is changed.
Step 1 — Backup restorable
A backup file exists on the firewall (/conf/backup/) and an off-host copy has been taken. The validation:
- The file is not zero bytes.
ls -l /conf/backup/config-*.xml | tail -1shows a non-trivial size. - The XML is well-formed.
xmllint /conf/backup/config-*.xmlparses without errors. - The version tag matches. The backup’s
<version>element matches the current running version. - The off-host copy is reachable.
ssh backup-host ls -l /backups/fw-name/shows the file. - The checksum matches.
sha256sumof the local and remote copies produces the same hash.
A backup that fails any of the five is not a valid rollback target. The operator fixes the backup procedure (or takes a fresh backup) before proceeding.
Step 2 — Boot environment exists
OPNsense uses ZFS boot environments for rollback. The validation:
beadm list
The output shows the current boot environment (default) and any previous boot environments (25.7.2_1, etc.). The validation:
- At least one boot environment exists. A new installation has only one. An upgraded installation has at least two.
- The current boot environment is marked “active now”. The active BE is the one the firewall booted from.
- The previous boot environment is mounted but not active. The previous BE is the rollback target.
If only one BE exists, the upgrade cannot rely on the BE rollback. The operator must take a manual snapshot (beadm create pre-upgrade) before proceeding.
$ beadm listBE Active Mount Space Created
default NR / 2.1G 2026-07-15 09:14
25.7.2_1 - - 1.8G 2026-07-01 14:22Illustrative output
Step 3 — Plugin compatibility
OPNsense plugins (os-*, intrusion-detection, etc.) are versioned against the firmware. A plugin that is not compatible with the target firmware will fail to load after the upgrade and may prevent the firewall from reaching a usable state.
The validation:
- List installed plugins.
configctl firmware list(or the GUI’s System → Firmware → Plugins page) shows every plugin with its version. - Compare to the target release’s plugin compatibility list. Each plugin’s page on opnsense.org lists the firmware versions it supports.
- Identify incompatible plugins. If a plugin does not list the target firmware as supported, the upgrade must either remove the plugin first or be postponed.
- Plan the plugin sequence. Some plugins must be removed before the upgrade and reinstalled after (e.g.
os-wireguardwas deprecated in favour of the built-in WireGuard in some versions).
A plugin that is installed but incompatible is a brick risk. The operator removes or postpones the upgrade.
Step 4 — Hardware headroom
The firmware upgrade downloads packages, expands them, and installs them into the new boot environment. A disk that is too full cannot complete the upgrade.
The validation:
| Resource | Command | Acceptable |
|---|---|---|
| Disk space on root | df -h / | At least 4 GB free |
| Memory | vmstat -s | head | At least 1 GB free (inactive + free) |
| CPU load | uptime | Load average below 1.0 (one-minute) |
| Swap usage | swapinfo | 0 or minimal |
A resource that fails the threshold is a stop signal. The operator cleans up (old boot environments, old log archives, large RRD databases) before proceeding.
Step 5 — Dependency review
The firewall is part of a system. The upgrade affects the system, not just the firewall.
The review checklist:
- API consumers. Every script, dashboard, or tool that calls the OPNsense API must be checked against the target release’s API changelog. A removed endpoint or a renamed parameter will break the consumer.
- Monitoring. The monitoring system (Zabbix, Prometheus, LibreNMS) polls the firewall. The polling must be paused or its thresholds adjusted for the upgrade window.
- RADIUS/TACACS. If the firewall uses centralised authentication, the authentication server must be reachable during the upgrade. The upgrade does not change authentication, but a misconfiguration during the post-upgrade verification could lock the operator out.
- VPN peers. IPsec and WireGuard peers must be notified of the window. A peer that is mid-tunnel during the reboot sees a brief drop. The notification avoids an investigation.
- Logging destinations. If logs are forwarded to a remote syslog server, the upgrade does not affect the forwarding. The validation confirms the destination is still reachable.
Step 6 — Change ticket open
The upgrade must be tracked. The change ticket records:
- The target version
- The window
- The operators
- The rollback plan (boot environment + backup file)
- The validation evidence
- The post-upgrade verification results
The ticket is opened before the upgrade, updated during, and closed after the post-upgrade verification. A upgrade without a ticket is an undocumented change. The operator who runs undocumented changes cannot reconstruct the timeline when the next incident happens.
Summary
- Validation runs before the upgrade, not during.
- The backup must be reachable, well-formed, and recently drill-tested.
- The boot environment is the rollback path. Confirm it exists before upgrading.
- Incompatible plugins are a brick risk. Validate before upgrading.
- Disk space and memory headroom must be confirmed.
- Dependencies (API consumers, monitoring, peers) must be coordinated.
- Every upgrade has a change ticket.
Knowledge check · 4 questions
Q1. You have completed steps 1-5 of the pre-upgrade validation. The backup file is valid and well-formed, the boot environment exists, the plugins are compatible, the hardware has headroom, and the dependencies are reviewed. The next action is:
Q2. A backup file on /conf/backup/ that has never been restored onto a test appliance is still a valid rollback target for an upgrade.
Q3. Which of the following are part of the pre-upgrade plugin compatibility validation? Select all that apply.
Q4. You are upgrading the firewall during a maintenance window. A peer IPsec tunnel terminates on this firewall. What is the appropriate pre-upgrade coordination step?
Passing score: 75%. Answers are checked in this browser.