Fwiw, I was able to move & upgrade all the warden-based jails (including the jails installed on 9.* as part of plugin installs) to iocage running 11.2.
Before you do anything: snapshots - snapshots - snapshots (can't stress this enough)
First migrate warden to iocage, I used migrate_warden.py directly and adjusted some of the jail parameters manually via the gui (VNET, BPF, vnet0 interface & default route). Make sure the warden jail is down & autostart is flagged off.
Running iocage list
from command line should now show you the migrated jail with the original freebsd os version (my oldest were some 9.* plugins). It's a good time to check that everything is up and running again and the original mount points are migrated as well.
Now we want to go to the latest patch version before upgrading, this is done via iocage update <yourjail>
. After this we want to upgrade to 11.2, this is done via iocage upgrade <yourjail> --release 11.2-RELEASE
. Note: you manually have to merge some files. I had to merge the hosts file by hand, for the other files I was able to just hit 'y' and let the upgrade process merge them.
Now that we are on 11.2, some stuff can and will be broken. First, we fix pkg by editing /usr/local/etc/pkg/repos/FreeBSD.conf and change the url: line to url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest",
, then we bootstrap pkg again to make sure we end up with a healthy version: pkg bootstrap -f
and afterwards pkg update && pkg upgrade
This will bring the jail to the latest software version.
Now it's time to fix the applications if needed, if you are seeing strange lib/compat issues with the migrated 9.* jails my hint would be to pkg install compat9x-amd64
. This solved most of those issues for me.
Rollback: if you made a mistake in iocage and want to go back right after the migration you should be able tp roll back to the @WardenMigration_ snapshot. Complete rollback would be to destroy the iocage jail and restart the warden jail.
Cleanup: if everything is working and tested you can destroy the old jails dataset & remove the @WardenMigration_ named snapshots from the iocage datasets.