#!/bin/bash # Define variáveis para caminhos INSTALL_LOG="${INSTALL_PATH}/uninstaller/install.log" INSTALL_ERR_LOG="${INSTALL_PATH}/uninstaller/install_err.log" APPSERVER_BIN_DIR="${INSTALL_PATH}/protheus/bin/appserver" APPSERVER_TEMP_DIR="${INSTALL_PATH}/protheus/bin/appserver_linux" # Diretório temporário para descompactação # --- 1. Inicialização e Preparação de Logs --- # Certifica-se de que os arquivos de log existam (cria se não existirem) mkdir -p "$(dirname "$INSTALL_LOG")" # Garante que o diretório 'uninstaller' exista touch "$INSTALL_LOG" touch "$INSTALL_ERR_LOG" echo "Iniciando a instalação do Appserver..." | tee -a "$INSTALL_LOG" # --- 2. Descompactação e Estrutura de Diretórios --- echo "Descompactando Appserver..." | tee -a "$INSTALL_LOG" # Cria o diretório final do Appserver e o diretório temporário mkdir -p "$APPSERVER_BIN_DIR" mkdir -p "$APPSERVER_TEMP_DIR" # Entra no diretório temporário para descompactação cd "$APPSERVER_TEMP_DIR" || { echo "Erro: Não foi possível mudar para o diretório $APPSERVER_TEMP_DIR" | tee -a "$INSTALL_ERR_LOG"; exit 1; } # Descompacta o tar.gz (mantendo a saída de erro e sucesso nos logs) echo "Descompactando appsrvlinux.tar.gz em $APPSERVER_TEMP_DIR..." | tee -a "$INSTALL_LOG" tar xzf appsrvlinux.tar.gz -C "$APPSERVER_TEMP_DIR" >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" # Verifica se a descompactação foi bem-sucedida if [ $? -ne 0 ]; then echo "Erro durante a descompactação do Appserver. Verifique $INSTALL_ERR_LOG" | tee -a "$INSTALL_ERR_LOG" exit 1 fi # --- 3. Movimentação e Organização de Arquivos --- echo "Movendo arquivos para o diretório final: $APPSERVER_BIN_DIR..." | tee -a "$INSTALL_LOG" # Move o .ini (renomeando) e verifica erros mv "$APPSERVER_TEMP_DIR/appserver_lnx.ini" "$APPSERVER_BIN_DIR/appserver.ini" >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" if [ $? -ne 0 ]; then echo "Erro ao renomear o arquivo INI." | tee -a "$INSTALL_ERR_LOG" fi # Move o restante dos arquivos (exceto o tar.gz) para o diretório final find "$APPSERVER_TEMP_DIR" -maxdepth 1 -mindepth 1 ! -name '*.tar.gz' -exec mv {} "$APPSERVER_BIN_DIR/" \; >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" # Limpa diretórios e arquivos temporários echo "Realizando limpeza..." | tee -a "$INSTALL_LOG" rm -rf "$APPSERVER_TEMP_DIR" >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" # Remove qualquer cópia do tar.gz que possa ter sobrado no diretório final (embora o find acima deva evitar isso) # Nota: Esta linha original foi removida pois o find já limpa o dir temp, mas se o arquivo original estivesse lá, seria: # rm -f "$APPSERVER_BIN_DIR"/*.tar.gz >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" # --- 4. Instalação do Serviço (Priorizando systemd) --- # Detecta se systemd está em uso if command -v systemctl &> /dev/null; then echo "Sistema usa systemd. Registrando Appserver via service unit..." | tee -a "$INSTALL_LOG" # Assume que 'appserver.service' é um arquivo de unit do systemd fornecido com o instalador (instalado em ${INSTALL_PATH}/) # Copia o arquivo de unit para o local correto cp "${INSTALL_PATH}/appserver.service" /etc/systemd/system/ >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" # Recarrega o daemon para reconhecer o novo serviço systemctl daemon-reload >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" # Habilita o serviço para iniciar no boot systemctl enable appserver.service >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" # Inicia o serviço echo "Iniciando Appserver via systemd..." | tee -a "$INSTALL_LOG" systemctl start appserver.service >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" if [ $? -eq 0 ]; then echo "Appserver iniciado com sucesso via systemd." | tee -a "$INSTALL_LOG" else echo "Erro ao iniciar o Appserver via systemd. Verifique $INSTALL_ERR_LOG ou use 'systemctl status appserver.service'." | tee -a "$INSTALL_ERR_LOG" fi else # Fallback para o método SysVinit (como no script original) echo "Sistema não usa systemd ou systemctl não encontrado. Tentando registro via SysVinit..." | tee -a "$INSTALL_LOG" # Lógica de detecção de distribuição simplificada e adaptação para o script original: VERSION=$(cat /etc/*-release | grep -E '^(ID|NAME)=' | awk -F= '{print $2}' | tr -d '"' | tr '[:upper:]' '[:lower:]' | head -n1) case $VERSION in *rhel*|*centos*|*fedora*|*oracle*) SCRIPT_FILE="appserver_rh.sh" INIT_CMD="/usr/lib/lsb/install_initd" # Comando para RHEL/CentOS ;; *suse*|*sles*) SCRIPT_FILE="appserver_suse.sh" INIT_CMD="insserv" # Comando para SUSE ;; *ubuntu*|*debian*) SCRIPT_FILE="appserver_ubt.sh" INIT_CMD="update-rc.d appserver defaults 85" # Comando para Debian/Ubuntu ;; *) echo "Aviso: Distribuição Linux ($VERSION) não reconhecida. Pulando o registro automático do serviço." | tee -a "$INSTALL_LOG" exit 0 ;; esac cp "${INSTALL_PATH}/${SCRIPT_FILE}" /etc/init.d/appserver >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" chmod 755 /etc/init.d/appserver >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" $INIT_CMD /etc/init.d/appserver >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" echo "Iniciando Appserver via SysVinit..." | tee -a "$INSTALL_LOG" /etc/init.d/appserver start >> "$INSTALL_LOG" 2>> "$INSTALL_ERR_LOG" fi # --- 5. Finalização --- echo "Instalação concluída." | tee -a "$INSTALL_LOG" exit 0