71 lines
3.1 KiB
Bash
Executable File
71 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
umask 077
|
|
|
|
ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
|
INSTALLER="$ROOT/deploy/install.sh"
|
|
INSTALLER_SHA256=${KAIDI_INSTALLER_SHA256:-6256b05025aa314d4c02e7c0f5d2ca530f28ec5d10f833504b34c09ada6e02a5}
|
|
RELEASE_API_URL=${KAIDI_RELEASE_API_URL:-https://git.awaioi.com/api/v1/repos/ERP-Team/kaidi/releases/latest}
|
|
PUBLIC_KEY_SHA256=${KAIDI_RELEASE_PUBLIC_KEY_SHA256:-807c6aec1dc3f7ce494db16aa9d763c66f292033c38f328afd0390d2715a8cd9}
|
|
TOKEN_FILE=${KAIDI_RELEASE_TOKEN_FILE:-}
|
|
|
|
log() { printf '[kaidi-git-install] %s\n' "$*"; }
|
|
die() { printf '[kaidi-git-install] ERROR: %s\n' "$*" >&2; exit 1; }
|
|
|
|
[ -f "$INSTALLER" ] || die "deploy/install.sh is missing; run this command from the Kaidi Git checkout"
|
|
command -v sha256sum >/dev/null 2>&1 || die "sha256sum is required"
|
|
[[ "$INSTALLER_SHA256" =~ ^[0-9A-Fa-f]{64}$ ]] || die "The installer SHA-256 is invalid"
|
|
[[ "$PUBLIC_KEY_SHA256" =~ ^[0-9A-Fa-f]{64}$ ]] || die "The release public-key SHA-256 is invalid"
|
|
actual_installer_sha256=$(sha256sum "$INSTALLER" | awk '{print $1}')
|
|
normalized_actual_installer_sha256=$(printf '%s' "$actual_installer_sha256" | tr '[:upper:]' '[:lower:]')
|
|
normalized_installer_sha256=$(printf '%s' "$INSTALLER_SHA256" | tr '[:upper:]' '[:lower:]')
|
|
[ "$normalized_actual_installer_sha256" = "$normalized_installer_sha256" ] \
|
|
|| die "deploy/install.sh does not match the trusted SHA-256 for this Git tag"
|
|
|
|
root_command=(env)
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
command -v sudo >/dev/null 2>&1 || die "sudo is required when not running as root"
|
|
root_command=(sudo env)
|
|
fi
|
|
|
|
install_env=(
|
|
"KAIDI_RELEASE_API_URL=$RELEASE_API_URL"
|
|
"KAIDI_RELEASE_PUBLIC_KEY_SHA256=$PUBLIC_KEY_SHA256"
|
|
)
|
|
|
|
if [ -n "$TOKEN_FILE" ]; then
|
|
[ -f "$TOKEN_FILE" ] && [ ! -L "$TOKEN_FILE" ] || die "The Gitea token file must be a regular file"
|
|
token_size=$(wc -c < "$TOKEN_FILE" | tr -d '[:space:]')
|
|
[ "$token_size" -gt 0 ] && [ "$token_size" -le 512 ] || die "The Gitea token file must contain 1 to 512 bytes"
|
|
LC_ALL=C grep -q '[[:cntrl:]]' "$TOKEN_FILE" && die "The Gitea token file contains invalid control characters"
|
|
install_env+=("KAIDI_RELEASE_TOKEN_FILE=$TOKEN_FILE")
|
|
fi
|
|
|
|
KAIDI_REINSTALL=${KAIDI_REINSTALL:-}
|
|
KAIDI_SETUP_WIZARD=${KAIDI_SETUP_WIZARD:-}
|
|
KAIDI_APP_PORT=${KAIDI_APP_PORT:-}
|
|
KAIDI_SERVER_ADDRESS=${KAIDI_SERVER_ADDRESS:-}
|
|
KAIDI_DB_URL=${KAIDI_DB_URL:-}
|
|
KAIDI_DB_USERNAME=${KAIDI_DB_USERNAME:-}
|
|
KAIDI_DB_PASSWORD=${KAIDI_DB_PASSWORD:-}
|
|
KAIDI_DB_HOST=${KAIDI_DB_HOST:-}
|
|
KAIDI_DB_PORT=${KAIDI_DB_PORT:-}
|
|
KAIDI_DB_NAME=${KAIDI_DB_NAME:-}
|
|
KAIDI_DB_CONTAINER=${KAIDI_DB_CONTAINER:-}
|
|
KAIDI_SESSION_COOKIE_SECURE=${KAIDI_SESSION_COOKIE_SECURE:-}
|
|
KAIDI_FILE_SCANNER_ENABLED=${KAIDI_FILE_SCANNER_ENABLED:-}
|
|
|
|
for name in KAIDI_REINSTALL KAIDI_SETUP_WIZARD KAIDI_APP_PORT KAIDI_SERVER_ADDRESS \
|
|
KAIDI_DB_URL KAIDI_DB_USERNAME KAIDI_DB_PASSWORD \
|
|
KAIDI_DB_HOST KAIDI_DB_PORT KAIDI_DB_NAME KAIDI_DB_CONTAINER \
|
|
KAIDI_SESSION_COOKIE_SECURE KAIDI_FILE_SCANNER_ENABLED; do
|
|
value=${!name}
|
|
if [ -n "$value" ]; then
|
|
install_env+=("$name=$value")
|
|
fi
|
|
done
|
|
|
|
log "Installing the latest signed release from $RELEASE_API_URL"
|
|
"${root_command[@]}" "${install_env[@]}" bash "$INSTALLER"
|