PfSense double install for maintenance failback
The front door for my home network is a single pfSense firewall on a dedicated headless PC running with two load balanced WANs and one LAN. I built it with pfSense 2.1.4 on a 58G SSD. It's running just fine - but of course that's an elderly build and I really ought to be updating. On the other hand, it ain't broke so I'm very wary of "fixing" it.
I don't have spare hardware to swap in, or even to test with, so I'm having to be careful as domestic crisis point will occur within minutes of internet deprivation.
What I want is to set up two matching bootable copies of pfSense on the SSD, so that I can pick either one as the image to boot. Then I could upgrade one copy of pfSense and failback instantly if it all goes wrong.
My first question: "is this even possible?"
From memory and what have read recently, the pfSense installation process seems to be oriented around a clean build - so is this likely to override any partitioning and setup I do?
Assuming it's not completely hopeless, I'm trying to sort out the boot process - which ideally I'd like to be software-settable rather than having to attach a keyboard (especially as I'm having trouble with USB keyboards during the boot phase on this box … another story!)
So far I've attached and partitioned a USB HDD to use to emulate my target setup and to act as a temporary drive while the SSD is rebuilt. I set up MBR for the whole (465G) disk and two small BSDs within that, similar to the size I expect to get for each on the SSD. As far as I can see, MBR seems to be what pfSense prefers.
[pfSense]: ~ # gpart show
=> 63 123091857 ad4 MBR (58G)
63 123091857 1 freebsd (58G)
=> 0 123091857 ad4s1 BSD (58G)
0 16 - free - (8.0k)
16 114703233 1 freebsd-ufs (54G)
114703249 8388608 2 freebsd-swap (4.0G)
=> 63 976773105 da0 MBR (465G)
63 60817365 1 freebsd (29G)
60817428 60817365 2 freebsd (29G)
121634793 855138375 - free - (407G)
=> 0 60817365 da0s1 BSD (29G)
0 1985 - free - (992k)
1985 50331648 1 freebsd-ufs (24G)
50333633 8388608 2 freebsd-swap (4.0G)
58722241 2095124 - free - (1G)
=> 0 60817365 da0s2 BSD (29G)
0 2028 - free - (1M)
2028 50331648 1 freebsd-ufs (24G)
50333676 8388608 2 freebsd-swap (4.0G)
58722284 2095081 - free - (1G)
I've a feeling I've got the partition boundaries a bit wrong - but at least I can:
mount /dev/da0s1a /mnt
(or da0s2a) and rsync files to it - which would work fine for my process. I could mount the failover image onto the live one and rsync before starting an upgrade, and if there's a problem I just reboot and flip to the other image.
Can't figure out quite how to make these images bootable - I've done
gpart bootcode -b /boot/boot0 da0
gpart bootcode -b /boot/boot da0s1
gpart bootcode -b /boot/boot da0s2
which I thought was enough - it might even be correct: my keyboard issue means I can see the boot0 prompt to press F5 to boot from my other disk but can't select it. I'd like to be able to script the default boot device anyway.
TL/DR: Two main questions (for now…)
1. Is it possible to set up two copies of pfSense on two disk partitions and pick which one I want to boot?
2. Can I set the boot drive and partition from a command (or config file) before I reboot?