This repository has been archived by the owner on Apr 2, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 120
/
bacula.sh
358 lines (358 loc) · 16 KB
/
bacula.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
#!/bin/bash
# Autor: Robson Vaamonde
# Site: www.procedimentosemti.com.br
# Facebook: facebook.com/ProcedimentosEmTI
# Facebook: facebook.com/BoraParaPratica
# YouTube: youtube.com/BoraParaPratica
# Data de criação: 21/03/2021
# Data de atualização: 12/05/2021
# Versão: 0.06
# Testado e homologado para a versão do Ubuntu Server 18.04.x LTS x64
# Kernel >= 4.15.x
# Testado e homologado para a versão do Bacula 11.x e do Baculum 11.x
#
# O Bacula é um conjunto de software de código aberto que permitem o gerenciamento de backups, restaurações
# e verificação de dados através de uma rede de computadores de diversos tipos. É relativamente fácil de
# usar e muito eficiente, enquanto oferece muitas funcionalidades avançadas de gerenciamento de armazenamento,
# as quais facilitam a encontrar e recuperar arquivos perdidos ou corrompidos. Com ele é possível fazer
# backup remotamente de Linux, Solaris, FreeBSD, NetBSD, Windows, Mac OS X, etc...
#
# O Baculum fornece duas aplicações web: o Baculum Web como interface web para gerenciar o Bacula e a API
# do Baculum, que é a interface de programação do Bacula. Ambas as ferramentas conectadas criam um ambiente
# web para facilitar o trabalho com os programas da Comunidade Bacula.
#
# Informações que serão solicitadas na configuração via Web do Baculum
# Endereço padrão do Baculum WEB: http://localhost:9095
# Endereço padrão do Baculum API: http://localhost:9096
# Usuário padrão: admin - Senha padrão: admin
#
# PRIMEIRA ETAPA: CONFIGURAR O BACULUM API: http://localhost:9096
# 01. Step 1 - select language
# Language: English
# <Next>
# 02. Step 2 - share the Bacula Catalog Database
# Do you want to setup and to share the Bacula Catalog Database access for this API instance?:
# Select: Yes
# Database type: MySQL
# Database name: bacula
# Login: root
# Password: pti@2018
# IP address (or hostname): localhost
# Port: 3306
# Connection test: <Test>
# <Next>
# 03. Step 3 - share the Bacula Bconsole commands interface
# Do you want to setup and share the Bacula Bconsole interface to execute commands in this API instance?
# Select: Yes
# Bconsole binary file path: /usr/sbin/bconsole
# Bconsole admin config file path: /opt/bacula/etc/bconsole.conf
# Use sudo: Yes
# Bconsole connection test: <Test>
# <Next>
# 04. Step 4 - share the Bacula configuration interface
# Do you want to setup and share the Bacula configuration interface to configure Bacula components via this API instance?
# Select: Yes
# General configuration
# Baculum working directory for Bacula config: /etc/baculum/Config-api-apache
# Use sudo: Yes
# Director
# bdirjson binary file path: /usr/sbin/bdirjson
# Main Director config file path (usually bacula-dir.conf): /opt/bacula/etc/bacula-dir.conf
# Storage Daemon
# bsdjson binary file path: /usr/sbin/bsdjson
# Main Storage Daemon config file path (usually bacula-sd.conf): /opt/bacula/etc/bacula-sd.conf
# File Daemon/Client
# bfdjson binary file path: /usr/sbin/bfdjson
# Main File Daemon config file path (usually bacula-fd.conf): /opt/bacula/etc/bacula-fd.conf
# Bconsole
# bbconsjson binary file path: /usr/sbin/bbconsjson
# Admin Bconsole config file path (usually bconsole.conf): /opt/bacula/etc/bconsole.conf
# <Test Configuration>
# <Next>
# 05. Step 5 - authentication to AP
# Use HTTP Basic authentication: Yes
# Administration login: vaamonde
# Administration password: vaamonde
# Retype administration password: vaamonde
# <Next>
# 06. @@Step 7 - Finish@@
# <save>
#
# SEGUNDA ETAPA: CONFIGURAR O BACULUM WEB: http://localhost:9096
# 01. Step 1 - select language
# Language: English
# <Next>
# 02. Step 2 - add API instances
# Baculum web interface requires to add at least one Baculum API instance with shared Catalog access. Please add API instance.
# Add API host
# Protocol: HTTP
# IP Address/Hostname: localhost
# Port: 9096
# Use HTTP Basic authentication: Yes
# API Login: vaamonde
# API Password: vaamonde
# API connection test: <Test>
# <Next>
# 03. Step 3 - authentication params to Baculum Web pane
# Administration login: robson
# Administration password: robson
# Retype administration password: robson
# <Next>
# 04. Step 4 - Finish
# <Save>
#
# Site Oficial do Projeto Bacula: https://www.bacula.org/
# Site Oficial do Projeto Baculum: https://baculum.app/
#
# Vídeo de instalação do GNU/Linux Ubuntu Server 18.04.x LTS: https://www.youtube.com/watch?v=zDdCrqNhIXI
# Vídeo de configuração do OpenSSH no GNU/Linux Ubuntu Server 18.04.x LTS: https://www.youtube.com/watch?v=ecuol8Uf1EE&t
# Vídeo de instalação do LAMP Server no Ubuntu Server 18.04.x LTS: https://www.youtube.com/watch?v=6EFUu-I3
#
# Variável da Data Inicial para calcular o tempo de execução do script (VARIÁVEL MELHORADA)
# opção do comando date: +%T (Time)
HORAINICIAL=$(date +%T)
#
# Variáveis para validar o ambiente, verificando se o usuário é "root", versão do ubuntu e kernel
# opções do comando id: -u (user)
# opções do comando: lsb_release: -r (release), -s (short),
# opões do comando uname: -r (kernel release)
# opções do comando cut: -d (delimiter), -f (fields)
# opção do shell script: piper | = Conecta a saída padrão com a entrada padrão de outro comando
# opção do shell script: acento crase ` ` = Executa comandos numa subshell, retornando o resultado
# opção do shell script: aspas simples ' ' = Protege uma string completamente (nenhum caractere é especial)
# opção do shell script: aspas duplas " " = Protege uma string, mas reconhece $, \ e ` como especiais
USUARIO=$(id -u)
UBUNTU=$(lsb_release -rs)
KERNEL=$(uname -r | cut -d'.' -f1,2)
#
# Variável do caminho do Log dos Script utilizado nesse curso (VARIÁVEL MELHORADA)
# opções do comando cut: -d (delimiter), -f (fields)
# $0 (variável de ambiente do nome do comando)
LOG="/var/log/$(echo $0 | cut -d'/' -f2)"
#
# Declarando as variáveis de download do Bacula (Link atualizado no dia 12/05/2021)
BACULAKEY="https://www.bacula.org/downloads/Bacula-4096-Distribution-Verification-key.asc"
BACULUMKEY="http://bacula.org/downloads/baculum/baculum.pub"
#
# Exportando o recurso de Noninteractive do Debconf para não solicitar telas de configuração
export DEBIAN_FRONTEND="noninteractive"
#
# Verificando se o usuário é Root, Distribuição é >=18.04 e o Kernel é >=4.15 <IF MELHORADO)
# [ ] = teste de expressão, && = operador lógico AND, == comparação de string, exit 1 = A maioria dos erros comuns na execução
clear
if [ "$USUARIO" == "0" ] && [ "$UBUNTU" == "18.04" ] && [ "$KERNEL" == "4.15" ]
then
echo -e "O usuário é Root, continuando com o script..."
echo -e "Distribuição é >= 18.04.x, continuando com o script..."
echo -e "Kernel é >= 4.15, continuando com o script..."
sleep 5
else
echo -e "Usuário não é Root ($USUARIO) ou Distribuição não é >=18.04.x ($UBUNTU) ou Kernel não é >=4.15 ($KERNEL)"
echo -e "Caso você não tenha executado o script com o comando: sudo -i"
echo -e "Execute novamente o script para verificar o ambiente."
exit 1
fi
#
# Verificando se as dependências do Bacula estão instaladas
# opção do dpkg: -s (status), opção do echo: -e (interpretador de escapes de barra invertida), -n (permite nova linha)
# || (operador lógico OU), 2> (redirecionar de saída de erro STDERR), && = operador lógico AND, { } = agrupa comandos em blocos
# [ ] = testa uma expressão, retornando 0 ou 1, -ne = é diferente (NotEqual)
echo -n "Verificando as dependências do Bacula, aguarde... "
for name in apt-transport-https apache2 php python mysql-server mysql-common
do
[[ $(dpkg -s $name 2> /dev/null) ]] || {
echo -en "\n\nO software: $name precisa ser instalado. \nUse o comando 'apt install $name'\n";
deps=1;
}
done
[[ $deps -ne 1 ]] && echo "Dependências.: OK" || {
echo -en "\nInstale as dependências acima e execute novamente este script\n";
echo -en "Recomendo utilizar o script: lamp.sh para resolver as dependências."
exit 1;
}
sleep 5
#
# Script de instalação do Bacula no GNU/Linux Ubuntu Server 18.04.x
# opção do comando echo: -e (enable interpretation of backslash escapes), \n (new line)
# opção do comando hostname: -I (all IP address)
# opção do comando date: + (format), %d (day), %m (month), %Y (year 1970), %H (hour 24), %M (minute 60)
# opção do comando cut: -d (delimiter), -f (fields)
echo -e "Início do script $0 em: `date +%d/%m/%Y-"("%H:%M")"`\n" &>> $LOG
clear
#
echo
echo -e "Instalação do Bacula e Baculum no GNU/Linux Ubuntu Server 18.04.x\n"
echo -e "Após a instalação do Baculum WEB acessar a URL: http://`hostname -I | cut -d' ' -f1`:9095"
echo -e "Após a instalação do Baculum API acessar a URL: http://`hostname -I | cut -d' ' -f1`:9096\n"
echo -e "Aguarde, esse processo demora um pouco dependendo do seu Link de Internet...\n"
sleep 5
#
echo -e "Adicionando o Repositório Universal do Apt, aguarde..."
# opção do comando: &>> (redirecionar a saída padrão)
add-apt-repository universe &>> $LOG
echo -e "Repositório adicionado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Adicionando o Repositório Multiversão do Apt, aguarde..."
# opção do comando: &>> (redirecionar a saída padrão)
add-apt-repository multiverse &>> $LOG
echo -e "Repositório adicionado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Atualizando as listas do Apt, aguarde..."
#opção do comando: &>> (redirecionar a saída padrão)
apt update &>> $LOG
echo -e "Listas atualizadas com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Atualizando o sistema, aguarde..."
# opção do comando: &>> (redirecionar a saída padrão)
# opção do comando apt: -y (yes)
apt -y upgrade &>> $LOG
echo -e "Sistema atualizado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Removendo software desnecessários, aguarde..."
# opção do comando: &>> (redirecionar a saída padrão)
# opção do comando apt: -y (yes)
apt -y autoremove &>> $LOG
echo -e "Software removidos com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Instalando o Bacula Server e Baculum WEB/API, aguarde...\n"
sleep 5
#
echo -e "Adicionando o repositório do Bacula Server, aguarde..."
# opção do comando: &>> (redirecionar a saída padrão)
# opção do comando cp: -v (verbose)
# opção do comando wget: -q -O- (file)
# opção do redirecionador |: Conecta a saída padrão com a entrada padrão de outro comando
# opção do comando apt-key: add (file name), - (arquivo recebido do redirecionar | piper)
cp -v conf/bacula.list /etc/apt/sources.list.d/bacula.list &>> $LOG
wget -q $BACULAKEY -O- | apt-key add - &>> $LOG
echo -e "Repositório do Bacula adicionado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Adicionando o repositório do Baculum WEB/API, aguarde..."
# opção do comando: &>> (redirecionar a saída padrão)
# opção do comando cp: -v (verbose)
# opção do comando wget: -q -O- (file)
# opção do redirecionador |: Conecta a saída padrão com a entrada padrão de outro comando
# opção do comando apt-key: add (file name), - (arquivo recebido dO redirecionar | piper)
cp -v conf/baculum.list /etc/apt/sources.list.d/baculum.list &>> $LOG
wget -q $BACULUMKEY -O- | apt-key add - &>> $LOG
echo -e "Repositório do Baculum adicionado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Atualizando as listas do Apt com os novos repositórios, aguarde..."
#opção do comando: &>> (redirecionar a saída padrão)
apt update &>> $LOG
echo -e "Listas atualizadas com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Instalando o Bacula Server e Console com suporte ao MySQL, aguarde..."
# opção do comando: &>> (redirecionar a saida padrão)
# opção do comando apt: -y (yes)
apt -y install bacula-client bacula-common bacula-mysql bacula-console &>> $LOG
echo -e "Bacula Server e Console instalado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Instalando o Baculum WEB com suporte ao Apache2, aguarde..."
# opção do comando: &>> (redirecionar a saida padrão)
# opção do comando apt: -y (yes)
apt -y install baculum-web baculum-web-apache2 &>> $LOG
echo -e "Baculum WEB instalado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Instalando o Baculum API com suporte ao Apache2, aguarde..."
# opção do comando: &>> (redirecionar a saida padrão)
# opção do comando apt: -y (yes)
apt -y install baculum-common baculum-api-apache2 &>> $LOG
echo -e "Baculum API instalado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Habilitando os Sites do Baculum WEB e API no Apache2, aguarde..."
# opção do comando: &>> (redirecionar a saida padrão)
a2enmod rewrite &>> $LOG
a2ensite baculum-web.conf &>> $LOG
a2ensite baculum-api.conf &>> $LOG
systemctl reload apache2 &>> $LOG
echo -e "Baculum WEB e API habilitados com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Criando os atalhos em: /usr/sbin dos binários do Bacula Server, aguarde..."
# opção do comando: &>> (redirecionar a saída padrão)
# opção do comando ln: -s (symbolic), -v (verbose)
for i in `ls /opt/bacula/bin`; do
ln -sv /opt/bacula/bin/$i /usr/sbin/$i &>> $LOG;
done
echo -e "Atalhos criados com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Atualizando o arquivo baculum.api do Sudoers e hosts.allow do TCPWrappers, aguarde..."
# opção do comando: &>> (redirecionar a saída padrão)
# opção do comando cp: -v (verbose)
cp -v conf/baculum-api /etc/sudoers.d/ &>> $LOG
cp -v conf/hosts.allow /etc/ &>> $LOG
echo -e "Arquivos atualizados com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Editando o arquivo baculum.api, pressione: <Enter> para continuar"
read
sleep 3
vim /etc/sudoers.d/baculum-api
echo -e "Arquivo editado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Editando o arquivo hosts.allow, pressione: <Enter> para continuar"
read
sleep 3
vim /etc/hosts.allow
echo -e "Arquivo editado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Habilitando os Serviços do Bacula Server (FD, SD e DIR), aguarde..."
# opção do comando: &>> (redirecionar a saída padrão)
systemctl enable bacula-fd.service &>> $LOG
systemctl enable bacula-sd.service &>> $LOG
systemctl enable bacula-dir.service &>> $LOG
echo -e "Serviços habilitados com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Iniciando os Serviços do Bacula Server (FD, SD e DIR), aguarde..."
# opção do comando: &>> (redirecionar a saída padrão)
systemctl start bacula-fd.service &>> $LOG
systemctl start bacula-sd.service &>> $LOG
systemctl start bacula-dir.service &>> $LOG
echo -e "Serviços iniciados com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Testando o acesso ao Bacula BConsole, pressione <Enter> para continuar."
echo -e "Para sair do Bacula BConsole digite: quit <Enter>."
read
bconsole
echo -e "Bacula BConsole testado com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Verificando as portas de Conexões do Bacula Server e do Baculum WEB/API, aguarde..."
# opção do comando netstat: -a (all), -n (numeric)
netstat -an | grep '9101\|9102\|9103\|9095\|9096'
echo -e "Portas de conexões verificadas com sucesso!!!, continuando com o script...\n"
sleep 5
#
echo -e "Instalação do Bacula Server e Baculum WEB/API feita com Sucesso!!!."
# script para calcular o tempo gasto (SCRIPT MELHORADO, CORRIGIDO FALHA DE HORA:MINUTO:SEGUNDOS)
# opção do comando date: +%T (Time)
HORAFINAL=$(date +%T)
# opção do comando date: -u (utc), -d (date), +%s (second since 1970)
HORAINICIAL01=$(date -u -d "$HORAINICIAL" +"%s")
HORAFINAL01=$(date -u -d "$HORAFINAL" +"%s")
# opção do comando date: -u (utc), -d (date), 0 (string command), sec (force second), +%H (hour), %M (minute), %S (second),
TEMPO=$(date -u -d "0 $HORAFINAL01 sec - $HORAINICIAL01 sec" +"%H:%M:%S")
# $0 (variável de ambiente do nome do comando)
echo -e "Tempo gasto para execução do script $0: $TEMPO"
echo -e "Pressione <Enter> para concluir o processo."
# opção do comando date: + (format), %d (day), %m (month), %Y (year 1970), %H (hour 24), %M (minute 60)
echo -e "Fim do script $0 em: `date +%d/%m/%Y-"("%H:%M")"`\n" &>> $LOG
read
exit 1