quinta-feira, 15 de janeiro de 2026

TRABALHANDO NATIVAMENTE COM LOGS NO LINUX

 


INTRODUÇÃO

A maioria das distribuições Linux (www.vivaolinux.com.br/linux/) já tem um controle nativo dos arquivos de logs, mas ele depende de como o sistema está configurado.

Algum ou outro programa pode instalar seu log em outro lugar que não /var/log ou você mesmo durante a instalação manual pode ter colocado o arquivo de log em outro lugar.

A maioria das distribuições Linux não gera um número fixo de arquivos de log, pois utiliza o diretório centralizado (/var/log) onde o sistema operacional, o kernel e os aplicativos instalados criam seus arquivos e o próprio sistema gerencia isso.

Caso tenha um crescimento exagerado e por "crescimento exagerado" estou falando de coisa de GBs para cima, então é porque tem algum problema no sistema e você terá de identificar qual o problema de o sistema aumentar exageradamente os logs ou um log em específico.

Nas distribuições que tem o Systemd , quem controla logs no Linux hoje é o systemd-journald , no caso, Debian, Arch, Ubuntu, Mint, etc.

Nas distribuições que não tem o Systemd , como, por exemplo, Slackware, Gentoo, Alpine, Void Linux, etc, entra um desses: syslog-ng, rsyslog, busybox, syslogd (sistemas mínimos) e metalog (menos comum), além de outros específicos de cada distribuição.

O logrotate (logs em arquivos texto), comum na esmagadora maioria das distribuições com ou sem
Systemd, cuida de logs como:

