File: //bigscoots/cpanel/migrate_to_secondary_ip.sh
#!/usr/bin/env bash
# --- CONFIGURATION & ARGUMENTS ---
if [ -z "$1" ]; then
echo "ERROR: No NEWIP provided."
echo "Usage: bash $0 <NEWIP>"
exit 1
fi
NEWIP="$1"
NET_DIR="/etc/sysconfig/network-scripts"
echo "--------------------------------------------------------"
echo " Starting cPanel IP Migration to: $NEWIP"
echo "--------------------------------------------------------"
# 1. DEPENDENCY CHECK
echo -n "[*] Checking for jq... "
if ! command -v jq &> /dev/null || ! jq --version &> /dev/null; then
echo "Broken/Missing. Installing static binary..."
wget -q -O /usr/local/bin/jq https://github.com/jqlang/jq/releases/download/jq-1.6/jq-linux64
chmod +x /usr/local/bin/jq
else
echo "OK."
fi
# 2. IDENTIFY OLD IP
echo -n "[*] Identifying current public IP... "
OLD_IP=$(curl -s https://ifconfig.me)
if [[ -z "$OLD_IP" ]]; then
echo "FAILED!"
exit 1
fi
echo "DONE ($OLD_IP)"
# 3. APACHE TEMPLATES
echo -n "[*] Downloading Apache vhost templates... "
wget -q -O /var/cpanel/templates/apache2_4/ssl_vhost.local https://gist.githubusercontent.com/jcatello/e19c6feef89bc73c6cd87e2327278771/raw/c1c0130fbab0a882691263f1f0c5bf1488b67370/gistfile1.txt
wget -q -O /var/cpanel/templates/apache2_4/vhost.local https://gist.githubusercontent.com/jcatello/b4da693fef7fbb2c7c08a73939ce6e73/raw/9d0344f3ce2c85f7f3929753e441ddfbb8327e2c/gistfile1.txt
wget -q -O /var/cpanel/templates/apache2_4/ea4_main.local https://gist.githubusercontent.com/jcatello/802909296df0c1e0bece7f2fa1ffae5d/raw/fb3a0f31b62696d835acf103743f98b1fb5c512e/gistfile1.txt
echo "OK."
# 4. REBUILD APACHE
echo -n "[*] Rebuilding Apache configuration... "
/scripts/rebuildhttpdconf &> /dev/null
echo "OK."
echo -n "[*] Restarting Apache service... "
/scripts/restartsrv_apache &> /dev/null
echo "OK."
# 5. CRONTAB UPDATE (FIXED WITH BASH)
echo -n "[*] Ensuring /bigscoots apache conf-check cron is correct... "
# Remove any existing versions (with or without bash) to prevent duplicates
CURRENT_CRON=$(crontab -l 2>/dev/null | grep -v "/bigscoots/cpanel/apache/conf-check.sh")
# Add the correct version back in
(echo "$CURRENT_CRON"; echo "*/5 * * * * bash /bigscoots/cpanel/apache/conf-check.sh > /dev/null 2>&1") | crontab -
echo "OK."
# 6. WWWACCT.CONF
echo -n "[*] Updating ADDR in /etc/wwwacct.conf... "
sed -i "s/^ADDR .*/ADDR $NEWIP/" /etc/wwwacct.conf
echo "OK."
# 9. LICENSE TRANSFER
echo "[*] Triggering License Transfer via Manage2 API (n8n)..."
TRANSFER_JSON=$(curl -s -X POST https://n8n.bigscoots.dev/webhook/cpanel-license-transfer \
-H "Content-Type: application/json" \
-d "{\"old_ip\": \"$OLD_IP\", \"new_ip\": \"$NEWIP\"}")
if command -v jq &> /dev/null && jq --version &> /dev/null; then
echo "$TRANSFER_JSON" | jq
else
echo "Raw Response: $TRANSFER_JSON"
fi
# 10. NETWORK SWAP
NEWIP_FILE_PATH=$(grep -l "IPADDR=$NEWIP" $NET_DIR/ifcfg-venet0:*)
NEWIP_FILE=$(basename "$NEWIP_FILE_PATH")
if [ ! -z "$NEWIP_FILE" ] && [ "$NEWIP_FILE" != "ifcfg-venet0:0" ]; then
echo "[*] Found $NEWIP on $NEWIP_FILE. Swapping to primary..."
mv "$NET_DIR/ifcfg-venet0:0" "$NET_DIR/ifcfg-venet0:old_temp"
mv "$NET_DIR/$NEWIP_FILE" "$NET_DIR/ifcfg-venet0:0"
mv "$NET_DIR/ifcfg-venet0:old_temp" "$NET_DIR/$NEWIP_FILE"
sed -i "s/^DEVICE=.*/DEVICE=venet0:0/" "$NET_DIR/ifcfg-venet0:0"
sed -i "s/^DEVICE=.*/DEVICE=${NEWIP_FILE#ifcfg-}/" "$NET_DIR/$NEWIP_FILE"
echo "--------------------------------------------------------"
echo " FINALIZING: Restarting Network & Background Refresh"
echo "--------------------------------------------------------"
nohup bash -c "sleep 12 && /usr/local/cpanel/cpkeyclt && logger 'cPanel migration license refresh complete'" > /dev/null 2>&1 &
service network restart
/scripts/restartsrv_apache
/scripts/restartsrv_apache_php_fpm
/scripts/restartsrv_dovecot
/scripts/restartsrv_exim
/scripts/restartsrv_bind
/scripts/mainipcheck
whmlogin
if ps aux|grep -v grep | grep -q nginx ; then echo nginx detected ; fi
else
echo "[!] No network swap required. Refreshing license locally..."
/usr/local/cpanel/cpkeyclt &> /dev/null
echo "--------------------------------------------------------"
echo " MIGRATION COMPLETE"
echo "--------------------------------------------------------"
fi