After some problems I got this script working, some comments to be aware if you have problems with the generated file:
The NS1 and NS2 needs to be globally defined, are used in the DNS functions but to generate the user.conf file too:
You can add this to the top of the file or after "#Generate user.conf"
Code:
NS1="`/usr/local/directadmin/directadmin c | grep -m1 '^ns1=' | cut -d= -f2`"
NS2="`/usr/local/directadmin/directadmin c | grep -m1 '^ns2=' | cut -d= -f2`"
Another problem was this error
Code:
Named::writeDB: error writing zone for domain.tld: email='' or ns1='' is empty. Ensure the zone is not corrupted.
If you the dns file generator section you will see
Code:
#Create DNS zone
CONVERTED_DOMAIN_DNS="${DIRECTADMIN_BACKUPS}/${USERNAME}/backup/${CONVERTED_DOMAIN}/${CONVERTED_DOMAIN}.db"
CPANEL_DNS_DATA=${DIRECTADMIN_BACKUPS}/${USERNAME}_cpanel_to_convert/dnszones/${CONVERTED_DOMAIN}.db
if [ -s ${CPANEL_DNS_DATA} ]; then
cp -f ${CPANEL_DNS_DATA} ${CONVERTED_DOMAIN_DNS}
else
And with this the DNS zone is done, but the cpanel dns file isn't compatible with the directadmin backup script a needs to be fixed, my suggestion:
add below
Code:
cp -f ${CPANEL_DNS_DATA} ${CONVERTED_DOMAIN_DNS}
This
Code:
sed -i '/domainkey/d' ${CONVERTED_DOMAIN_DNS}
sed -i '/NS/d' ${CONVERTED_DOMAIN_DNS}
sed -i '/SOA/d' ${CONVERTED_DOMAIN_DNS}
sed -i "/\$TTL/a@ IN SOA ${NS1}. hostmaster.${CONVERTED_DOMAIN}. (" ${CONVERTED_DOMAIN_DNS}
echo "${CONVERTED_DOMAIN}. 14400 IN NS ${NS1}." >> ${CONVERTED_DOMAIN_DNS}
echo "${CONVERTED_DOMAIN}. 14400 IN NS ${NS2}." >> ${CONVERTED_DOMAIN_DNS}
With comments:
The cpanel domainkey isnt compatible with directadmin, not need here:
sed -i '/domainkey/d' ${CONVERTED_DOMAIN_DNS}
We need to update the NS servers of the zone to our local, for this, the NS records of cpanel needs to be removed.
sed -i '/NS/d' ${CONVERTED_DOMAIN_DNS}
The cpanel SOA starts with the domain name, in directadmin needs to be @ or the import fail, for this we remove the line:
sed -i '/SOA/d' ${CONVERTED_DOMAIN_DNS}
Add the new SOA line to the zone:
sed -i "/\$TTL/a@ IN SOA ${NS1}. hostmaster.${CONVERTED_DOMAIN}. (" ${CONVERTED_DOMAIN_DNS}
Add the new NS records to the zone:
echo "${CONVERTED_DOMAIN}. 14400 IN NS ${NS1}." >> ${CONVERTED_DOMAIN_DNS}
echo "${CONVERTED_DOMAIN}. 14400 IN NS ${NS2}." >> ${CONVERTED_DOMAIN_DNS}
I think more things can be done with this, but now the zone is compatible with directadmin
For alias/pointers domains you need to fix it too:
After this
Code:
cp -f ${CPANEL_POINTER_DNS_DATA} ${CONVERTED_POINTER_DNS}
Add
Code:
sed -i '/domainkey/d' ${CONVERTED_POINTER_DNS}
sed -i '/NS/d' ${CONVERTED_POINTER_DNS}
sed -i '/SOA/d' ${CONVERTED_POINTER_DNS}
sed -i "/\$TTL/a@ IN SOA ${NS1}. hostmaster.${i}. (" ${CONVERTED_POINTER_DNS}
echo "${i}. 14400 IN NS ${NS1}." >> ${CONVERTED_POINTER_DNS}
echo "${i}. 14400 IN NS ${NS2}." >> ${CONVERTED_POINTER_DNS}
Another detail, the NS2 variable in the DNS Zone section is using the NS1 data:
Code:
NS2="`/usr/local/directadmin/directadmin c | grep -m1 '^ns1=' | cut -d= -f2`"
Fix to
Code:
NS2="`/usr/local/directadmin/directadmin c | grep -m1 '^ns2=' | cut -d= -f2`"
---------------
A question, when a cpanel backup dont have a DNS zone?
if [ -s ${CPANEL_DNS_DATA} ]
I think, the "else" section never will be executed because the cpmove file always have the main domain dns zone.
For the pointers is the same situation "if [ -s ${CPANEL_POINTER_DNS_DATA} ];" , if a pointer exist, you will have a DNS file from the cpmove, and based on this the "else" section never will be executed.
After all now the script is working
thanks smtalk for your script.
Regards
Roberto