/var/log/syslog
/var/log/auth.log
/var/log/apache2/*.log
/var/log/nginx/*.log

O logrotate gira logs (rotate), compacta (.gz), apaga logs antigos, roda automaticamente (cron ou systemd timer), etc. A configuração fica, basicamente, em /etc/logrotate.conf e /etc/logrotate.d/.

Uma boa prática básica para servidor é definir limites no /etc/systemd/journald.conf , por exemplo:

SystemMaxUse=100M
SystemKeepFree=1G

E confiar no logrotate para o resto.

Sem Systemd podemos definir limites em /etc/logrotate.conf:

# see "man logrotate" for details
# global options do not affect preceding include directives
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may also be configured here.

Nível do artigo: Básico.

VERIFICANDO E CONFIGURANDO LOGS

Faça o seguinte, primeiro veja quantos arquivos de logs tem no sistema:

$ ls /var/log | wc -l
52

Aqui deu 52 arquivos de logs.

Depois veja o tamanho (em -52 você pode colocar -10, -20, etc, depende de quantos arquivos você quer
visualizar):

$ sudo du -sh /var/log/* | sort -hr | head -52

[sudo] senha para usuario:
309M/var/log/journal
17M/var/log/installer
644K/var/log/chrony
412K/var/log/apt
176K/var/log/wtmp
136K/var/log/dpkg.log.5.gz
120K/var/log/dpkg.log.1
108K/var/log/apache2
96K/var/log/dpkg.log.7.gz
88K/var/log/dpkg.log
80K/var/log/cups
44K/var/log/exim4
36K/var/log/lightdm
32K/var/log/Xorg.0.log.old
32K/var/log/Xorg.0.log
28K/var/log/Xorg.1.log
16K/var/log/dpkg.log.4.gz
12K/var/log/dpkg.log.3.gz
12K/var/log/dpkg.log.2.gz
12K/var/log/aptitude
8,0K/var/log/fontconfig.log
8,0K/var/log/dpkg.log.6.gz
8,0K/var/log/boot.log.7
8,0K/var/log/boot.log.6
8,0K/var/log/boot.log.5
8,0K/var/log/boot.log.4
8,0K/var/log/boot.log.3
8,0K/var/log/boot.log.2
8,0K/var/log/boot.log.1
8,0K/var/log/alternatives.log.7.gz
8,0K/var/log/alternatives.log.5.gz
4,0K/var/log/README
4,0K/var/log/lastlog
4,0K/var/log/aptitude.6.gz
4,0K/var/log/aptitude.5.gz
4,0K/var/log/aptitude.4.gz
4,0K/var/log/aptitude.3.gz
4,0K/var/log/aptitude.2.gz
4,0K/var/log/aptitude.1.gz
4,0K/var/log/alternatives.log.6.gz
4,0K/var/log/alternatives.log.4.gz
4,0K/var/log/alternatives.log.3.gz
4,0K/var/log/alternatives.log.2.gz
4,0K/var/log/alternatives.log.1
4,0K/var/log/alternatives.log
0/var/log/speech-dispatcher
0/var/log/runit
0/var/log/private
0/var/log/faillog
0/var/log/btmp.1
0/var/log/btmp
0/var/log/boot.log

Repare que aqui, no Debian, essa instalação já tem mais de dois anos e nunca fiz controle nenhum dos logs.
O maior log, com 309M, é /var/log/journal e não é grande.

Quer ver todos os logs, pelo menos os do sistema, execute:

$ cd /var/log
$ ls
alternatives.logaptitude.3.gzbtmp.1fontconfig.log
alternatives.log.1aptitude.4.gzchronyinstaller
alternatives.log.2.gzaptitude.5.gzcupsjournal
alternatives.log.3.gzaptitude.6.gzdpkg.loglastlog
alternatives.log.4.gzboot.logdpkg.log.1lightdm
alternatives.log.5.gzboot.log.1dpkg.log.2.gzprivate
alternatives.log.6.gzboot.log.2dpkg.log.3.gzREADME
alternatives.log.7.gzboot.log.3dpkg.log.4.gzrunit
apache2boot.log.4dpkg.log.5.gzspeech-dispatcher
aptboot.log.5dpkg.log.6.gzwtmp
aptitudeboot.log.6dpkg.log.7.gzXorg.0.log
aptitude.1.gzboot.log.7exim4Xorg.0.log.old
aptitude.2.gzbtmpfaillogXorg.1.log

Para ver quanto espaço em disco cada item dentro de /var/log está usando:
$ sudo du -sh /var/log/*

sudo - executa como administrador (necessário porque alguns logs só o root pode ler)
du (disk usage) → calcula o uso de disco
-s (summary) - mostra apenas o total de cada item, sem detalhar subpastas
-h (human-readable) - formata os tamanhos de forma legível (KB, MB, GB)
/var/log/* - todos os arquivos e diretórios dentro de /var/log

Para ver os 10 maiores ordenando do maior para o menor:
$ sudo du -sh /var/log/* | sort -hr | head -n 10

309M/var/log/journal
17M/var/log/installer
644K/var/log/chrony
412K/var/log/apt
176K/var/log/wtmp
136K/var/log/dpkg.log.5.gz
120K/var/log/dpkg.log.1
108K/var/log/apache2
96K/var/log/dpkg.log.7.gz
88K/var/log/dpkg.log

Lembrando que algum ou outro programa pode instalar seu log em outro lugar que não /var/log ou você mesmo durante a instalação manual pode ter colocado o arquivo de log em outro lugar.

A maioria das distribuições Linux, não gera um número fixo de arquivos de log, pois utiliza o diretório centralizado (/var/log) onde o sistema operacional, o kernel e os aplicativos instalados criam seus arquivos e o próprio sistema gerencia isso.

Caso tenha um crescimento exagerado e por "crescimento exagerado" estou falando de coisa de GBs para cima, então é por que tem algum problema no sistema e você terá de identificar qual o problema de o sistema aumentar exageradamente os logs ou um log em específico.

Por exemplo, no meu caso, o maior dos logs é /var/log/journal.

Nesse caso posso editar o arquivo de configuração:

$ sudo vim /etc/systemd/journald.conf

Usei o vim , use teu editor preferido.

Veja as opções abaixo, que nem estão configuradas, mas, por exemplo, em "SystemMaxUse=" podemos definir o tamanho máximo total para os logs (500M para 500MB, 1G para 1GB, etc).

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s
#RateLimitBurst=10000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=0
#MaxFileSec=1month
#ForwardToSyslog=no
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#MaxLevelSocket=debug
#LineMax=48K
#ReadKMsg=yes
#Audit=yes

Depois de alterar o arquivo, salve e saia.

Reinicie o serviço:
$ sudo systemctl restart systemd-journald

Para ver quanto ele está usando:
$ journalctl --disk-usage
Hint: You are currently not seeing messages from other users and the system.
Users in groups 'adm', 'systemd-journal' can see all messages.
Pass -q to turn off this notice.
Archived and active journals take up 59.5M in the file system.

Diz que está usando 59.5M, porém, com o comando "du" mostra 309M.

É que o comando "journalctl --disk-usage" mostra apenas o espaço que o journald considera válido e utilizável, enquanto que o comando "du" soma todo o espaço ocupado no disco pelo diretório incluindo arquivos .journal ativos, arquivos arquivados, arquivos já marcados como deletados mas ainda abertos pelo systemd-journald e overhead do filesystem (blocos alocados), etc.
O journalctl mostra o uso lógico, não o físico.

Reiniciando o journald, os valores ficarão praticamente iguais:
$ sudo systemctl restart systemd-journald

$ sudo du -sh /var/log/journal
309M /var/log/journal

$ sudo journalctl --disk-usage
Archived and active journals take up 308.4M in the file system.

$ journalctl --disk-usage
Hint: You are currently not seeing messages from other users and the system.
Users in groups 'adm', 'systemd-journal' can see all messages.
Pass -q to turn off this notice.
Archived and active journals take up 59.5M in the file system.

Veja que o comando journalctl com sudo mostra um valor (308.4M) e sem sudo mostra 59.5M.
Na saída sem o sudo está a explicação dizendo que não estamos vendo as mensagens dos outro usuários e do sistema. Para ver todo o tamanho é só usar sudo.

Para reduzir o tamanho para 100M:
$ sudo journalctl --vacuum-size=100M

Ou só últimos 7 dias:
$ sudo journalctl --vacuum-time=7d

Para mais opções:
$ man journalctl


CONFIGURANDO LOGS

Também pode configurar alguns logs do sistema em logrotate.d .
Vá em /etc/logrotate.d/ e edite os arquivos (apache2, aptitude, etc).

$ cd /etc/logrotate.d
$ ls
alternatives  aptitude  chrony       exim4-base      sane-utils         wtmpdb
apache2       bootlog   cups-daemon  exim4-paniclog  speech-dispatcher
apt           btmp      dpkg         ppp             wtmp


Por exemplos:

$ sudo vim aptitude
/var/log/aptitude {
rotate 6
monthly
compress
missingok
notifempty
}

$ sudo vim apt
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}

/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}

$ sudo vim apache2
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then
run-parts /etc/logrotate.d/httpd-prerotate
fi
endscript
postrotate
if pgrep -f ^/usr/sbin/apache2 > /dev/null; then
invoke-rc.d apache2 reload 2>&1 | logger -t
apache2.logrotate
fi
endscript
}

Dependendo do log, tem diferenças entre as opções, mas, basicamente, são as mesmas.
Abaixo temos algumas indicações das opções:

    daily          # Rotação diária
    monthly	   # Rotação mensal
    rotate 7       # Mantém 7 arquivos antigos
    compress       # Comprime logs antigos (gzip)
    delaycompress  # Comprime o arquivo anterior
    missingok      # Não gera erro se o arquivo não existir
    notifempty     # Não rotaciona se vazio
    size 100M      # (Opcional) Rotaciona se o arquivo atingir 100MB


CONCLUSÃO

A maioria das distribuições Linux já tem um controle nativo dos arquivos de logs, mas ele depende de como o sistema está configurado.

Nas distribuições que tem o Systemd , quem controla logs no Linux hoje é o systemd-journald , no caso, Debian, Arch, Ubuntu, Mint, etc.

Nas distribuições que não tem o systemd, como, por exemplo, Slackware, Gentoo, Alpine, Void Linux, etc, entra um desses: syslog-ng, rsyslog, busybox, syslogd (sistemas mínimos) e metalog (menos comum), além de outros específicos de cada distribuição.

O logrotate (logs em arquivos texto), comum na esmagadora maioria das distribuições com ou sem systemd, cuida de logs como:

/var/log/syslog
/var/log/auth.log
/var/log/apache2/*.log
/var/log/nginx/*.log

O logrotate gira logs (rotate), compacta (.gz), apaga logs antigos, roda automaticamente (cron ou systemd timer), etc. A configuração fica, basicamente, em /etc/logrotate.conf e /etc/logrotate.d/ .

Pessoalmente, só acredito ser necessário alterar configurações dos logs caso for um servidor que lida com grandes cargas de dados, então se faz necessário configurar os logs para ter um melhor controle.

Caso for desktop, somente se faz necessário alterar essas configurações caso tenha algum programa específico que gere logs muitos grandes, senão não altere, deixe tudo no padrão e não se preocupe com isso, apenas monitore de vez em quando para ver se não tem algum problema.

Quando tiver um crescimento exagerado dos logs então é porque tem algum problema sério no sistema e você deverá identificá-lo e corrigi-lo.

quarta-feira, 7 de janeiro de 2026

Vícios


O corpo humano cria tolerância e depois vem a dependência.

Aquilo que chamam de vício ou dependência química.

Ninguém se vicia em alguma coisa de uma hora para outra.

O processo leva dias, meses ou anos, depende da genética da pessoa.

Ninguém fuma o primeiro cigarro na vida hoje; e amanhã está fumando três carteiras.

Ninguém toma o primeiro gole de bebida alcoólica hoje; e amanha está literalmente bebendo três garrafas de cachaça.

O processo de vício é ao longo do tempo.

A coisa resume-se em três fases: Dependência Psicológica, Tolerância e Dependência Física.

Primeiro você se vicia psicologicamente, você se apega psicologicamente à substância externa; depois vem a Tolerância porque o corpo humano é programado para tolerar qualquer substância que você ingere. Por último, vem a Dependência Física, ou seja, o corpo não vive mais sem aquela substância externa.

O que chamam atualmente de "Dependência Química" ou "Vício" é a soma desses três processos.

Vamos discorrer sobre os processos.


1 - Dependência Psicológica

Dizem que o vício é uma fuga... e realmente é.
Você começa a beber, por exemplo, umas vezes por convenção social, aprendeu com os pais, com mais velhos, etc.
Começa a beber e nem sabe o porquê.
No começo é bom porque todo vício é gostoso e por isso mesmo é vício, senão não seria vício. Não estou dizendo que toda coisa gostosa é vício, mas é uma característica do vício ser gostoso, ser bom.

Esse é o problema do vício.

Tomarei como exemplo o álcool que, segundo dizem, é o pior dos vícios... e realmente o é.

O álcool age sub-repticiamente, age nas entrelinhas.
Porém, existem diferenças entre os vícios, diferenças estas causadas pela própria substância física causadora do vício em si, o que é óbvio.
Você fuma ou bebe ou ingere (ingere é o termo geral) uma substância causadora de vício.

Substância causadora de vício é aquela substância externa ou interna que o corpo se acostuma com ela e depois cria Tolerância e depois Dependência Física.

Por exemplo, a adrenalina é uma substância naturalmente interna, mas pode-se viciar nela através de fortes emoções (causador externo).
Também pode-se viciar em adrenalina externa (ingerir produtos que tem adrenalina na sua composição). Que fique bem claro a diferença entre substância externa e interna.

Seguindo no exemplo do álcool, você começa a beber um golezinho todos os dias ou nos fins de semana e sente-se bem, isso é inegável.

O problema é justamente esse: "sente-se bem".

A partir daí um gole já não faz mais efeito, precisa-se de dois goles e depois de três goles e assim sucessivamente. Quando você percebe, depois de dias, semanas, meses, anos, você está bebendo três ou quatro garrafas de cachaça por dia, ou três garrafas de uísque, dependendo da sua condição financeira. O seu corpo começa a criar a Tolerância porque o corpo humano é programado para não morrer, então ele se adapta.

Com a maconha, cocaína, crack, heroína, etc, acontece a mesma coisa, porém, o processo é mais rápido em relação ao álcool porque são substâncias diferentes.

Torna-se necessário esclarecer o que é aquilo que o ser humano chama de "drogas".

Aquilo que o ser humano chama de "Drogas" são substâncias que não são nutrientes em si, algumas drogas até contém nutrientes, porém, não são nutrientes em si.

Você come um prato de comida e esse prato de comida causa uma reação química/física no seu corpo, mas você não chama um prato de comida de "droga" porque isso não te entorpece, isso não age diretamente no seu cérebro alterando seu entendimento da realidade.
O seu corpo identifica se é um nutriente ou não. Caso não for, ele elimina através de fezes, urina, suor ou vômito.

Tudo o que o ser humano ingere causa uma reação química/física. Não vou aqui discorrer a diferença entre reação química e física.

Você bebe um copo de água, isso causa uma reação química no seu corpo, porém, não classificamos o copo de água como uma "droga".

"Droga" é tudo aquilo que causa uma reação direta no cérebro, ou seja, tira a sua percepção da realidade, seja em curto, médio ou longo prazo.
Nós, seres humanos, classificamos as drogas devido aos seus efeitos no corpo humano.
Maconha, álcool, cigarro, cocaína, crack, heroína, ópio, etc. Cada uma tem seu ritual próprio de uso e tem seus próprios efeitos. O ritual de uso é definido pela droga em si, o que é óbvio. Maconha se fuma, cocaína se cheira, álcool se bebe e assim por diante.
Por exemplo, geralmente aquelas pessoas que gostam de tomar sua cervejinha praticamente todos os dias abominam drogas como maconha e cocaína e não consideram o álcool uma droga.
E geralmente aquelas pessoas que gostam de fumar seu baseado praticamente todos os dias abominam os alcoólatras e não consideram a maconha uma droga.

Primeiro você se vicia Psicologicamente, isso é óbvio.

Repito: ninguém toma um gole de cerveja, fuma um cigarro, etc, hoje; e amanhã está consumindo uma quantidade exagerada.

Até porque se isso acontecesse daria o efeito contrário.

Por exemplo: se você pega teu filho adolescente fumando um cigarro e o tranca num armário e diz para ele: "Você só vai sair daí quando fumar toda essa carteira de cigarro!".

Caso teu filho achar bom e começar a fumar cigarros dentro de um armário fechado, dará o efeito contrário. Ele passará mal, baterá na porta gritando que quer sair, etc.

Não estou sugerindo que é isso que se faça, mas todo vício, por agir aos poucos, a melhor forma de combater no início, algumas vezes, seria fazer consumir a substância exageradamente em pouquíssimo tempo, porém, os danos físicos dessa prática podem ser permanentes, o risco é muito grande.

Estamos discorrendo sobre Dependência Psicológica, mas as três estão entranhadas.

Muitas vezes discorre-se sobre uma e tem de se dizer das outras.

Você se apega psicologicamente à substância química.

"Psicologia" é o estudo da alma. "Psiqué".

E essa substância passa a fazer parte da sua vida.

Você acredita que tem controle sobre ela, mas não tem.

Primeiro você se apega à substância porque é bom, é confortável, muitas vezes realmente esclarece as idéias, mas esse é o problema do vício.

Permito agora dizer de Aristóteles: a Temperança!

Platão e Sócrates, anteriormente, também falavam da Temperança.

Temperança tem nada a ver com "estar em cima do muro", tem nada a ver com "ser isentão".

Temperança, neste sentido, é estar consciente de que você está se viciando.

No momento em que você diz que tem controle sobe o vício, VOCÊ NÃO TEM.

As pessoas se viciam pelos mais diversos motivos, desde o tédio da falta do que fazer até a depressão clínica, passando pelos mais diversos motivos.
Tem pessoas que são viciadas em comer, por exemplo. Outras são viciadas em masturbação. Talvez os motivos que levam a um determinado tipo de vício sejam iguais no seu início.

Em construção, ainda terminarei esse escrito, está longe do fim.

domingo, 4 de janeiro de 2026

Executar Scripts Remotamente

Introdução

Muitas vezes, em uma rede, laboratório ou em um cluster (ou até mesmo de um único computador para outro), é necessário rodar um script remotamente e temos de contornar a senha do SSH. Com o presente artigo e os scripts adiante, executaremos scripts remotamente.

Pode parecer uma falha de segurança, mas quando se trabalha com vários computadores em rede torna-se contraproducente ficar digitando a senha do SSH repetidas vezes, mas basta ter cuidado, pois trata-se de script para execução interna na rede/laboratório/cluster.

Além disso, temos dois scripts: um com senha SSH e outro somente com chave SSH (mais seguro). Utilize o que for mais conveniente para você. Use um ou outro, pois depende de como você configurou o SSH: com chave (mais seguro) ou com senha.

Não colocarei aqui como executar através do Linux um script/batch no Windows, pois não é o escopo do artigo.

A lógica é bem simples: coloque nos scripts executa-geral-senha.sh ou executa-geral-chave.sh o caminho e o nome do script que você quer executar remotamente.

Caso os dois scripts, o chamado e o chamador, façam conexões SSH dará erro e/ou pedirá senha em cima de senha; isso não é incontornável no Linux, mas para o que se pretende não vale a pena o trabalho.

Como bônus, deixo ao final o script copia-chave-distros.sh que deve ser executado diretamente no terminal com:

./copia-chave-distros.sh.

Tal script copia as chaves SSH, cria remotamente o arquivo /etc/sudoers.d/usuario e configura esse arquivo com ALL=(ALL) NOPASSWD: ALL e Defaults:usuario !requiretty.

Temos quatro seções no artigo:
1- Seção do script com senha;
2- Seção do script com chave;
3- Como utilizar os scripts e
4- Bônus.


Nível: Intermediário.

E, como sempre, respeitando a Velha Máxima casada com o Velho Ditado: tenha a decência de ler todo o artigo antes de sair executando comandos!


1 - Seção do Script com Senha (OPÇÃO COM SENHA SSH)

Crie o script:

$ sudo vim $HOME/caminho_diretorio/scripts/executa-geral-senha.sh

Usei o vim, use teu editor preferido e adapte o caminho para salvar o script de acordo com as tuas necessidades.

Coloque dentro (copie e cole o código):

#!/bin/bash

# ============================================
# Executa outros scripts por SSH com senha
# Compatível com Debian | Fedora | RHEL | Arch
# e derivados
# ============================================

# Caminho do script local a ser executado remotamente (modifique aqui)
SCRIPT_PATH="$HOME/caminho_diretorio/scripts/script.sh"

# Verifica se o script existe
if [ ! -f "$SCRIPT_PATH" ]; then
    echo "Script local não encontrado: $SCRIPT_PATH"
    exit 1 # Encerra o script caso o arquivo não exista
fi

# Extrai o nome do script do caminho
SCRIPT="$(basename "$SCRIPT_PATH")"
DESTINO="/opt/scripts/$SCRIPT"

# Senha sudo (texto plano - cuidado em ambientes sensíveis)
SENHA="senha"

# Lista de hosts/nós (modifique conforme necessário)
# Para vários hosts/nós: ("no01" "no02" "no03" "no04" ...)
NODES=("no01")

# Loop sobre cada host/nó
for NODE in "${NODES[@]}"; do
    echo ">>> Enviando $SCRIPT para $NODE..."

    # Copia o script para /tmp
    scp "$SCRIPT_PATH" "$NODE:/tmp/" || {
        echo -e "\033[1;31mFalha ao copiar para $NODE!\033[0m"
        continue
    }

    # Move para /opt com sudo, torna executável
    ssh "$NODE" "echo \"$SENHA\" | sudo -S mkdir -p /opt/scripts && sudo mv /tmp/$SCRIPT $DESTINO && sudo chmod +x $DESTINO; echo"

    # Executa o script remotamente com ou sem argumento adicional
    # Caso quiser colocar argumentos adicionais, se souber o que está fazendo
    # Senão deixe como está
	if [ "$SCRIPT" == "pvfs2-dist-keys.sh" ]; then
    		ssh "$NODE" "echo \"$SENHA\" | sudo -S bash $DESTINO /opt/orangefs; echo"
	elif [ "$SCRIPT" == "copia-chave-visudo.sh" ]; then
    		scp ~/.ssh/id_ed25519.pub "$NODE:/tmp/id_ed25519.pub"
    		ssh "$NODE" "echo \"$SENHA\" | sudo -S bash $DESTINO /tmp/id_ed25519.pub"
	else
    		ssh "$NODE" "echo \"$SENHA\" | sudo -S bash $DESTINO"
	fi

    if [ $? -eq 0 ]; then
    # Azul negrito: \033[1;34m
    # Azul forte: \033[38;5;39m
    echo
    echo -e "\033[1;34mSCRIPT EXECUTADO COM SUCESSO EM $NODE!!!\033[0m"
	else
    # Vermelho negrito: \033[1;31m
    echo
    echo -e "\033[1;31mERRO AO EXECUTAR SCRIPT EM $NODE!!!\033[0m"
    continue
fi
    echo
	# === LIMPEZA ===
	# Apaga o script da máquina remota (comente a linha abaixo, caso queira)
	sudo rm -rf /opt/scripts/$SCRIPT
done

Salve e saia.

Dê permissão de execução:

$ sudo chmod +x executa-geral-senha.sh

Para executar no servidor:

$ ./executa-geral-senha.sh

Ou, se for o caso:

$ sudo ./executa-geral-senha.sh


2 - Seção do Script com Chave ( OPÇÃO COM CHAVE SSH)

SCRIPT executa-geral-chave.sh

Agora temos o script executa-geral-chave.sh onde não tem a senha, pois configuramos o SSH para trabalhar com chave (é mais seguro).

Pré-requisitos (feito uma única vez)

Gera chave SSH (se ainda não existir):

$ ssh-keygen -t ed25519


Copia a chave para os hosts/nós:

$ ssh-copy-id usuario@no01


Ou:
$ ssh-copy-id usuario@192.168.1.100


Teste:

$ ssh usuario@no01

Ou:

$ ssh usuario@192.168.1.100

Não pedirá senha.


Configurar sudo sem senha no nó remoto:

$ sudo visudo -f /etc/sudoers.d/usuario


Coloque dentro do arquivo:

$ usuario ALL=(ALL) NOPASSWD: ALL


Crie o arquivo executa-geral-chave.sh (ou dê o nome que quiser) com seu editor de texto preferido e coloque dentro (copie e cole o código):

#!/bin/bash

# ============================================
# Executa outros scripts por SSH com chave
# Compatível com Debian | Fedora | RHEL | Arch
# e derivados
# ============================================

# Requisitos:
# Gere a chave SSH
# $ ssh-keygen -t ed25519
# Copie para os hosts/nós
# $ ssh-copy-id usuario@no01 e/ou ssh-copy-id usuario@192.160.1.100
# Teste:
# ssh usuario@no01 e/ou ssh usuario@192.168.1.100
# Não deve pedir senha
# Configure sudo sem senha no host/nó remoto, somente com chave
# $ sudo visudo -f /etc/sudoers.d/usuario
# Coloque dentro do arquivo
# usuario ALL=(ALL) NOPASSWD: ALL
# Defaults:usuario !requiretty

# Caminho do script local a ser executado remotamente (modifique aqui)
SCRIPT_PATH="$HOME/caminho_diretorio/scripts/script.sh"

# Verifica se o script existe
if [ ! -f "$SCRIPT_PATH" ]; then
    echo "Script local não encontrado: $SCRIPT_PATH"
    exit 1 # Encerra o script caso o arquivo não exista
fi

# Nome do script
SCRIPT="$(basename "$SCRIPT_PATH")"
DESTINO="/opt/scripts/$SCRIPT"

# Lista de hosts/nós (modifique conforme necessário)
# Para vários hosts/nós: ("no01" "no02" "no03" "no04" ...)
NODES=("no01")

# Loop sobre cada host/nó
for NODE in "${NODES[@]}"; do
    echo ">>> Enviando $SCRIPT para $NODE..."

    # Copia script para /tmp
    # scp = secure copy (copia arquivos via SSH)
    # -o BatchMode=yes = evita prompts de senha; falha se não houver autenticação por chave
    scp -o BatchMode=yes "$SCRIPT_PATH" "$NODE:/tmp/" || {
        echo "Falha ao copiar para $NODE"
        continue # Pula para o próximo host/nó em caso de erro
    }

    # Cria o diretório, move e dá permissão
    # ssh = conecta via SSH e executa comandos no host/nó remoto
    # -o BatchMode=yes = impede que ssh peça senha; útil para scripts automatizados
    ssh -t -o BatchMode=yes "$NODE" "
        set -e # encerra o ssh se algum comando falhar
        sudo mkdir -p /opt/scripts # cria diretório de destino se não existir
        sudo mv /tmp/$SCRIPT $DESTINO # move o script para o destino final
        sudo chmod +x $DESTINO # torna o script executável
		
	# Validação do bash, altere para tuas necessidades
    	   if [ ! -x /bin/bash ]; then
        	echo \"Erro: /bin/bash não encontrado ou não executável\"
        	exit 1
    	   fi

    # Executa o script remotamente com ou sem argumento adicional
    # Caso quiser colocar argumento adicional, se souber o que está fazendo
    # Senão deixe como está
    if [ \"$SCRIPT\" == \"pvfs2-dist-keys.sh\" ]; then
        sudo /bin/bash $DESTINO /opt/orangefs
    else
        sudo /bin/bash $DESTINO # executa o script remoto sem argumentos
    fi

    # === LIMPEZA ===
    # Apaga o script da máquina remota após a execução (comente a linha abaixo, caso queira)
    sudo rm -f $DESTINO

    " || {
	# Vermelho negrito: \033[31m
	echo
        echo -e "\033[1;31mERRO AO EXECUTAR NO HOST/NÓ $NODE!!!\033[0m"
        continue # pula para o próximo host/nó em caso de erro
    }
    # Azul negrito: \033[1;34m
    # Azul forte: \033[38;5;39m
    echo
    echo -e "\033[1;34mSCRIPT EXECUTADO COM SUCESSO EM $NODE!!!\033[0m"
    echo
done

Salve e saia.
Dê permissão de execução.


3 - Como Utilizar

Por exemplo, temos o script atualiza-remoto-distros.sh que atualiza o sistema em lote e queremos executá-lo automaticamente em várias máquinas.


SCRIPT atualiza-remoto-distros.sh

#!/bin/bash

# ============================================
# Script de atualização do sistema
# Compatível com Debian | Fedora | RHEL | Arch
# e derivados
# ============================================

# Este script é projetado para ser executado remotamente através do
# script principal executa-geral-senha.sh ou executa-geral-chave.sh (via SSH + sudo).

set -e

echo ">>> Iniciando atualização do sistema..."

# Detecta o gerenciador de pacotes
if command -v apt-get >/dev/null 2>&1; then
    # Verde negrito: \033[1;32m
    echo -e "\033[1;32m>>> Sistema baseado em Debian/Ubuntu detectado!\033[0m"
    export DEBIAN_FRONTEND=noninteractive
    apt-get update
    apt-get upgrade -y
    apt-get autoremove -y

elif command -v dnf >/dev/null 2>&1; then
    echo -e "\033[1;32m>>> Sistema baseado em Fedora/RHEL detectado!\033[0m"
    dnf upgrade -y
    dnf autoremove -y

elif command -v pacman >/dev/null 2>&1; then
    echo -e "\033[1;32m>>> Sistema baseado em Arch Linux detectado!\033[0m"
    pacman -Syu --noconfirm

else
    # Vermelho negrito: \033[1;31m
    echo -e "\033[1;31mGerenciador de pacotes não suportado!\033[0m"
    exit 1
fi

echo ">>> Atualização do sistema concluída com SUCESSO!"

Salve e saia.
Dê permissão de execução.


Basta colocar no script executa-geral-senha.sh ou executa-geral-chave.sh o caminho para o script desejado em:

# Caminho do script local a ser executado remotamente (modifique aqui)
SCRIPT_PATH="$HOME/caminho_diretorio/scripts/atualiza-remoto-distros.sh"

E executar um dos dois scripts chamadores.

A lógica é bem simples: coloque nos scripts executa-geral-senha.sh ou executa-geral-chave.sh o caminho e o nome do script que você quer executar remotamente.


4 - Bônus

SCRIPT copia-chave-distros.sh

#!/bin/bash

# ============================================
# Configura SSH e sudo NOPASSWD
# Compatível com Debian | Fedora | RHEL | Arch
# e derivados
# ============================================

# Antes de executar esse script, você deverá ter gerado a chave no servidor
# Exemplo:
# $ ssh-keygen -t ed25519

CHAVE_PUB="$HOME/.ssh/id_ed25519.pub"
# Configure com seu usuario e senha
USER_REMOTO="usuario"
SENHA="senha"  # senha sudo do usuário remoto

if [ ! -f "$CHAVE_PUB" ]; then
    echo "Chave pública ED25519 não encontrada em $CHAVE_PUB"
    exit 1
fi

echo ">>> Processando nós..."

# Altere para tua faixa de IPs
for i in {4..8}; do
    NODE="192.168.1.$i"
    echo -n "Verificando conectividade com $NODE... "

    if ping -c 1 -W 1 "$NODE" &> /dev/null; then
        echo "OK"
        echo "Copiando chave para $NODE"
        ssh-copy-id -i "$CHAVE_PUB" "$USER_REMOTO@$NODE"
    else
        echo -e "\033[1;31mFalhou conectividade com $NODE!\033[0m"
        continue
    fi

    echo ">>> Configurando sudo NOPASSWD e !requiretty em $NODE..."

    # Cria arquivo sudoers remoto com senha via sudo -S
    ssh "$USER_REMOTO@$NODE" "
        echo '$SENHA' | sudo -S bash -c '
            cat > /etc/sudoers.d/$USER_REMOTO <>> Nó $NODE configurado com sucesso!\033[0m"
    echo
done
# Verde negrito: \033[1;32m
echo -e "\033[1;32m>>> Todos os nós processados com sucesso!\033[0m"
echo

Salve e saia.
Dê permissão de execução.

Lembre que o script copia-chave-distros.sh deve ser executado diretamente no terminal (./copia-chave-distros.sh), pois se chamarmos ele por um dos outros scripts dará erro devido às senhas de sudo, caminhos de arquivos no servidor, etc. Um script remoto nunca pode copiar a chave do servidor por questões de segurança, então o servidor SEMPRE precisa enviar a chave, pois quem deve fazer a conexão SSH é o script chamador.

Caso os dois scripts, o chamado e o chamador, façam conexões SSH dará erro e/ou pedirá senha em cima de senha; isso não é incontornável no Linux, mas para o que se pretende não vale a pena o trabalho.

terça-feira, 16 de dezembro de 2025

Patch para sincronizar a mensagem de término de cópia de dispositivos externos no Debian com Nemo/Cinnamon



 Esse script resolve o problema da mensagem de cópia de dispositivos externos ( pendrives, SDs e HDs externos, etc) do Nemo/Cinnamon que não ficava até o final causando dados corrompidos, pois o usuário não sabia quando o processo de cópia tinha terminado e removia o dispositivo externo.

Com esse script a mensagem fica até o final do processo evitando corrompimento de dados, depois é só ejetar o dispositivo externo.
 
O processo é totalmente automático bastando testar depois copiando um arquivo grande de um pendrive para o sistema ou vice-versa.

Verá que a mensagem "Copiando arquivo numero_tal de numero_tal em..." fica até o final, bastando depois ejetar o dispositivo externo (pendrive, SD, HD, etc) antes de retirá-lo.

Foi testado no Debian 13 com Nemo-6.4.5, mas deve funcionar em outras versões bastando modificar as versões das bibliotecas nas dependências.

Utilize este script para aplicar o patch no Nemo:


#!/bin/bash

set -e

# Script para compilar Nemo com patch de notificação de cópia para dispositivos removíveis

# Totalmente automático para Debian/Ubuntu

PACKAGE="nemo"

PATCH_NAME="0001-progress-ui-handler-removable-sync.patch"


# 1️⃣ Instalar dependências de build

sudo apt update

sudo apt install -y build-essential devscripts debhelper dh-autoreconf \

                    libgtk-4-dev libglib2.0-dev libgirepository1.0-dev \

                    libsqlite3-dev libnotify-dev libx11-dev git quilt


# 2️⃣ Criar diretório de build

BUILD_DIR="$HOME/nemo-build"

mkdir -p "$BUILD_DIR"

cd "$BUILD_DIR"


# 3️⃣ Baixar source package do Nemo

apt-get source "$PACKAGE"

sudo apt build-dep -y "$PACKAGE"


# 4️⃣ Entrar no source

SRC_DIR=$(find . -maxdepth 1 -type d -name "$PACKAGE*")

cd "$SRC_DIR"


# 5️⃣ Criar patch completo automaticamente

PATCH_FILE="debian/patches/$PATCH_NAME"


mkdir -p debian/patches


cat > "$PATCH_FILE" << 'EOF'

*** a/src/nemo-progress-ui-handler.c

*** b/src/nemo-progress-ui-handler.c

@@

-  /* Operação finalizada, encerrar notificação */

