Automatizando Atualizações em Distribuições Linux com um Script

1. Automatizando Atualizações em Distribuições Linux com um Script

Marco C. Siqueira
marcosiq

(usa Red Hat)

Enviado em 06/09/2023 - 09:45h

Atualizar um sistema operacional Linux é uma tarefa fundamental para garantir a segurança, estabilidade e desempenho do ambiente. No entanto, realizar essas atualizações manualmente pode ser demorado e propenso a erros. É aqui que entra a automação, que pode economizar tempo e garantir que todas as atualizações necessárias sejam aplicadas de forma consistente.

Neste artigo, apresentaremos um script automatizado para atualização em distribuições Linux baseadas em Debian, adaptado para funcionar em sistemas RHEL (Red Hat Enterprise Linux). Este script torna o processo de atualização do sistema simples e eficiente.

Script de Atualização Automatizada

#!/bin/bash

# Author: Marco Cardoso de Siqueira
# marco@technicalcorporation.com
# Describe: Script Automatizado para atualização em distribuições Linux baseadas em Debian, adaptado para RHEL.

# ---------------------------------------------------------------------------------------------------------------
## Cores para formatação da saída dos comandos
RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # sem cor
# ---------------------------------------------------------------------------------------------------------------
## Mensagens para as condições e conclusões dos comandos
CONERROR="[ERRO] - Seu computador não tem conexão com a internet. Verifique os cabos e o modem"
CONSUCESS="[VERIFICADO] - Conexão com a Internet funcionando normalmente"
BEGIN_UPDATE="*** INICIANDO ATUALIZAÇÃO DO SISTEMA ***"
END_UPDATE="*** ATUALIZAÇÃO REALIZADA COM SUCESSO ***"
BEGIN_CLEAN="*** INICIANDO LIMPEZA DE SISTEMA ***"
END_CLEAN="*** LIMPEZA CONCLUÍDA ***"
MSG_MKDIR="A PASTA JÁ EXISTE"

## Obtem o mês e o ano para criação do nome do arquivo de log
MES=$(date +%b)
ANO=$(date +%Y)
# ---------------------------------------------------------------------------------------------------------------

## Função para verificar se o diretório existe e criá-lo, se necessário
create_directory() {
if [ -d "$1" ]; then
echo -e "${RED} ${MSG_MKDIR}.${NC}"
else
mkdir -v "$1"
fi
}

## Função para executar a atualização do sistema
update_system() {
echo -e "${YELLOW} ${BEGIN_UPDATE} ${NC}"
sleep 1

yum check-update >> "/mnt/log_update/update_${MES}_${ANO}.log"
yum upgrade -y >> "/mnt/log_update/update_${MES}_${ANO}.log"
yum upgrade --security >> "/mnt/log_update/update_${MES}_${ANO}.log"

echo -e "${GREEN} ${END_UPDATE} ${NC}"
sleep 2
}

## Função para limpar o sistema
clean_system() {
echo -e "${YELLOW} ${BEGIN_CLEAN} ${NC}"
sleep 1
yum clean all >> "/mnt/log_update/clean_${MES}_${ANO}.log"
echo -e "${GREEN} ${END_CLEAN} ${NC}"
sleep 2
}

## Testando conexão com a internet
if ! ping -c 1 registry.redhat.io -q &> /dev/null; then
echo -e "${RED} ${CONERROR}.${NC}"
sleep 2
exit 1
else
echo -e "${GREEN} ${CONSUCESS}.${NC}"
sleep 2

## Cria a pasta para salvar o log da execução
create_directory "/mnt/log_update"

## Atualização de sistema
update_system

## Realiza a limpeza do sistema
clean_system

## Reinicia automaticamente após a atualização
echo -e "${GREEN} *** As atualizações foram realizadas com sucesso. Reiniciando o sistema. ***${NC}"
sleep 3600
reboot
fi


Este script realiza as seguintes ações:

Verifica a conexão com a internet para garantir que as atualizações possam ser baixadas.

Cria automaticamente uma pasta para armazenar logs de atualização.

Executa a atualização do sistema, verificando e aplicando atualizações disponíveis.

Realiza a limpeza do sistema para remover pacotes obsoletos.

Reinicia automaticamente o sistema após a atualização.

Uso do Script

Para utilizar este script, siga os passos abaixo:

Copie o código do script para um arquivo com extensão .sh, por exemplo, atualizar-sistema.sh.

Dê permissões de execução ao arquivo: chmod +x atualizar-sistema.sh.

Execute o script: ./atualizar-sistema.sh.

O script verificará a conexão com a internet, criará os logs, atualizará o sistema, realizará a limpeza e reiniciará o sistema, se necessário.

Conclusão

