61 lines
1.7 KiB
Bash
Executable File
61 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
SETUP_SCRIPT="${PROJECT_DIR}/setup_native_venv.sh"
|
|
RUN_SCRIPT="${PROJECT_DIR}/scripts/run.sh"
|
|
INSTALL_SERVICE_SCRIPT="${PROJECT_DIR}/scripts/install_service.sh"
|
|
PROJECT_USER="${SUDO_USER:-$(id -un)}"
|
|
|
|
run_privileged() {
|
|
if [[ "$(id -u)" -eq 0 ]]; then
|
|
"$@"
|
|
return
|
|
fi
|
|
sudo "$@"
|
|
}
|
|
|
|
run_project_user() {
|
|
if [[ "$(id -u)" -eq 0 && -n "${SUDO_USER:-}" ]]; then
|
|
sudo -u "${PROJECT_USER}" -H "$@"
|
|
return
|
|
fi
|
|
"$@"
|
|
}
|
|
|
|
ensure_system_package() {
|
|
local command_name="$1"
|
|
local package_name="$2"
|
|
if command -v "${command_name}" >/dev/null 2>&1; then
|
|
return
|
|
fi
|
|
|
|
echo "Installing missing package: ${package_name}"
|
|
run_privileged apt-get -o Acquire::ForceIPv4=true update
|
|
run_privileged apt-get -o Acquire::ForceIPv4=true install -y "${package_name}"
|
|
}
|
|
|
|
ensure_system_package ffmpeg ffmpeg
|
|
|
|
if [[ ! -d "/usr/lib/python3.12/venv" && ! -d "/usr/lib/python3.12/ensurepip" ]]; then
|
|
echo "Installing missing package: python3.12-venv"
|
|
run_privileged apt-get -o Acquire::ForceIPv4=true update
|
|
run_privileged apt-get -o Acquire::ForceIPv4=true install -y python3.12-venv
|
|
fi
|
|
|
|
if ! command -v nvidia-smi >/dev/null 2>&1; then
|
|
echo "nvidia-smi is required but not installed." >&2
|
|
exit 1
|
|
fi
|
|
|
|
run_project_user env PYTHON_BIN="${PYTHON_BIN:-python3.12}" bash "${SETUP_SCRIPT}"
|
|
run_project_user bash "${RUN_SCRIPT}" --prepare-only
|
|
bash "${INSTALL_SERVICE_SCRIPT}"
|
|
run_privileged systemctl enable --now people-flow.service
|
|
|
|
cat <<EOF
|
|
Offline install complete.
|
|
Service started and enabled on boot: people-flow.service
|
|
Runtime log: ${PROJECT_DIR}/outputs/rtsp_run.log
|
|
EOF
|