How-to: cPanel to DA migration

Hi
Check that you have increased your username limit at DA_URL:2222/admin/settings/server at the bottom
then delete the /home/admin/admin_backups/user.gdresell.ilmxjit57bta.tar.zst file and again try to restore just the cp-move file.

if this still does not work contact DA support.
 
As we're getting more and more questions on how to use https://forum.directadmin.com/showthread.php?t=52792&p=280613#post280613, I've decided to write this article to make it clear :)

See the 2nd post if you'd just like to try it for a single or couple accounts.

FAQ for new customers:
http://forum.directadmin.com/showthread.php?t=58062&p=296460#post296460

---
Known issues:
* cPanel packages owned by root are not stored in any backups, thus they need to be converted manually using a script.
* Mailman mailing lists do not get converted to majordomo mailing lists
* Please make sure it's you who created cpmove-user.tar.gz backup for security purposes, because at this moment we fully trust the content inside, thus available on admin level only. This might change later.
* DirectAdmin format for mysql usernames/databases is always username_database and username_user. cPanel has the same format, but due to max username/database length (https://forums.cpanel.net/threads/username-length-limits.630671/), is sometime shortens the username part in from of it. cPanel allows myusername_ to have a DB username with myuserna_. DA DB names/usernames always start with myusername_, changing this would create a mess, for example, you could have myuserna user owning myuserna_db1 and myusername user owning myserna_db2. The script converts username to be username in such cases, so, for some accounts you might need to change database username/name in wp-config.php or other files CMS uses. This should be rare though. Script output in such cases:
Code:
WARNING! us_wordpress cannot be owned by user, renaming database user to user_wordpress
* JetBackup format doesn't include cpmove-user directory inside, so, for now these need to be converted manually, like (would store converted backup in /home/admin/converted_user_backup):
Code:
jetbackup=yes /usr/local/directadmin/scripts/cpanel_to_da/cpanel_to_da.sh /home/admin/user_backups/cpmove-USERNAME.tar.gz /home/admin/converted_user_backup
chown -R admin. /home/admin/converted_user_backup

Other things to take into consideration:
* It's recommended to leave all the cpmove-user.tar.gz files on the system after restore. If there are bugs, or something goes wrong, it'd still be possible to recover that data.
* Like any software - there might be bugs there, if you notice any - please let us know, and we'll try fixing them as soon as possible.
* DirectAdmin supports a different feature set than cPanel. For example, DirectAdmin supports nginx/openlitespeed, MySQL8, rspamd etc., but it has no support for PostgreSQL or Ruby. So, if you have any sites using them - they'd need to be transferred manually.
* Max username length is 16 characters for MySQL users by default, and 10 for system user. Max username length can be increased in /usr/local/directadmin/conf/directadmin.conf. You can find max length of your username in cPanel easily:
Code:
ls /var/cpanel/users | awk '{print length, $0}' | sort -nr | head -n1

To increase it in DA to 16, for example, you can simply run:
Code:
/usr/local/directadmin/directadmin set max_username_length 16 restart
* To make sure your MySQL username/database name is fine, I'd suggest upgrading your MySQL/MariaDB on the server (https://www.directadmin.com/features.php?id=2294), MySQL 5.7+ or MariaDB 10.x is recommended.
* I'd suggest trying it with 1 account first, most preferably - the one with the longest database name/username (guide for this in 2nd post) to make sure you have the nameservers you need and that you don't hit any limitations :)
* If you have user.tar.gz instead of cpmove-user.tar.gz, it will not work! pkacct forms cpmove-users.tar.gz. If you have a list of user.tar.gz files, and want to rename them all in current directory:
Code:
for i in `ls *.tar.gz | grep '^[A-Za-z0-9]*.tar.gz'`; do { mv -vf ${i} cpmove-${i}; }; done
* If you have backup-...._user.tar.gz instead of cpmove-user.tar.gz, it will not work! pkacct forms cpmove-users.tar.gz. If you have a list of backup-...._user.tar.gz files, and want to rename them all in current directory:
Code:
for i in `ls backup-[0-9]*.*.tar.gz`; do { USERNAME=`echo $i | cut -d_ -f3 | cut -d'.' -f1`; mv -v $i cpmove-${USERNAME}.tar.gz; }; done
* If you don't see the user in "Move users between resellers" list, please apply: https://help.directadmin.com/item.php?id=251
* If you did not restore resellers first, all users were assigned to "admin". If you want to re-assign them to correct resellers after restore:
Code:
cd /home/admin/all_backups
for i in `ls user*.tar.gz`; do { RESELLER=`echo $i | cut -d. -f2`; USER=`echo $i | cut -d'.' -f3`; /usr/local/directadmin/scripts/move_user_to_reseller.sh $USER admin $RESELLER; }; done
echo "action=cache&value=showallusers" >> /usr/local/directadmin/data/task.queue
/usr/local/directadmin/dataskq d
* If you want to sync all packages from cPanel to DirectAdmin, including root packages, to admin user, you could simply do (change your_cpanel_server.com to a real domain name, 22 to SSH port if it's custom):
Code:
wget -O /usr/local/directadmin/scripts/cpanel_to_da/copy_root_packages.sh http://files1.directadmin.com/services/all/cpanel-conversion/copy_root_packages.sh
chmod +x /usr/local/directadmin/scripts/cpanel_to_da/copy_root_packages.sh
/usr/local/directadmin/scripts/cpanel_to_da/copy_root_packages.sh your_cpanel_server.com 22
---

MIGRATION STEPS:
Steps to transfer ALL the accounts from cPanel server to DirectAdmin:
cPanel server:
1) Create a backup of all cPanel accounts on cPanel server and place them to /home/all_backups (make sure you have enough of space for them, if not, please read the suggestions at the end of the article):
Code:
mkdir -p /home/all_backups
for user in `ls /var/cpanel/users/`; do { /scripts/pkgacct ${user} /home/all_backups; }; done
2) Transfer /home/all_backups to DirectAdmin server:
Code:
rsync -avt --delete /home/all_backups/ root@your_directadmin_server.com:/home/admin/all_backups/

