Plugin BACULA

Publicado por Marcelo Viana (última atualização em 05/11/2012)

[ Hits: 5.426 ]

Homepage: infSite.org

Download plugin_bacula.tar.gz




INTRODUÇÃO:

Pequena contribuição de três scripts para auxiliar de forma organizada e fácil na CRIAÇÃO e REMOÇÃO de CLIENTES para o SERVIDOR de backup BACULA.

SCRIPT 1:

criar_cliente.sh: este script gera um novo cliente ou gera e instala se usado com a opção "--instalar".

Ao executar, serão solicitadas informações do novo cliente como: nome, IP do cliente, IP do storage e o diretório do cliente que será backupeado. Após, serão criados dois arquivos .conf, um com a configuração padrão do cliente e outro com a configuração de storage.

Obs.: Os arquivos .conf gerados só serão vistos se a opção "--instalar" NÃO for usada. Se a opção "--instalar" for usada, os arquivos serão movidos para os respectivos diretórios.

Obs. 2: Caso um cliente seja instalado mais de uma vez (duplicando do nome) com mesmo nome, um erro será exibido ao reiniciar o Bacula. Se isso acontecer, basta executar o script "remover_cliente.sh" para limpar a duplicação.

Sintaxe:

# sh criar_cliente.sh (somente gera)
# sh criar_cliente.sh --instalar (gera e instala)

SCRIPT 2:

instalar_cliente.sh: somente instala (move para os devidos diretórios) os arquivos gerados pelo script "criar_cliente.sh".

Sintaxe:

# sh instalar_cliente.sh:

SCRIPT 3:

remover_cliente.sh: remove um ou mais clientes criado pelos scripts.

Sintaxe:

# sh remover_cliente.sh (mostrará opções para exclusão de clientes).

ESTRUTURA DE DIRETÓRIOS PADRÃO:

1 - /etc/bacula
2 - /etc/bacula/criar_cliente/
3 - /etc/bacula/clientes/
4 - /etc/bacula/storage_clientes/
5 - /etc/bacula/clientes.conf
6 - /etc/bacula/clientes_storage.conf

1 - bacula: /etc/bacula/ (padrão da instalação)
2 - criar_cliente: /etc/bacula/criar_cliente/ (local home dos scripts)
3 - clientes: /etc/bacula/clientes/ (local dos arquivos .conf com a configuração de cada novo cliente gerado pelo script)
4 - storage_clientes: /etc/bacula/storage_clientes/ (local dos arquivos .conf com as informações de onde será armazenado o backup de cada cliente).
5 - clientes.conf: /etc/bacula/clientes.conf (é a ligação entre o Bacula e os scripts)
6 - clientes_storage.conf: /etc/bacula/clientes_storage.conf (indica o diretório de armazenamento de cada cliente)

Aviso: Os scripts correspondem ao diretório de instalação padrão do Bacula, caso sua instalação seja diferente, deve alterar o valor das variáveis contida no cabeçalho de cada script, indicando o diretório correto da instalação.

ADICIONANDO O PLUGIN AO BACULA

Para instalar:

# sh INSTALAR_PLUGIN.sh

Obs.: Caso execute mais de uma vez a instalação do plugin, ligações duplicadas serão criadas causando erro na inicialização do Bacula. Se isso ocorrer, simplesmente execute o script abaixo para limpar as ligações, então volte e execute novamente o instalador.

Para remover:

# sh REMOVER_PLUGIN.sh

Obs.: A remoção não apaga arquivos, somente desfaz a ligação.

Nota:

- Os scripts usam dois arquivos modelo para gerar os novos clientes.
- Antes da utilização é necessário que o arquivo "nome_storage.conf" que fica em "/etc/bacula/criar_cliente/modelo/" seja alterado com o diretório de backup de sua preferência, acrescentando no final do diretório a palavra chave "nome", veja a seguir:

# vim /etc/bacula/criar_cliente/modelo/nome_storage.conf

Arhive Device = /MEU_DIRETORIO_DE_BACKUP/nome

Obs.: Repare que no final do diretório acima há a palavra chave "nome", ela é extremamente fundamental para a criação das pastas e arquivos de backup dos clientes.

Feito isso, entre no diretório "/etc/bacula/criar_cliente" e faça os testes.

# cd /etc/bacula/criar_cliente

Gerar:

# sh criar_cliente.sh

ou

Gerar e instalar:

# sh criar_cliente.sh --instalar

Instalar:

# sh instalar_cliente.sh

Remover:

# sh remover_cliente.sh

Espero de verdade que isso seja útil, nem que seja só para terem novas idéias.

Paz e bem, fiquem com Deus.

  



Esconder código-fonte

##SCRIPT 1(CRIAR_CLIENTE.SH):

