entrypoint.sh 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/bin/bash
  2. set -uo pipefail
  3. trap 'trap " " SIGTERM; kill 0; wait' SIGTERM SIGQUIT SIGINT
  4. echo "Starting Zerotier-One"
  5. zerotier-one -d
  6. echo "Wait for ZT service to come online before attempting queries..."
  7. MAX_WAIT_SECS="${MAX_WAIT_SECS:-90}"
  8. SLEEP_TIME="${SLEEP_TIME:-15}"
  9. if [[ "$SLEEP_TIME" -le 0 ]]
  10. then
  11. SLEEP_TIME=1
  12. fi
  13. iterations=$((MAX_WAIT_SECS/SLEEP_TIME))
  14. online=false
  15. for ((s=0; s<=iterations; s++))
  16. do
  17. online="$(zerotier-cli -j info | jq '.online' 2>/dev/null)"
  18. if [[ "$online" == "true" ]]
  19. then
  20. break
  21. fi
  22. sleep "$SLEEP_TIME"
  23. echo " ."
  24. done
  25. if [[ "$online" != "true" ]]
  26. then
  27. echo "Waited $MAX_WAIT_SECS for zerotier-one to start, exiting." >&2
  28. exit 1
  29. fi
  30. echo "done."
  31. (
  32. echo "Starting route helper"
  33. while true
  34. do
  35. if ! NETWORK_LIST="$(zerotier-cli -j listnetworks)"
  36. then
  37. echo "Route helper: $NETWORK_LIST" >&2
  38. exit 1
  39. fi
  40. NETWORK_COUNT="$(jq -r '. | length' <<< "$NETWORK_LIST")"
  41. if [[ "$NETWORK_COUNT" -gt 0 ]]
  42. then
  43. for ((j=0; j<=$((NETWORK_COUNT-1)); j++))
  44. do
  45. ALLOW_DEFAULT="$(jq -r '.['$j'].allowDefault' <<< "$NETWORK_LIST")"
  46. ROUTE_COUNT="$(jq -r '.['$j'].routes | length' <<< "$NETWORK_LIST")"
  47. for ((k=0; k<=$((ROUTE_COUNT-1)); k++))
  48. do
  49. ROUTE="$(jq -r '.['$j'].routes['$k'].target' <<< "$NETWORK_LIST")"
  50. VIA="$(jq -r '.['$j'].routes['$k'].via' <<< "$NETWORK_LIST")"
  51. if [[ -n "$ROUTE" ]]
  52. then
  53. # check if route is default and allowDefault enabled for this network
  54. if [[ "$ROUTE" == "0.0.0.0/0" && "$ALLOW_DEFAULT" == "false" ]]
  55. then
  56. continue
  57. fi
  58. EXIST="$(ip -o route show "$ROUTE")"
  59. if [[ -z "${EXIST}" && "$VIA" == "null" ]]
  60. then
  61. IFNAME="$(jq -r '.['$j'] | .portDeviceName' <<< "$NETWORK_LIST")"
  62. echo " Adding route $ROUTE to dev $IFNAME"
  63. ip route add "$ROUTE" dev "$IFNAME"
  64. # Routes will be deleted when ZT brings the interface down
  65. fi
  66. fi
  67. done
  68. done
  69. fi
  70. sleep 15
  71. done ) &
  72. wait