Torne o seu servidor um mirror de atualização do Antivírus AVG (revisão)

Em Setembro elaborei um tutorial que permitia transformar um servidor Linux em um mirror de atualização do AVG, entretanto a Grisoft alterou a estrutura de pastas. Sendo assim, segue a nova versão do tutorial.

[ Hits: 54.792 ]

Por: Alessandro de Oliveira Faria (A.K.A. CABELO) em 01/10/2003 | Blog: http://assuntonerd.com.br


O envio de e-mail (opcional)



Usei um programa em Java para enviar os e-mails aos administradores e clientes. Caso você não utilize o Java (e nem deseja), basta ignorar este tópico e comentar as seguintes linhas dentro do script anterior:

/bin/emailserro
/bin/emailsok


O principal motivo do uso do Java foi a facilidade de efetuar a leitura em um banco de dados cliente-servidor para extrair a lista de clientes que receberão o aviso da existência da nova versão. Sendo assim muito simples a adaptação as necessidades de cada empresa.

Estou partindo do principio que o Java está corretamente instalado, em caso de dúvida existe tutoriais de instalação em www.vivaolinux.com.br e www.javafree.com.br.

Não podemos também esquecer da classe mail-API que pode ser baixado na sessão de download em www.javafree.com.br/download.

Para encurtar o caminho das pedras, após instalar a classe Mail-API, basta apenas declarar os arquivos na variável ambiental CLASS:

CLASSPATH=.:/usr/java/j2sdk1.4.1_04/jre/lib/ext: /usr/java/j2sdk1.4.1_04/lib/tools.jar:/usr/java/j2sdk1.4.1_04/jre/lib: /usr/java/j2sdk1.4.1_04/lib:/usr/java/j2sdk1.4.1_04/javamail/mail.jar: /usr/java/j2sdk1.4.1_04/javamail/activation.jar

Segue abaixo o fonte do programa que envia o e-mail, devemos digitá-lo e salvá-lo na pasta /bin.

OBS: vale à pena ressaltar que este programa foi extraído dos exemplos do pacote Mail-API.

msgsendsample.java:

import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;