-  nemo_progress_ui_handler_remove(info);

+  /* Operação finalizada */

+  gboolean is_removable = FALSE;

+  GFile *dest_file = info->dest_file; /* destino da cópia */

+

+  if (dest_file)

+  {

+      GError *error = NULL;

+      GFileInfo *fs_info = g_file_query_filesystem_info(

+          dest_file,

+          "filesystem::removable",

+          NULL,

+          &error);

+

+      if (fs_info)

+      {

+          is_removable = g_file_info_get_attribute_boolean(fs_info, "filesystem::removable");

+          g_object_unref(fs_info);

+      }

+      if (error)

+          g_error_free(error);

+  }

+

+  if (is_removable)

+  {

+      nemo_progress_ui_handler_update_message(info, _("Sincronizando dados no dispositivo..."));

+      g_file_sync_async(dest_file,

+                        G_FILE_QUERY_INFO_NONE,

+                        G_PRIORITY_DEFAULT,

+                        NULL,

+                        (GAsyncReadyCallback)nemo_progress_ui_handler_remove_on_sync,

+                        info);

+  }

+  else

+  {

+      nemo_progress_ui_handler_remove(info);

+  }

+

+static void

+nemo_progress_ui_handler_remove_on_sync (GObject      *source_object,

+                                        GAsyncResult *res,

+                                        gpointer      user_data)