We're done with cPanel server now. Let's connect to DirectAdmin server now.

DirectAdmin server:
1) Make sure your DirectAdmin version is at least 1.57.4 (as of time of writing, pre-release: https://help.directadmin.com/item.php?id=408), make sure backups at /home/admin/all_backups are owned by "admin" and that you have latest version of convertor script
Code:
cd /usr/local/directadmin/custombuild
./build update
./build cpanel_to_da
chown -R admin. /home/admin/all_backups
2) We finally have DirectAdmin backups in /home/admin/all_backups :) Now we can simply go to DirectAdmin "Admin Backup/Transfer" section, check "Backup/Restore Settings" (defaults should be fine) in Admin level and restore all backups from "/home/admin/all_backups" directory.

That's it!

-----
If you have enough of space, I'd suggest leaving /home/admin/all_backups still there on DA server for a couple of weeks/months, if there is something missing in DA - you'd always have it in that backup.

If your cPanel server doesn't have enough of space - it's easy transfer accounts one-by one directly to the home folder on a new server. The most convenient way to do this is to generate SSH keys on cPanel server using:
Code:
ssh-keygen

Then you'll have your public key placed in /root/.ssh/id_rsa.pub. Just copy the content of it to your DirectAdmin server, file /root/.ssh/authorized_keys (if /root/.ssh directory does not exist - create it). This will make it possible to connect to DA server without any password (from your cPanel server). Now instead of steps 1) and 2) on cPanel server, just do this:
Code:
for user in `ls /var/cpanel/users/`; do { /scripts/pkgacct ${user} /home/all_backups; rsync -avt /home/all_backups/cpmove-${user}.tar.gz root@your_directadmin_server.com:/home/admin/all_backups/cpmove-${user}.tar.gz; rm -f /home/all_backups/cpmove-${user}.tar.gz ; }; done
Your username is included in the name of the backup file, and the digits that follow it indicate the date and time that the backup was made by cPanel.Alternately, users who have root access can generate a full backup using the command prompt by typing the following commands:
/scripts/pkgacct USERNAME (Your Username)

In the /home directory, you will find a newly created archive file with the name cpmove-USERNAME.tar.gz.
The next step is to upload the backup files to the DirectAdmin panel, and they should be placed in the directsay/home/admin/cpanel_backups directory.
Then Navigate to the login page for your DirectAdmin admin account.
Further Browse to the area labeled Admin Tools, then select Admin Backup/Transfer from the menu. Simply click the button labeled "RESTORE."
Input the location of the backup file here. Click the RESTORE button after selecting the backup file to use.
 
I decided to switch to DirectAdmin a while ago, and I'm confident that I made the right decision. Thank you very much for the information.
:)
 
