|
@@ -1,5 +1,5 @@
|
|
|
#!/usr/bin/env bash
|
|
|
-set -e # Exit immediately if a command exits with a non-zero status.
|
|
|
+set -e # Exit immediately if a command exits with a non-zero status.
|
|
|
|
|
|
# use greadlink instead of readlink on osx
|
|
|
if [[ "$(uname)" == "Darwin" ]]; then
|
|
@@ -8,23 +8,66 @@ else
|
|
|
readlink=readlink
|
|
|
fi
|
|
|
|
|
|
+NGINX_PORT=80
|
|
|
+PROXY_PORT=8080
|
|
|
+
|
|
|
+while [ -n "$1" ]; do # while loop starts
|
|
|
+ case "$1" in
|
|
|
+ --rc) rc="true" ;;
|
|
|
+ --ci) ci="true" ;;
|
|
|
+ --port)
|
|
|
+ port="$2"
|
|
|
+
|
|
|
+ if [[ "${port}" =~ ^[0-9]+$ ]]; then
|
|
|
+ NGINX_PORT="${port}"
|
|
|
+ else
|
|
|
+ echo "--port must be a number"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --proxy-port)
|
|
|
+ proxy_port="$2"
|
|
|
+
|
|
|
+ if [[ "${proxy_port}" =~ ^[0-9]+$ ]]; then
|
|
|
+ PROXY_PORT="${proxy_port}"
|
|
|
+ else
|
|
|
+ echo "--proxy-port must be a number"
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ shift
|
|
|
+ ;;
|
|
|
+ --)
|
|
|
+ shift # The double dash makes them parameters
|
|
|
+ break
|
|
|
+ ;;
|
|
|
+ *) echo "Option $1 not recognized" && exit 1 ;;
|
|
|
+ esac
|
|
|
+ shift
|
|
|
+done
|
|
|
+
|
|
|
+# Check we are on linux
|
|
|
+if [[ "$(uname)" != "Linux" ]]; then
|
|
|
+ echo "Tipi only works on Linux"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
ROOT_FOLDER="$($readlink -f $(dirname "${BASH_SOURCE[0]}")/..)"
|
|
|
STATE_FOLDER="${ROOT_FOLDER}/state"
|
|
|
SED_ROOT_FOLDER="$(echo $ROOT_FOLDER | sed 's/\//\\\//g')"
|
|
|
INTERNAL_IP="$(hostname -I | awk '{print $1}')"
|
|
|
DNS_IP=9.9.9.9 # Default to Quad9 DNS
|
|
|
-USERNAME="$(id -nu 1000)"
|
|
|
ARCHITECTURE="$(uname -m)"
|
|
|
|
|
|
-if [[ "$architecture" == "aarch64" ]]; then
|
|
|
+if [[ "$ARCHITECTURE" == "aarch64" ]]; then
|
|
|
ARCHITECTURE="arm64"
|
|
|
fi
|
|
|
|
|
|
if [[ $UID != 0 ]]; then
|
|
|
- echo "Tipi must be started as root"
|
|
|
- echo "Please re-run this script as"
|
|
|
- echo " sudo ./scripts/start"
|
|
|
- exit 1
|
|
|
+ echo "Tipi must be started as root"
|
|
|
+ echo "Please re-run this script as"
|
|
|
+ echo " sudo ./scripts/start"
|
|
|
+ exit 1
|
|
|
fi
|
|
|
|
|
|
# Configure Tipi if it isn't already configured
|
|
@@ -34,10 +77,10 @@ fi
|
|
|
|
|
|
# Get field from json file
|
|
|
function get_json_field() {
|
|
|
- local json_file="$1"
|
|
|
- local field="$2"
|
|
|
+ local json_file="$1"
|
|
|
+ local field="$2"
|
|
|
|
|
|
- echo $(jq -r ".${field}" "${json_file}")
|
|
|
+ echo $(jq -r ".${field}" "${json_file}")
|
|
|
}
|
|
|
|
|
|
# Deterministically derives 128 bits of cryptographically secure entropy
|
|
@@ -47,7 +90,7 @@ function derive_entropy() {
|
|
|
tipi_seed=$(cat "${SEED_FILE}") || true
|
|
|
|
|
|
if [[ -z "$tipi_seed" ]] || [[ -z "$identifier" ]]; then
|
|
|
- >&2 echo "Missing derivation parameter, this is unsafe, exiting."
|
|
|
+ echo >&2 "Missing derivation parameter, this is unsafe, exiting."
|
|
|
exit 1
|
|
|
fi
|
|
|
|
|
@@ -69,8 +112,10 @@ if [[ ! -f "${STATE_FOLDER}/users.json" ]]; then
|
|
|
cp "${ROOT_FOLDER}/templates/users-sample.json" "${STATE_FOLDER}/users.json"
|
|
|
fi
|
|
|
|
|
|
-chown -R 1000:1000 "${STATE_FOLDER}/apps.json"
|
|
|
-chown -R 1000:1000 "${STATE_FOLDER}/users.json"
|
|
|
+# Get current dns from host
|
|
|
+if [[ -f "/etc/resolv.conf" ]]; then
|
|
|
+ TEMP=$(cat /etc/resolv.conf | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -n 1)
|
|
|
+fi
|
|
|
|
|
|
# Get dns ip if pihole is installed
|
|
|
str=$(get_json_field ${STATE_FOLDER}/apps.json installed)
|
|
@@ -83,7 +128,7 @@ fi
|
|
|
# Create seed file with cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1
|
|
|
if [[ ! -f "${STATE_FOLDER}/seed" ]]; then
|
|
|
echo "Generating seed..."
|
|
|
- cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 > "${STATE_FOLDER}/seed"
|
|
|
+ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 >"${STATE_FOLDER}/seed"
|
|
|
fi
|
|
|
|
|
|
export DOCKER_CLIENT_TIMEOUT=240
|
|
@@ -112,7 +157,8 @@ for template in "${ENV_FILE}"; do
|
|
|
sed -i "s/<root_folder>/${SED_ROOT_FOLDER}/g" "${template}"
|
|
|
sed -i "s/<tipi_version>/$(cat "${ROOT_FOLDER}/VERSION")/g" "${template}"
|
|
|
sed -i "s/<architecture>/${ARCHITECTURE}/g" "${template}"
|
|
|
-
|
|
|
+ sed -i "s/<nginx_port>/${NGINX_PORT}/g" "${template}"
|
|
|
+ sed -i "s/<proxy_port>/${PROXY_PORT}/g" "${template}"
|
|
|
done
|
|
|
|
|
|
mv -f "$ENV_FILE" "$ROOT_FOLDER/.env"
|
|
@@ -121,28 +167,29 @@ mv -f "$ENV_FILE" "$ROOT_FOLDER/.env"
|
|
|
echo "Running system-info.sh..."
|
|
|
bash "${ROOT_FOLDER}/scripts/system-info.sh"
|
|
|
|
|
|
-# ansible-playbook ansible/start.yml -i ansible/hosts -K -e username="$USERNAME"
|
|
|
-
|
|
|
-docker-compose --env-file "${ROOT_FOLDER}/.env" pull
|
|
|
-# Run docker-compose
|
|
|
-docker-compose --env-file "${ROOT_FOLDER}/.env" up --detach --remove-orphans --build || {
|
|
|
- echo "Failed to start containers"
|
|
|
- exit 1
|
|
|
-}
|
|
|
-
|
|
|
-# str=$(get_json_field ${STATE_FOLDER}/apps.json installed)
|
|
|
-# apps_to_start=($str)
|
|
|
-
|
|
|
-# for app in "${apps_to_start[@]}"; do
|
|
|
-# "${ROOT_FOLDER}/scripts/app.sh" start $app
|
|
|
-# done
|
|
|
-
|
|
|
-# Give permissions 1000:1000 to app data
|
|
|
-chown -R 1000:1000 "${ROOT_FOLDER}/app-data"
|
|
|
+## Don't run if config-only
|
|
|
+if [[ ! $ci == "true" ]]; then
|
|
|
+
|
|
|
+ if [[ $rc == "true" ]]; then
|
|
|
+ docker-compose -f docker-compose.rc.yml --env-file "${ROOT_FOLDER}/.env" pull
|
|
|
+ # Run docker-compose
|
|
|
+ docker-compose -f docker-compose.rc.yml --env-file "${ROOT_FOLDER}/.env" up --detach --remove-orphans --build || {
|
|
|
+ echo "Failed to start containers"
|
|
|
+ exit 1
|
|
|
+ }
|
|
|
+ else
|
|
|
+ docker-compose --env-file "${ROOT_FOLDER}/.env" pull
|
|
|
+ # Run docker-compose
|
|
|
+ docker-compose --env-file "${ROOT_FOLDER}/.env" up --detach --remove-orphans --build || {
|
|
|
+ echo "Failed to start containers"
|
|
|
+ exit 1
|
|
|
+ }
|
|
|
+ fi
|
|
|
+fi
|
|
|
|
|
|
echo "Tipi is now running"
|
|
|
echo ""
|
|
|
-cat << "EOF"
|
|
|
+cat <<"EOF"
|
|
|
_,.
|
|
|
,` -.)
|
|
|
'( _/'-\\-.
|
|
@@ -164,8 +211,12 @@ cat << "EOF"
|
|
|
| {__)
|
|
|
()`
|
|
|
EOF
|
|
|
-echo ""
|
|
|
-echo "Visit http://${INTERNAL_IP}/ to view the dashboard"
|
|
|
-echo ""
|
|
|
|
|
|
+port_display=""
|
|
|
+if [[ $NGINX_PORT != "80" ]]; then
|
|
|
+ port_display=":${NGINX_PORT}"
|
|
|
+fi
|
|
|
|
|
|
+echo ""
|
|
|
+echo "Visit http://${INTERNAL_IP}${port_display}/ to view the dashboard"
|
|
|
+echo ""
|