2 Commits
Author SHA1 Message Date
Qiufeng c9d5d678dc fix: add short CentOS recovery bootstrap 2026-08-04 14:27:38 +08:00
Qiufeng e21978c25c fix: add CentOS 9 reinstall recovery 2026-08-04 14:15:43 +08:00
2 changed files with 115 additions and 0 deletions
Executable
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -Eeuo pipefail
TARGET=/root/kaidi-erp-reinstall-v031.sh
URL=http://38.76.196.225:10099/awaioi/ERP/raw/tag/recovery-v0.3.1-1/reinstall-centos9.sh
SHA256=0370fb17926f3b53d5ae849310fdc6cbbf019150415365a464b0972b8edf5d9a
curl -fsSL --connect-timeout 15 --max-time 300 "$URL" -o "$TARGET"
printf '%s %s\n' "$SHA256" "$TARGET" | sha256sum -c -
exec bash "$TARGET"
+105
View File
@@ -0,0 +1,105 @@
#!/usr/bin/env bash
set -Eeuo pipefail
GITEA_BASE_URL="http://38.76.196.225:10099"
REPOSITORY="awaioi/ERP"
VERSION="0.3.1"
TAG="v${VERSION}"
INSTALL_SHA256="89a3c45e76f500c9475cb596ea29e3518bfafdc59f36dd3c7b316ed3cdd0448c"
UNINSTALL_SHA256="98c56fed2fd4d01874e4ab5a1a4f3ec42ec3e29b315ffd87385a95488d587546"
PG_ROOT="${ERP_RECOVERY_PG_ROOT:-/www/server/pgsql}"
PG_DATA="${ERP_RECOVERY_PG_DATA:-/www/server/pgsql/data}"
PG_INIT_SCRIPT="${ERP_RECOVERY_PG_INIT_SCRIPT:-/etc/init.d/pgsql}"
TMP_DIR=""
say() { printf '[ERP Recovery] %s\n' "$*"; }
fail() { printf '[ERP Recovery] ERROR: %s\n' "$*" >&2; exit 1; }
cleanup() {
[[ -z "$TMP_DIR" || ! -d "$TMP_DIR" ]] || rm -rf -- "$TMP_DIR"
}
trap cleanup EXIT
postgres_port_open() {
timeout 2 bash -c 'exec 3<>/dev/tcp/127.0.0.1/5432' >/dev/null 2>&1
}
wait_for_postgres() {
local _
for _ in {1..60}; do
postgres_port_open && return 0
sleep 1
done
return 1
}
start_erp_postgres() {
if postgres_port_open; then
say 'PostgreSQL is already listening on 127.0.0.1:5432'
return 0
fi
[[ -f "$PG_DATA/PG_VERSION" ]] \
|| fail "PostgreSQL data directory is missing: $PG_DATA"
if [[ -x "$PG_INIT_SCRIPT" ]]; then
say "Starting PostgreSQL with $PG_INIT_SCRIPT"
if ! "$PG_INIT_SCRIPT" start; then
say 'The init script returned an error; checking whether PostgreSQL still started'
fi
else
local pg_ctl pg_user
pg_ctl="$(find "$PG_ROOT" -type f -name pg_ctl -print -quit 2>/dev/null || true)"
[[ -n "$pg_ctl" && -x "$pg_ctl" ]] || fail "pg_ctl was not found below $PG_ROOT"
pg_user="$(stat -c '%U' "$PG_DATA")" || fail 'Unable to determine the PostgreSQL owner'
id "$pg_user" >/dev/null 2>&1 || fail "PostgreSQL owner does not exist: $pg_user"
say "Starting PostgreSQL as $pg_user"
runuser -u "$pg_user" -- "$pg_ctl" \
-D "$PG_DATA" \
-l "$PG_DATA/startup.log" \
-w -t 60 start
fi
if ! wait_for_postgres; then
[[ ! -r "$PG_DATA/startup.log" ]] || tail -n 100 "$PG_DATA/startup.log" >&2
fail 'PostgreSQL did not listen on 127.0.0.1:5432 within 60 seconds'
fi
say 'PostgreSQL is ready on 127.0.0.1:5432'
}
download_verified_script() {
local name="$1" expected="$2" destination
destination="$TMP_DIR/$name"
curl -fsSL --connect-timeout 15 --max-time 300 \
"$GITEA_BASE_URL/$REPOSITORY/raw/tag/$TAG/$name" \
-o "$destination"
printf '%s %s\n' "$expected" "$destination" | sha256sum -c - >&2
printf '%s' "$destination"
}
main() {
[[ "$(id -u)" == "0" ]] || fail 'Run this recovery command as root'
for command in bash curl find runuser sha256sum stat timeout; do
command -v "$command" >/dev/null 2>&1 || fail "Missing command: $command"
done
start_erp_postgres
TMP_DIR="$(mktemp -d "${TMPDIR:-/tmp}/kaidi-erp-recovery.XXXXXX")"
local uninstaller installer
uninstaller="$(download_verified_script uninstall.sh "$UNINSTALL_SHA256")"
say 'Removing the pending installation and its PostgreSQL schema safely'
bash "$uninstaller" --purge-database --yes
installer="$(download_verified_script install.sh "$INSTALL_SHA256")"
say "Installing Kaidi ERP $VERSION"
bash "$installer" \
--gitea-url "$GITEA_BASE_URL" \
--repository "$REPOSITORY" \
--version "$VERSION" \
--allow-insecure
}
if [[ "${BASH_SOURCE[0]:-$0}" == "$0" ]]; then
main "$@"
fi