the Cpanel import script have a big problem.

We tried to migrate 70 accounts, 45 failed with a message saying "database is locked", wich on other thread someone from DA i guess, said it was a problem creating the backup on the Cpanel server.

But if we login to cpanel server and with the same packgacct script create the 70 backups, none of them fails

And is not something about server load, or the amount of account, we tried now with just 1 account, and same error database is locked.
 
I've created a new Migration tool to help our resellers move from WHM to DirectAdmin, but this is a free tool for anyone to use, for any Host/servers as long as the host has an FTP service. Basically it automates the backup and transfer process and will also rename the backup files from backup-xxxx.tar.gx to cpmove-xxxx.tar.gz

The end result is the DirectAdmin reseller account will be left with a directory full of all the cpmove files which the reseller can then Restore easily from within DirectAdmin themselves. Basically it just automates everything for the reseller except the last step, but that last step is quick anyway as DirectAdmin automates the restores. So resellers can now do migrations themselves without the need of root or admin intervention/access.

Here is the link: https://deasoft.com/tools/cpanel-directadmin-automated-migration-tool.php
 
Last edited:
I've created a new Migration tool to help our resellers move from WHM to DirectAdmin, but this is a free tool for anyone to use, for any Host/servers as long as the host has an FTP service. Basically it automates the backup and transfer process and will also rename the backup files from backup-xxxx.tar.gx to cpmove-xxxx.tar.gz

The end result is the DirectAdmin reseller account will be left with a directory full of all the cpmove files which the reseller can then Restore easily from within DirectAdmin themselves. Basically it just automates everything for the reseller except the last step, but that last step is quick anyway as DirectAdmin automates the restores. So resellers can now do migrations themselves without the need of root or admin intervention/access.

Here is the link: https://deasoft.com/tools/cpanel-directadmin-automated-migration-tool.php
i would never enter login credentials of Cpanel, FTP or DA to anywebsite, and would recommend anyone to never do that.

If you want to release a tool for public use, release the code and everyone can check it and use it.

just my opinion, it's a big risk.
 
Yeah I understand, what you say is reasonable, but what you suggest is a fair bit more work that will take some time :) - The other option is to reset your passwords immediately after using it, but even so I understand you wouldn't know if it did something malicious before completing its work.

I can state plainly as the person who coded this I have no interest at all in peoples login details or doing something nefarious. The purpose was to initially make life easier for myself and my own clients and then I thought - why don't I make it publicly available and gain some good will and exposure. But yeah thinking about it more, it's probably too much of a security issue for most.

I could release the code, I will think about that. Problem with that is it will no doubt be taken and exploited by others for their own gain...... What I might end up doing is putting it in my DAreseller software.

Anyway thanks for your feedback.

Update - I added a FAQ to answer peoples questions.
 
Last edited:
I have a problem with the migration tool.

When I have a email account with the same name as system user in cpanel the script tries to merge the mail boxes as seen in the logs here:

WARNING! [email protected] matches system account name, merging mailbox with system user's one.

On restore the mailbox is empty at the direct admin end. It hasn't imported the [email protected] email.

On CPanel [email protected] has about 250MB of data. On Directadmin [email protected] ends up with 0 bytes of data in the mailbox. All other mailboxes transfer fine.

If i rename these accounts in cpanel its going to change the name of the databases and I will have to manually fix wordpress etc for about 60 sites.
 
When I have a email account with the same name as system user in cpanel
You shouldn't use names that are used for email as system user. It is better to give every system user a name that wouldn't be used for mail.

Also you should check if there isn't a MBOX or MDBOX now at the system user maildir as sometimes cpanel mbox/mdbox convert will not work and you will not see mail untill you convert the mbox or mdbox to maildir. You can easy do it.

But i would change the system user name on your da server and import cpanel again.
 
the Cpanel import script have a big problem.

We tried to migrate 70 accounts, 45 failed with a message saying "database is locked", wich on other
thread someone from DA i guess, said it was a problem creating the backup on the Cpanel server.

But if we login to cpanel server and with the same packgacct script create the 70 backups, none of them fails
And is not something about server load, or the amount of account, we tried now with just 1 account, and same error database is locked.
when using the same script directly on the CPanel server, the backups are created without any issues. This suggests that the problem might be related to the environment or configuration where the import script is being executed. It's worth investigating potential differences in the environments or any specific settings that could be causing the database lock errors during migration.
 
Back
Top