+{

+    NemoProgressInfo *info = user_data;

+    GFile *file = G_FILE(source_object);

+    GError *error = NULL;

+

+    g_file_sync_finish(file, res, &error);

+    if (error)

+    {

+        g_warning("Erro ao sincronizar arquivo %s: %s",

+                  g_file_get_path(file), error->message);

+        g_error_free(error);

+    }

+

+    nemo_progress_ui_handler_remove(info);

+}

EOF


# 6️⃣ Inicializar quilt e registrar patch

export QUILT_PATCHES=debian/patches

export QUILT_SERIES=debian/patches/series


if ! grep -q "$PATCH_NAME" "$QUILT_SERIES" 2>/dev/null; then

  echo "$PATCH_NAME" >> debian/patches/series

fi


# 7️⃣ Aplicar todos os patches

quilt push -a


# 8️⃣ Construir o pacote sem assinar

dpkg-buildpackage -us -uc


# 9️⃣ Instalar o pacote gerado

cd ..

sudo dpkg -i ${PACKAGE}_*.deb

echo "Nemo compilado e instalado com patch aplicado automaticamente!"

echo "Teste copiando arquivos para um pendrive e observe a notificação."



Salve de preferência em /opt como build-nemo.sh e dê permissão de execução:

$ cd /opt

