#!/usr/bin/env bash set -euo pipefail RELEASE_VERSION="${BMS_RELEASE_VERSION:-latest}" DOWNLOAD_BASE_URL="${BMS_DOWNLOAD_BASE_URL:-https://downloads.mybms.com.br}" TMP_DIR="${BMS_TMP_DIR:-/tmp/painel-bms-install}" INSTALL_DIR="${BMS_INSTALL_DIR:-/opt/painel}" RUN_USER="${BMS_RUN_USER:-${SUDO_USER:-${USER:-agronet}}}" MODE="${BMS_MODE:-notebook}" HTTP_PORT="${BMS_HTTP_PORT:-8890}" FALLBACK_PORT="${BMS_FALLBACK_PORT:-8891}" LICENSE_SERVER_URL="${BMS_LICENSE_SERVER_URL:-https://licenca.mybms.com.br}" LICENSE_ENFORCEMENT="${BMS_LICENSE_ENFORCEMENT:-false}" LICENSE_VERIFY_TLS="${BMS_LICENSE_VERIFY_TLS:-true}" LICENSE_SUPPORT_EMAIL="${BMS_LICENSE_SUPPORT_EMAIL:-comercial@mybms.com.br}" LICENSE_SUPPORT_URL="${BMS_LICENSE_SUPPORT_URL:-https://mybms.com.br}" usage() { cat <<'EOF' Uso: install.sh [opcoes] Opcoes: --release-version Versao da release (padrao: latest) --download-base-url Base de downloads (padrao: https://downloads.mybms.com.br) --tmp-dir Diretorio temporario do download --install-dir Diretorio final da aplicacao (padrao: /opt/painel) --run-user Usuario de execucao do servico --mode Perfil de hardware --http-port Porta HTTP principal --fallback-port Porta fallback --license-server-url URL do servidor central de licencas --license-enforcement Habilita validacao de licenca --license-verify-tls Verifica certificado TLS da API --license-support-email Email comercial --license-support-url URL comercial -h, --help Mostra esta ajuda Variaveis equivalentes: BMS_RELEASE_VERSION, BMS_DOWNLOAD_BASE_URL, BMS_TMP_DIR, BMS_INSTALL_DIR, BMS_RUN_USER, BMS_MODE, BMS_HTTP_PORT, BMS_FALLBACK_PORT, BMS_LICENSE_SERVER_URL, BMS_LICENSE_ENFORCEMENT, BMS_LICENSE_VERIFY_TLS, BMS_LICENSE_SUPPORT_EMAIL, BMS_LICENSE_SUPPORT_URL. EOF } while [[ $# -gt 0 ]]; do case "$1" in --release-version) RELEASE_VERSION="${2:-}" shift 2 ;; --download-base-url) DOWNLOAD_BASE_URL="${2:-}" shift 2 ;; --tmp-dir) TMP_DIR="${2:-}" shift 2 ;; --install-dir) INSTALL_DIR="${2:-}" shift 2 ;; --run-user) RUN_USER="${2:-}" shift 2 ;; --mode) MODE="${2:-}" shift 2 ;; --http-port) HTTP_PORT="${2:-}" shift 2 ;; --fallback-port) FALLBACK_PORT="${2:-}" shift 2 ;; --license-server-url) LICENSE_SERVER_URL="${2:-}" shift 2 ;; --license-enforcement) LICENSE_ENFORCEMENT="${2:-}" shift 2 ;; --license-verify-tls) LICENSE_VERIFY_TLS="${2:-}" shift 2 ;; --license-support-email) LICENSE_SUPPORT_EMAIL="${2:-}" shift 2 ;; --license-support-url) LICENSE_SUPPORT_URL="${2:-}" shift 2 ;; -h|--help) usage exit 0 ;; *) echo "[ERRO] Opcao invalida: $1" >&2 usage exit 1 ;; esac done ARCHIVE_NAME="painel-bms-${RELEASE_VERSION}.tar.gz" ARCHIVE_URL="${DOWNLOAD_BASE_URL%/}/releases/${ARCHIVE_NAME}" CHECKSUM_URL="${ARCHIVE_URL}.sha256" echo "[1/5] Preparando download em ${TMP_DIR}..." rm -rf "${TMP_DIR}" mkdir -p "${TMP_DIR}" echo "[2/5] Baixando release ${RELEASE_VERSION}..." curl -fsSL "${ARCHIVE_URL}" -o "${TMP_DIR}/${ARCHIVE_NAME}" if curl -fsSL "${CHECKSUM_URL}" -o "${TMP_DIR}/${ARCHIVE_NAME}.sha256"; then echo "[3/5] Validando checksum..." ( cd "${TMP_DIR}" sha256sum -c "${ARCHIVE_NAME}.sha256" ) else echo "[AVISO] Checksum nao encontrado em ${CHECKSUM_URL}; seguindo sem validacao." fi echo "[4/5] Extraindo pacote..." tar -xzf "${TMP_DIR}/${ARCHIVE_NAME}" -C "${TMP_DIR}" EXTRACTED_DIR="$(find "${TMP_DIR}" -mindepth 1 -maxdepth 1 -type d | head -n 1)" if [[ -z "${EXTRACTED_DIR}" ]]; then echo "[ERRO] Nao foi possivel localizar o conteudo extraido." >&2 exit 1 fi echo "[5/5] Executando instalador principal..." bash "${EXTRACTED_DIR}/scripts/instalar_debian12.sh" \ --source-dir "${EXTRACTED_DIR}" \ --install-dir "${INSTALL_DIR}" \ --run-user "${RUN_USER}" \ --http-port "${HTTP_PORT}" \ --fallback-port "${FALLBACK_PORT}" \ --mode "${MODE}" \ --license-server-url "${LICENSE_SERVER_URL}" \ --license-enforcement "${LICENSE_ENFORCEMENT}" \ --license-verify-tls "${LICENSE_VERIFY_TLS}" \ --license-support-email "${LICENSE_SUPPORT_EMAIL}" \ --license-support-url "${LICENSE_SUPPORT_URL}" echo echo "Instalacao bootstrap concluida." echo "Release usada: ${RELEASE_VERSION}" echo "Pacote baixado de: ${ARCHIVE_URL}"