#!/bin/bash
parametro=$1
home=/etc/bacula/criar_cliente
bkp_home=/MEU_DIRETORIO_DE_BACKUP/
clientes=/etc/bacula/clientes
clientes_storage=/etc/bacula/storage_clientes
storage=_storage.conf
cd $home
gerar (){
echo "Nome do novo cliente:"
read novo_nome
echo "IP do novo cliente:"
read ip
echo "IP do storage (normalmente o IP do Bacula):"
read novo_ip_storage
echo "Senha do diretor - bacula-dir):"
read senha
echo "Diretorio do cliente a ser backupeado"
echo "Exemplos:"
echo "Para Windows: C:\\\\\\\\/pasta\\\\\\\/bkp"
echo "Para Linux: \\\\\\\\/home\\\\\\\\/user"
read caminho
cp $home/modelo/nome.conf $novo_nome.conf
cp $home/modelo/nome_storage.conf $novo_nome$storage
grep -l nome $novo_nome* | xargs sed -i s/nome/$novo_nome/g
grep -l ip $novo_nome* | xargs sed -i s/ip/$ip/g
grep -l endereco_storage $novo_nome.conf | xargs sed -i s/endereco_storage/$novo_ip_storage/g
grep -l 123456 $novo_nome* | xargs sed -i s/123456/$senha/g
grep -l caminho $novo_nome* | xargs sed -i s/caminho/$caminho/g
if [ $parametro = 0 ]; then
instalar
else
echo "{FONTE}33[32;1m Cliente $novo_nome gerado! {FONTE}33[m"
echo "Use o script 'instalar_cliente.sh' para completar a operacao"
fi
}
instalar (){
mkdir $bkp_home/$novo_nome > /etc/null
cp $novo_nome.conf $clientes/
cp  $novo_nome$storage $clientes_storage/
echo "@$clientes/$novo_nome.conf" >> $home/../clientes.conf
echo "@$clientes_storage/$novo_nome$storage" >> $home/../clientes_storage.conf
echo "{FONTE}33[32;1m Cliente $novo_nome gerado e instalado! {FONTE}33[m"
echo "Reinicie o bacula."
rm $home/*.conf
exit
}
if [ -z $parametro ]; then
parametro=1
gerar
else
if [ $parametro = "--instalar" ]; then
parametro=0
gerar
else
echo "O parametro correto é: --instalar"
fi
fi
# É o Senhor que mostra os caminhos.




##SCRIPT 2 (INSTALAR_CLIENTE.SH):

#!/bin/bash
home=/etc/bacula/criar_cliente
bkp_home=/MEU_DIRETORIO_DE_BACKUP/
clientes=/etc/bacula/clientes
clientes_storage=/etc/bacula/storage_clientes
storage=_storage.conf
conf=.conf
echo "Nome do cliente:"
read novo_nome
if [ -e $novo_nome$conf ]; then
mkdir $bkp_home/$novo_nome > /etc/null
cp $novo_nome$conf $clientes/
cp $novo_nome$storage $clientes_storage/
echo "@$clientes/$novo_nome$conf" >> $home/../clientes.conf
echo "@$clientes_storage/$novo_nome$storage" >> $home/../clientes_storage.conf
echo "{FONTE}33[32;1m Cliente $novo_nome instalado! {FONTE}33[m"
echo "Reinicie o bacula."
rm $home/*.conf
exit
else 
echo "{FONTE}33[31;1m Cliente $novo_nome nao encontrado! {FONTE}33[m"
fi
# É o Senhor que mostra os caminhos.




##SCRIPT 3 (REMOVER_CLIENTE.SH):

#!/bin/bash
home=/etc/bacula/criar_cliente
bkp_home=/MEU_DIRETORIO_DE_BACKUP
clientes=/etc/bacula
clientes_storage=/etc/bacula/storage_clientes
storage=_storage.conf
opc=d
listar (){
echo "Listando clientes..."
sleep 3
leitura
}
leitura (){
grep -n $ $clientes/clientes.conf
echo "Digite o numero do cliente que deseja remover:(ctrl+c para sair)"
read num
remover
}
remover (){
linhas=`grep -cv $= $clientes/clientes.conf`
if [ $num -le $linhas ]; then
num1=$num$opc
sed -i $num1 $clientes/clientes.conf
sed -i $num1 $clientes/clientes_storage.conf
echo '{FONTE}33[32;1m Cliente removido! {FONTE}33[m'
listar
else
echo '{FONTE}33[31;1m Numero ivalido! {FONTE}33[m'
listar
fi
}
listar
# É o Senhor que mostra os caminhos.




## OS ARQUIVOS MODELO:

##Modelo1 “nome_storage.conf”:
Device {
  Name = nome_storage_files
  Media Type = File
  Archive Device = /MEU_DIRETORIO_DE_BACKUP/nome
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = yes;
}

##Modelo2 “nome.conf”:
Job {
  Name = "nome"
  Type = Backup
  Level = Incremental
  Client = nome-fd
  FileSet = "nome_fileset"
  Schedule = "WeeklyCycle"
  Storage = nome_storage
  Messages = Standard
  Pool = File
  Priority = 10
  Write Bootstrap = "/var/bacula/working/%c.bsr"
}
FileSet {
  Name = "nome_fileset"
  Include {
    Options {
      signature = MD5
    }
    File = "caminho"
  }
   Exclude {
   File = .tmp
}
}
Client {
  Name = nome-fd
  Address = ip
  FDPort = 9102
  Catalog = MyCatalog
  Password = "123456"
  File Retention = 30 days
  Job Retention = 6 months
  AutoPrune = yes
}
Storage {
  Name = nome_storage
  Address = endereco_storage
  SDPort = 9103
  Password = "123456"
  Device = nome_storage_files
  Media Type = File
}

Scripts recomendados

Firewall do mikrotik, limitando icmp (ping)

Configurando IPTABLES de forma simples

tuiteroPreguicoso1.0 - automatiza o envio de mensagens ao Twitter

Ver último twitter pelo terminal ou na barra de notificação

TCPDump do Dia


  

Comentários
[1] Comentário enviado por danniel-lara em 05/11/2012 - 18:00h

Muito Bom o Script


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts