This commit is contained in:
@@ -14,10 +14,10 @@ FILE_SCANNER_ENABLED=false
|
||||
FINANCE_BOOTSTRAP_ENABLED=false
|
||||
FINANCE_BOOTSTRAP_PASSWORD=
|
||||
|
||||
APP_VERSION=1.0.0-preview.8
|
||||
APP_VERSION=1.0.0-preview.9
|
||||
UPDATE_CURRENT_VERSION_FILE=/opt/kaidi/current/VERSION
|
||||
FINANCE_UPDATE_ENABLED=true
|
||||
# Use either a stable direct asset base URL or the private Gitea latest-release API.
|
||||
# Use either a stable direct asset base URL or the public Gitea latest-release API.
|
||||
UPDATE_RELEASE_BASE_URL=
|
||||
UPDATE_RELEASE_API_URL=https://git.awaioi.com/api/v1/repos/ERP-Team/kaidi/releases/latest
|
||||
UPDATE_RELEASE_TOKEN=READ_ONLY_GITEA_TOKEN
|
||||
|
||||
@@ -5,20 +5,14 @@ umask 077
|
||||
|
||||
ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
||||
INSTALLER="$ROOT/deploy/install.sh"
|
||||
INSTALLER_SHA256=${KAIDI_INSTALLER_SHA256:-33d4921bcad7ef2be12f20bc0512a5f6df4227ea6dd3b7e6225164077d9cd9e7}
|
||||
INSTALLER_SHA256=${KAIDI_INSTALLER_SHA256:-faf52cc902abbc2bd48571caee3f4207de50ce339b82ce88fe23f9c4ce8f89ef}
|
||||
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:-}
|
||||
TEMP_TOKEN_FILE=
|
||||
|
||||
log() { printf '[kaidi-git-install] %s\n' "$*"; }
|
||||
die() { printf '[kaidi-git-install] ERROR: %s\n' "$*" >&2; exit 1; }
|
||||
|
||||
cleanup() {
|
||||
[ -z "$TEMP_TOKEN_FILE" ] || rm -f "$TEMP_TOKEN_FILE"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
[ -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"
|
||||
@@ -29,25 +23,6 @@ normalized_installer_sha256=$(printf '%s' "$INSTALLER_SHA256" | tr '[:upper:]' '
|
||||
[ "$normalized_actual_installer_sha256" = "$normalized_installer_sha256" ] \
|
||||
|| die "deploy/install.sh does not match the trusted SHA-256 for this Git tag"
|
||||
|
||||
if [ -z "$TOKEN_FILE" ]; then
|
||||
TOKEN_FILE=$(mktemp)
|
||||
TEMP_TOKEN_FILE=$TOKEN_FILE
|
||||
chmod 0600 "$TOKEN_FILE"
|
||||
if [ -t 0 ]; then
|
||||
read -rsp 'Gitea read-only token: ' token
|
||||
printf '\n'
|
||||
printf '%s' "$token" > "$TOKEN_FILE"
|
||||
unset token
|
||||
else
|
||||
die "Set KAIDI_RELEASE_TOKEN_FILE or run interactively to enter the Gitea read-only token"
|
||||
fi
|
||||
fi
|
||||
|
||||
[ -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"
|
||||
|
||||
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"
|
||||
@@ -56,10 +31,17 @@ fi
|
||||
|
||||
install_env=(
|
||||
"KAIDI_RELEASE_API_URL=$RELEASE_API_URL"
|
||||
"KAIDI_RELEASE_TOKEN_FILE=$TOKEN_FILE"
|
||||
"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_DB_URL=${KAIDI_DB_URL:-}
|
||||
|
||||
+4
-67
@@ -12,9 +12,9 @@ RELEASE_API_URL=${KAIDI_RELEASE_API_URL:-https://git.awaioi.com/api/v1/repos/ERP
|
||||
RELEASE_TOKEN=${KAIDI_RELEASE_TOKEN:-}
|
||||
RELEASE_TOKEN_FILE=${KAIDI_RELEASE_TOKEN_FILE:-}
|
||||
HEALTH_URL=${KAIDI_HEALTH_URL:-http://127.0.0.1:18080/actuator/health}
|
||||
TRUSTED_PUBLIC_KEY_SHA256=${KAIDI_RELEASE_PUBLIC_KEY_SHA256:-}
|
||||
TRUSTED_PUBLIC_KEY_SHA256=${KAIDI_RELEASE_PUBLIC_KEY_SHA256:-807c6aec1dc3f7ce494db16aa9d763c66f292033c38f328afd0390d2715a8cd9}
|
||||
REINSTALL=${KAIDI_REINSTALL:-false}
|
||||
SETUP_WIZARD=${KAIDI_SETUP_WIZARD:-false}
|
||||
SETUP_WIZARD=${KAIDI_SETUP_WIZARD:-true}
|
||||
WORK_DIR=
|
||||
RELEASE_AUTH_HEADER_FILE=
|
||||
INSTALL_TRANSACTION_ARMED=false
|
||||
@@ -24,8 +24,6 @@ BACKUP_DIR=
|
||||
JAVA_STAGED_DIR=
|
||||
JAVA_PREVIOUS_DIR=
|
||||
JAVA_ACTIVATED=false
|
||||
CREATED_DB_CONTAINER=false
|
||||
CREATED_DB_VOLUME=false
|
||||
|
||||
log() { printf '[kaidi-install] %s\n' "$*"; }
|
||||
die() { printf '[kaidi-install] ERROR: %s\n' "$*" >&2; exit 1; }
|
||||
@@ -160,18 +158,6 @@ install_packages() {
|
||||
fi
|
||||
}
|
||||
|
||||
install_docker() {
|
||||
command -v docker >/dev/null 2>&1 && return
|
||||
if command -v apt-get >/dev/null 2>&1; then
|
||||
apt-get install -y -qq docker.io
|
||||
elif command -v dnf >/dev/null 2>&1; then
|
||||
dnf install -y docker
|
||||
else
|
||||
yum install -y docker
|
||||
fi
|
||||
systemctl enable --now docker
|
||||
}
|
||||
|
||||
azul_arch() {
|
||||
case "$(uname -m)" in
|
||||
x86_64|amd64) printf x86 ;;
|
||||
@@ -312,48 +298,7 @@ configure_database() {
|
||||
fi
|
||||
[ "$REINSTALL" != true ] \
|
||||
|| die "KAIDI_REINSTALL needs database credentials in the existing installation or command environment"
|
||||
case "$(uname -m)" in
|
||||
i386|i486|i586|i686)
|
||||
die "32-bit Linux needs an external MySQL 8.4 database; set KAIDI_DB_URL, KAIDI_DB_USERNAME, and KAIDI_DB_PASSWORD"
|
||||
;;
|
||||
esac
|
||||
install_docker
|
||||
DB_USERNAME=kaidi
|
||||
DB_PASSWORD=$(random_secret)
|
||||
DB_ROOT_PASSWORD=$(random_secret)
|
||||
! docker inspect kaidi-finance-mysql >/dev/null 2>&1 \
|
||||
|| die "Docker container kaidi-finance-mysql already exists; provide explicit database parameters"
|
||||
! docker volume inspect kaidi_mysql_data >/dev/null 2>&1 \
|
||||
|| die "Docker volume kaidi_mysql_data already exists; provide explicit database parameters"
|
||||
docker volume create kaidi_mysql_data >/dev/null
|
||||
CREATED_DB_VOLUME=true
|
||||
docker run -d \
|
||||
--name kaidi-finance-mysql \
|
||||
--restart unless-stopped \
|
||||
-e MYSQL_DATABASE=kaidi_finance \
|
||||
-e MYSQL_USER="$DB_USERNAME" \
|
||||
-e MYSQL_PASSWORD="$DB_PASSWORD" \
|
||||
-e MYSQL_ROOT_PASSWORD="$DB_ROOT_PASSWORD" \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-p 127.0.0.1:3307:3306 \
|
||||
-v kaidi_mysql_data:/var/lib/mysql \
|
||||
--health-cmd='mysqladmin ping -h localhost -uroot -p$MYSQL_ROOT_PASSWORD --silent' \
|
||||
--health-interval=5s --health-timeout=5s --health-retries=30 \
|
||||
mysql:8.4 \
|
||||
--character-set-server=utf8mb4 \
|
||||
--collation-server=utf8mb4_0900_ai_ci \
|
||||
--default-time-zone=+00:00 >/dev/null
|
||||
CREATED_DB_CONTAINER=true
|
||||
local attempts=0 health
|
||||
while [ "$attempts" -lt 60 ]; do
|
||||
health=$(docker inspect --format '{{.State.Health.Status}}' kaidi-finance-mysql 2>/dev/null || true)
|
||||
[ "$health" = healthy ] && break
|
||||
[ "$health" = unhealthy ] && die "MySQL container failed its health check"
|
||||
attempts=$((attempts + 1))
|
||||
sleep 2
|
||||
done
|
||||
[ "$health" = healthy ] || die "MySQL did not become ready"
|
||||
DB_URL='jdbc:mysql://127.0.0.1:3307/kaidi_finance?useUnicode=true&characterEncoding=utf8&connectionTimeZone=UTC&serverTimezone=UTC'
|
||||
die "An external MySQL 8.4 database is required; set KAIDI_DB_URL, KAIDI_DB_USERNAME, and KAIDI_DB_PASSWORD"
|
||||
}
|
||||
|
||||
database_host() {
|
||||
@@ -599,14 +544,6 @@ cleanup() {
|
||||
&& [ "$INSTALL_COMMITTED" != true ]; then
|
||||
rollback_install || log "ERROR: rollback was incomplete; inspect systemd and Nginx state"
|
||||
fi
|
||||
if [ "$result" -ne 0 ] && [ "$INSTALL_COMMITTED" != true ] \
|
||||
&& [ "$CREATED_DB_CONTAINER" = true ]; then
|
||||
docker rm -f kaidi-finance-mysql >/dev/null 2>&1 || true
|
||||
fi
|
||||
if [ "$result" -ne 0 ] && [ "$INSTALL_COMMITTED" != true ] \
|
||||
&& [ "$CREATED_DB_VOLUME" = true ]; then
|
||||
docker volume rm kaidi_mysql_data >/dev/null 2>&1 || true
|
||||
fi
|
||||
[ -z "$WORK_DIR" ] || rm -rf "$WORK_DIR"
|
||||
exit "$result"
|
||||
}
|
||||
@@ -755,7 +692,7 @@ write_env_file "$CONFIG_ROOT/update.env" \
|
||||
KAIDI_UPDATE_STATE_ROOT "$UPDATE_STATE_ROOT" \
|
||||
KAIDI_SERVICE_NAME kaidi-finance.service \
|
||||
KAIDI_HEALTH_URL "$HEALTH_URL" \
|
||||
KAIDI_DB_CONTAINER "${KAIDI_DB_CONTAINER:-kaidi-finance-mysql}" \
|
||||
KAIDI_DB_CONTAINER "${KAIDI_DB_CONTAINER:-}" \
|
||||
KAIDI_DB_HOST "$(database_host)" \
|
||||
KAIDI_DB_PORT "$(database_port)" \
|
||||
KAIDI_DB_NAME "$(database_name)" \
|
||||
|
||||
Reference in New Issue
Block a user