first
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
#!/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 "╚═══════════════════════════════════════════╝"
|
||||
Reference in New Issue
Block a user