$ sudo vim build-nemo.sh
Copie e cole dentro o conteúdo.
Salve e saia.

$ sudo chmod +x build-nemo.sh

E execute:

$ ./build-nemo.sh

O processo é totalmente automático bastando testar depois copiando um arquivo grande de um pendrive para o sistema ou vice-versa.
Verá que a mensagem "Copiando arquivo numero_tal de numero_tal em..." fica até o final, bastando depois ejetar o dispositivo externo antes de retirá-lo.
Agradecimentos ao meu parceirão Chat "Jarvis" GPT!

sábado, 13 de dezembro de 2025

A Contenda

   Tudo começou por causa de mulher, mas no fundo não passou de um engano.

   Gervásio da Silva Santos namorava a irmã mais nova e Geraldo dos Santos Silva namorava a irmã do meio de uma família de sete irmãs. Todos no vilarejo, a princípio, imaginavam que não era a mesma irmã, pois os pais das sete eram bastante rígidos com essas questões de moral: "não permitimo semvergonhice, nossas fía são pra casá".

   Gervásio ia de manhã cedo cortejar a sua irmã (sua irmã das sete que era namorada dele, no caso) e Geraldo ia no fim da tardinha tentar pegar a sua irmã (sua namorada dele, também), pois aquele trabalhava e este não.

   Um sabia do outro, mas sabiam de falar, o popular diz-que-diz-que.

   Tudo começou porque alguém entendeu errado e espalhou que os dois namoravam a mesma irmã.

   Todo boato ninguém nunca sabe quem começou!

   As duas eram parecidas fisicamente e, provavelmente, esse alguém viu um com uma e o outro com outra, mas julgou que fosse a mesma irmã.

   Comentários à boca miúda cresceram, a fama de corno começou a colar nos dois porque na boataria crescente não se sabia quem era corno de quem. Uma parte do vilarejo dizia que Gervásio era o corno, a outra parte jurava que Geraldo é que é o corno.

   Essas confusões são típicas quando o maligno governa a estupidez humana e a estupidez humana é infinita e ilimitada. Foi uma confusão maligna dos diabos.

   Gervásio, que não aguentava mais os olhares de chacota, foi o primeiro a tirar satisfações com a sua irmã dele. Esta negou veementemente dizendo que não passava de um terrível mal entendido.

Geraldo não deu muita bola para o ocorrido, pois sempre foi meio tiatino e só queria meter-se dentro da sua irmã dele. Essa idéia de "é pra casá" não passava nem de longe nos seus pensamentos.

   Logo seguiu que, numa bela noite, como não podia ser diferente, os dois se encontraram no bar/salão do vilarejo e já afetados pelo álcool começaram a entreolhar-se. Os integrantes do bar perceberam a animosidade crescendo e, como sempre, jogaram lenha na fogueira... a estupidez humana é capaz de coisas sem noção e inimagináveis, tudo sempre "foi por brincadeira".

- Olha, o corno ali; disse um para Gervásio.

- Olha, o corno ali; disse outro no ouvido de Geraldo.

   Grupinhos foram se formando, cada qual de um lado na esperança de que a coisa, talvez, descambasse numa briga para diversão dos presentes e acontecesse alguma coisa - qualquer coisa - que tirasse o tédio do vilarejo, pois brigas de casais, barranqueamentos de égua, meninos estuprando galinhas ou namorando leitoas e coisas do gênero já eram de costume.

   Além disso, os dois grupinhos ansiavam que alguém desse início a uma contenda para que eles mesmos pudessem tirar satisfação com seus desafetos. Estavam cansados de se matarem esporadicamente e de traição. Por si nenhum tinha coragem suficiente de falar a verdade, mas se odiavam pelas costas e faziam chacotas falsamente pela frente, geralmente em questões de futebol, ídolos, coisas superficiais. As discussões dominantes eram sempre sobre dinheiro e/ou sexo.

   Sentado de um lado do bar, Gervásio, mais suscetível, já olhava o seu suposto rival com um misto de raiva e curiosidade. Geraldo, por sua vez, sentado numa mesa do outro lado do salão, estava mais preocupado com a bebida e com as mulheres bonitas da vida do que com qualquer outra coisa, mas começou a ficar desconfortável com as encaradas feias de Gervásio.

   Babateou num esforço conseguindo erguer-se apoiado na mesa já meio tonto da bebida. Foi lentamente e trançando levemente as pernas em direção evidente à Gervásio.

- Olha lá, é agora, vai acontecer; disseram uns em voz baixa e pensaram outros em voz alta.

   Geraldo, porém, perdeu-se no meio do caminho esquecendo porque levantara e foi rumo ao balcão para abastecer-se de bebida sendo que seu copo na mesa estava meio cheio.

   Houve alguns murmúrios de decepção dos jogadores de lenha que gostam de ver a fogueira do circo pegar fogo.

   Gervásio, que percebeu a movimentação, induzido pelos outros aos sussurros de "vai deixar assim" e "se fosse eu tirava satisfação", levantou-se num rompante - dizem que o álcool dá coragem - e foi ao balcão sentar-se ao lado de Geraldo. Entreolharam-se, mas logo desviaram o olhar fixando para a frente como se um quisesse ignorar a presença do outro.

   O silêncio foi geral.

   Depois de uns vários segundos de silêncio constrangedor entre os dois e silêncio de expectativa entre os demais, Gervásio pediu uma bebida. O barman, que havia até desligado o rádio porque não queria surrupiar as atenções, atendeu mais que prontamente o pedido e voltou rapidamente à sua posição de observação cuidadosa.

   Gervásio, olhando fixamente para frente, sorveu um gole para molhar a garganta. Geraldo, olhando fixamente para frente, mas acompanhando com a visão periférica imediatamente sorveu um gole imitando o gesto como se respondesse: Estou atento!

   Mais uns dois minutos de silêncio total, nem moscas ou respirações se ouviam. Até as moscas acompanhavam a situação pousadas no balcão, nas mesas, nos frequentadores, etc.

   Os dois tinham quejanda índole de não se meterem em brigas - os populares covardes -, entretanto, a coisa começou a beirar ao ridículo e os murmúrios foram quebrando o silêncio juntamente com as moscas voando já sem interesse na briga, mas com uma certa decepção e indignação em relação aos dois:

- E aí, vão brigar ou não?
- Bzzzzzzz.
- Estou perdendo meu tempo aqui.
- Zzzzzz...
- Tomara que briguem logo ou vão embora de uma vez.
- Bzzzzzzzzzzzzzzz.

   E entre murmúrios e tapas tentando espantar as moscas e provocar a briga - não necessariamente nessa ordem - os dois acabaram por sendo esquecidos no meio do balcão e o bar/salão retornou à sua habitual rotina.

   Geraldo e Gervásio começaram a conversar um oferecendo bebida ao outro ao mesmo tempo.

   Pediram desculpas um ao outro ao mesmo tempo também.

   Um todo encagaçado do outro.

   Geraldo, que já estava mais "alto" do que Gervásio, entabulou a relação:

- Sobre aquilo... é verdade?

- Não sei; respondeu Gervásio; eu namoro a Chica.

- Eu namoro a Guta; retorquiu Geraldo enquanto os dois se olharam na cara pela primeira vez.

   Mais alguns segundos de silêncio seguido de outro gole mútuo com olhar perdido para frente.

- Então foi tudo um mal entendido mesmo!

- É o que parece.

- E os maledicentes querendo que a gente se matasse.

- É o que parece.

   Depois de uns cinco minutos de conversa os dois pareciam velhos amigos se reencontrando depois de anos.

   Os dois grupinhos perceberam a animação e inicial amizade sincera e isso provocou desconfiança seguida de raiva, pois aguardavam que dali surgissem dois líderes que dariam início a uma matança generalizada, o que de fato aconteceu, mas não da maneira que todos esperavam.

   O grupo de Gervásio, vamos dizer assim, inventou uma desculpa puxando-o pelo braço para seu canto dando-lhe uma refrega verbal enérgica:

- Que negócio é esse?!?
- Virou amiguinho dele?
- O cara pega tua mulher e tu vira corno manso?

   Gervásio explicou tintim por tintim a situação, mas não surtiu efeito:

- E tu acreditou nisso?
- Tu sabe que ele tem fama de malandro!

   Gervásio, inutilmente, explicou, desenhou, explicou o desenho da explicação... disse com veemência que ele namora a Chica e Geraldo namora a Guta... não são a mesma irmã.

- E você acredita nisso?
- Então da onde surgiu essa conversa se é só um boato?
- Boatos sempre tem um fundo de verdade; afirmou um do alto de sua sabedoria de botequim.
- Vai ver ele está pegando as duas; sentenciou outro.

   Gervásio, ante à estupidez humana, desistiu da conversa, levantou à socapa e, na cruzada em direção à saída do salão, fez um aceno de cabeça para Geraldo ao que Geraldo respondeu sorrindo sem mostrar os dentes com um também aceno de cabeça, mas com grande satisfação por terem desfeito o mal entendido.

   O grupo de Geraldo, vendo aquilo, caiu em cima dele com as mesmas argumentações do grupo de Gervásio. Tanto assim que Geraldo também saiu à sorrelfa deixando seu grupinho confabulando.

   Entre acusações mútuas de um grupo para outro, mas sem ser entre eles - somente acusações internas -, ou seja, um grupinho não escutava o que o outro dizia, pois eram todos covardes. As acusação eram as mesmas e superficiais. Animosidade recolhida, recalques mil, rancores guardados e catalogados no coração, tudo isso crescendo esperando aquele estopim que daria início a uma confusão maligna dos diabos que ninguém queria, mas a estupidez humana é um prato cheio para a maldade. Como bem disse Aristóteles: "A estupidez é a base da maldade".

   O álcool sempre foi um lubrificante social na história da humanidade, desde que consumido com moderação... mas o problema é esse: essa tal moderação geralmente não é alcançada.

   No outro dia, passada a bebedeira, fica a vergonha do que foi dito e feito. Apesar de que todos tentam esquecer das bobagens que falam e fazem quando embriagados pelo álcool, um estúpido sempre insiste em lembrar o outro:

- E tu que disse aquilo?
- Ah é, e você que disse aquiloutro?

   E assim os estúpidos vão alimentando a própria estupidez até que chega num momento em que a vergonha mútua é tanta que os estúpidos decidem agir. Burros não pensam, agem. E agem fazendo besteiras.

   Muitas vezes as ilusões daquilo que não foi dito, mas poderia ter sido dito porque é bem típico do outro dizer essas coisas, essas ilusões vão crescendo na mente dos estúpidos até que a histeria toma conta e eles passam a acreditar que isso aconteceu de verdade.

   A vergonha do que foi dito sem nunca ter a intenção de dizer ou de cumprir é um poderoso afrodisíaco para a maldade. Vão se alimentando tais pensamentos na cabeça até que os estúpidos se convencem de que isso aconteceu de verdade:

- Ele disse isso, eu escutei, eu tava lá; sendo que nem de perto é verdade, mas o estúpido histérico diz mentiras com uma convicção que convence todo mundo, pois ele mesmo está convencido de que isso aconteceu de verdade.

   Todo estúpido é sem noção!

   E o mundo está repleto de estúpidos, Deus deve gostar deles, pois os faz em quantidade.

   Ou, talvez, o diabo aprendeu a dar vida e começou a fazer estúpidos. Mas estou tergiversando.

   O fato é que as animosidades foram crescendo alimentadas pela vergonha do que foi dito e repetido inúmeras vezes na embriaguez.

- Agora cumpra o que disse;

- Ah é, e você também!

   E assim os estúpidos vão se induzindo e manipulando-se num parasitismo mútuo, mas nenhum quer ser o líder porque sabem que, entre estúpidos, quando a coisa esquenta e pega fogo, os liderados correm em debandada deixando o "líder" queimar na fogueira, mas continuam "dando apoio moral".

   Então procuram alguém com audácia, confundindo esta com a coragem. O audaz, neste caso, é um impostor, pois finge ter uma coragem que não tem. Gervásio e Geraldo são audaciosos e são estúpidos, bem como os demais que são somente estúpidos, contudo, nenhum tem coragem. 

   O caráter, basicamente, nasce da prática de uma atividade, por exemplo, se uma pessoa acostuma-se a falar mal dos outros pelas costas, torna-se um mentiroso. Ignorar que a prática forma o caráter é coisa de estúpidos e agindo assim já não é possível deixarem de ser o que são e acabam se matando sem nem saber o motivo pelo qual estão se matando.

   O ser humano nunca precisou de bons motivos para se matar, qualquer um serve, se for inventado melhor ainda!

   Até torcer por um time de futebol contrário ao seu é motivo para a humanidade se matar!

   E os estúpidos ainda dizem:

- Não foi por causa de futebol, ele me ofendeu!

- E como começou a discussão?

- Foi por causa que ele fez pouco do meu time de futebol.

   E os estúpidos ainda insistem que o motivo da morte, da separação, do fim da amizade, etc, não foi o futebol ou a religião ou a política.

   Cá, por fora dos supostos cornos, ainda tem a questão de um grupinho torcer para um time e outro, para outro time, mas nesse caso tem pouca relevância.

   No outro dia, Gervásio e Geraldo encontraram-se na rua principal do vilarejo, apertaram as mãos, deram um meio abraço de lado, tipo um encosto de ombros, e ficaram conversando com sua mansuetude habitual.

   O vilarejo logo saiu à rua para ver a cena.

   Olhares e comentários de desagravo, e raiva até, surgiram.

   As expectativas tinham sido quebradas de modo irremediável.

   Alguma coisa tinha de acontecer para fazer a vergonha do que fôra dito sumir.

   Tomados por uma súbita audácia, ainda desesperados com a vergonha que tinham sofrido e abespinhados com a situação, atribuíram aos dois a suposta armadilha de que tinham sido vítimas, de que tinham sido induzidos a falar o que falaram. Na cabeça deles, os dois não assumiram a liderança que lhes foi imposta "naturalmente".

   Quatro se achegaram atrás de Geraldo e cinco se achegaram atrás de Gervásio, todos exigindo explicações. O grosso do vilarejo assistindo, um grupo de um lado, outro de outro lado da rua.

   Geraldo e Gervásio, atônitos, tentando explicar novamente o mal entendido, mas os dois grupos começaram a culpá-los chamando-os de traidores, respectivamente.

   A coisa ficou tão absurda que os dois, com o passar dos dias, tiveram que trocar de lado, ou seja, Geraldo passou a ser o "líder" do grupo que era seu contrário e Gervásio passou a ser o "líder" do outro grupo, que antes era seu contrário.

   A mágoa dos estúpidos foi tanta que cada qual teve de se proteger no grupo contrário porque os seus grupos originais queriam matá-los.

   A confusão maligna foi crescendo. O estopim foi que um magriço conhecido como Palito resolveu tirar satisfação com um desafeto seu que era do outro grupo. Como a coisa tinha ficado estruturada acintosamente agora como se os dois grupos fossem duas gangues ou, mais precisamente, dois bandos, os estúpidos criaram "coragem" para tirar satisfação com seus desafetos, sendo que nada tinha a ver com os grupos em si ou com seus "líderes", os pretextos eram esses, mas tudo era somente um motivo para matar ou dar uma boa surra nos seus desafetos.

   Palito juntou dois e foi com eles afrontar seu desafeto. Agora tinha uma boa desculpa e uma boa escora para sua covardia.

   Na tarde daquele mesmo dia, estava o desafeto sentado em frente à sua casa.

   Palito e os dois chegaram de surpresa pelo lado já dando pauladas no desafeto.

- Dá na cabeça.
- Não deixa levantar.
- Bate na cabeça.

   Entre pauladas, chutes, pontapés e socos, foram praticamente uma dúzia de pauladas na cabeça do coitado.

   Deixaram-no caído inerte e foram embora.

   O desafeto, agora já morto, tinha um irmão e dois primos, cujos agora faziam parte do grupo contrário.

   E assim a coisa foi crescendo tanto de um lado como de outro. A cada morte os grupos cresciam.

   Os anos foram passando, o vilarejo foi crescendo até tornar-se uma cidade pequena.

   A briga entre os dois bandos trouxe dividendos financeiros ao vilarejo, trouxe "progresso", dinheiro e fama na região.

   A fama dos dois bandos foi crescendo também e tornaram-se conhecidos na região até que a Polícia teve de intervir. As mortes já somavam 546: 412 dos bandos e 134 inocentes de balas perdidas e enganos por confusão de parentesco ou amizade.

   A matança, bem como os bandos, cresceram exponencialmente, praticamente uma progressão geométrica. Em questão de um ano a coisa tomou proporções bíblicas.

   A sorte é que a coisa não caiu nas garras da grande propaganda, aquilo que chamam de grande mídia, senão teria ficada gravada totalmente distorcida no imaginário popular, os heróis virariam vilões e vice-versa.

   Gervásio e Geraldo, às vezes, encontravam-se secretamente para conversar e tentar manter a sanidade querendo lembrar de como tudo começou, porém, as vagas lembranças não eram suficientes.

   Com a intervenção da Polícia, formou-se um terceiro bando: o da polícia.

   Apesar de ser agora uma cidade, ainda era interior e contava com somente um destacamento precário com dois policiais. Devido ao elevado números de mortes da matança, a chefia de polícia resolveu intervir junto ao Governador para liberar uma verba cujo destino era fortalecer a polícia. A verba foi liberada, mas, como sempre, menos da metade chegou ao seu destino.

   O destacamento, de dois, passou a ter oito. O bando do Gervásio, após anos de furdunço, tinha 36 integrantes, o do Geraldo 34. Esses números eram rotativos, pois uns morriam, outros entravam, alguns saíam e assim a coisa ia indo. Cada bando chegou a ter mais de 50 integrantes nos tempos áureos.

   Nem todos nos dois bandos agora estavam ali pelas questões iniciais de vingança pura e simples, alguns entravam pela emoção e logo saíam fugindo ao zunir dos primeiros tiros no ouvido ou ao tilintar das facas e facões.

   Alguns, ao saber da melhora na polícia, pularam para o bando da polícia. O bando da polícia não pagava muito bem, mas os outros dois bandos também não, aliás, tinha épocas que ninguém recebia nada.

   Às vezes um dos bandos percorria as ruas da cidade mostrando seu poderio quantitativo e armamentista, tipo um desfile militar. Uma vez deu a coincidência de os dois bandos se encontrarem no meio do caminho. Pensaram que a matança agora seria uma carnificina, porém, cada bando fez de conta que não tinha visto o outro. A tática principal era um pegar o outro de surpresa, confronto aberto não estava nos planos. Fizeram de conta que não tinham se visto mais por falta de saber o que fazer do que por outra coisa, tipo dois cachorros rosnando um de cada lado do portão e quando abre o portão ficam sem saber o que fazer.

   O dinheiro dos bandos vinha, basicamente, de saques, contribuições espontâneas e extorsões. Entre um estupro e outro - apesar de condenarem em público o estupro -, encontravam tempo para saquear fazendo as vítimas se juntarem ao bando contrário.

   O bando da polícia, apesar de uma certa eficiência, limitava-se a prender os integrantes dos dois outros bandos. Com o tempo perceberam que estavam enxugando gelo.

   Decidiram começar a matar. Mas a coisa não deu muito certo porque os outros dois bandos começaram a matar a polícia também.

   O chefe do destacamento decidiu não levar tal fato às autoridades competentes, ou seja, ao chefe e ao comandante da polícia do Estado. A ordem era de somente prender os bandos. Para preservar seu cargo, o chefe do destacamento achou por bem omitir esse detalhe das mortes. De vez em quando fazia uma prisão e comunicava com alarde aos superiores, ficando todo mundo contente.

   Com o crescimento, a cidade passou a ter um Foro Jurídico. O Juiz, um novato querendo mostrar serviço, resolveu adotar a prática de caçadores de recompensa. Autorizou premiação a caçadores de recompensa que caçassem os dois bandos. No início até começou a dar certo, mas o dinheiro público começou a escassear porque o Juiz e o Promotor precisavam de uma academia de musculação para exercitarem-se e os caçadores passaram a não receber muito mais ficando somente uns poucos que tinham inimizades em cada bando e não faziam muita questão de receber um bom dinheiro. O negócio era matança por vingança pura e simples.

   Os dois bandos contra-atacaram oferecendo também recompensa por policiais mortos. 

   A coisa virou mais confusão do que já estava, se é que era possível isso.

   Nesse ínterim, os integrantes dos dois bandos descobriram que os "líderes" encontravam-se secretamente. Isso causou uma comoção e revolta geral.