<font color="#004080">/**
*
* @author Max Spivak
*/</font>
public class msgsendsample {
<font color="#004080">// static String msgText = "This is a message body.\nHere's the second line.";</font>


public static void main(String[] args) {
  if (args.length != 5) {
    usage();
    System.exit(1);
  }

  System.out.println();

  String to = args[0];
  String from = args[1];
  String host = args[2];

  boolean debug = Boolean.valueOf(args[3]).booleanValue();

  String msgText = args [4];

  // create some properties and get the default Session
  Properties props = new Properties();
  props.put("mail.smtp.host", host);
  if (debug) props.put("mail.debug", args[3]);

  Session session = Session.getInstance(props, null);
  session.setDebug(debug);

  try {
    // create a message
    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(from));
    InternetAddress[] address = {new InternetAddress(args[0])};
    msg.setRecipients(Message.RecipientType.TO, address);
    msg.setSubject("E-mail Automatico: NETi TECNOLOGIA");
    msg.setSentDate(new Date());
    // If the desired charset is known, you can use
    // setText(text, charset)
    msg.setText(msgText);
    Transport.send(msg);
  } catch (MessagingException mex) {
    System.out.println("\n--Exception handling in msgsendsample.java");
    mex.printStackTrace();
    System.out.println();
    Exception ex = mex;

    do {
      if (ex instanceof SendFailedException) {
          SendFailedException sfex = (SendFailedException)ex;
          Address[] invalid = sfex.getInvalidAddresses();
          if (invalid != null) {
            System.out.println(" ** Invalid Addresses");
            if (invalid != null) {
              for (int i = 0; i < invalid.length; i++)
                 System.out.println(" " + invalid[i]);
            }
          }
          Address[] validUnsent = sfex.getValidUnsentAddresses();
          if (validUnsent != null) {
          System.out.println(" ** ValidUnsent Addresses");
          if (validUnsent != null) {
             for (int i = 0; i < validUnsent.length; i++)
               System.out.println(" "+validUnsent[i]);
          }
       }

       Address[] validSent = sfex.getValidSentAddresses();
       if (validSent != null) {
          System.out.println(" ** ValidSent Addresses");
          if (validSent != null) {
            for (int i = 0; i < validSent.length; i++)
               System.out.println(" "+validSent[i]);
          }
       }

       System.out.println();
       if (ex instanceof MessagingException)
          ex = ((MessagingException)ex).getNextException();
       else
          ex = null;
    } while (ex != null);
  }
}


private static void usage() {
   System.out.println("usage: java msgsendsample <to> <from> <smtp> true|false <message>");
}

Este programa envia um e-mail baseados nos parâmetros recebido via linha de comando. Sua sintaxe é:

java msgsendsample <email-destino> <e-mail-origem> <IP do servidor smtp> <true|false modo debug> <mensagem>

Com este programa em mãos, criei um script para ler um arquivo texto que contém os e-mails destinatários, assim usando o mesmo como parâmetro para o programa msgsendsample.java.

Criei dois scripts. O emailsok, que envia um e-mail avisando a existência de uma nova atualização para todos os endereços inclusos no arquivo clientes que deve ser salvo na pasta /bin.

Já o script emailserro envia um e-mail de notificação de erro durante o serviço de transferência de dados para os administradores do sistema, cujo os e-mails deverão estar no arquivo adm que também deverá se encontrar na pasta /bin.

Segue abaixo os dois scripts:

Criando o script emailsok:

# cd /bin
# vi emailsok


Coloque o seguinte conteúdo no arquivo:

CLASSPATH=.:/usr/java/j2sdk1.4.1_04/jre/lib/ext: /usr/java/j2sdk1.4.1_04/lib/tools.jar: /usr/java/j2sdk1.4.1_04/jre/lib:/usr/java/j2sdk1.4.1_04/lib: /usr/java/j2sdk1.4.1_04/javamail/mail.jar: /usr/java/j2sdk1.4.1_04/javamail/activation.jar
cd /bin

cat clientes | while read mArquivo
do
    /usr/java/j2sdk1.4.1_04/bin/java msgsendsample $mArquivo neti@netitec.com.br mail.mdbrasil.com.br false "SERVIÇO NETi: Existe uma nova versão do Antivírus AVG, certifique a sua atualização."
done

Criando o script emailserro:

# cd /bin
# vi emailserro


Coloque o seguinte conteúdo no arquivo:

CLASSPATH=.:/usr/java/j2sdk1.4.1_04/jre/lib/ext: /usr/java/j2sdk1.4.1_04/lib/tools.jar: /usr/java/j2sdk1.4.1_04/jre/lib:/usr/java/j2sdk1.4.1_04/lib: /usr/java/j2sdk1.4.1_04/javamail/mail.jar: /usr/java/j2sdk1.4.1_04/javamail/activation.jar

cd /bin

cat adm | while read mArquivo
do
    /usr/java/j2sdk1.4.1_04/bin/java msgsendsample $mArquivo neti@netitec.com.br mail.mdbrasil.com.br false "SERVIÇO NETi: Houve um erro no processo de atualização do Antivírus, certifique!!!!"
done

Estes scripts apenas lêem o conteúdo dos arquivos texto, armazenam a leitura na variável mArquivo, que é usada como parâmetro no programa em java.

Caso o programa em Java não envie o e-mail nos scripts acima, use o parâmetro -classpath, isto aconteceu em algumas distribuições Linux que por algum motivo não consegui exportar a variável ambiental CLASSPATH.

Segue abaixo um exemplo de como usar o parâmetro -classpath na chamada do programa em Java.

/usr/java/j2sdk1.4.1_04/bin/java -classpath .:/usr/java/j2sdk1.4.1_04/jre/lib/ext: /usr/java/j2sdk1.4.1_04/lib/tools.jar: /usr/java/j2sdk1.4.1_04/jre/lib:/usr/java/j2sdk1.4.1_04/lib: /usr/java/j2sdk1.4.1_04/javamail/mail.jar: /usr/java/j2sdk1.4.1_04/javamail/activation.jar msgsendsample $mArquivo neti@netitec.com.br mail.mdbrasil.com.br false "SERVIÇO NETi: Houve um erro no processo de atualização do Antivírus, certifique!!!!"

Agora vamos dar o direitos de execução para os nossos scripts:

# chmod 755 emailsok
# chmod 755 emailserro


Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Criando o mirror da AVG
   3. Configurando as estações
   4. A estrela deste tutorial (o script)
   5. O envio de e-mail (opcional)
   6. Agendando o script
   7. Download dos scripts
Outros artigos deste autor

Bioloid Control: Robótica virtual em Linux

Scribus 1.1.6: A opção Linux para Adobe PageMaker, QuarkXPress e InDesing

True3D*Shell: Um shell 3D e futurista para o seu GNU/Linux

Programe em Python no jogo Minecraft com seu filho ou sozinho

RealBasic 2005: Um Visual Basic multi-plataforma!

Leitura recomendada

antiX: uma distro versátil

Screen, eita ferramenta porreta!

Upgrade no Arch Linux usando outro PC com Internet rápida

Scribus 1.1.6: A opção Linux para Adobe PageMaker, QuarkXPress e InDesing

Redmine no openSUSE - Gerenciamento de projetos e bugs (issue tracking)

  
Comentários
[1] Comentário enviado por fabio em 01/10/2003 - 15:03h

Nesta segunda versão do tutorial que fui perceber a importância do mesmo. Antes eu não sabia que o AVG é um software de antivírus freeware para Windows e para quem não sabe, esta é uma solução perfeita para quem deseja ter uma rede heterogênia segura e não quer gastar com licenças de antivírus.

[2] Comentário enviado por fabio em 02/10/2003 - 17:06h

Alessandro,

Qual é o tamanho em disco aproximado que o mirror do AVG ocupa?

[3] Comentário enviado por cabelo em 02/10/2003 - 17:25h

No máximo 10Mb

[4] Comentário enviado por fabio em 04/10/2003 - 02:44h

Acrescentando 1 byte, na página 2 do artigo aconselho a adição da opção -np (--no-parent) ao comando wget. No meu caso fui baixar o mirror sem esta opção, quando fui ver já tinha 150 mb de arquivos no diretório e nem sinal de fim de download, pois ele ascendeu para o diretório acima e assim sucessivamente. Digitem "man wget" e procurem por essa opção para entender melhor. Sendo assim, os comandos wget ficariam:

wget -r -np -nd http://files.grisoft.cz/softw/60/fe
e
wget -r -np -nd http://files.grisoft.cz/softw/60/xx

[5] Comentário enviado por proteus em 15/01/2004 - 14:54h

não consigo fazer o download dos scripts do site do cabelo e o que esta listado na pagina deu erro (falta fechar um if), modifiquei para enviar e-mails sem a aplicação em java

[6] Comentário enviado por stavale em 12/04/2004 - 15:51h

Estou executando o wget como descrito neste artigo mas sempre mostra a mensagem de tempo esgotado e nao consigo baixar.
Alguem saberia me explicar onde estou errando ??

valeu !

[7] Comentário enviado por cruel em 27/04/2004 - 10:50h

*** CORREÇÃO:

Os comandos para baixar os arquivos do site da Grisoft devem ter uma "/" no final senão será feito o download somente do arquivo index.html (pelo menos foi o que ocorreu comigo). O correto é:

wget -r -np -nd http://files.grisoft.cz/softw/60/fe/
wget -r -np -nd http://files.grisoft.cz/softw/60/xx/


*** OBSERVAÇÕES:
- O espaço total utilizado para criação do mirror foi de 30.048Kb
(ele baixou várias versoes do programa (avg6523fu_free.exe ...) e versões de atualização antigos.
O script nao irá apagar esses arquivos antigos???

*** DÚVIDAS:
- É preciso mesmo comentar as linhas /bin/emailserro e /bin/emailsok para não utilizar o recurso de email ? A variavel /tmp/email.tmp nao faz esse papel dentro do script?
- O script irá sempre baixar todas as versões dos arquivos de atualização ou somente a menor?
- Cabelo, cadê o seu cabelo?! :)

*** SUGESTAO:
- Seria interessante utilizar um sistema para envio de email usando um MTA (postfix, QMail, etc...)


Beleza esse script e essa dica!

Um abraço!

[8] Comentário enviado por silva.rodrigo em 07/04/2005 - 19:59h

Era o q realmente eu estava procurando, fiz a leitura agora vou aplicar.

Ótimo Artigo

Valew !

[9] Comentário enviado por CABELO em 02/11/2005 - 13:55h

O Agrimar Teixeira postou um script para a versão 7

http://www.vivaolinux.com.br/scripts/verScript.php?codigo=962

[10] Comentário enviado por casterman em 28/01/2006 - 15:02h

Muito Bom. execelênte alternativa para diminuir o fluxo de rede!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts