#!/bin/bash set -euo pipefail # Load IP configuration SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true # Setup persistent VLAN 11 IP configuration for WSL2 # Creates systemd service and optionally configures passwordless sudo set -e VLAN11_IP="192.168.11.23" PRIMARY_IF="eth0" SCRIPT_FILE="/usr/local/bin/configure-vlan11-ip.sh" SERVICE_FILE="/etc/systemd/system/configure-vlan11-ip.service" echo "🔧 Setting up persistent VLAN 11 IP configuration" echo " IP: $VLAN11_IP" echo " Interface: $PRIMARY_IF" echo "" # Check if running as root if [ "$EUID" -ne 0 ]; then echo "❌ This script must be run with sudo" echo " Usage: sudo $0" exit 1 fi # Create configuration script echo "📝 Creating configuration script..." mkdir -p /usr/local/bin cat > "$SCRIPT_FILE" << 'EOFSCRIPT' #!/bin/bash # Configure VLAN 11 secondary IP address PRIMARY_IF="eth0" VLAN11_IP="192.168.11.23" VLAN11_NETMASK="24" # Wait for interface to be available for i in {1..10}; do if ip link show $PRIMARY_IF >/dev/null 2>&1; then break fi sleep 1 done # Add IP if not already present if ip link show $PRIMARY_IF >/dev/null 2>&1 && ! ip addr show $PRIMARY_IF | grep -q "$VLAN11_IP"; then ip addr add $VLAN11_IP/$VLAN11_NETMASK dev $PRIMARY_IF 2>/dev/null || true fi # Add route if not present if ! ip route show | grep -q "${NETWORK_192_168_11_0:-192.168.11.0}/24.*src $VLAN11_IP"; then ip route add ${NETWORK_192_168_11_0:-192.168.11.0}/24 dev $PRIMARY_IF src $VLAN11_IP 2>/dev/null || true fi EOFSCRIPT chmod +x "$SCRIPT_FILE" echo " ✅ Script created: $SCRIPT_FILE" # Create systemd service echo "📝 Creating systemd service..." cat > "$SERVICE_FILE" << EOF [Unit] Description=Configure VLAN 11 Secondary IP Address After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=$SCRIPT_FILE RemainAfterExit=yes StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target EOF echo " ✅ Service file created: $SERVICE_FILE" # Reload systemd and enable service echo "🔄 Enabling systemd service..." systemctl daemon-reload systemctl enable configure-vlan11-ip.service systemctl start configure-vlan11-ip.service if systemctl is-active --quiet configure-vlan11-ip.service; then echo " ✅ Service is active" else echo " ⚠️ Service status needs verification" systemctl status configure-vlan11-ip.service --no-pager -l || true fi # Optionally configure passwordless sudo for specific IP commands echo "" read -p "Configure passwordless sudo for IP configuration commands? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then SUDOERS_FILE="/etc/sudoers.d/vlan11-ip-config" SUDOERS_RULE="$USER ALL=(ALL) NOPASSWD: /usr/bin/ip addr add $VLAN11_IP/* dev $PRIMARY_IF, /usr/bin/ip addr del $VLAN11_IP/* dev $PRIMARY_IF, /usr/bin/ip route add ${NETWORK_192_168_11_0:-192.168.11.0}/24 dev $PRIMARY_IF src $VLAN11_IP, /usr/bin/ip route del ${NETWORK_192_168_11_0:-192.168.11.0}/24 dev $PRIMARY_IF src $VLAN11_IP" echo "$SUDOERS_RULE" | visudo -c -f - 2>/dev/null && { echo "$SUDOERS_RULE" > "$SUDOERS_FILE" chmod 0440 "$SUDOERS_FILE" echo " ✅ Passwordless sudo configured" } || { echo " ❌ Failed to configure passwordless sudo (visudo check failed)" } fi # Verify configuration echo "" echo "🔍 Verifying configuration..." sleep 2 if ip addr show $PRIMARY_IF | grep -q "$VLAN11_IP"; then echo " ✅ VLAN 11 IP ($VLAN11_IP) is configured" else echo " ⚠️ VLAN 11 IP not found (may need manual check)" fi echo "" echo "✅ Persistence setup complete!" echo "" echo "📋 Summary:" echo " • Systemd service: $SERVICE_FILE" echo " • Configuration script: $SCRIPT_FILE" echo " • Service will run on boot to configure IP" echo "" echo "💡 To check service status:" echo " sudo systemctl status configure-vlan11-ip.service" echo "" echo "💡 To test immediately:" echo " sudo $SCRIPT_FILE" echo ""