- Traidores!

   Novamente os "líderes" tiveram que trocar de bando, agora pela segunda vez. Como ninguém mais dava bola mesmo, a troca lenta e gradual foi aceita, até porque a maioria do bando nem ficava sabendo dessas coisas. A unidade inicial perdera-se com o tempo. A moda agora era dizer que fazia parte do bando tal, mesmo sem fazer parte, talvez por um sentimento de participação em grupinhos, talvez porque era bacana ser parte deste ou daquele bando, vá saber o que se passa na cabeça de estúpidos. Muitos morreram por simplesmente dizer que eram do bando tal sem nunca sequer ter passado perto de um dos bandos; era bacana fazer parte, mas não era bacana morrer por causa disso. Mas estúpidos não pensam, agem.

   Após quatro anos, os três bandos competiam em pé de igualdade tanto em números de integrantes quanto em poderio armamentista.

   Às vezes a polícia esquecia que era polícia. Havia uma rotatividade entre os bandos, um pulava de um bando para outro, como um jogador atuando em times rivais.

   A única coisa que não era engraçada nisso tudo era a matança e o sofrimento das famílias.

   Geraldo e Gervásio, agora sem contato, nutriram um ódio mútuo, agora real, não tanto um pelo outro, mas pela situação em si e por não serem capazes de resolvê-la, então, um isolado do outro, passaram a um culpar o outro, gerando um ódio real.

   Como os dois eram semelhantes, tinham idéias semelhantes, os dois, ao mesmo tempo e sem um saber do outro, chegaram à conclusão de que para terminar a contenda de vez, somente um bando chacinando completamente o outro, sem deixar sobreviventes.

   A intenção até era boa, pois os dois queriam terminar com tudo aquilo, mas a execução do plano foi péssima: resultou em mais matança ainda. Como se diz: de boas intenções o inferno está cheio!

   E o resultado foi que um bando não conseguiu eliminar o outro, mas aumentaram significativamente a participação da comunidade, tanto de um lado como de outro e do outro. Agora a coisa estava pegando fogo de novo, como nos bons e velhos tempos.

   Mas nem tudo é um mar de rosas. O bando da polícia agora era conhecido como bando da polícia somente por questão de tradição. Nenhum dos seus integrantes se achava da polícia. O chefe do destacamento fazia uns dois anos que não ia nas emboscadas e nos confrontos. Ficava no gabinete emitindo relatórios falsos de prisão para agradar os superiores e conseguir mais dinheiro e estes, por sua vez, fingiam que nada disso estava acontecendo. O "líder" em campo era o Palito, aquele mesmo do início. Agora estava no bando da polícia. Ele mesmo achava que isso era só um nome, apesar de alguns usarem uniforme ou coletes.

   Gervásio e Geraldo viraram lendas no local porque nunca sofreram um ferimento sequer nos vários confrontos nesses anos.

   Um jornalista avulso que ouviu falar da contenda através de um conhecido seu até tentou fazer uma reportagem, mas desistiu após presenciar um decapitamento com o decapitado ainda vivo, sendo que os decapitadores não estavam rindo nem chorando nem com raiva, foi como se fossem ali comprar cigarro. Arrumou as malas e voltou correndo para sua cidade.

   Na redação do jornal até comentou com os colegas, mas ninguém deu bola porque ele não era da mesma ideologia dos demais.

   Gervásio, aproveitando a captura de um dos contras que havia ficado vivo por milagre, resolveu entregá-lo para a Polícia e receber a recompensa. Nesse meio tempo, ao levá-lo para a Polícia, foi capturado pelo bando de Geraldo, confundido com um caçador de recompensas. O capturado morreu em meio à confusão. 

   Geraldo, reconhecendo seu antigo amigo, resolveu poupá-lo mantendo-o preso e foi ele mesmo entregar o morto do seu próprio bando à Polícia para receber a recompensa.

   No meio do caminho foi capturado pelo bando de Gervásio, também confundido com um caçador de recompensas.

   O resultado final foi que, pela terceira vez, trocaram de bando continuando "líderes".

   Gervásio, preso, foi reconhecido por um dos outros que livrou-o da prisão e propôs que ele fosse o novo "líder" do bando, pois afinal, um bando precisa de um líder. O bando aceitou, pois não sabiam que ele era o Gervásio e se soubessem não faria diferença nenhuma.

   Mais ou menos o mesmo aconteceu com Geraldo. Estúpidos não pensam, agem.

   Quanto aos caçadores de recompensa, o cargo foi extinto pelo Juiz. Os caçadores começaram a trazer corpos de mendigos, de pessoas inocentes, etc, dizendo que eram do bando tal. Ninguém conhecia ninguém mesmo.

   A coisa foi descoberta quando o Juiz viu a foto da sua faxineira desaparecida na relação dos mortos dos caçadores de recompensa. Falaram que ela era a noiva do Gervásio. Rendeu uma ótima recompensa.

   Com o tempo, a contenda foi acalmando-se novamente, a cidade foi crescendo, chegou num tamanho médio e a contenda virou um conflito de bairro. Os integrantes dos bandos foram, aos poucos, cuidando da própria vida. Uns casando, outros cansados de tudo aquilo, e todos nem lembravam mais de como tudo começou. Alguns resolveram partir para o tráfico de drogas, outros para assaltos... enfim, diversificaram.

   Sobraram dois únicos bêbados que faziam a alegria do bairro quando tentavam brigar embriagados tentando manter acesa a chama da contenda. Um se dizia do bando de Gervásio, outro se dizia do de Geraldo. Viraram figuras folclóricas, personagens histriônicos, os malucos do bairro.

   Alguns juravam de pés juntos que esses dois eram os próprios Gervásio e Geraldo.

   O bando da polícia se desfez naturalmente quando os outros dois bandos sumiram.

   A contenda em si caiu no esquecimento e nem uma nota de rodapé ficou sobre ela na história, a não ser os mais de dois mil e trezentos mortos nesses quase dez anos de contenda.