Files
Dongho Kim a221870b70 first
2026-05-17 16:33:43 +02:00

95 lines
3.4 KiB
Bash

#!/bin/bash
# Setup script for MP-QUIC experiment environment.
# Run on each Linux machine (server + client) before experiments.
set -euo pipefail
echo "╔═══════════════════════════════════════════╗"
echo "║ MP-QUIC Experiment Environment Setup ║"
echo "╚═══════════════════════════════════════════╝"
# --- OS Check ---
if [[ ! -f /etc/os-release ]]; then
echo "❌ Not running on Linux. eBPF tracing requires Linux."
echo " You can still build and run the Go binaries on this machine."
exit 1
fi
. /etc/os-release
echo "📋 Detected OS: $PRETTY_NAME"
# --- Install dependencies ---
if [[ "$ID" == "ubuntu" || "$ID" == "debian" ]]; then
echo ""
echo "📦 Installing packages..."
sudo apt-get update -qq
sudo apt-get install -y -qq \
bpfcc-tools \
python3-bpfcc \
linux-headers-$(uname -r) \
golang-go \
iperf3 \
net-tools \
iproute2
# Ensure Python3 BCC bindings work
python3 -c "from bcc import BPF; print(' ✓ BCC Python bindings OK')" 2>/dev/null || {
echo " ⚠ BCC Python import failed. Try: sudo apt install python3-bpfcc"
}
elif [[ "$ID" == "fedora" || "$ID" == "rhel" || "$ID" == "centos" ]]; then
echo ""
echo "📦 Installing packages (DNF)..."
sudo dnf install -y \
bcc-tools \
python3-bcc \
kernel-devel-$(uname -r) \
golang \
iperf3 \
iproute
else
echo "⚠ Unsupported distro: $ID"
echo " Please install manually: bcc-tools, python3-bcc, golang, linux-headers"
fi
# --- Verify Go ---
echo ""
if command -v go &>/dev/null; then
echo "✓ Go $(go version | awk '{print $3}')"
else
echo "❌ Go not found. Install from https://go.dev/dl/"
exit 1
fi
# --- Kernel config check ---
echo ""
echo "🔍 Checking kernel eBPF support..."
if [[ -d /sys/kernel/debug/tracing ]]; then
echo " ✓ debugfs mounted"
else
echo " ⚠ debugfs not mounted. Run: sudo mount -t debugfs debugfs /sys/kernel/debug"
fi
if grep -q CONFIG_BPF=y /boot/config-$(uname -r) 2>/dev/null; then
echo " ✓ CONFIG_BPF enabled"
else
echo " ⚠ Could not verify CONFIG_BPF (may still work)"
fi
# --- Network tuning (optional) ---
echo ""
echo "🔧 Applying network tuning..."
sudo sysctl -w net.core.rmem_max=26214400 2>/dev/null && echo " ✓ rmem_max=25MB" || true
sudo sysctl -w net.core.wmem_max=26214400 2>/dev/null && echo " ✓ wmem_max=25MB" || true
sudo sysctl -w net.core.rmem_default=1048576 2>/dev/null || true
sudo sysctl -w net.core.wmem_default=1048576 2>/dev/null || true
echo ""
echo "╔═══════════════════════════════════════════╗"
echo "║ ✓ Setup complete! ║"
echo "║ ║"
echo "║ Quick start: ║"
echo "║ python3 run_experiment.py --duration 10 ║"
echo "║ ║"
echo "║ With eBPF (needs sudo): ║"
echo "║ python3 run_experiment.py --ebpf ║"
echo "╚═══════════════════════════════════════════╝"