278 lines
13 KiB
Bash
278 lines
13 KiB
Bash
#!/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
|
||
}
|
||
}
|
||
# └──────────────────────────────────────────────────────────┘
|