95 lines
3.4 KiB
Bash
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 "╚═══════════════════════════════════════════╝"
|