- Deleted apps/web/src/utils/optimisticStoreUpdates.ts (unused file) - File was unused - no imports found in codebase - Mutations already use React Query's onMutate pattern - No TypeScript errors after deletion - Actions 4.4.1.2 and 4.4.1.3 complete
131 lines
4.4 KiB
Bash
Executable file
131 lines
4.4 KiB
Bash
Executable file
#!/bin/bash
|
|
# Diagnose Incus network issues
|
|
# Usage: ./diagnose-network.sh [container-name]
|
|
|
|
set -euo pipefail
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
NETWORK="veza-network"
|
|
CONTAINER="${1:-veza-infra}"
|
|
|
|
echo -e "${BLUE}🔍 Diagnosing Incus network issues${NC}"
|
|
echo ""
|
|
|
|
# 1. Host IP forwarding
|
|
echo -e "${BLUE}1. Host IP Forwarding:${NC}"
|
|
IP_FORWARD=$(cat /proc/sys/net/ipv4/ip_forward 2>/dev/null || echo "0")
|
|
if [ "${IP_FORWARD}" = "1" ]; then
|
|
echo -e "${GREEN} ✅ Enabled${NC}"
|
|
else
|
|
echo -e "${RED} ❌ Disabled (NAT will not work!)${NC}"
|
|
echo " Fix: echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward"
|
|
fi
|
|
|
|
# 2. Network configuration
|
|
echo -e "${BLUE}2. Network Configuration (${NETWORK}):${NC}"
|
|
if incus network show ${NETWORK} >/dev/null 2>&1; then
|
|
NAT=$(incus network show ${NETWORK} | grep "ipv4.nat" | awk '{print $2}' || echo "false")
|
|
DHCP=$(incus network show ${NETWORK} | grep "ipv4.dhcp" | awk '{print $2}' || echo "false")
|
|
|
|
if [ "${NAT}" = "\"true\"" ]; then
|
|
echo -e "${GREEN} ✅ NAT: Enabled${NC}"
|
|
else
|
|
echo -e "${RED} ❌ NAT: Disabled${NC}"
|
|
fi
|
|
|
|
if [ "${DHCP}" = "\"true\"" ]; then
|
|
echo -e "${GREEN} ✅ DHCP: Enabled${NC}"
|
|
else
|
|
echo -e "${YELLOW} ⚠️ DHCP: Disabled${NC}"
|
|
fi
|
|
else
|
|
echo -e "${RED} ❌ Network does not exist${NC}"
|
|
fi
|
|
|
|
# 3. Container network state
|
|
if incus list -c n --format csv 2>/dev/null | grep -q "^${CONTAINER}$"; then
|
|
echo -e "${BLUE}3. Container Network State (${CONTAINER}):${NC}"
|
|
|
|
# IP address
|
|
CONTAINER_IP=$(incus exec ${CONTAINER} -- ip addr show eth0 2>/dev/null | grep "inet " | awk '{print $2}' | cut -d'/' -f1 || echo "none")
|
|
if [ "${CONTAINER_IP}" != "none" ] && [ -n "${CONTAINER_IP}" ]; then
|
|
echo -e "${GREEN} ✅ IP: ${CONTAINER_IP}${NC}"
|
|
else
|
|
echo -e "${RED} ❌ IP: Not configured${NC}"
|
|
fi
|
|
|
|
# Default route
|
|
DEFAULT_ROUTE=$(incus exec ${CONTAINER} -- ip route | grep default || echo "none")
|
|
if [ "${DEFAULT_ROUTE}" != "none" ]; then
|
|
if echo "${DEFAULT_ROUTE}" | grep -q "10.10.10.1"; then
|
|
echo -e "${GREEN} ✅ Default route: ${DEFAULT_ROUTE}${NC}"
|
|
else
|
|
echo -e "${YELLOW} ⚠️ Default route: ${DEFAULT_ROUTE}${NC}"
|
|
fi
|
|
else
|
|
echo -e "${RED} ❌ Default route: Missing${NC}"
|
|
fi
|
|
|
|
# DNS
|
|
DNS=$(incus exec ${CONTAINER} -- cat /etc/resolv.conf 2>/dev/null | grep nameserver | head -1 || echo "none")
|
|
if [ "${DNS}" != "none" ]; then
|
|
echo -e "${GREEN} ✅ DNS: ${DNS}${NC}"
|
|
else
|
|
echo -e "${RED} ❌ DNS: Not configured${NC}"
|
|
fi
|
|
|
|
# Connectivity tests
|
|
echo -e "${BLUE}4. Connectivity Tests:${NC}"
|
|
|
|
# Gateway
|
|
if incus exec ${CONTAINER} -- ping -c 1 -W 1 10.10.10.1 >/dev/null 2>&1; then
|
|
echo -e "${GREEN} ✅ Gateway (10.10.10.1): Reachable${NC}"
|
|
else
|
|
echo -e "${RED} ❌ Gateway (10.10.10.1): Not reachable${NC}"
|
|
fi
|
|
|
|
# Internet
|
|
if incus exec ${CONTAINER} -- ping -c 1 -W 1 8.8.8.8 >/dev/null 2>&1; then
|
|
echo -e "${GREEN} ✅ Internet (8.8.8.8): Reachable${NC}"
|
|
else
|
|
echo -e "${RED} ❌ Internet (8.8.8.8): Not reachable${NC}"
|
|
fi
|
|
|
|
# DNS resolution
|
|
if incus exec ${CONTAINER} -- getent hosts google.com >/dev/null 2>&1; then
|
|
echo -e "${GREEN} ✅ DNS (google.com): Working${NC}"
|
|
else
|
|
echo -e "${RED} ❌ DNS (google.com): Failed${NC}"
|
|
fi
|
|
else
|
|
echo -e "${YELLOW} ⚠️ Container ${CONTAINER} does not exist${NC}"
|
|
fi
|
|
|
|
# 5. Bridge interface
|
|
echo -e "${BLUE}5. Bridge Interface:${NC}"
|
|
BRIDGE=$(ip -br link show | grep -E "incus|veza" | head -1 | awk '{print $1}' || echo "none")
|
|
if [ "${BRIDGE}" != "none" ]; then
|
|
echo -e "${GREEN} ✅ Bridge: ${BRIDGE}${NC}"
|
|
BRIDGE_STATE=$(ip link show ${BRIDGE} 2>/dev/null | grep -o "state [A-Z]*" | awk '{print $2}' || echo "unknown")
|
|
if [ "${BRIDGE_STATE}" = "UP" ]; then
|
|
echo -e "${GREEN} ✅ Bridge state: UP${NC}"
|
|
else
|
|
echo -e "${RED} ❌ Bridge state: ${BRIDGE_STATE}${NC}"
|
|
fi
|
|
else
|
|
echo -e "${YELLOW} ⚠️ Bridge interface not found${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${BLUE}=== Summary ===${NC}"
|
|
echo "To fix network issues, run:"
|
|
echo " ./fix-network.sh ${CONTAINER}"
|
|
echo ""
|
|
echo "To fix all containers:"
|
|
echo " ./fix-all-containers-network.sh"
|