diff --git a/bin/compile b/bin/compile index 2e98dcb..701f110 100755 --- a/bin/compile +++ b/bin/compile @@ -16,22 +16,36 @@ function indent() { sed -e 's/^/ /' } +function tailscale_latest_release_json() { + if [ -z "$LATEST_RELEASE_JSON" ]; then + LATEST_RELEASE_JSON=$(curl -s https://api.github.com/repos/tailscale/tailscale/releases/latest) + fi + echo "$LATEST_RELEASE_JSON" +} + +function tailscale_latest_version() { + local version=$(jq -r '.tag_name' <<< "$(tailscale_latest_release_json)") + echo "${version#v}" # remove leading 'v' +} + # setup variables BUILD_DIR=$1 CACHE_DIR=$2 ENV_DIR=$3 BUILDPACK_DIR="$(dirname "$(dirname "$0")")" -TAILSCALE_VERSION=1.74.0 +TAILSCALE_VERSION=${TAILSCALE_VERSION:-$(tailscale_latest_version)} TAILSCALE_BUILD_ARCH=amd64 TAILSCALE_SOURCE_URL="https://pkgs.tailscale.com/stable/tailscale_${TAILSCALE_VERSION}_${TAILSCALE_BUILD_ARCH}.tgz" TAILSCALE_INSTALL_DIR="$BUILD_DIR/vendor/tailscale" -PROXYCHAINS_VERSION=4.17 +PROXYCHAINS_VERSION=${PROXYCHAINS_VERSION:-4.17} PROXYCHAINS_SOURCE_URL="https://github.com/rofl0r/proxychains-ng/archive/refs/tags/v$PROXYCHAINS_VERSION.tar.gz" PROXYCHAINS_INSTALL_DIR="$BUILD_DIR/vendor/proxychains-ng" -log "Installing Tailscale" +# TODO: a new version of Tailscale is available check. + +log "Installing Tailscale $TAILSCALE_VERSION" mkdir -p $TAILSCALE_INSTALL_DIR export PATH="$TAILSCALE_INSTALL_DIR:$PATH" curl -sL $TAILSCALE_SOURCE_URL \ @@ -45,10 +59,10 @@ chmod +x "$TAILSCALE_INSTALL_DIR/heroku-tailscale-test.sh" mkdir -p $BUILD_DIR/.profile.d echo 'export PATH="/app/vendor/tailscale:$PATH"' >> $BUILD_DIR/.profile.d/heroku-tailscale-buildpack.sh -log "Installing ProxyChains-ng" +log "Installing ProxyChains-ng $PROXYCHAINS_VERSION" PROXYCHAINS_BUILD_DIR="$CACHE_DIR/proxychains-ng-$PROXYCHAINS_VERSION" -if [ ! -f "$PROXYCHAINS_BUILD_DIR/proxychains4" ]; then - rm -rf $PROXYCHAINS_BUILD_DIR +if [ ! -f "$PROXYCHAINS_BUILD_DIR/proxychains4" ]; then + rm -rf $PROXYCHAINS_BUILD_DIR wget $PROXYCHAINS_SOURCE_URL -O $CACHE_DIR/proxychains.tar.gz cd $CACHE_DIR tar -zxvf $CACHE_DIR/proxychains.tar.gz @@ -81,4 +95,4 @@ if [ -f "$BUILD_DIR/bin/rails" ]; then mv $BUILD_DIR/bin/rake $BUILD_DIR/bin/rake_original cp "$BUILDPACK_DIR/bin/rails/rake" $BUILD_DIR/bin/ chmod +x $BUILD_DIR/bin/rake -fi \ No newline at end of file +fi diff --git a/bin/heroku-tailscale-start.sh b/bin/heroku-tailscale-start.sh index ced4bfc..0adc7b3 100755 --- a/bin/heroku-tailscale-start.sh +++ b/bin/heroku-tailscale-start.sh @@ -8,20 +8,25 @@ if [ -z "$TAILSCALE_AUTH_KEY" ]; then fi wait_for_tailscale_running() { - timeout=5 # Timeout in seconds - interval=0.5 # Interval between checks - elapsed=0 - - while [ "$elapsed" -lt "$timeout" ]; do - state=$(tailscale status -json | jq -r .BackendState) - if [ "$state" = "Running" ]; then - return 0 - fi - sleep "$interval" - elapsed=$(echo "$elapsed + $interval" | bc) - done - - return 1 + timeout=${TAILSCALE_RUNNING_TIMEOUT:-5} # Timeout in seconds + interval=0.5 # Interval between checks + + # convert to milliseconds so we can use integer math + timeout_ms=$(awk "BEGIN {print $timeout * 1000}") + interval_ms=$(awk "BEGIN {print $interval * 1000}") + + elapsed=0 + + while [ "$elapsed" -lt "$timeout_ms" ]; do + state=$(tailscale status -json | jq -r .BackendState) + if [ "$state" = "Running" ]; then + return 0 + fi + sleep "$interval" + elapsed=$((elapsed + interval_ms)) + done + + return 1 } if [ -z "$TAILSCALE_HOSTNAME" ]; then @@ -39,14 +44,12 @@ else TAILSCALE_HOSTNAME="$TAILSCALE_HOSTNAME" fi tailscaled -cleanup > /dev/null 2>&1 -(tailscaled -verbose ${TAILSCALED_VERBOSE:--1} --tun=userspace-networking --socks5-server=localhost:1055 > /dev/null 2>&1 &) +(tailscaled -verbose ${TAILSCALED_VERBOSE:--1} --tun=userspace-networking --socks5-server=localhost:1055 > /dev/null 2>&1 &) tailscale up \ - --authkey="${TAILSCALE_AUTH_KEY}?preauthorized=true&ephemeral=true" \ + --authkey="${TAILSCALE_AUTH_KEY}" \ --hostname="$TAILSCALE_HOSTNAME" \ --advertise-tags=${TAILSCALE_ADVERTISE_TAGS:-} \ - --accept-routes \ - --timeout=15s \ - ${TAILSCALE_ADDITIONAL_ARGS:---timeout=15s} + ${TAILSCALE_ADDITIONAL_ARGS:---accept-routes --timeout=15s} export ALL_PROXY=socks5://localhost:1055/