correção desisntalador

This commit is contained in:
2025-12-09 07:52:33 -03:00
parent eb1d294671
commit 5f212abcac
8 changed files with 186 additions and 120 deletions

View File

@@ -458,8 +458,8 @@
('python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so', ('python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so',
'/usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so', '/usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so',
'EXTENSION'), 'EXTENSION'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'), ('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'), ('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'),
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'), ('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'), ('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
@@ -476,21 +476,9 @@
('base_library.zip', ('base_library.zip',
'/home/halbebruno/Projetos/DNSBlock/agent/build/dnsblock-agent/base_library.zip', '/home/halbebruno/Projetos/DNSBlock/agent/build/dnsblock-agent/base_library.zip',
'DATA')], 'DATA')],
[('_collections_abc', '/usr/lib/python3.11/_collections_abc.py', 'PYMODULE'), [('genericpath', '/usr/lib/python3.11/genericpath.py', 'PYMODULE'),
('keyword', '/usr/lib/python3.11/keyword.py', 'PYMODULE'),
('weakref', '/usr/lib/python3.11/weakref.py', 'PYMODULE'),
('enum', '/usr/lib/python3.11/enum.py', 'PYMODULE'),
('genericpath', '/usr/lib/python3.11/genericpath.py', 'PYMODULE'),
('posixpath', '/usr/lib/python3.11/posixpath.py', 'PYMODULE'),
('re._parser', '/usr/lib/python3.11/re/_parser.py', 'PYMODULE'),
('re._constants', '/usr/lib/python3.11/re/_constants.py', 'PYMODULE'),
('re._compiler', '/usr/lib/python3.11/re/_compiler.py', 'PYMODULE'),
('re._casefix', '/usr/lib/python3.11/re/_casefix.py', 'PYMODULE'),
('re', '/usr/lib/python3.11/re/__init__.py', 'PYMODULE'),
('codecs', '/usr/lib/python3.11/codecs.py', 'PYMODULE'), ('codecs', '/usr/lib/python3.11/codecs.py', 'PYMODULE'),
('_weakrefset', '/usr/lib/python3.11/_weakrefset.py', 'PYMODULE'), ('_weakrefset', '/usr/lib/python3.11/_weakrefset.py', 'PYMODULE'),
('sre_parse', '/usr/lib/python3.11/sre_parse.py', 'PYMODULE'),
('functools', '/usr/lib/python3.11/functools.py', 'PYMODULE'),
('encodings.zlib_codec', ('encodings.zlib_codec',
'/usr/lib/python3.11/encodings/zlib_codec.py', '/usr/lib/python3.11/encodings/zlib_codec.py',
'PYMODULE'), 'PYMODULE'),
@@ -721,21 +709,33 @@
('encodings.ascii', '/usr/lib/python3.11/encodings/ascii.py', 'PYMODULE'), ('encodings.ascii', '/usr/lib/python3.11/encodings/ascii.py', 'PYMODULE'),
('encodings.aliases', '/usr/lib/python3.11/encodings/aliases.py', 'PYMODULE'), ('encodings.aliases', '/usr/lib/python3.11/encodings/aliases.py', 'PYMODULE'),
('encodings', '/usr/lib/python3.11/encodings/__init__.py', 'PYMODULE'), ('encodings', '/usr/lib/python3.11/encodings/__init__.py', 'PYMODULE'),
('types', '/usr/lib/python3.11/types.py', 'PYMODULE'), ('ntpath', '/usr/lib/python3.11/ntpath.py', 'PYMODULE'),
('operator', '/usr/lib/python3.11/operator.py', 'PYMODULE'),
('copyreg', '/usr/lib/python3.11/copyreg.py', 'PYMODULE'),
('reprlib', '/usr/lib/python3.11/reprlib.py', 'PYMODULE'),
('sre_constants', '/usr/lib/python3.11/sre_constants.py', 'PYMODULE'), ('sre_constants', '/usr/lib/python3.11/sre_constants.py', 'PYMODULE'),
('sre_compile', '/usr/lib/python3.11/sre_compile.py', 'PYMODULE'),
('copyreg', '/usr/lib/python3.11/copyreg.py', 'PYMODULE'),
('re._parser', '/usr/lib/python3.11/re/_parser.py', 'PYMODULE'),
('re._constants', '/usr/lib/python3.11/re/_constants.py', 'PYMODULE'),
('re._compiler', '/usr/lib/python3.11/re/_compiler.py', 'PYMODULE'),
('re._casefix', '/usr/lib/python3.11/re/_casefix.py', 'PYMODULE'),
('re', '/usr/lib/python3.11/re/__init__.py', 'PYMODULE'),
('types', '/usr/lib/python3.11/types.py', 'PYMODULE'),
('linecache', '/usr/lib/python3.11/linecache.py', 'PYMODULE'), ('linecache', '/usr/lib/python3.11/linecache.py', 'PYMODULE'),
('heapq', '/usr/lib/python3.11/heapq.py', 'PYMODULE'),
('reprlib', '/usr/lib/python3.11/reprlib.py', 'PYMODULE'),
('locale', '/usr/lib/python3.11/locale.py', 'PYMODULE'),
('collections.abc', '/usr/lib/python3.11/collections/abc.py', 'PYMODULE'), ('collections.abc', '/usr/lib/python3.11/collections/abc.py', 'PYMODULE'),
('collections', '/usr/lib/python3.11/collections/__init__.py', 'PYMODULE'), ('collections', '/usr/lib/python3.11/collections/__init__.py', 'PYMODULE'),
('locale', '/usr/lib/python3.11/locale.py', 'PYMODULE'), ('sre_parse', '/usr/lib/python3.11/sre_parse.py', 'PYMODULE'),
('traceback', '/usr/lib/python3.11/traceback.py', 'PYMODULE'), ('functools', '/usr/lib/python3.11/functools.py', 'PYMODULE'),
('enum', '/usr/lib/python3.11/enum.py', 'PYMODULE'),
('_collections_abc', '/usr/lib/python3.11/_collections_abc.py', 'PYMODULE'),
('abc', '/usr/lib/python3.11/abc.py', 'PYMODULE'), ('abc', '/usr/lib/python3.11/abc.py', 'PYMODULE'),
('io', '/usr/lib/python3.11/io.py', 'PYMODULE'), ('io', '/usr/lib/python3.11/io.py', 'PYMODULE'),
('stat', '/usr/lib/python3.11/stat.py', 'PYMODULE'), ('operator', '/usr/lib/python3.11/operator.py', 'PYMODULE'),
('ntpath', '/usr/lib/python3.11/ntpath.py', 'PYMODULE'), ('keyword', '/usr/lib/python3.11/keyword.py', 'PYMODULE'),
('heapq', '/usr/lib/python3.11/heapq.py', 'PYMODULE'), ('posixpath', '/usr/lib/python3.11/posixpath.py', 'PYMODULE'),
('sre_compile', '/usr/lib/python3.11/sre_compile.py', 'PYMODULE'), ('weakref', '/usr/lib/python3.11/weakref.py', 'PYMODULE'),
('traceback', '/usr/lib/python3.11/traceback.py', 'PYMODULE'),
('warnings', '/usr/lib/python3.11/warnings.py', 'PYMODULE'), ('warnings', '/usr/lib/python3.11/warnings.py', 'PYMODULE'),
('stat', '/usr/lib/python3.11/stat.py', 'PYMODULE'),
('os', '/usr/lib/python3.11/os.py', 'PYMODULE')]) ('os', '/usr/lib/python3.11/os.py', 'PYMODULE')])

