实现首版 Gitea microVM runner
This commit is contained in:
Executable
+37
@@ -0,0 +1,37 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user