This PR adds DNF 4 and DNF 5 versionlock support to Package Updates, including listing, holding, unholding, and explicitly updating held packages.
DNF 4 requires the versionlock plugin to be installed, while DNF 5 supports versionlock natively.
Hold controls are shown only when the versionlock command is available.
It also previews DNF transactions before confirmation so users can see which packages will be installed or updated in the table, similar to APT.
- Add an APT-only “Held updates” view while keeping held packages excluded from normal and scheduled updates.
- Allow administrators to hold or unhold packages from package details.
- Allow explicitly selected held packages to be updated once, then restore all existing package holds.
- Preserve configured `aptitude` behavior for regular installs while using `apt-get` for the held-package override.
Fixes#2689
ⓘ Normalize APT install-result names like `libtinfo6:amd64` to `libtinfo6` so scheduled updates can correctly detect dependency-updated packages and avoid false failure reports.
https://github.com/virtualmin/virtualmin-gpl/issues/1247