Solução de backup completa Open Source: Bacula Community 9.6.x e Baculum 9.6.x
O Bacula é um software que permite você (ou o administrador de sistema) administrar backup, restauração e verificação dos dados de computadores em uma rede de sistemas mistos.
Por ser tão flexível o Bacula é considerado um framework de backup, podendo ser implementado nas mais diferentes estruturas corporativas.
Funcionalidades:
- Geração de formato aberto (não proprietário) de gravação (pode ser lido pelo tar e dump do Unix) – adeus ao aprisionamento tecnológico;
- Armazenamento do seu catálogo em banco de dados padrão SQL: SQLite,PostgreSQL ou MySQL;
- Suporte a compressão dos backups nos algorítimos livres GZIP e LZO;
- GPL – sem custos com licenças, conhecimento e possibilidade de customização da ferramenta na versão community.
E de quebra, ainda vamos instalar o Baculum, que é a Web Gui (interface gráfica) Oficial do Bacula Community, permitindo que o administrador de backup altere configurações de backup sem precisar editar arquivos texto. Além disso uma API é disponibilizada, facilitando a integração com outros softwares, interfaces e consoles.
Primeiramente me chamo Lenon Corrêa, trabalho em uma empresa de Cloud Computing, a Staybox, fornecemos serviços de hospedagem, máquinas virtuais, backup em nuvem, licenciamento de software e outros do nível (se precisar de algo, me chame kkkk). Já trabalhei com o Rudimar, assim veio a oportunidade deste post. Antes de mais nada, é o 1º post, então deem seus feedbacks sobre o conteúdo e tirem suas dúvidas, criticas construtivas sempre serão aceitas. Sem mais delongas, vamos ao que realmente interessa!
Requisitos:
* Debian 10 (Buster) -> Instalação Limpa
* Tunning Bash -> Bash colorido (Este tique aprendi com o Rudimar kkk)
Instalação
Na primeira etapa, instalamos pacotes necessários para a compilação do Bacula, estas bibliotecas são indispensáveis para o bom funcionamento do software e andamento da instalação.
# su - # apt install vim make gcc build-essential perl unp mc mtx libreadline7 \ libreadline5-dbg libreadline-gplv2-dev zlib1g-dev lzop liblzo2-dev python-lzo sudo \ gawk gdb libacl1 libacl1-dev libssl-dev lsscsi apt-transport-https qt4-dev-tools \ qt4-qtconfig libqt4-dev libqwt5-qt4 libqwt5-qt4-dev pkg-config wget -y
:: Instalação do banco de dados ::
Os banco de dados homologados pelo Bacula são: PostgreSQL, SQLite e MySQL. Então sinta-se livre para usar qualquer um deles, os passos que se alteram desta instalação são minímos.
Já vi pessoas também instalando com o MariaDB, em suma ele é praticamente igual ao MySQL, então não deve acarretar inconsistências. Mas vamos seguir a risca as recomendações da comunidade e vamos instalar a versão 5.7 Community do MySQL (Também já fui orientado a usar PostgreSQL, pois o desempenho é superior, mas como meu conhecimento é relativamente baixo, prefiro ir de MySQL mesmo, que sei tratar erros, se acontecerem).
Primeiro, adicionamos a chave GPG do MySQL Community, em seguida adicionamos em nossa máquina para reconhecer o reposítório.
# wget -qO - https://repo.mysql.com/RPM-GPG-KEY-mysql --no-check-certificate | apt-key add -
Agora, adicionamos os repositórios, em seguida update.
# cat <<EOF >/etc/apt/sources.list.d/mysql.list deb http://repo.mysql.com/apt/debian/ buster mysql-apt-config deb http://repo.mysql.com/apt/debian/ buster mysql-5.7 deb http://repo.mysql.com/apt/debian/ buster mysql-tools deb http://repo.mysql.com/apt/debian/ buster mysql-tools-preview deb-src http://repo.mysql.com/apt/debian/ buster mysql-5.7 EOF
Atualize os repositórios.
# apt update
Se tudo correu bem até aqui, vamos finalmente aos pacotes do MySQL:
# apt install mysql-community-server libmysqlclient-dev -y
Durante a instalação, o MySQL oferta se você deseja adicionar uma senha ao root para acessar o banco, se sim, insira a senha, caso contrário apenas tecle enter e prossiga.
Agora vamos criar um usuário para o Bacula no banco de dados, entre no banco com o comando a seguir:
# mysql
Ou, caso você tenha inserido uma senha de root no banco:
# mysql -u root -p
Os comandos abaixo são executados dentro do banco de dados, por tanto cuidado. Gere uma hash de senha e faça a alteração na linha 3.
O que estas linhas fazem são, simplesmente adicionar um usuário ao banco e dar os devidos privilégios para que ele possa inserir, deletar e alterar registros das tabelas que criaremos no futuro deste tutorial.
CREATE USER bacula; GRANT ALL ON *.* TO 'bacula'@'localhost' IDENTIFIED BY 'SUA_SENHA_AQUI' WITH GRANT OPTION; GRANT SELECT ON mysql.proc TO 'bacula'; FLUSH PRIVILEGES; QUIT
Para as alterações terem eficácia, restarte o serviço SQL.
# /etc/init.d/mysql restart
Nos comandos seguintes, vamos entrar no diretório onde serão compilados os pacotes do Bacula. Na data de hoje 05/06 se encontra na versão 9.6.4, você pode conferir atualizar neste link. Vamos baixar o fonte, descompactá-lo e entrar na pasta seguinte.
# cd /usr/src # wget --no-check-certificate https://sourceforge.net/projects/bacula/files/bacula/9.6.4/bacula-9.6.4.tar.gz # tar xvzf bacula-9.6.4.tar.gz # cd bacula-9.6.4
Dentro da pasta ‘bacula-9.6.4’, execute o comando abaixo, ele vai configurar algumas diretivas que interferem diretamente na compilação do Bacula, portanto altere usuário e senha do banco de dados, conforme criou anteriormente, em:
–with-db-user=’usuario_do_banco’
–with-db-password=’SENHA_DO_BANCO_AQUI’
–with-hostname=’ip_da_sua_maquina’
Qualquer outra alteração faça com cuidado.
# ./configure \ --enable-smartalloc \ --with-mysql \ --with-db-user=bacula \ --with-db-password='SENHA_DO_BANCO_AQUI' \ --with-db-port=3306 \ --with-openssl \ --with-readline=/usr/include/readline \ --sysconfdir=/etc/bacula \ --bindir=/usr/bin \ --sbindir=/usr/sbin \ --with-scriptdir=/etc/bacula/scripts \ --with-plugindir=/etc/bacula/plugins \ --with-pid-dir=/var/run \ --with-subsys-dir=/etc/bacula/working \ --with-working-dir=/etc/bacula/working \ --with-bsrdir=/etc/bacula/bootstrap \ --with-basename=bacula \ --with-hostname=10.246.247.90 \ --with-systemd \ --disable-conio \ --disable-nls \ --with-logdir=/var/log/bacula
O retorno será conforme na imagem:
Chegamos na compilação dos pacotes, até aqui tudo certo, né?
A seguir, temos os comandos que compilam o Bacula. Rode-os e aguarde!
# make -j 8 # make install # make install-autostart
Os próximos comandos alteram permissão de escrita e leitura da pasta onde fica o Bacula, e após entra na pasta.
# chmod -R 775 /etc/bacula # cd /etc/bacula/scripts
Agora vamos criar o banco de dados, tabelas e dar privilégios ao usuário do bacula. (Dependendo como você instalou o banco você usa o ‘-u root -p’ ou não).
# /etc/bacula/scripts/create_mysql_database -u root -p # /etc/bacula/scripts/make_mysql_tables -u root -p # /etc/bacula/scripts/grant_mysql_privileges -u root -p
Para fazer atualização do bacula você repete o mesmo procedimento da instalação, porém execute:
# /etc/bacula/scripts/update_bacula_tables -u root -p # /etc/bacula/scripts/update_mysql_tables -u root -p # /etc/bacula/scripts/grant_mysql_privileges -u root -p
Feito isso com sucesso, vamos restartar o bacula e checar o status com os comandos.
# bacula restart # bacula status
O retorno dos comandos deverá ser o seguinte:
Agora vamos entrar no console do bacula com o comando:
# bconsole
Se tudo correu bem, receberá o retorno de acordo com a imagem abaixo:
Para sair do console:
* exit
:: Instalação do Baculum 9.6.x ::
Antes de instalarmos o baculum, precisamos do Apache e do PHP, usaremos a versão 7.3. A versão recomendada é a 7.2, mas em meus testes a 7.3 funcionou bem, não apresentando falhas, (aqui saí das recomendações kkk), use a versão que desejar.
Entre com os comandos abaixo pra instalar os pacotes citados anteriormente.
# apt install php7.3-{common,bcmath,bz2,intl,gd,mbstring,mysql,zip,curl} -y # apt install apache2 libapache2-mod-php7.3 -y
Vamos a instalação do Baculum, baixamos a chave e ativamos em nossa máquina.
# wget -qO - http://bacula.org/downloads/baculum/baculum.pub | apt-key add -
Agora, adicionamos os repositórios, em seguida update.
# cat <<EOF >/etc/apt/sources.list.d/baculum.list deb [ arch=amd64 ] http://bacula.org/downloads/baculum/stable/debian buster main deb-src http://bacula.org/downloads/baculum/stable/debian buster main EOF
# apt update
Após, vamos verificar uma coisa, se o repositório encontrado foi da versão 9.6.”4″. O retorno deve ser como na imagem na sequência.
# apt info baculum-web
Agora sim, finalmente vamos instalar os pacotes do Baculum.
# apt install baculum-api baculum-api-apache2 baculum-common bacula-console baculum-web baculum-web-apache2 -y
Durante a instalação, vamos receber o questionamento como na imagem abaixo. Selecione “manter a versão local atualmente instalada”.
Aqui damos algumas permissões necessárias para que o Baculum consiga rodar comando em nosso bconsole.
# cat <<EOF >/etc/sudoers.d/baculum www-data ALL=NOPASSWD: /usr/sbin/bconsole www-data ALL=NOPASSWD: /etc/bacula/confapi www-data ALL=NOPASSWD: /usr/sbin/bdirjson www-data ALL=NOPASSWD: /usr/sbin/bbconsjson www-data ALL=NOPASSWD: /usr/sbin/bfdjson www-data ALL=NOPASSWD: /usr/sbin/bsdjson www-data ALL=NOPASSWD: /usr/bin/systemctl EOF
Adicionamos o bacula ao grupo do apache e mudamos as permissões da pasta onde fica.
Necessário para que o baculum consiga editar arquivos da pasta.
# usermod -aG bacula www-data # chown -R www-data:bacula /etc/bacula
Aqui ativamos o modo rewrite do apache, as interfaces do baculum e da api. Em seguida restartamos o apache.
# a2enmod rewrite ldap # a2ensite baculum-web baculum-api # systemctl restart apache2
Agora vamos a parte Web, acesse o ip da máquina e a porta 9096, no meu caso 10.246.247.90:9096, faça login com usuário: admin. Senha: admin. E chegará na tela a seguir, selecione o idioma e avance, aqui nesta parte é tudo muito intuítivo.
Selecione Sim, e insira a senha do dados do banco de dados (usuário bacula), Endereço IP informe 127.0.0.1, Teste e Prossiga.
Selecione sim e marque a opção “Obter configuração do sudo” teste e avance.
Selecione sim. Em “Diretório de trabalho do Baculum para a configuração do Bacula” insira “/etc/bacula/working“, marque “Obter configuração do sudo” teste as configurações e avance para a etapa seguinte.
Selecione Sim, marque a opção “Obter configuração do sudo” e prossiga.
Crie um usuário para acessar a interface da API, avance.
Aqui você vera uma revisão das configurações criadas anteriomente, ao avançar esta etapa o login será solicitado. Realize-o com as credenciais criadas.
Eu optei por criar um usuário específico para usar a API. Clique em “Listar usuários HTTP Básico” e em “Novo usuário HTTP Básico”, informe os dados e clique em adicionar, conforme abaixo.
Acesse seus IP na na porta 9095, para finalmente configurarmos o Baculum. (Entre com admin/admin).
Selecione o idioma e avance.
Insira as credenciais criadas antes (no meu ex eu criei um usuário api), para que o baculum acesse a API, clique em testar e avance.
Ajuste o usuário para acessar o Baculum nesta etapa e prossiga.
Novamente uma revisão das informações, clique em “Salvar”.
E pronto, chegamos ao fim. Bacula com interface gráfica prontinho para uso.
Vamos conferir se o endereço IP (Address) está o IP de localhost, a alteraremos para o IP da interface do servidor.
# vim /etc/bacula/bacula-dir.conf
Localize Storage {} e confira o parâmetro ‘Address’, altere o IP de localhost 127.0.0.1 para o IP da interface de rede da sua maquina. Se esses endereços ficarem incorretos, o bacula até consegue conversar com nosso cliente, porém nosso cliente não sabe para onde deve enviar os backup’s (a explicação é um pouco mais longa que isso, mas brevemente é o que acontece).
#... Storage { Name = "File1" SdPort = 9103 Address = "SEU_IP_AQUI" Password = "xxxxxxxxxxxxxxxxxx" Device = "FileChgr1" MediaType = "File1" Autochanger = "File1" MaximumConcurrentJobs = 10 } Storage { Name = "File2" SdPort = 9103 Address = "SEU_IP_AQUI" Password = "xxxxxxxxxxxxxxxxxxxxxxxx" Device = "FileChgr2" MediaType = "File2" Autochanger = "File2" MaximumConcurrentJobs = 10 } #...
Feito essa alteração, vamos conferir, não é mesmo?
# bacula restart # bconsole
Dentro do console, você pode verificar um cliente (deixarei o exemplo já já):
* status network client=deb10-fd
Agora você pode gerar seus backups de máquinas Linux, Windows, Banco de dados… As possibilidades são infinitas. Crie suas rotinas, escolha do que fazer backup e faça seus testes. PS: Ainda pode ser necessário atualizar algumas diretivas direto no terminal, nos arquivos de configuração, portanto recomendo que leia a documentação, neste link.
:: Extras – Add um cliente::
Aqui vou deixar ainda, um exemplo de configuração de um cliente Linux, para que você não fique tão perdido assim em meio a tanta informação.
:: No lado do cliente ::
Para isso instale bacula-fd
# apt install bacula-fd -y
Ajuste as configurações em /etc/bacula/bacula-fd.conf
# vim /etc/bacula/bacula-fd.conf
Director { Name = bacula-dir Password = "4nyrNNFD1IyWlQNgjXorr4bdWx8_kgHCP" } #Director { # Name = deb10-mon # Password = "GjRiOZ1KxjAXw2_LVe2H4ruZShoZIdnCQ" # Monitor = yes #} FileDaemon { Name = deb10-fd FDport = 9102 WorkingDirectory = /var/lib/bacula Pid Directory = /run/bacula Maximum Concurrent Jobs = 20 Plugin Directory = /usr/lib/bacula #FDAddress = 127.0.0.1 } Messages { Name = Standard director = deb10-dir = all, !skipped, !restored }
O campo ‘Name’, em Director é o nome do nosso servidor, por padrão ele vem com ‘bacula-dir‘, e em nosso servidor criamos assim então não precisamos alterar, o campo ‘Password’ é a senha que o Bacula usará para se conectar em nossa máquina (precisaremos dela adiante). Em ‘FileDaemon’ vamos pegar o ‘Name’, que vamos usar para criar nosso cliente na interface gráfica. Basicamente isso, existem outros parâmetros que podem ser usados, para ver quais são consulte a documentação, mas com essas informações básicas já faremos um backup funcionar!
Restarte o bacula-fd
# systemctl restart bacula-fd
:: No lado do servidor ::
Agora voltamos ao Baculum, IP:9095.
Na sidebar da esquerda clique em ‘Clientes”, em seguida na tela que vai aparecer, clique em ‘Adicionar cliente’.
Agora vamos adicionar nosso 1º cliente de backup. Entre com as informações, ‘Name’ insira o nome que estava na aba ‘FileDaemon’ de nosso cliente, ‘Address’ é o IP da máquina do cliente, ‘Password’ é a senha, que também estava no cliente (como falei antes). Em ‘Catalog’ selecione ‘MyCatalog’, clique em ‘Criar’, um pop-up se abrirá indicando sucesso na adição do cliente, clique em ‘Ok’.
Agora, clique na flecha azul, ao lado do cliente que adicionamos e em seguida clique em ‘Detalhar’.
Nesta aba, clique ‘Status do cliente’, e rapidamente será feita uma captura de informações sobre nosso cliente de backup. Tudo pronto para o backup.
Confira também o GitHub do Wanderlei Huttel, a base deste tuto veio de lá, e também tem muito material complementar lá, como scripts de envio de dados para o Telegram e muito mais. Não trataremos aqui pra não ficar muito extenso.
Acompanhe a comunidade do Bacula no Telegram neste link, boa parte das suas dúvidas outras pessoas já tiveram, então é só pesquisar no grupo.
Se tiver qualquer pergunta deixe nos comentários. Espero que tenha ajudado você, qualquer dúvida você me encontra la no grupo https://t.me/remontticombr 🙂
Abraço!
Autor: Lenon Correa https://t.me/lenon_correa
Fontes:
http://softwarelivre.org/heitorfaria/blog/baculum-9-configuracao-grafica-do-bacula-administracao-e-api
https://github.com/wanderleihuttel/bacula-utils/blob/master/tutorial/bacula_install_debian10.txt
https://github.com/wanderleihuttel/bacula-utils/blob/master/tutorial/baculum_install_debian9.sh
root@bacula:~# apt update
Obter:1 http://repo.mysql.com/apt/debian buster InRelease [22,1 kB]
Err:1 http://repo.mysql.com/apt/debian buster InRelease
As assinaturas a seguir não puderam ser verificadas devido à chave pública não estar disponível: NO_PUBKEY 467B942D3A79BD29
Atingido:2 http://security.debian.org/debian-security buster/updates InRelease
Atingido:3 http://deb.debian.org/debian buster InRelease
Atingido:4 http://deb.debian.org/debian buster-updates InRelease
Lendo listas de pacotes… Pronto
W: Erro GPG: http://repo.mysql.com/apt/debian buster InRelease: As assinaturas a seguir não puderam ser verificadas devido à chave pública não estar disponível: NO_PUBKEY 467B942D3A79BD29
E: The repository ‘http://repo.mysql.com/apt/debian buster InRelease’ is not signed.
N: Updating from such a repository can’t be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
root@bacula:~#
Após inserir o repositório e fazer o apt update ocorre as sguintes mensagens
e não consigo dar continuidade na instalação do mysql acredito por falta das dependencias.
versão do meu debian : 4.19.0-23-686-pae #1 SMP Debian 4.19.269-1 (2022-12-20) i686 GNU/Linux
Boa tarde amigos! Primeiramente parabéns ao Lenon pelo excelente tutorial. Consegui fazer todo o procedimento porem após certo tempo a pagina do Baculum “cai” e retornar o seguinte erro:
Esta página não está funcionando
Redirecionamento em excesso por 192.168.-.—
Tente limpar os cookies.
ERR_TOO_MANY_REDIRECTS
Fiz uns 2 backups menores de teste e deu tudo certo. Mas ao fazer um maior após um tempo a pagina cai e só volta após reiniciar o meu servidor de backup. Desde já agradeço a ajuda de todos.
Top demais, parabéns
Tutorial show. Estou com o mesmo problema do Cleiton.
Mensagem: Internal error. Component property ‘PoolRecord.maxpoolbytes’ is not defined.
As vezes aparecem outros, mas esse é o mais incomodo.
Boa tarde,
também estou com um problema semelhante, ocorre naquela parte onde testamos a API, o erro é o seguinte
“output”: “Internal error. Component property ‘JobRecord.priorjob’ is not defined.”,
“error”: 1000
Print do erro: https://i.imgur.com/NU3cExG.png
Depois de sofrer achei a solução meio sem querer para esses dois problemas.
cd /usr/share/baculum/htdocs/protected/API/Class/
vi JobRecord.php
insira public $priojob;
salve
vi PoolRecord.php
insira public $maxpoolbytes;
salve
Infelizmente outros defeitos ainda acontecem, devido a meu pouco conhecimento em php e linux, tô apanhando.
Deus os abençoe
Carlos, sobre tua dica: no public $projob; dentro do JobRecord.php o certo é public @priorjob;
Fis os testes aqui seguindo a tua dica, e resolveu colocando o “r” que faltava.
Abraços!
Desculpe, faltou o R, já era um pouco tarde e a visão já tava turva. kkkkk Descobri novas versões onde aparentemente esses erros foram corrigidos, porém atualizar deu muito trabalho. Funcionou mas foram necessários vários ajustes, tanto que irei testar instalação “limpa” para facilitar manutenções futuras.
Deus o abençoe.
Esta solução funciona, vc apenas cometeu um pequeno erro de digitação. Segue a solução que funcionou no meu caso:
insira public $priorjob; e não “public $priojob;”
Valeu!!! Estava com o mesmo problema.
Resolvido aqui!!!
Obrigado!
Saudações a todos, no meu caso também apresentou erro 1000 no PoolRecord e JobRecord, a solução fornecida pelo Carlos Cezar é a correta, depois de fazer as alterações as mensagens de erro desapareceram.
Saudações da Nicarágua
Está gerando esse erro para mim, sabe o que poderia ser ?
Código do erro: 1000
Mensagem: Internal error. Component property ‘PoolRecord.maxpoolbytes’ is not defined.
Segui o tutorial certinho.
Conseguiu resolver esse erro?
Amigão, instalo o bacula porém quando digito bconsole não conecta. vi que esta tentando conectar na porta 9101, liberei essa porta e mesmo assim não vai. Você precisou liberar alguma coisa no firewall ?
Refazendo o processo pude verificar que o erro foi meu. Tutorial impecável se prestar atenção nos detalhes parabéns !!
Excelente conteudo, parabens !!!
Cara, muito bom seu tutorial, era exatamente oque eu estava precisando!
caraka amigo, eu amo voces, kkkkkkkk cara voces ajudam muito voces nao tem noção, eu só tenho a agradecer voces pelo compartilhamento de conhecimento pela ajuda que tem dado a cada profissional que busca conhecimento e assim ajudar a empresa onde trabalha e por ai vai. pessoal obrigadoo mesmo fica aqui o meu abraço e um GRANDE MUITO OBRIGADO.