This PR fixes the Package Updates module reporting "no updates" when dnf check-update fails.
DNF prints its error to stderr and exits with status 1, but the module only read stdout, so a failed check looked like an empty list and was cached for hours. Users could go weeks or months without seeing that updates were blocked!
The module now checks the exit status. When a check fails, it keeps the last known list, shows the error on the module and refresh pages, and retries after 15 minutes instead of caching an empty result.
Scheduled checks email the failure instead of acting on the old list, and in new-only mode the failure is emailed once until a check succeeds again.
Fixes https://forum.virtualmin.com/t/no-warning-of-dnf-error-suppressing-update/138052