Files
atua/atua

278 lines
13 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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
}
}
# └──────────────────────────────────────────────────────────┘