Files
gitea-dynamic-runner/scripts/microvm-runner-network
panxiao81 23695fcc98
test / python (pull_request) Canceled after 0s
test / shell (pull_request) Canceled after 0s
test / python (push) Canceled after 0s
test / shell (push) Canceled after 0s
实现首版 Gitea microVM runner
2026-09-16 13:06:05 +00:00

38 lines
1.3 KiB
Bash
Executable File

#!/bin/sh
set -eu
action=${1:?up or down is required}
bridge=${RUNNER_BRIDGE:-mvrbr0}
subnet=${RUNNER_SUBNET:-172.30.0.0/24}
gateway=${RUNNER_GATEWAY:-172.30.0.1}
dhcp_start=${RUNNER_DHCP_START:-172.30.0.10}
dhcp_end=${RUNNER_DHCP_END:-172.30.0.200}
pid_file=${RUNNER_DNSMASQ_PID:-/run/microvm-runner/dnsmasq.pid}
case "$action" in
up)
mkdir -p "$(dirname "$pid_file")"
ip link show "$bridge" >/dev/null 2>&1 || ip link add "$bridge" type bridge
ip address show dev "$bridge" | grep -Fq "$gateway/24" || ip address add "$gateway/24" dev "$bridge"
ip link set "$bridge" up
sysctl -q -w net.ipv4.ip_forward=1
iptables -t nat -C POSTROUTING -s "$subnet" -j MASQUERADE 2>/dev/null || \
iptables -t nat -A POSTROUTING -s "$subnet" -j MASQUERADE
dnsmasq --interface="$bridge" --bind-interfaces --except-interface=lo \
--dhcp-range="$dhcp_start,$dhcp_end,255.255.255.0,1h" \
--dhcp-option="option:router,$gateway" --pid-file="$pid_file"
;;
down)
if test -r "$pid_file"; then
kill "$(cat "$pid_file")" 2>/dev/null || true
rm -f -- "$pid_file"
fi
iptables -t nat -D POSTROUTING -s "$subnet" -j MASQUERADE 2>/dev/null || true
ip link delete "$bridge" 2>/dev/null || true
;;
*)
echo "expected up or down" >&2
exit 64
;;
esac