105 lines
2.7 KiB
Bash
105 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
STATE_DIR="${TS_STATE_DIR:-/var/lib/tailscale}"
|
|
SOCKET="${TS_SOCKET:-/var/run/tailscale/tailscaled.sock}"
|
|
DOCKER_HOST="${DOCKER_HOST:-unix:///tmp/docker.sock}"
|
|
RCLONE_CONFIG="${RCLONE_CONFIG:-/etc/rclone/rclone.conf}"
|
|
RCLONE_REMOTE="${RCLONE_REMOTE:-ketuakenzuya:}"
|
|
RCLONE_MOUNT_DIR="${RCLONE_MOUNT_DIR:-/mnt/ketuakenzuya}"
|
|
RCLONE_CACHE_DIR="${RCLONE_CACHE_DIR:-/tmp/rclone}"
|
|
RCLONE_CACHE_MAX_SIZE="${RCLONE_CACHE_MAX_SIZE:-4G}"
|
|
|
|
export DOCKER_HOST
|
|
|
|
mkdir -p \
|
|
"$STATE_DIR" \
|
|
"$(dirname "$SOCKET")" \
|
|
"$RCLONE_MOUNT_DIR" \
|
|
"$RCLONE_CACHE_DIR"
|
|
|
|
mkdir -p /etc/profile.d /root/.config/fish/conf.d
|
|
printf "export DOCKER_HOST='%s'\n" "$DOCKER_HOST" > /etc/profile.d/docker-host.sh
|
|
printf "set -gx DOCKER_HOST '%s'\n" "$DOCKER_HOST" > /etc/fish/conf.d/docker-host.fish
|
|
printf "set -gx DOCKER_HOST '%s'\n" "$DOCKER_HOST" > /root/.config/fish/conf.d/docker-host.fish
|
|
|
|
extra_args=()
|
|
if [[ -n "${TS_EXTRA_ARGS:-}" ]]; then
|
|
# shellcheck disable=SC2206
|
|
extra_args=( ${TS_EXTRA_ARGS} )
|
|
fi
|
|
|
|
up_args=()
|
|
if [[ -n "${TS_UP_ARGS:-}" ]]; then
|
|
# shellcheck disable=SC2206
|
|
up_args=( ${TS_UP_ARGS} )
|
|
fi
|
|
|
|
declare -a bg_pids=()
|
|
|
|
cleanup() {
|
|
for pid in "${bg_pids[@]}"; do
|
|
kill "$pid" 2>/dev/null || true
|
|
done
|
|
|
|
for pid in "${bg_pids[@]}"; do
|
|
wait "$pid" 2>/dev/null || true
|
|
done
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
if [[ "${START_TAILSCALED:-1}" == "1" ]]; then
|
|
if [[ ! -c /dev/net/tun ]]; then
|
|
echo "warning: /dev/net/tun tidak tersedia, tailscaled tidak dijalankan" >&2
|
|
else
|
|
tailscaled \
|
|
--state="${STATE_DIR}/tailscaled.state" \
|
|
--socket="$SOCKET" \
|
|
"${extra_args[@]}" &
|
|
bg_pids+=( "$!" )
|
|
|
|
if [[ -n "${TS_AUTHKEY:-}" || ${#up_args[@]} -gt 0 ]]; then
|
|
for _ in {1..30}; do
|
|
if tailscale --socket="$SOCKET" status >/dev/null 2>&1; then
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
tailscale --socket="$SOCKET" up \
|
|
${TS_AUTHKEY:+--auth-key="$TS_AUTHKEY"} \
|
|
"${up_args[@]}"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
extra_rclone_args=()
|
|
if [[ -n "${RCLONE_EXTRA_ARGS:-}" ]]; then
|
|
# shellcheck disable=SC2206
|
|
extra_rclone_args=( ${RCLONE_EXTRA_ARGS} )
|
|
fi
|
|
|
|
if [[ "${START_RCLONE:-1}" == "1" ]]; then
|
|
if [[ ! -c /dev/fuse ]]; then
|
|
echo "warning: /dev/fuse tidak tersedia, rclone mount tidak dijalankan" >&2
|
|
elif [[ ! -f "$RCLONE_CONFIG" ]]; then
|
|
echo "warning: config rclone tidak ditemukan di $RCLONE_CONFIG, mount tidak dijalankan" >&2
|
|
else
|
|
rclone mount \
|
|
--config "$RCLONE_CONFIG" \
|
|
--cache-dir "$RCLONE_CACHE_DIR" \
|
|
--vfs-cache-mode full \
|
|
--vfs-cache-max-size "$RCLONE_CACHE_MAX_SIZE" \
|
|
"${extra_rclone_args[@]}" \
|
|
"$RCLONE_REMOTE" \
|
|
"$RCLONE_MOUNT_DIR" &
|
|
bg_pids+=( "$!" )
|
|
fi
|
|
fi
|
|
|
|
if [[ $# -eq 0 ]]; then
|
|
exec fish
|
|
fi
|
|
|
|
exec "$@"
|