Distro upgrade strategies
I'm struggling conceptually with a recommended upgrade strategy for our distribution (i.e. the resultant distribution on an ARM-based embedded device, not the development SDK itself). I had initially assumed that a package manager (we're using DNF) could be used to upgrade a distribution from one version to the next, but every time I've used it to try to deploy a large upgrade (e.g., Zeus->Dunfell) I've run into problems. Currently, if I try to use DNF to upgrade from a Zeus-based distribution my DNF installation breaks ("ModuleNotFoundError: No module named 'dnf'") and I can't even shut the device down ("/run/initctl: No such file or directory"). However, if I install the Dunfell-based distribution from a raw image (without upgrading through Zeus) then everything works fine. I'm not getting an errors in my build or indication that something went wrong, but obviously something is amiss.
1) Am I missing something? Is it reasonable to expect that I can upgrade the whole distro using DNF? I've read the wiki page about System Updates (https://wiki.yoctoproject.org/wiki/System_Update) and DNF (or any other package manager) is not listed - does that imply it's not up to the job?
2) If I do continue using DNF, how do I troubleshoot the above issues? I don't mean specifically those issues, but I want to learn to fish. Some packages got broken. Was it caused by the distro I'm upgrading from? To? What's the best way of tracing it back? I tried looking through the various commits but obviously there were a lot of changes made from one distro to another. The above scenario seems also to be a perfect storm because now that DNF is broken I don't have a mechanism to downgrade anything.
I can't help but think that I'm swimming against the current here, or that I've done something fundamentally wrong - I'd appreciate any insight or advice. Thank you!