View File

@@ -102,8 +102,8 @@
('python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so', ('python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so',
'/usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so', '/usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so',
'EXTENSION'), 'EXTENSION'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'), ('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'), ('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'),
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'), ('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'), ('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
@@ -121,7 +121,7 @@
[], [],
False, False,
False, False,
1765274759, 1765276639,
[('run', [('run',
'/home/halbebruno/Projetos/DNSBlock/agent/build_venv/lib/python3.11/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run', '/home/halbebruno/Projetos/DNSBlock/agent/build_venv/lib/python3.11/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run',
'EXECUTABLE')], 'EXECUTABLE')],

View File

@@ -97,8 +97,8 @@
('python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so', ('python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so',
'/usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so', '/usr/lib/python3.11/lib-dynload/_json.cpython-311-x86_64-linux-gnu.so',
'EXTENSION'), 'EXTENSION'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'), ('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'), ('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'),
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'), ('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'), ('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),

View File

@@ -22,12 +22,13 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Configurações do Unbound # Configurações do Unbound
UNBOUND_CONF_DIR="/etc/unbound/unbound.conf.d" UNBOUND_CONF_DIR="/etc/unbound/unbound.conf.d"
UNBOUND_MAIN_CONF="/etc/unbound/unbound.conf" UNBOUND_MAIN_CONF="/etc/unbound/unbound.conf"
DNSBLOCK_CONF="$UNBOUND_CONF_DIR/dnsblock.conf" DNSBLOCK_UNBOUND_CONF="$INSTALL_DIR/unbound.conf"
DNSBLOCK_INCLUDE='include: "/etc/unbound/unbound.conf.d/dnsblock.conf"' DNSBLOCK_INCLUDE='include: "/opt/dnsblock/unbound.conf"'
# Variáveis globais # Variáveis globais
SERIAL="" SERIAL=""
NO_SERIAL=false NO_SERIAL=false
UNBOUND_ERROR=""
# ============================================================================ # ============================================================================
# FUNÇÕES UTILITÁRIAS # FUNÇÕES UTILITÁRIAS
@@ -67,35 +68,33 @@ verificar_dependencias() {
# Solicitar o serial via whiptail # Solicitar o serial via whiptail
solicitar_serial() { solicitar_serial() {
local serial="" local input=""
serial=$(whiptail --title "DNSBlock Agent - Ativação" \ input=$(whiptail --title "DNSBlock Agent - Ativação" \
--inputbox "Digite o serial de ativação do agente:\n\n(Deixe em branco para instalar sem serial)" \ --inputbox "Digite o serial de ativação do agente:\n\n(Deixe em branco para instalar sem serial)" \
12 60 3>&1 1>&2 2>&3) 12 60 "" 3>&1 1>&2 2>&3)
local status=$? local status=$?
if [ $status -ne 0 ]; then if [ $status -ne 0 ]; then
# Usuário cancelou com ESC ou Cancel
whiptail --title "Instalação Cancelada" \ whiptail --title "Instalação Cancelada" \
--msgbox "A instalação foi cancelada pelo usuário." 8 45 --msgbox "A instalação foi cancelada pelo usuário." 8 45
exit 0 exit 0
fi fi
if [ -z "$serial" ]; then if [ -z "$input" ]; then
# Serial em branco - perguntar se deseja continuar
if whiptail --title "Instalação sem Serial" \ if whiptail --title "Instalação sem Serial" \
--yesno "Você não informou um serial.\n\nDeseja instalar sem serial?\n\n(O serviço será ativado mas não inicializado)\n\nVocê pode obter seu serial em:\nhttp://painel.dnsblock.com.br" \ --yesno "Você não informou um serial.\n\nDeseja instalar sem serial?\n\n(O serviço será ativado mas não inicializado)\n\nVocê pode obter seu serial em:\nhttp://painel.dnsblock.com.br" \
14 55; then 14 55; then
NO_SERIAL=true NO_SERIAL=true
echo "" SERIAL=""
else else
whiptail --title "Instalação Cancelada" \ whiptail --title "Instalação Cancelada" \
--msgbox "A instalação foi cancelada pelo usuário." 8 45 --msgbox "A instalação foi cancelada pelo usuário." 8 45
exit 0 exit 0
fi fi
else else
echo "$serial" SERIAL="$input"
fi fi
} }
@@ -104,7 +103,7 @@ atualizar_config_serial() {
local serial="$1" local serial="$1"
local config_file="$INSTALL_DIR/config.json" local config_file="$INSTALL_DIR/config.json"
if [ -f "$config_file" ]; then if [ -f "$config_file" ] && [ -n "$serial" ]; then
sed -i "s/\"serial_key\":[[:space:]]*\"[^\"]*\"/\"serial_key\": \"$serial\"/" "$config_file" sed -i "s/\"serial_key\":[[:space:]]*\"[^\"]*\"/\"serial_key\": \"$serial\"/" "$config_file"
fi fi
} }
@@ -113,85 +112,76 @@ atualizar_config_serial() {
# FUNÇÕES DE CONFIGURAÇÃO DO UNBOUND # FUNÇÕES DE CONFIGURAÇÃO DO UNBOUND
# ============================================================================ # ============================================================================
# Encontrar o arquivo de configuração apropriado do Unbound # Encontrar arquivo de configuração do Unbound para adicionar o include
encontrar_arquivo_config_unbound() { encontrar_arquivo_config_unbound() {
local config_file="" # Prioridade: arquivo com RPZ existente > local.conf > unbound.conf principal
# Verificar se existe algum arquivo com configuração RPZ # Primeiro, verificar se existe algum arquivo com bloco RPZ
for conf in "$UNBOUND_CONF_DIR"/*.conf; do if [ -d "$UNBOUND_CONF_DIR" ]; then
if [ -f "$conf" ] && grep -q "rpz:" "$conf" 2>/dev/null; then for conf in "$UNBOUND_CONF_DIR"/*.conf; do
config_file="$conf" if [ -f "$conf" ] && grep -q "^[[:space:]]*rpz:" "$conf" 2>/dev/null; then
break echo "$conf"
fi return 0
done fi
done
# Se não encontrou arquivo com RPZ, usar local.conf se existir
if [ -z "$config_file" ]; then # Se existe local.conf, usar ele
if [ -f "$UNBOUND_CONF_DIR/local.conf" ]; then if [ -f "$UNBOUND_CONF_DIR/local.conf" ]; then
config_file="$UNBOUND_CONF_DIR/local.conf" echo "$UNBOUND_CONF_DIR/local.conf"
elif [ -f "$UNBOUND_MAIN_CONF" ]; then return 0
config_file="$UNBOUND_MAIN_CONF"
fi fi
fi fi
echo "$config_file" # Verificar arquivo principal
if [ -f "$UNBOUND_MAIN_CONF" ]; then
# Verificar se tem bloco RPZ
if grep -q "^[[:space:]]*rpz:" "$UNBOUND_MAIN_CONF" 2>/dev/null; then
echo "$UNBOUND_MAIN_CONF"
return 0
fi
# Mesmo sem RPZ, usar o principal
echo "$UNBOUND_MAIN_CONF"
return 0
fi
# Nenhum arquivo encontrado
return 1
} }
# Verificar se o include já existe # Verificar se o include do DNSBlock já existe
verificar_include_existente() { verificar_include_existente() {
local include_pattern='include:[[:space:]]*"/etc/unbound/unbound.conf.d/dnsblock.conf"' local include_pattern='include:[[:space:]]*"/opt/dnsblock/unbound.conf"'
# Verificar no arquivo principal
if [ -f "$UNBOUND_MAIN_CONF" ] && grep -qE "$include_pattern" "$UNBOUND_MAIN_CONF" 2>/dev/null; then if [ -f "$UNBOUND_MAIN_CONF" ] && grep -qE "$include_pattern" "$UNBOUND_MAIN_CONF" 2>/dev/null; then
return 0 return 0
fi fi
for conf in "$UNBOUND_CONF_DIR"/*.conf; do # Verificar nos arquivos do diretório conf.d
if [ -f "$conf" ] && grep -qE "$include_pattern" "$conf" 2>/dev/null; then if [ -d "$UNBOUND_CONF_DIR" ]; then
return 0 for conf in "$UNBOUND_CONF_DIR"/*.conf; do
fi if [ -f "$conf" ] && grep -qE "$include_pattern" "$conf" 2>/dev/null; then
done return 0
fi
done
fi
return 1 return 1
} }
# Configurar o Unbound para usar o DNSBlock # Configurar o Unbound para usar o DNSBlock
configurar_unbound() { configurar_unbound() {
# Criar diretório de configuração do Unbound se não existir UNBOUND_ERROR=""
if [ ! -d "$UNBOUND_CONF_DIR" ]; then
mkdir -p "$UNBOUND_CONF_DIR"
chown unbound:unbound "$UNBOUND_CONF_DIR"
fi
# Criar o diretório RPZ # Criar o diretório RPZ
mkdir -p "$RPZ_DIR" mkdir -p "$RPZ_DIR"
chown unbound:unbound "$RPZ_DIR" chown unbound:unbound "$RPZ_DIR"
# Criar arquivo de configuração do DNSBlock para o Unbound # Copiar arquivo de configuração do DNSBlock para o Unbound (já vem no pacote)
cat > "$DNSBLOCK_CONF" << 'EOF' if [ -f "$SCRIPT_DIR/unbound.conf" ]; then
rpz: cp "$SCRIPT_DIR/unbound.conf" "$DNSBLOCK_UNBOUND_CONF"
name: rpz.dnsblock.zone chown unbound:unbound "$DNSBLOCK_UNBOUND_CONF"
zonefile: /opt/dnsblock/rpz/rpz.dnsblock.zone chmod 644 "$DNSBLOCK_UNBOUND_CONF"
rpz-action-override: nxdomain
EOF
chown unbound:unbound "$DNSBLOCK_CONF"
chmod 644 "$DNSBLOCK_CONF"
# Adicionar include se não existir
if ! verificar_include_existente; then
local config_file=$(encontrar_arquivo_config_unbound)
if [ -z "$config_file" ]; then
return 1
fi
if grep -q "rpz:" "$config_file" 2>/dev/null; then
sed -i "/rpz:/i # DNSBlock\n$DNSBLOCK_INCLUDE\n" "$config_file"
else
echo "" >> "$config_file"
echo "# DNSBlock" >> "$config_file"
echo "$DNSBLOCK_INCLUDE" >> "$config_file"
fi
fi fi
# Criar arquivo RPZ vazio se não existir # Criar arquivo RPZ vazio se não existir
@@ -213,45 +203,106 @@ EOF
chmod 644 "$rpz_file" chmod 644 "$rpz_file"
fi fi
# Verificar configuração do Unbound # Verificar se o include já existe
if ! unbound-checkconf &>/dev/null; then if verificar_include_existente; then
rm -f "$DNSBLOCK_CONF" # Já configurado, apenas verificar e reiniciar
remover_include_unbound if unbound-checkconf 2>&1; then
systemctl restart unbound 2>/dev/null || true
return 0
else
UNBOUND_ERROR="Configuração do Unbound com erros. Verifique manualmente."
return 1
fi
fi
# Encontrar arquivo de configuração do Unbound
local config_file
config_file=$(encontrar_arquivo_config_unbound)
if [ -z "$config_file" ]; then
UNBOUND_ERROR="Não foi possível encontrar arquivo de configuração do Unbound."
return 1 return 1
fi fi
# Fazer backup do arquivo
cp "$config_file" "${config_file}.bak.dnsblock"
# Verificar se existe bloco RPZ no arquivo
if grep -q "^[[:space:]]*rpz:" "$config_file" 2>/dev/null; then
# Existe bloco RPZ - adicionar include ANTES do primeiro bloco rpz
# Usando awk para inserir antes da primeira ocorrência de rpz:
awk -v include="# DNSBlock\n$DNSBLOCK_INCLUDE\n" '
/^[[:space:]]*rpz:/ && !inserted {
print "# DNSBlock"
print "include: \"/opt/dnsblock/unbound.conf\""
print ""
inserted=1
}
{print}
' "$config_file" > "${config_file}.tmp" && mv "${config_file}.tmp" "$config_file"
else
# Não existe bloco RPZ - adicionar include no final do arquivo
echo "" >> "$config_file"
echo "# DNSBlock" >> "$config_file"
echo "$DNSBLOCK_INCLUDE" >> "$config_file"
fi
# Verificar configuração do Unbound
local check_output
check_output=$(unbound-checkconf 2>&1)
if [ $? -ne 0 ]; then
# Erro na configuração - restaurar backup
mv "${config_file}.bak.dnsblock" "$config_file"
UNBOUND_ERROR="Erro na configuração do Unbound:\n$check_output"
return 1
fi
# Remover backup
rm -f "${config_file}.bak.dnsblock"
# Reiniciar o Unbound # Reiniciar o Unbound
systemctl restart unbound 2>/dev/null || true if ! systemctl restart unbound 2>&1; then
UNBOUND_ERROR="Falha ao reiniciar o Unbound. Verifique o serviço manualmente."
return 1
fi
return 0 return 0
} }
# Remover o include do DNSBlock dos arquivos de configuração # Remover o include do DNSBlock dos arquivos de configuração
remover_include_unbound() { remover_include_unbound() {
local include_pattern='include:[[:space:]]*"/etc/unbound/unbound.conf.d/dnsblock.conf"' # Remover do arquivo principal
local comment_pattern='#[[:space:]]*DNSBlock'
if [ -f "$UNBOUND_MAIN_CONF" ]; then if [ -f "$UNBOUND_MAIN_CONF" ]; then
sed -i "/$include_pattern/d" "$UNBOUND_MAIN_CONF" # Usar grep -v para remover linhas com include do dnsblock
sed -i "/$comment_pattern/d" "$UNBOUND_MAIN_CONF" grep -v 'include:.*"/opt/dnsblock/unbound.conf"' "$UNBOUND_MAIN_CONF" > "${UNBOUND_MAIN_CONF}.tmp" 2>/dev/null && \
mv "${UNBOUND_MAIN_CONF}.tmp" "$UNBOUND_MAIN_CONF" || rm -f "${UNBOUND_MAIN_CONF}.tmp"
# Remover comentário DNSBlock
grep -v '^#[[:space:]]*DNSBlock' "$UNBOUND_MAIN_CONF" > "${UNBOUND_MAIN_CONF}.tmp" 2>/dev/null && \
mv "${UNBOUND_MAIN_CONF}.tmp" "$UNBOUND_MAIN_CONF" || rm -f "${UNBOUND_MAIN_CONF}.tmp"
fi fi
for conf in "$UNBOUND_CONF_DIR"/*.conf; do # Remover dos arquivos do diretório conf.d
if [ -f "$conf" ] && [ "$conf" != "$DNSBLOCK_CONF" ]; then if [ -d "$UNBOUND_CONF_DIR" ]; then
sed -i "/$include_pattern/d" "$conf" for conf in "$UNBOUND_CONF_DIR"/*.conf; do
sed -i "/$comment_pattern/d" "$conf" if [ -f "$conf" ]; then
fi # Usar grep -v para remover linhas com include do dnsblock
done grep -v 'include:.*"/opt/dnsblock/unbound.conf"' "$conf" > "${conf}.tmp" 2>/dev/null && \
mv "${conf}.tmp" "$conf" || rm -f "${conf}.tmp"
# Remover comentário DNSBlock
grep -v '^#[[:space:]]*DNSBlock' "$conf" > "${conf}.tmp" 2>/dev/null && \
mv "${conf}.tmp" "$conf" || rm -f "${conf}.tmp"
fi
done
fi
} }
# Remover configuração do Unbound # Remover configuração do Unbound
remover_configuracao_unbound() { remover_configuracao_unbound() {
# Remover include dos arquivos de configuração
remover_include_unbound remover_include_unbound
if [ -f "$DNSBLOCK_CONF" ]; then # Verificar se a configuração está OK e reiniciar
rm -f "$DNSBLOCK_CONF"
fi
if unbound-checkconf &>/dev/null; then if unbound-checkconf &>/dev/null; then
systemctl restart unbound 2>/dev/null || true systemctl restart unbound 2>/dev/null || true
fi fi
@@ -288,7 +339,6 @@ instalar() {
sleep 0.2 sleep 0.2
echo "15"; echo "# Copiando binário..." echo "15"; echo "# Copiando binário..."
# Copiar o binário
if [ -f "$SCRIPT_DIR/dnsblock-agent" ]; then if [ -f "$SCRIPT_DIR/dnsblock-agent" ]; then
cp "$SCRIPT_DIR/dnsblock-agent" "$INSTALL_DIR/" cp "$SCRIPT_DIR/dnsblock-agent" "$INSTALL_DIR/"
chmod +x "$INSTALL_DIR/dnsblock-agent" chmod +x "$INSTALL_DIR/dnsblock-agent"
@@ -299,7 +349,6 @@ instalar() {
sleep 0.2 sleep 0.2
echo "25"; echo "# Criando config.json..." echo "25"; echo "# Criando config.json..."
# Criar config.json a partir do exemplo
if [ -f "$SCRIPT_DIR/config.json.example" ]; then if [ -f "$SCRIPT_DIR/config.json.example" ]; then
cp "$SCRIPT_DIR/config.json.example" "$INSTALL_DIR/config.json" cp "$SCRIPT_DIR/config.json.example" "$INSTALL_DIR/config.json"
else else
@@ -308,17 +357,23 @@ instalar() {
fi fi
sleep 0.2 sleep 0.2
echo "30"; echo "# Copiando configuração do Unbound..."
if [ -f "$SCRIPT_DIR/unbound.conf" ]; then
cp "$SCRIPT_DIR/unbound.conf" "$INSTALL_DIR/"
fi
sleep 0.2
echo "35"; echo "# Configurando permissões..." echo "35"; echo "# Configurando permissões..."
touch "$INSTALL_DIR/logs/agent.log" touch "$INSTALL_DIR/logs/agent.log"
chown -R unbound:unbound "$INSTALL_DIR" chown -R unbound:unbound "$INSTALL_DIR"
chmod 755 "$INSTALL_DIR" chmod 755 "$INSTALL_DIR"
sleep 0.2 sleep 0.2
echo "40"; echo "# Aguardando..." echo "40"
} | whiptail --title "DNSBlock Agent - Instalação" --gauge "Preparando arquivos..." 8 60 0 } | whiptail --title "DNSBlock Agent - Instalação" --gauge "Preparando arquivos..." 8 60 0
# Solicitar serial (fora do gauge para funcionar corretamente) # Solicitar serial (fora do gauge para funcionar corretamente)
SERIAL=$(solicitar_serial) solicitar_serial
# Exibir progresso - Fase 2: Configurar serial e serviço # Exibir progresso - Fase 2: Configurar serial e serviço
{ {
@@ -352,9 +407,15 @@ instalar() {
fi fi
sleep 0.2 sleep 0.2
echo "100"; echo "# Concluído!" echo "100"
} | whiptail --title "DNSBlock Agent - Instalação" --gauge "Configurando sistema..." 8 60 45 } | whiptail --title "DNSBlock Agent - Instalação" --gauge "Configurando sistema..." 8 60 45
# Verificar se houve erro no Unbound
if [ -n "$UNBOUND_ERROR" ]; then
whiptail --title "Aviso - Configuração do Unbound" \
--msgbox "Houve um problema ao configurar o Unbound:\n\n$UNBOUND_ERROR\n\nO agente foi instalado, mas você precisará configurar o Unbound manualmente." 14 65
fi
# Exibir mensagem final # Exibir mensagem final
if [ -n "$SERIAL" ]; then if [ -n "$SERIAL" ]; then
whiptail --title "Instalação Concluída" \ whiptail --title "Instalação Concluída" \
@@ -370,7 +431,7 @@ instalar() {
# ============================================================================ # ============================================================================
desinstalar() { desinstalar() {
if [ ! -d "$INSTALL_DIR" ] && [ ! -f "$SERVICE_FILE" ] && [ ! -f "$DNSBLOCK_CONF" ]; then if [ ! -d "$INSTALL_DIR" ] && [ ! -f "$SERVICE_FILE" ]; then
whiptail --title "Não Instalado" \ whiptail --title "Não Instalado" \
--msgbox "O DNSBlock Agent não parece estar instalado." 8 50 --msgbox "O DNSBlock Agent não parece estar instalado." 8 50
exit 0 exit 0
@@ -404,7 +465,7 @@ desinstalar() {
rm -rf "$INSTALL_DIR" rm -rf "$INSTALL_DIR"
sleep 0.3 sleep 0.3
echo "100"; echo "# Concluído!" echo "100"
} | whiptail --title "DNSBlock Agent - Desinstalação" --gauge "Removendo DNSBlock Agent..." 8 60 0 } | whiptail --title "DNSBlock Agent - Desinstalação" --gauge "Removendo DNSBlock Agent..." 8 60 0
whiptail --title "Desinstalação Concluída" \ whiptail --title "Desinstalação Concluída" \

5
agent/pkg/unbound.conf Normal file
View File

@@ -0,0 +1,5 @@
# DNSBlock RPZ
rpz:
name: rpz.dnsblock.zone
zonefile: /opt/dnsblock/rpz/rpz.dnsblock.zone
rpz-action-override: nxdomain