WHM Migration
Last updated
The WHM ingest path. Status: production-supported; effectively a batch of cPanel restores.
Source archive
A WHM-level dump produced by:
/scripts/pkgacct <user>
# or whole-server (one cpmove per account):
/scripts/cpbackup
The output is one or more cpmove-<user>.tar.gz files plus a WHM manifest that maps accounts to packages and resellers.
How the pipeline runs
The WHM ingest:
- Reads the manifest.
- Maps each WHM “package” to the closest existing Hosting Package (matching by disk quota and bandwidth quota). Operator confirms or overrides the mapping.
- For each user, runs the cPanel pipeline with the chosen target package.
- Reports per-user success / failure plus a server-wide summary.
Resellers are flattened: each reseller-owned account becomes a panel user with no parent-child relationship (the panel has no reseller construct).
Operator workflow
- Generate the WHM dump on the source server.
- Upload to the destination, large dumps go via SCP into
/var/lib/jabali/migrations/incoming/. - Analyze the dump. Review the package mapping; create new panel packages if the suggested mapping is wrong.
- Restore. The pipeline iterates per-account, sequential by default. Pass
--parallel Nto run N accounts at a time on a beefy destination host. - After completion, review the per-account failures (if any) and re-run individual cPanel pipelines for them.
Bandwidth-staging notes
- Producing a multi-GiB WHM dump and shipping it over a slow link is the slowest part of the migration. Stage the dump on a local NVMe disk first; transfer with
rsync --partial --progressfor resumability. - For very large estates (dozens of GiB), consider migrating in waves: produce + transfer + restore one batch of accounts, repeat. Avoids holding the source under cutover load for hours.
Limitations
Inherits all cPanel pipeline limitations, plus:
- Reseller branding (white-label themes, custom logos) does not carry over.
- WHM-level cron jobs (
/etc/cron.d/*outside per-user crontabs) are not migrated. - WHM “Tweak Settings” do not map to panel server settings; review and re-apply manually under Server Settings.
Audit
One per-user restore audit row plus per-phase rows per user.