Skip to content
Open
28 changes: 21 additions & 7 deletions bin/compile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand All @@ -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
Expand Down Expand Up @@ -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
fi
41 changes: 22 additions & 19 deletions bin/heroku-tailscale-start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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" \
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is covered in my other PR

--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}
Comment on lines -48 to +52
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is covered in my other PR


export ALL_PROXY=socks5://localhost:1055/

Expand Down