commit a2c590ff41c7cd404ea0dbe74ad582fa0aae4462 Author: Bruno Silva Tosta Date: Mon Sep 23 09:19:28 2024 -0300 Enviar arquivos para "/" diff --git a/atua b/atua new file mode 100644 index 0000000..e1c412f --- /dev/null +++ b/atua @@ -0,0 +1,277 @@ +#!/bin/bash +# ┌──────────────────────────────────────────────────────────┐ +# │ Author: Bruno.Tosta │ +# │ Desc: Atualiza o SigERP e SigPDV │ +# └─────────────────────────────────────────────{ VARIAVEIS }┘ +VERSAO="6.3" SISTEMA=$(lsb_release -cs) V='×' +REPOSITORIO='download.sigsolucoes.net.br/public/Tosta/ERP' +VerificaInstalados(){ +[ -d '/usr/local/sigerp' ] && X='1' || X='0' +[ -d '/usr/local/sigpdv' ] && Y='2' || Y='0' +case "$X$Y" in + 10) Configurar '1'; MenuAtualizar;; + 02) Configurar '2'; MenuAtualizar;; + 12) MenuExecutar ;; + 00) MenuStatus 'NÃO HÁ'; exit +esac +} +Configurar(){ +case "$1" in + 1) source <(wget -qO- "$REPOSITORIO/controle/config");; + 2) source <(wget -qO- "$REPOSITORIO/controle/config");; +esac +case "$SISTEMA" in + 'xenial') [ "$ATUALIZANDO" = 'sigerp' ] && exit 1 || unset PACOTES[0];; + 'bionic') S='0' ;; + *) MenuStatus 'NÃO HOMOLOGADO'; exit ;; +esac +} +# ┌──────────────────────────────────────────────────────────┐ +# └─────────────────────────────────────────────────{ MENUS }┘ +MenuExecutar(){ + clear; read -p " + ┌─ $SISTEMA ─────────────────────────────────────┐ + │ │ + │ 1 │ Atualizar o SigERP │ + │ 2 │ Atualizar o SigPDV │ + │ 0 │ Sair │ + │ │ + └──────────────────────────────────────── $VERSAO ─┘ + Escolha uma opção: " EXECUTAR && Executavel +} +MenuAtualizar(){ + clear; read -p " + ┌─ $TITULO ─ $MODULO ───────────────────────────────┐ + │ $V │ + │ 1 │ Atualizar com Backup │ + │ 2 │ Atualizar sem Backup │ + │ 3 │ Atualizar Pacotes │ + │ 4 │ Fazer backup da base │$BARRA + │ 0 │ Sair │ + │ │ + └──────────────────────────────────────── $VERSAO ─┘ + Escolha uma opção: " ATUALIZAR && Atualizavel +} +MenuPacotes(){ + clear; echo " ┌─ PACOTES ─ $ATUALIZANDO ───────────────────────────┐ + │ $V │" + for i in "${!PACOTES[@]}"; do + printf " │ $((i + 1)) │ "${PACOTES[$i]}" │\n" + done + read -p " │ │ + └──────────────────────────────────────── $VERSAO ─┘ + Escolha uma opção: " EMPACOTAR && Empacotavel +} +MenuAtualizacao(){ + clear; read -p " + ┌───────────────── ATUALIZAR ──────────────────┐ + │ │ + │ Existe uma versão do ATUA mais recente │ + │ Deseja atualizar para a versão mais recente? │ + │ S/N │ + └──────────────────────────────────────── $VERSAO ─┘ + Escolha uma opção: " RESPOSTA +} +MenuSudo(){ + echo ' + ┌────────────────── ATENCAO! ──────────────────┐ + │ │ + │ Necessário logar como usuário root │ + │ │ + └──────────────────────────────────────────────┘ + '; sudo su -s '/bin/bash' -c 'atua' +} +MenuStatus(){ + clear; echo " + ┌──────────────────────────────────────────────┐ + │ │ + │ $1 │ + │ │ + └──────────────────────────────────────────────┘ + "; sleep 1 +} +# ┌──────────────────────────────────────────────────────────┐ +# └─────────────────────────────────────────────────{ OPCAO }┘ +Executavel(){ +case "$EXECUTAR" in + 1) Configurar '1'; MenuAtualizar ;; + 2) Configurar '2'; MenuAtualizar ;; + 0) MenuStatus 'SAINDO'; exit ;; + *) MenuStatus 'INVALIDO'; MenuExecutar +esac +} +Atualizavel(){ +case "$ATUALIZAR" in + 1) Identifica 'BACKUP'; Instalar ;; + 2) Instalar ;; + 3) MenuPacotes ;; + 4) Identifica 'BACKUP' ;; + 5) [[ "$ATUALIZANDO" = 'sigerp' ]] && { + Identifica 'LEVANTAR'; ParaSistema; IniciaSistema + } || { MenuStatus 'INVALIDO'; MenuExecutar + } ;; + 0) MenuStatus 'SAINDO'; exit ;; + *) MenuStatus 'INVALIDO'; MenuExecutar +esac +} +Empacotavel(){ +for i in "${!PACOTES[@]}"; do + CASE+=" + $i) APLICATIVO=\"${PACOTES[$i]}\"; InstalacaoPacote ;;" +done +eval " +case \"$(($EMPACOTAR-1))\" in + $CASE + 0) MenuStatus 'SAINDO'; exit ;; + *) MenuStatus 'INVALIDO'; MenuExecutar ;; +esac" +} +Instalar(){ + ParaSistema; VerificaATUA && PastaBackup && BuscaArquivo && VerificaSigEXT && Permissao && ApagaTemp; [ "$ATUALIZANDO" = 'sigpdv' ] && exit || Identifica 'LEVANTAR' && IniciaSistema +} +InstalacaoPacote(){ + VerificaATUA && BaixaArquivo && ApagaTemp; [ "$ATUALIZANDO" = 'sigpdv' ] && exit || ParaSistema; IniciaSistema +} +# ┌──────────────────────────────────────────────────────────┐ +# └──────────────────────────────────────────────────{ BASE }┘ +Identifica(){ + VerificaPasta +for ((N=1; N <= "$QUANTIDADE"; N++)) do + BASE=$(PGPASSWORD="$SENHA" psql -U "$USER" -l | awk '{ if ($3 == "'$USER'" && $1 != "template0" && $1 != "template1" && $1 != "'$USER'") print $1 }' | head -$(($N+B)) | tail -1) + printf "\nQuantidade: $N/$QUANTIDADE \nBase: $BASE \n" + case "$1" in + BACKUP) PGPASSWORD="$SENHA" /usr/bin/pg_dump -h 'localhost' -p '5432' -U "$USER" --role "$USER" -F 'c' -b -v -T 'logs_logs' -T 'ir_attachment' -T 'logs_detalhe' -T 'ecf_exportar_osv_id_seq' -f "/backup/$BASE.$DATA.dump" -d "$BASE" + ;; + LEVANTAR) sudo -u openerp 'openerp-server' -uall -d "$BASE" -c '/etc/openerp-server.conf' --stop-after-init + ;; + esac + printf "Completo: $BASE \n" +done +} +# ┌──────────────────────────────────────────────────────────┐ +# └───────────────────────────────────────────────{ FUNCOES }┘ +ParaSistema(){ + [ "$ATUALIZANDO" = 'sigpdv' ] && killall 'python' || { + service 'openerp-server' stop; /etc/init.d/openerp-server stop 2>'/dev/null' && echo 'OK' || killall 'openerp-server' + } +} +IniciaSistema(){ + service 'openerp-server' start; /etc/init.d/openerp-server start +} +InstalaArquivo(){ + python 'setup.py' install +} +VerificaPasta(){ + mkdir -m 777 '/backup' 2>'/dev/null' && echo 'Pasta de backup criada' || echo 'Pasta de backup já existe' +} +PastaBackup(){ + VerificaPasta; cd "$LOCAL/" && tar cfvz "/backup/$ATUALIZANDO.$DATA.tar.gz" "$ATUALIZANDO" +} +VerificaATUA(){ + mkdir -m 777 '/tmp/ATUA' 2>'/dev/null' && echo 'Pasta de atualização criada!' || echo 'Pasta de atualização já existe!' +} +BaixaPacote(){ + cd '/tmp/ATUA' && pip install -r <(wget -qO- "$REPOSITORIO/controle/requirements") && echo 'Requisitos instalados' || echo 'Houve algum erros entre pacotes' +} +# ┌──────────────────────────────────────────────────────────┐ +# └─────────────────────────────────────────────{ DOWNLOADS }┘ +BuscaArquivo(){ + VerificaATUA +for APLICATIVO in "${PACOTES[@]:$S}"; do + BaixaArquivo +done +} +BaixaArquivo(){ + BAIXAR=$(wget -qO- "$REPOSITORIO/controle/update" | grep -wi "$APLICATIVO" | cut -d"=" -f2) + wget -q -O "/tmp/ATUA/$APLICATIVO-$BAIXAR.tar.gz" "$REPOSITORIO/$APLICATIVO/$APLICATIVO-$BAIXAR.tar.gz" + ExtraiArquivo +} +ExtraiArquivo(){ +[ "$APLICATIVO" != "$ATUALIZANDO" ] && { + cd '/tmp/ATUA/'; tar xfvz "$APLICATIVO-$BAIXAR.tar.gz" + cd "$APLICATIVO-$BAIXAR"; InstalaArquivo && + echo "Instalação do $APLICATIVO-$BAIXAR efetuada com sucesso!" +} || { + mv "$LOCAL/$ATUALIZANDO/" "/tmp/ATUA/$ATUALIZANDO-old" + cp "/tmp/ATUA/$APLICATIVO-$BAIXAR.tar.gz" "$LOCAL/" + cd "$LOCAL/"; tar xfvz "$APLICATIVO-$BAIXAR.tar.gz" + rm "$LOCAL/$APLICATIVO-$BAIXAR.tar.gz" + echo "Extração dos arquivos do $APLICATIVO-$BAIXAR efetuada com sucesso!" +} +} +Permissao(){ +for PERMISSAO in "${PERMISSOES[@]}"; do + chmod -R 777 "$PERMISSAO" +done; echo 'Permissões ajustadas!' +} +ApagaTemp(){ + cd '/'; rm -rf '/tmp/ATUA/' && echo 'Arquivos e pastas temporárias para a atualização deletados' +} +# ┌──────────────────────────────────────────────────────────┐ +# └───────────────────────────────────────────{ APP.CONFIGS }┘ +VerificaSigEXT(){ + mkdir "$LOCAL/sigext" 2>'/dev/null' && echo 'Pasta do SigEXT criada' || echo 'Pasta do SigEXT já existe' + chmod 777 -R "$LOCAL/sigext" + chown -R root:root "$LOCAL/sigext" + BuscaSigEXT +} +BuscaSigEXT(){ +for N in 0 1; do + APP="${APP[$N]}" _APP="${_APP[$N]}" __APP="${__APP[$N]}"; IndexarSigEXT +done +} +IndexarSigEXT(){ +[ ! -e "$LOCAL/sigext/$__APP" ] && { + echo "Arquivo $__APP no $ATUALIZANDO não existe, irei procurar!" + cd "/tmp/ATUA/$ATUALIZANDO-old/$_APP" + [ -e "$APP" ] && { + cp "$APP" "$LOCAL/sigext/$__APP" + chmod 777 "$LOCAL/sigext/$__APP" + chown root:root "$LOCAL/sigext/$__APP" + CriarAtalho + } || { + echo "Arquivo $__APP no $ATUALIZANDO não existe!" + } +} || { + CriarAtalho +} +} +CriarAtalho(){ + ln -s "$LOCAL/sigext/$__APP" "$LOCAL/$ATUALIZANDO/$_APP$APP" && + echo "Arquivo $__APP do $ATUALIZANDO teve seu atalho criado!" + chmod 777 "$LOCAL/$ATUALIZANDO/$_APP$APP" + chown $CHOWN:$CHOWN "$LOCAL/$ATUALIZANDO/$_APP$APP" +} +# ┌──────────────────────────────────────────────────────────┐ +# └─────────────────────────────────────────────{ ATUALIZAR }┘ +PerguntarAtualizar(){ +[ ! -e '/usr/local/bin/hub' ] && wget -q --show-progress -O '/usr/local/bin/hub' "$REPOSITORIO/controle/hub" && chmod 777 '/usr/local/bin/hub' + SERVER=$(wget -qO- "$REPOSITORIO/controle/atua" | grep -oP 'VERSAO="\K[^"]+' | head -1) + CLIENT=$(grep -oP 'VERSAO="\K[^"]+' '/usr/local/bin/atua' | head -1) +[[ "$SERVER" = "$CLIENT" ]] && VerificaInstalados || { MenuAtualizacao +while true; do + case "$RESPOSTA" in + S|Sim|s|sim) sudo su -s '/bin/bash' -c 'hub -A'; exit;; + N|Nao|n|nao) MenuStatus 'SAINDO'; exit ;; + *) MenuStatus 'INVALIDO'; MenuAtualizacao ;; + esac +done +} +} +# ┌──────────────────────────────────────────────────────────┐ +# └─────────────────────────────────────────────{ PRINCIPAL }┘ +LOGFILE="/tmp/${0##*/}".log +exec 1> >(tee -a "$LOGFILE"); exec 2>&1 +USUARIO=$(id -u); [ "$USUARIO" != '0' ] && MenuSudo || { +[ -z "$1" ] && PerguntarAtualizar || { +while [ -n "$1" ]; do + case "$1" in + -U|-u) sudo su -s '/bin/bash' -c 'hub -A'; exit;; + -E|-e) Configurar '1'; MenuAtualizar ;; + -P|-p) Configurar '2'; MenuAtualizar ;; + *) MenuStatus 'INVALIDO'; MenuExecutar ;; + esac +done +} +} +# └──────────────────────────────────────────────────────────┘