A automação de atualizações em sistemas Linux é uma prática recomendada para manter a segurança e a eficiência do ambiente. Este script simplifica o processo, economiza tempo e reduz erros. Lembre-se de personalizar o script de acordo com suas necessidades específicas, como agendar execuções automáticas ou adicionar notificações.

Automatizar tarefas como atualizações é uma excelente maneira de otimizar a administração de sistemas e garantir que seus servidores estejam sempre atualizados e protegidos contra vulnerabilidades.

Para mais dicas: https://t.me/linuxrevolution



  


2. Re: Automatizando Atualizações em Distribuições Linux com um Script

Dilan Severino de Oliveira
dilan1998

(usa Debian)

Enviado em 09/09/2023 - 11:37h

Massa heim

create_directory() {
if [ -d "$1" ]; then
echo -e "${RED} ${MSG_MKDIR}.${NC}"
else
mkdir -v "$1"
fi

Eu nada ajudaria mas somente passaria minha vontade de fazer isso

[[ -d "$1" ]] && echo -e "${RED} ${MSG_MKDIR}.${NC}" || mkdir -v "$1"


3. Re: Automatizando Atualizações em Distribuições Linux com um Script

aguamole
aguamole

(usa KUbuntu)

Enviado em 09/09/2023 - 18:41h


dilan1998 escreveu:

Massa heim

create_directory() {
if [ -d "$1" ]; then
echo -e "${RED} ${MSG_MKDIR}.${NC}"
else
mkdir -v "$1"
fi

Eu nada ajudaria mas somente passaria minha vontade de fazer isso

[[ -d "$1" ]] && echo -e "${RED} ${MSG_MKDIR}.${NC}" || mkdir -v "$1"

Você tem razão.



4. Re: Automatizando Atualizações em Distribuições Linux com um Script

Morpheus
Minions

(usa Nenhuma)

Enviado em 10/09/2023 - 18:58h


dilan1998 escreveu:

Massa heim

create_directory() {
if [ -d "$1" ]; then
echo -e "${RED} ${MSG_MKDIR}.${NC}"
else
mkdir -v "$1"
fi

Eu nada ajudaria mas somente passaria minha vontade de fazer isso

[[ -d "$1" ]] && echo -e "${RED} ${MSG_MKDIR}.${NC}" || mkdir -v "$1"




Eu sei que a segunda forma economiza linhas, mas prefiro a primeira forma pois é mais didático.



5. Re: Automatizando Atualizações em Distribuições Linux com um Script

aguamole
aguamole

(usa KUbuntu)

Enviado em 10/09/2023 - 20:29h


Minions escreveu:


Se remove o "-e" quebra as cores?

echo -e "${GREEN} ${CONSUCESS}.${NC}"


Assim ficaria legal sem a tabulação no inicio da linha

echo "${GREEN} ${CONSUCESS}.${NC}"

Não pode remover o -e.



6. Re: Automatizando Atualizações em Distribuições Linux com um Script

aguamole
aguamole

(usa KUbuntu)

Enviado em 10/09/2023 - 20:34h


Minions escreveu:
Eu sei que a segunda forma economiza linhas, mas prefiro a primeira forma pois é mais didático.

Fazer isso não é boa pratica, é uma boa pratica reduzir if de programas.
@alexabolada Porque devesse reduzir o numero de if em linguagem de programação?


7. Re: Automatizando Atualizações em Distribuições Linux com um Script

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 10/09/2023 - 20:34h

Oi, Minions! Qué otima pergunta!

A redução de "if" no código é bem vista por diversos motivos:

1. Deixa o código mais simples e mais limpo, o que facilita a manutenabilidade;
2. Menos "if" significa menos complexidade ciclomática, que é uma métrica usada para indicar a complexidade do código;
3. Quanto menos condicionais no código, menor a chance de erros lógicos e bugs.

Portanto, sempre que possível, é uma boa prática simplificar nossos códigos e reduzir o número de estruturas condicionais como o "if".

Isso é parte do princípio de design de código chamado KISS (Keep It Simple, Stupid) - Mantenha Simples, Estúpido, em tradução livre. Não é chamar ninguém de estúpido, é mais um lembrete amigável para nos mantermos humildes e não complicar desnecessariamente o nosso código.

Contudo, a legibilidade sempre deve ser priorizada. Se o uso de mais "ifs" fizer o código mais fácil de entender, eles devem ser mantidos.

Espero ter ajudado! :) Qualquer dúvida estou à disposição.


8. Re: Automatizando Atualizações em Distribuições Linux com um Script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/09/2023 - 20:46h

Minions escreveu:


Se remove o "-e" quebra as cores?

echo -e "${GREEN} ${CONSUCESS}.${NC}"


Assim ficaria legal sem a tabulação no inicio da linha

echo "${GREEN} ${CONSUCESS}.${NC}"

-------------------------------------------------------------------------------------
Minions,
bash -c 'help echo'
Opções:
...
-e habilita interpretação de escapes de contrabarra a seguir
...
echo -e "\e[1;34mTexto \e[m"
Texto
echo "\e[1;34mTexto \e[m"
\e[1;34mTexto \e[m
Sem o '-e', não interpreta o escape ('\e') que forma a cor.
------------------------------------------------------------------------
Os espaços no inicio da linha, são decorrentes dos dois espaços antes da var ${CONSUCESS}.
echo -e "${GREEN} ${CONSUCESS}.${NC}"

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________



9. Re: Automatizando Atualizações em Distribuições Linux com um Script

Morpheus
Minions

(usa Nenhuma)

Enviado em 14/09/2023 - 16:51h

msoliver escreveu:

echo -e "\e[1;34mTexto \e[m"
Texto

echo "\e[1;34mTexto \e[m"
\e[1;34mTexto \e[m

Sem o '-e', não interpreta o escape ('\e') que forma a cor.



O \e entraria nas variáveis das cores ou dentro dos echo?

RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # sem cor


echo -e "${RED} ${MSG_MKDIR} ${NC}"


O que seria esse => \033


10. Re: Automatizando Atualizações em Distribuições Linux com um Script

aguamole
aguamole

(usa KUbuntu)

Enviado em 14/09/2023 - 20:24h


Minions escreveu:

msoliver escreveu:

echo -e "\e[1;34mTexto \e[m"
Texto

echo "\e[1;34mTexto \e[m"
\e[1;34mTexto \e[m

Sem o '-e', não interpreta o escape ('\e') que forma a cor.



O \e entraria nas variáveis das cores ou dentro dos echo?

RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # sem cor


echo -e "${RED} ${MSG_MKDIR} ${NC}"


O que seria esse => \033


Usando o \e você pode escrever o red assim: "RED='\e[1;31m'"



11. Re: Automatizando Atualizações em Distribuições Linux com um Script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/09/2023 - 21:44h

aguamole escreveu:


Minions escreveu:

msoliver escreveu:

echo -e "\e[1;34mTexto \e[m"
Texto

echo "\e[1;34mTexto \e[m"
\e[1;34mTexto \e[m

Sem o '-e', não interpreta o escape ('\e') que forma a cor.



O \e entraria nas variáveis das cores ou dentro dos echo?

RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # sem cor


echo -e "${RED} ${MSG_MKDIR} ${NC}"


O que seria esse => \033


Usando o \e você pode escrever o red assim: "RED='\e[1;31m'"

Minions, boa noite.
'033' = escape (\e) na base octal,
tbem pode ser usado em HEXA: '\x1b'
---------------------------------------------------
Usando o \e você pode escrever o red assim: "RED='\e[1;31m'"
Sim!
Variações do 'escape"
red='\e[1;31m'
red='033[1;31m'
red='\x1b[1;31m'
----------------------------------------------------------------------------------------------------------------

O \e entraria nas variáveis das cores ou dentro dos echo?
O "\e" entra na formação da cor.
Veja: https://aurelio.net/shell/canivete/#cores

---------------------------------------------------------------------------------------------------------------

COR:30 0 COLOR → "\e[0;30m TXT \e[m" 1 COLOR → "\e[1;30m TXT \e[m"
COR:31 0 COLOR → "\e[0;31m TXT \e[m" 1 COLOR → "\e[1;31m TXT \e[m"
COR:32 0 COLOR → "\e[0;32m TXT \e[m" 1 COLOR → "\e[1;32m TXT \e[m"
COR:33 0 COLOR → "\e[0;33m TXT \e[m" 1 COLOR → "\e[1;33m TXT \e[m"
COR:34 0 COLOR → "\e[0;34m TXT \e[m" 1 COLOR → "\e[1;34m TXT \e[m"
COR:35 0 COLOR → "\e[0;35m TXT \e[m" 1 COLOR → "\e[1;35m TXT \e[m"
COR:36 0 COLOR → "\e[0;36m TXT \e[m" 1 COLOR → "\e[1;36m TXT \e[m"
COR:37 0 COLOR → "\e[0;37m TXT \e[m" 1 COLOR → "\e[1;37m TXT \e[m"
COR:38 0 COLOR → "\e[0;38m TXT \e[m" 1 COLOR → "\e[1;38m TXT \e[m"


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________



12. Re: Automatizando Atualizações em Distribuições Linux com um Script

aguamole
aguamole

(usa KUbuntu)

Enviado em 15/09/2023 - 00:28h

O usuário @marcosiq podia colocar esse código na sessão script do site.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts