#!/bin/bash # deploy-and-fix.sh - uploads fix script, runs it, starts VMs, verifies. set -uo pipefail HOST="$1" SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=8 -o ServerAliveInterval=10 -o StrictHostKeyChecking=accept-new) SCRIPT_DIR="/home/reachableceo/projects/perfopt/scripts" echo "=== Uploading fix script to $HOST ===" scp "${SSH_OPTS[@]}" "$SCRIPT_DIR/fix-bond-nfs.sh" "root@$HOST:/root/fix-bond-nfs.sh" >/dev/null 2>&1 echo "=== Running fix ===" ssh "${SSH_OPTS[@]}" "root@$HOST" 'chmod +x /root/fix-bond-nfs.sh && bash /root/fix-bond-nfs.sh' 2>&1 echo "" echo "=== Starting VMs ===" for vmid in $(ssh "${SSH_OPTS[@]}" "root@$HOST" 'qm list 2>/dev/null | awk "NR>1{print \$1}"'); do status=$(ssh "${SSH_OPTS[@]}" "root@$HOST" "qm status $vmid 2>/dev/null | awk '{print \$2}'") if [ "$status" != "running" ]; then echo " Starting VM $vmid..." ssh "${SSH_OPTS[@]}" "root@$HOST" "qm start $vmid" 2>&1 | sed 's/^/ /' else echo " VM $vmid already running" fi done echo "" echo "Waiting 20s for VMs to boot..." sleep 20 echo "" echo "=== FULL VERIFICATION ===" echo "" echo "--- VMs ---" ssh "${SSH_OPTS[@]}" "root@$HOST" 'qm list' echo "" echo "--- NFS mounts ---" ssh "${SSH_OPTS[@]}" "root@$HOST" 'nfsstat -m 2>/dev/null | head -24' echo "" echo "--- NFS TCP connections ---" ssh "${SSH_OPTS[@]}" "root@$HOST" 'ss -tn state established "( dport = :2049 )" 2>/dev/null' echo " Count:" ssh "${SSH_OPTS[@]}" "root@$HOST" 'ss -tn state established "( dport = :2049 )" 2>/dev/null | tail -n +2 | wc -l' echo "" echo "--- bond0 hash policy ---" ssh "${SSH_OPTS[@]}" "root@$HOST" 'cat /proc/net/bonding/bond0 | head -6' echo "" echo "--- Summary ---" ssh "${SSH_OPTS[@]}" "root@$HOST" 'echo "tcp_cc: $(sysctl -n net.ipv4.tcp_congestion_control)"' ssh "${SSH_OPTS[@]}" "root@$HOST" 'echo "swappiness: $(sysctl -n vm.swappiness)"' ssh "${SSH_OPTS[@]}" "root@$HOST" 'echo "governor: $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2>/dev/null)"' ssh "${SSH_OPTS[@]}" "root@$HOST" 'tuned-adm active 2>/dev/null'