2594 lines
84 KiB
CMake
2594 lines
84 KiB
CMake
cmake_minimum_required(VERSION 3.16)
|
|
project(BastionGuard LANGUAGES CXX)
|
|
|
|
set(Boost_NO_BOOST_CMAKE ON)
|
|
set(Boost_USE_STATIC_LIBS OFF)
|
|
set(Boost_USE_MULTITHREADED ON)
|
|
|
|
# ============================================================
|
|
# Packaging: disable privileged install-time actions (DEB/RPM/CI)
|
|
# ============================================================
|
|
option(BG_DEBIAN_NO_INSTALL_CODE
|
|
"Disable bg_install_code( ...) actions (packaging friendly: DEB/RPM/CI)"
|
|
OFF
|
|
)
|
|
|
|
option(BG_PACKAGING
|
|
"Packaging build (RPM/DEB) – disable privileged install-time code"
|
|
OFF
|
|
)
|
|
|
|
# ------------------------------------------------------------
|
|
# Auto-detect packaging environments (RPM/DEB) and CI
|
|
# ------------------------------------------------------------
|
|
if(NOT BG_PACKAGING)
|
|
if(DEFINED ENV{RPM_BUILD_ROOT} AND NOT "$ENV{RPM_BUILD_ROOT}" STREQUAL "")
|
|
set(BG_PACKAGING ON CACHE BOOL "RPM packaging build (RPM_BUILD_ROOT)" FORCE)
|
|
elseif(DEFINED ENV{RPM_PACKAGE_BUILD_ROOT} AND NOT "$ENV{RPM_PACKAGE_BUILD_ROOT}" STREQUAL "")
|
|
set(BG_PACKAGING ON CACHE BOOL "RPM packaging build (RPM_PACKAGE_BUILD_ROOT)" FORCE)
|
|
elseif(DEFINED ENV{DEB_BUILD_OPTIONS} AND NOT "$ENV{DEB_BUILD_OPTIONS}" STREQUAL "")
|
|
set(BG_PACKAGING ON CACHE BOOL "DEB packaging build (DEB_BUILD_OPTIONS)" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT BG_PACKAGING AND NOT BG_DEBIAN_NO_INSTALL_CODE)
|
|
if(DEFINED ENV{CI} AND NOT "$ENV{CI}" STREQUAL "")
|
|
set(BG_DEBIAN_NO_INSTALL_CODE ON CACHE BOOL
|
|
"Disable bg_install_code( ...) actions (CI build)" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
if(BG_PACKAGING)
|
|
set(BG_DEBIAN_NO_INSTALL_CODE ON CACHE BOOL
|
|
"Disable bg_install_code( ...) actions (packaging build)" FORCE)
|
|
endif()
|
|
|
|
message(STATUS "BG_PACKAGING = ${BG_PACKAGING}")
|
|
message(STATUS "BG_DEBIAN_NO_INSTALL_CODE = ${BG_DEBIAN_NO_INSTALL_CODE}")
|
|
message(STATUS "ENV{DESTDIR} = '$ENV{DESTDIR}'")
|
|
message(STATUS "ENV{RPM_BUILD_ROOT} = '$ENV{RPM_BUILD_ROOT}'")
|
|
message(STATUS "ENV{RPM_PACKAGE_BUILD_ROOT}= '$ENV{RPM_PACKAGE_BUILD_ROOT}'")
|
|
message(STATUS "ENV{CI} = '$ENV{CI}'")
|
|
|
|
# ------------------------------------------------------------
|
|
# Wrapper install(CODE ...) safe for packaging
|
|
# ------------------------------------------------------------
|
|
function(bg_install_code code_str)
|
|
if(BG_DEBIAN_NO_INSTALL_CODE OR BG_PACKAGING)
|
|
message(STATUS "[Packaging] Skipping privileged install(CODE ...) block")
|
|
return()
|
|
endif()
|
|
|
|
install(CODE "
|
|
if(DEFINED ENV{DESTDIR} AND NOT \"\$ENV{DESTDIR}\" STREQUAL \"\")
|
|
message(STATUS \"[Packaging] DESTDIR is set → skip privileged install code\")
|
|
else()
|
|
${code_str}
|
|
endif()
|
|
")
|
|
endfunction()
|
|
|
|
|
|
# ------------------------------------------------------------
|
|
# bg_link_directories guard (GLOBAL):
|
|
# In packaging we avoid adding explicit library search paths.
|
|
# ------------------------------------------------------------
|
|
function(bg_link_directories)
|
|
if(BG_PACKAGING)
|
|
return()
|
|
endif()
|
|
# global scope (legacy but simple)
|
|
link_directories(${ARGV})
|
|
endfunction()
|
|
|
|
|
|
|
|
|
|
# ===============================
|
|
# 🔒 RPATH (RPM-safe)
|
|
# ===============================
|
|
# In RPM: niente path assoluti in RUNPATH/RPATH, usa $ORIGIN
|
|
if(BG_PACKAGING)
|
|
# binari in /usr/bin → librerie in /usr/share/BastionGuard/*
|
|
set(BG_INSTALL_RPATH "$ORIGIN/../share/BastionGuard/lib;$ORIGIN/../share/BastionGuard/cef")
|
|
|
|
else()
|
|
set(BG_INSTALL_RPATH "/usr/share/BastionGuard/lib;/usr/share/BastionGuard/cef")
|
|
endif()
|
|
|
|
# Evita che CMake “trascini” path di link nell'RPATH
|
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
|
|
|
|
# Hardening per RPM: impedisce rpath di build “accidentali”
|
|
if(BG_PACKAGING)
|
|
set(CMAKE_SKIP_BUILD_RPATH TRUE)
|
|
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
set(CMAKE_INSTALL_REMOVE_ENVIRONMENT_RPATH TRUE)
|
|
endif()
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
set(CMAKE_AUTOMOC OFF)
|
|
set(CMAKE_AUTOUIC OFF)
|
|
set(CMAKE_AUTORCC OFF)
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
find_package(Gettext REQUIRED)
|
|
|
|
include(GNUInstallDirs)
|
|
find_package(Threads REQUIRED)
|
|
# ============================================================
|
|
# BastionGuard – RPATH centralizzato
|
|
# ============================================================
|
|
set(BG_LIBDIR "/usr/share/BastionGuard/lib")
|
|
set(BG_CEF_LIBDIR "/usr/share/BastionGuard/cef")
|
|
|
|
function(bg_set_rpath target)
|
|
if(TARGET ${target})
|
|
if(BG_PACKAGING)
|
|
set_target_properties(${target} PROPERTIES
|
|
INSTALL_RPATH "${BG_INSTALL_RPATH}"
|
|
BUILD_WITH_INSTALL_RPATH TRUE
|
|
SKIP_BUILD_RPATH TRUE
|
|
)
|
|
else()
|
|
set_target_properties(${target} PROPERTIES
|
|
INSTALL_RPATH "${BG_INSTALL_RPATH}"
|
|
SKIP_BUILD_RPATH FALSE
|
|
)
|
|
endif()
|
|
endif()
|
|
endfunction()
|
|
# ======================
|
|
# systemd (sd-bus) — necessario su Debian/Ubuntu recenti (DSO missing)
|
|
# ======================
|
|
pkg_check_modules(SYSTEMD QUIET libsystemd)
|
|
|
|
if (SYSTEMD_FOUND)
|
|
message(STATUS "✔ libsystemd trovato: ${SYSTEMD_VERSION}")
|
|
else()
|
|
message(WARNING "⚠ libsystemd non trovato (libsystemd-dev). Alcune feature potrebbero non compilare.")
|
|
endif()
|
|
|
|
function(bg_link_systemd tgt)
|
|
if (SYSTEMD_FOUND AND TARGET ${tgt})
|
|
target_include_directories(${tgt} PRIVATE ${SYSTEMD_INCLUDE_DIRS})
|
|
target_link_directories(${tgt} PRIVATE ${SYSTEMD_LIBRARY_DIRS})
|
|
target_link_libraries(${tgt} PRIVATE ${SYSTEMD_LIBRARIES})
|
|
target_compile_options(${tgt} PRIVATE ${SYSTEMD_CFLAGS_OTHER})
|
|
endif()
|
|
endfunction()
|
|
# ======================
|
|
# libsystemd / sd-bus
|
|
# ======================
|
|
pkg_check_modules(SYSTEMD REQUIRED libsystemd)
|
|
|
|
if (SYSTEMD_FOUND)
|
|
message(STATUS "✔ libsystemd trovato: ${SYSTEMD_VERSION}")
|
|
include_directories(${SYSTEMD_INCLUDE_DIRS})
|
|
link_directories(${SYSTEMD_LIBRARY_DIRS})
|
|
add_definitions(${SYSTEMD_CFLAGS_OTHER})
|
|
else()
|
|
message(FATAL_ERROR "❌ libsystemd non trovato. Installa libsystemd-dev")
|
|
endif()
|
|
# ==============================
|
|
# Controllo NGINX
|
|
# ==============================
|
|
find_program(NGINX_EXECUTABLE nginx)
|
|
if (NOT NGINX_EXECUTABLE)
|
|
message(FATAL_ERROR "❌ NGINX non trovato nel sistema. Installa nginx (es: sudo apt install nginx o sudo pacman -S nginx).")
|
|
else()
|
|
execute_process(COMMAND ${NGINX_EXECUTABLE} -v
|
|
ERROR_VARIABLE NGINX_VERSION_OUTPUT
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
string(REPLACE "nginx version: " "" NGINX_VERSION "${NGINX_VERSION_OUTPUT}")
|
|
message(STATUS "✔ NGINX trovato: ${NGINX_EXECUTABLE} (${NGINX_VERSION})")
|
|
endif()
|
|
|
|
# ==============================
|
|
# Controllo RSYNC
|
|
# ==============================
|
|
find_program(RSYNC_EXECUTABLE rsync)
|
|
if (NOT RSYNC_EXECUTABLE)
|
|
message(FATAL_ERROR "❌ rsync non trovato nel sistema. È richiesto per aggiornare le firme SaneSecurity.
|
|
Installa rsync (Debian/Ubuntu: sudo apt install rsync | Arch: sudo pacman -S rsync).")
|
|
else()
|
|
message(STATUS "✔ rsync trovato: ${RSYNC_EXECUTABLE}")
|
|
endif()
|
|
|
|
# Option to control whether systemd services are enabled / started at install time.
|
|
option(ENABLE_SYSTEMD_SERVICES "Enable and start systemd services at install time" OFF)
|
|
|
|
install(DIRECTORY data/ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/data)
|
|
|
|
set(INSTALL_DATA_DIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}/BastionGuard/data")
|
|
set(INSTALL_LOCALE_DIR "${CMAKE_INSTALL_FULL_DATAROOTDIR}/BastionGuard/locale")
|
|
|
|
# Non sovrascrivere: mantieni i path di sistema e aggiungi i tuoi
|
|
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON)
|
|
|
|
set(_bg_extra_pc "/usr/share/BastionGuard/lib/pkgconfig:/usr/share/BastionGuard/share/pkgconfig")
|
|
|
|
if(DEFINED ENV{PKG_CONFIG_PATH} AND NOT "$ENV{PKG_CONFIG_PATH}" STREQUAL "")
|
|
set(ENV{PKG_CONFIG_PATH} "${_bg_extra_pc}:$ENV{PKG_CONFIG_PATH}")
|
|
else()
|
|
set(ENV{PKG_CONFIG_PATH} "${_bg_extra_pc}")
|
|
endif()
|
|
|
|
|
|
|
|
# ======================
|
|
# pkg-config
|
|
# ======================
|
|
pkg_check_modules(GTKMM REQUIRED gtkmm-4.0)
|
|
pkg_check_modules(GIOMM REQUIRED giomm-2.68)
|
|
pkg_check_modules(SIGC REQUIRED sigc++-3.0)
|
|
pkg_check_modules(YARA REQUIRED yara)
|
|
pkg_check_modules(SOUP REQUIRED libsoup-3.0)
|
|
pkg_check_modules(PANGOMM REQUIRED pangomm-2.48)
|
|
|
|
include_directories(
|
|
${GTKMM_INCLUDE_DIRS}
|
|
${GIOMM_INCLUDE_DIRS}
|
|
${SIGC_INCLUDE_DIRS}
|
|
${YARA_INCLUDE_DIRS}
|
|
${SOUP_INCLUDE_DIRS}
|
|
src
|
|
src/filters
|
|
)
|
|
|
|
# ❗️In packaging: NON aggiungiamo dir di libreria (evita /usr/local nel RUNPATH)
|
|
bg_link_directories(
|
|
${GTKMM_LIBRARY_DIRS}
|
|
${GIOMM_LIBRARY_DIRS}
|
|
${SIGC_LIBRARY_DIRS}
|
|
${YARA_LIBRARY_DIRS}
|
|
${SOUP_LIBRARY_DIRS}
|
|
)
|
|
|
|
if(GTKMM_CFLAGS_OTHER)
|
|
add_compile_options(${GTKMM_CFLAGS_OTHER})
|
|
endif()
|
|
if(GIOMM_CFLAGS_OTHER)
|
|
add_compile_options(${GIOMM_CFLAGS_OTHER})
|
|
endif()
|
|
if(SIGC_CFLAGS_OTHER)
|
|
add_compile_options(${SIGC_CFLAGS_OTHER})
|
|
endif()
|
|
if(YARA_CFLAGS_OTHER)
|
|
add_compile_options(${YARA_CFLAGS_OTHER})
|
|
endif()
|
|
if(SOUP_CFLAGS_OTHER)
|
|
add_compile_options(${SOUP_CFLAGS_OTHER})
|
|
endif()
|
|
|
|
# ======================
|
|
# libudev
|
|
# ======================
|
|
pkg_check_modules(UDEV REQUIRED libudev)
|
|
include_directories(${UDEV_INCLUDE_DIRS})
|
|
if (UDEV_FOUND)
|
|
message(STATUS "✔ libudev trovato: ${UDEV_VERSION}")
|
|
else()
|
|
message(FATAL_ERROR "❌ libudev non trovato. Installa libudev-dev (Debian/Ubuntu) o systemd-libs-devel (Fedora).")
|
|
endif()
|
|
|
|
# ======================
|
|
# LibSecret
|
|
# ======================
|
|
pkg_check_modules(LIBSECRET REQUIRED libsecret-1)
|
|
if (LIBSECRET_FOUND)
|
|
message(STATUS "✔ LibSecret trovato: ${LIBSECRET_VERSION}")
|
|
include_directories(${LIBSECRET_INCLUDE_DIRS})
|
|
add_definitions(${LIBSECRET_CFLAGS_OTHER})
|
|
else()
|
|
message(FATAL_ERROR "❌ LibSecret non trovato. Installa libsecret-1-dev (Debian/Ubuntu) o libsecret (Arch/Fedora).")
|
|
endif()
|
|
|
|
# ======================
|
|
# libidn2
|
|
# ======================
|
|
pkg_check_modules(IDN2 REQUIRED libidn2)
|
|
include_directories(${IDN2_INCLUDE_DIRS})
|
|
|
|
# ======================
|
|
# SQLite3
|
|
# ======================
|
|
pkg_check_modules(SQLITE3 REQUIRED sqlite3)
|
|
include_directories(${SQLITE3_INCLUDE_DIRS})
|
|
if(SQLITE3_FOUND)
|
|
message(STATUS "✔ SQLite3 trovato: ${SQLITE3_LIBRARIES}")
|
|
else()
|
|
message(FATAL_ERROR "❌ SQLite3 non trovato. Installa libsqlite3-dev (Debian/Ubuntu) o sqlite (Arch/Fedora).")
|
|
endif()
|
|
|
|
# =======================================================
|
|
# libsmbclient (Samba Client Library)
|
|
# =======================================================
|
|
# In packaging, evita /usr/local/*
|
|
if(BG_PACKAGING)
|
|
find_path(SMBCLIENT_INCLUDE_DIR libsmbclient.h
|
|
PATHS /usr/include /usr/include/samba-4.0
|
|
)
|
|
find_library(SMBCLIENT_LIBRARY smbclient
|
|
PATHS /usr/lib /usr/lib64
|
|
)
|
|
else()
|
|
find_path(SMBCLIENT_INCLUDE_DIR libsmbclient.h
|
|
PATHS /usr/include /usr/include/samba-4.0 /usr/local/include
|
|
)
|
|
find_library(SMBCLIENT_LIBRARY smbclient
|
|
PATHS /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64
|
|
)
|
|
endif()
|
|
|
|
if (NOT SMBCLIENT_INCLUDE_DIR OR NOT SMBCLIENT_LIBRARY)
|
|
message(FATAL_ERROR "❌ libsmbclient non trovato...")
|
|
else()
|
|
message(STATUS "✔ libsmbclient trovato: ${SMBCLIENT_LIBRARY}")
|
|
message(STATUS "✔ include: ${SMBCLIENT_INCLUDE_DIR}")
|
|
endif()
|
|
|
|
set(SMBCLIENT_LIBRARIES ${SMBCLIENT_LIBRARY})
|
|
set(SMBCLIENT_INCLUDE_DIRS ${SMBCLIENT_INCLUDE_DIR})
|
|
include_directories(${SMBCLIENT_INCLUDE_DIRS})
|
|
|
|
|
|
|
|
# ======================
|
|
# nlohmann-json (header-only, via CMake config)
|
|
# ======================
|
|
find_package(nlohmann_json 3.2.0 REQUIRED)
|
|
# ======================
|
|
# CURL (per Google Safe Browsing API)
|
|
# ======================
|
|
find_package(CURL REQUIRED)
|
|
# ==============================
|
|
# OpenSSL
|
|
# ==============================
|
|
find_package(OpenSSL REQUIRED)
|
|
|
|
message(STATUS "✔ OpenSSL trovato: ${OPENSSL_VERSION}")
|
|
|
|
# NIENTE include_directories qui:
|
|
# usa sempre i target moderni quando linki:
|
|
#target_link_libraries(miotarget PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
|
|
|
# ==============================
|
|
# Boost (thread pool, asio, ecc.)
|
|
# ==============================
|
|
find_package(Boost REQUIRED COMPONENTS thread)
|
|
include_directories(${Boost_INCLUDE_DIRS})
|
|
|
|
# ==============================
|
|
# Hyperscan (opzionale, per regex ad alte prestazioni)
|
|
# ==============================
|
|
find_path(HYPERSCAN_INCLUDE_DIR NAMES hs/hs.h
|
|
PATHS
|
|
/usr/include
|
|
/usr/local/include
|
|
)
|
|
|
|
if(BG_PACKAGING)
|
|
find_library(HYPERSCAN_LIBRARY NAMES hs libhs hs.so.5
|
|
PATHS
|
|
/usr/lib
|
|
/usr/lib64
|
|
)
|
|
else()
|
|
find_library(HYPERSCAN_LIBRARY NAMES hs libhs hs.so.5
|
|
PATHS
|
|
/usr/lib
|
|
/usr/lib64
|
|
/usr/local/lib
|
|
/usr/local/lib64
|
|
)
|
|
endif()
|
|
|
|
if (HYPERSCAN_INCLUDE_DIR AND HYPERSCAN_LIBRARY)
|
|
message(STATUS "✔ Hyperscan trovato: ${HYPERSCAN_LIBRARY}")
|
|
include_directories(${HYPERSCAN_INCLUDE_DIR})
|
|
add_compile_definitions(HAVE_HYPERSCAN=1)
|
|
else()
|
|
message(WARNING "⚠ Hyperscan non trovato. Verrà usato std::regex fallback (più lento).")
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(GTKMM_CFLAGS_OTHER)
|
|
add_compile_options(${GTKMM_CFLAGS_OTHER})
|
|
endif()
|
|
if(GIOMM_CFLAGS_OTHER)
|
|
add_compile_options(${GIOMM_CFLAGS_OTHER})
|
|
endif()
|
|
if(SIGC_CFLAGS_OTHER)
|
|
add_compile_options(${SIGC_CFLAGS_OTHER})
|
|
endif()
|
|
if(YARA_CFLAGS_OTHER)
|
|
add_compile_options(${YARA_CFLAGS_OTHER})
|
|
endif()
|
|
if(SOUP_CFLAGS_OTHER)
|
|
add_compile_options(${SOUP_CFLAGS_OTHER})
|
|
endif()
|
|
|
|
# ======================
|
|
# Libreria phishing_common (dnsmasq backend minimal)
|
|
# ======================
|
|
set(PHISHING_COMMON_SOURCES
|
|
src/phishing/local_warning_server.cpp
|
|
src/phishing/WebProbe.cpp
|
|
src/phishing/network_quality.cpp
|
|
src/phishing/dns_cache.cpp
|
|
)
|
|
|
|
add_library(phishing_common STATIC ${PHISHING_COMMON_SOURCES})
|
|
|
|
target_include_directories(phishing_common PUBLIC src src/phishing)
|
|
|
|
target_link_libraries(phishing_common
|
|
PUBLIC
|
|
${SOUP_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${IDN2_LIBRARIES}
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
)
|
|
|
|
# ======================
|
|
# Identity Leak Module
|
|
# ======================
|
|
set(IDENTITY_LEAK_SOURCES
|
|
src/IdentityLeakPage/ui/IdentityLeakPage.cpp
|
|
src/IdentityLeakPage/worker/LeakCheckWorker.cpp
|
|
src/IdentityLeakPage/monitor/LeakMonitor.cpp
|
|
src/IdentityLeakPage/core/LeakAggregator.cpp
|
|
src/IdentityLeakPage/core/LeakNormalizer.cpp
|
|
src/IdentityLeakPage/providers/HibpProvider.cpp
|
|
src/IdentityLeakPage/providers/LeakCheckProvider.cpp
|
|
src/IdentityLeakPage/providers/HibpPasswordProvider.cpp
|
|
src/IdentityLeakPage/net/HttpClient.cpp
|
|
src/IdentityLeakPage/storage/LeakDatabase.cpp
|
|
src/IdentityLeakPage/utils/HashUtil.cpp
|
|
src/IdentityLeakPage/utils/IdentityLeakConfig.cpp
|
|
src/IdentityLeakPage/utils/TimeUtil.cpp
|
|
)
|
|
|
|
add_library(identity_leak STATIC ${IDENTITY_LEAK_SOURCES})
|
|
|
|
target_include_directories(identity_leak
|
|
PUBLIC
|
|
src
|
|
src/IdentityLeakPage
|
|
)
|
|
|
|
target_link_libraries(identity_leak
|
|
PUBLIC
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
CURL::libcurl
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
${SQLITE3_LIBRARIES}
|
|
nlohmann_json::nlohmann_json
|
|
)
|
|
|
|
# ======================
|
|
# Password Manager Module
|
|
# ======================
|
|
set(PASSWORD_MANAGER_SOURCES
|
|
src/password_manager/PasswordEntry.cpp
|
|
src/password_manager/PasswordVault.cpp
|
|
src/password_manager/PasswordGenerator.cpp
|
|
src/password_manager/PasswordDialogs.cpp
|
|
src/password_manager/PasswordSearchRow.cpp
|
|
src/password_manager/PasswordManagerPage.cpp
|
|
src/password_manager/PasswordImporter.cpp
|
|
src/password_manager/PasswordImportDialog.cpp
|
|
src/password_manager/PasswordVaultView.cpp
|
|
)
|
|
|
|
add_library(password_manager STATIC ${PASSWORD_MANAGER_SOURCES})
|
|
|
|
target_include_directories(password_manager PUBLIC
|
|
src
|
|
src/password_manager
|
|
)
|
|
|
|
target_link_libraries(password_manager
|
|
PUBLIC
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${LIBSECRET_LIBRARIES}
|
|
nlohmann_json::nlohmann_json
|
|
)
|
|
|
|
# ======================
|
|
# RE2 (opzionale, per regex sicure e veloci)
|
|
# ======================
|
|
if(BG_PACKAGING)
|
|
find_library(RE2_LIBRARY NAMES re2 libre2 PATHS /usr/lib /usr/lib64)
|
|
else()
|
|
find_library(RE2_LIBRARY NAMES re2 libre2 PATHS /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64)
|
|
endif()
|
|
|
|
if (RE2_LIBRARY)
|
|
message(STATUS "✔ RE2 trovato: ${RE2_LIBRARY}")
|
|
target_link_libraries(phishing_common PRIVATE ${RE2_LIBRARY})
|
|
else()
|
|
message(WARNING "⚠ RE2 non trovato. Uso std::regex fallback.")
|
|
endif()
|
|
|
|
# === Boost per phishing_common ===
|
|
target_link_libraries(phishing_common PRIVATE Boost::thread)
|
|
|
|
|
|
|
|
target_compile_definitions(phishing_common PUBLIC
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
# ============================
|
|
# Firewall Management Module
|
|
# ============================
|
|
set(FIREWALL_SOURCES
|
|
src/firewall/FirewallChoiceDialog.cpp
|
|
src/firewall/FirewallDetector.cpp
|
|
src/firewall/FirewallInstaller.cpp
|
|
src/firewall/FirewallRuleManager.cpp
|
|
src/firewall/BlacklistIpExtractor.cpp
|
|
)
|
|
|
|
add_library(firewall STATIC ${FIREWALL_SOURCES})
|
|
|
|
target_include_directories(firewall PUBLIC src/firewall)
|
|
|
|
target_link_libraries(firewall
|
|
PUBLIC
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
)
|
|
|
|
|
|
# ----------------------
|
|
# GUI principale (BastionGuard)
|
|
# ----------------------
|
|
set(BastionGuard_SOURCES
|
|
src/main.cpp
|
|
src/MainWindow.cpp
|
|
src/TrayIcon.cpp
|
|
src/Backend.cpp
|
|
src/DashboardPage.cpp
|
|
src/ScanPage.cpp
|
|
src/LogPage.cpp
|
|
src/SettingsPage.cpp
|
|
src/AboutPage.cpp
|
|
src/QuarantinePage.cpp
|
|
src/Quarantine.cpp
|
|
src/ClamdConfig.cpp
|
|
src/UpdatePage.cpp
|
|
src/DonatePage.cpp
|
|
src/StyleProvider.cpp
|
|
src/AntiRansomEngine.cpp
|
|
src/AntiPhishingEngine.cpp
|
|
src/BankPage.cpp
|
|
src/wizard/wizard_window.cpp
|
|
src/wizard/wizard_setup.cpp
|
|
src/SecureBrowser.cpp
|
|
src/PrivacyPage.cpp
|
|
src/AurScan.cpp
|
|
src/SettingsWindow.cpp
|
|
src/AntiRansomwarePage.cpp
|
|
src/SambaPage.cpp
|
|
src/SaneSecurityUpdater.cpp
|
|
src/SettingsStore.cpp
|
|
src/first_run/first-run-services-window.cpp
|
|
src/pac/PacManager.cpp
|
|
src/cloud/MalwareBazaar.cpp
|
|
src/usb/USBScanPage.cpp
|
|
src/usb/ScanPromptWindow.cpp
|
|
src/usb/LiveScanDialog.cpp
|
|
src/phishing_search/PhishingPage.cpp
|
|
src/phishing_search/PhishingCheckCard.cpp
|
|
src/vpn/VpnPage.cpp
|
|
src/vpn/WireguardBackend.cpp
|
|
src/password_manager/PasswordManagerPage.cpp
|
|
src/backup/BackupPage.cpp
|
|
src/Utils.cpp
|
|
)
|
|
add_executable(BastionGuard ${BastionGuard_SOURCES})
|
|
target_include_directories(BastionGuard
|
|
PRIVATE
|
|
src
|
|
src/firewall
|
|
)
|
|
|
|
target_compile_definitions(BastionGuard PRIVATE
|
|
BASTIONGUARD_VERSION="2.0"
|
|
BASTIONGUARD_BUILD=20260411
|
|
)
|
|
|
|
target_link_libraries(BastionGuard
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${YARA_LIBRARIES}
|
|
${SOUP_LIBRARIES}
|
|
${LIBSECRET_LIBRARIES}
|
|
${UDEV_LIBRARIES}
|
|
${SMBCLIENT_LIBRARIES}
|
|
${SYSTEMD_LIBRARIES}
|
|
phishing_common
|
|
firewall
|
|
identity_leak
|
|
password_manager
|
|
CURL::libcurl
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
)
|
|
target_link_options(BastionGuard PRIVATE -lsystemd)
|
|
bg_set_rpath(BastionGuard)
|
|
bg_link_systemd(BastionGuard)
|
|
# ============================================================
|
|
# Blink / CEF Integration (SecureBrowser)
|
|
# ============================================================
|
|
set(CEF_ROOT "${CMAKE_SOURCE_DIR}/thirdparty/cef")
|
|
set(CEF_RELEASE_DIR "${CEF_ROOT}/Release")
|
|
set(CEF_LIB "${CEF_RELEASE_DIR}/libcef.so")
|
|
|
|
# Tentativi di percorso possibili per il wrapper
|
|
set(CEF_WRAPPER_A "${CEF_ROOT}/build/libcef_dll_wrapper.a")
|
|
set(CEF_WRAPPER_B "${CEF_ROOT}/build/libcef_dll_wrapper/libcef_dll_wrapper.a")
|
|
|
|
# ============================================================
|
|
# 🔹 Download automatico CEF se mancante
|
|
# ============================================================
|
|
set(CEF_URL "https://cef-builds.spotifycdn.com/cef_binary_141.0.7%2Bga5714cc%2Bchromium-141.0.7390.108_linux64_minimal.tar.bz2")
|
|
set(CEF_ARCHIVE "${CMAKE_SOURCE_DIR}/thirdparty/cef_download.tar.bz2")
|
|
|
|
if (NOT EXISTS ${CEF_LIB})
|
|
message(WARNING "⚠️ libcef.so non trovato in ${CEF_RELEASE_DIR}")
|
|
message(STATUS "⬇️ Download automatico CEF da: ${CEF_URL}")
|
|
|
|
# Crea cartella thirdparty/cef
|
|
file(MAKE_DIRECTORY ${CEF_ROOT})
|
|
|
|
# Scarica il pacchetto
|
|
file(DOWNLOAD
|
|
${CEF_URL}
|
|
${CEF_ARCHIVE}
|
|
SHOW_PROGRESS
|
|
STATUS cef_status
|
|
)
|
|
|
|
list(GET cef_status 0 cef_status_code)
|
|
if (NOT cef_status_code EQUAL 0)
|
|
message(FATAL_ERROR "❌ Errore nel download di CEF (${CEF_URL})")
|
|
endif()
|
|
|
|
# Estrai archivio
|
|
message(STATUS "📦 Estrazione archivio CEF...")
|
|
execute_process(
|
|
COMMAND ${CMAKE_COMMAND} -E tar xjf ${CEF_ARCHIVE}
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/thirdparty
|
|
RESULT_VARIABLE cef_extract_result
|
|
)
|
|
|
|
if (NOT cef_extract_result EQUAL 0)
|
|
message(FATAL_ERROR "❌ Errore durante l'estrazione del pacchetto CEF")
|
|
endif()
|
|
|
|
# Rinomina la cartella estratta (contiene spesso un nome lungo)
|
|
file(GLOB cef_subdirs "${CMAKE_SOURCE_DIR}/thirdparty/cef_binary_*")
|
|
list(LENGTH cef_subdirs cef_count)
|
|
if (cef_count GREATER 0)
|
|
list(GET cef_subdirs 0 cef_extracted_dir)
|
|
message(STATUS "📂 CEF estratto in: ${cef_extracted_dir}")
|
|
file(RENAME "${cef_extracted_dir}" "${CEF_ROOT}")
|
|
endif()
|
|
|
|
# Verifica dopo estrazione
|
|
if (NOT EXISTS ${CEF_LIB})
|
|
message(FATAL_ERROR "❌ libcef.so ancora non trovato dopo estrazione in ${CEF_RELEASE_DIR}")
|
|
endif()
|
|
|
|
message(STATUS "✔ CEF scaricato e preparato con successo in ${CEF_ROOT}")
|
|
else()
|
|
message(STATUS "✔ CEF trovato: ${CEF_LIB}")
|
|
endif()
|
|
|
|
# ============================================================
|
|
# Build automatica del wrapper se necessario
|
|
# ============================================================
|
|
if (NOT (EXISTS ${CEF_WRAPPER_A} OR EXISTS ${CEF_WRAPPER_B}))
|
|
message(STATUS "🧩 Compilo automaticamente libcef_dll_wrapper.a (wrapper CEF)...")
|
|
execute_process(
|
|
COMMAND cmake -B build -S .
|
|
WORKING_DIRECTORY ${CEF_ROOT}
|
|
RESULT_VARIABLE CEF_CONFIGURE_RESULT
|
|
)
|
|
if (NOT CEF_CONFIGURE_RESULT EQUAL 0)
|
|
message(FATAL_ERROR "❌ Errore durante la configurazione CMake di libcef_dll_wrapper")
|
|
endif()
|
|
|
|
execute_process(
|
|
COMMAND cmake --build build --config Release
|
|
WORKING_DIRECTORY ${CEF_ROOT}
|
|
RESULT_VARIABLE CEF_BUILD_RESULT
|
|
)
|
|
if (NOT CEF_BUILD_RESULT EQUAL 0)
|
|
message(FATAL_ERROR "❌ Errore durante la compilazione di libcef_dll_wrapper.a")
|
|
endif()
|
|
endif()
|
|
|
|
# ============================================================
|
|
# Conferma finale e selezione wrapper corretto
|
|
# ============================================================
|
|
if (EXISTS ${CEF_WRAPPER_A})
|
|
set(CEF_WRAPPER ${CEF_WRAPPER_A})
|
|
elseif (EXISTS ${CEF_WRAPPER_B})
|
|
set(CEF_WRAPPER ${CEF_WRAPPER_B})
|
|
else()
|
|
message(FATAL_ERROR "❌ libcef_dll_wrapper.a non trovato dopo la build.")
|
|
endif()
|
|
|
|
message(STATUS "✔ Wrapper statico CEF trovato: ${CEF_WRAPPER}")
|
|
|
|
# ------------------------------------------------------------
|
|
# Aggiungi SecureBrowser
|
|
# ------------------------------------------------------------
|
|
list(APPEND BastionGuard_SOURCES src/SecureBrowser.cpp)
|
|
|
|
include_directories(${CEF_ROOT} ${CEF_ROOT}/include)
|
|
|
|
target_link_libraries(BastionGuard
|
|
PRIVATE
|
|
${CEF_LIB}
|
|
${CEF_WRAPPER}
|
|
pthread
|
|
dl
|
|
)
|
|
|
|
|
|
# Su alcune distro serve anche pthread e dl
|
|
target_link_libraries(BastionGuard PRIVATE pthread dl)
|
|
|
|
# ============================================================
|
|
# ✅ INSTALLAZIONE COMPLETA DEL RUNTIME CEF (compatibile con build senza cef_helper)
|
|
# ============================================================
|
|
|
|
set(CEF_INSTALL_DIR "${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/cef")
|
|
|
|
# Installa librerie principali
|
|
install(FILES
|
|
${CEF_RELEASE_DIR}/libcef.so
|
|
${CEF_RELEASE_DIR}/libEGL.so
|
|
${CEF_RELEASE_DIR}/libGLESv2.so
|
|
${CEF_RELEASE_DIR}/libvk_swiftshader.so
|
|
${CEF_RELEASE_DIR}/libvulkan.so.1
|
|
DESTINATION ${CEF_INSTALL_DIR}
|
|
)
|
|
|
|
# Installa sandbox (chrome-sandbox)
|
|
install(FILES
|
|
${CEF_RELEASE_DIR}/chrome-sandbox
|
|
DESTINATION ${CEF_INSTALL_DIR}
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ
|
|
)
|
|
|
|
# Installa tutte le risorse necessarie (pak, dat, bin, locales)
|
|
install(DIRECTORY
|
|
${CEF_ROOT}/Resources/
|
|
DESTINATION ${CEF_INSTALL_DIR}
|
|
FILES_MATCHING
|
|
PATTERN "*.pak"
|
|
PATTERN "*.bin"
|
|
PATTERN "*.dat"
|
|
PATTERN "locales"
|
|
)
|
|
|
|
# Installa eventuali snapshot e config
|
|
install(FILES
|
|
${CEF_RELEASE_DIR}/v8_context_snapshot.bin
|
|
${CEF_RELEASE_DIR}/vk_swiftshader_icd.json
|
|
DESTINATION ${CEF_INSTALL_DIR}
|
|
OPTIONAL
|
|
)
|
|
|
|
|
|
|
|
# Post-install: imposta permessi sandbox
|
|
bg_install_code( "
|
|
message(STATUS \"[CEF] Imposto permessi per chrome-sandbox...\")
|
|
execute_process(COMMAND chmod 4755 ${CMAKE_INSTALL_FULL_DATAROOTDIR}/BastionGuard/cef/chrome-sandbox)
|
|
")
|
|
|
|
# ============================================================
|
|
# Optional Polkit integration
|
|
# ============================================================
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(POLKIT_GOBJECT QUIET polkit-gobject-1)
|
|
|
|
if (POLKIT_GOBJECT_FOUND)
|
|
message(STATUS "✔ Found Polkit: ${POLKIT_GOBJECT_VERSION}")
|
|
include_directories(${POLKIT_GOBJECT_INCLUDE_DIRS})
|
|
target_link_libraries(BastionGuard PRIVATE ${POLKIT_GOBJECT_LIBRARIES})
|
|
target_compile_definitions(BastionGuard PRIVATE HAVE_POLKIT=1)
|
|
else()
|
|
message(WARNING "⚠ Polkit not found, using pkexec fallback only")
|
|
target_compile_definitions(BastionGuard PRIVATE HAVE_POLKIT=0)
|
|
endif()
|
|
|
|
target_compile_definitions(BastionGuard PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
install(TARGETS BastionGuard RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# ===============================
|
|
# Eseguibile per gli alert ransomware
|
|
# ===============================
|
|
set(RANSW_ALERT_SOURCES
|
|
src/alert/BastionGuard-ransomware-alert.cpp
|
|
src/Backend.cpp
|
|
src/AntiRansomEngine.cpp
|
|
src/AntiPhishingEngine.cpp
|
|
src/Quarantine.cpp
|
|
src/Utils.cpp
|
|
)
|
|
|
|
add_executable(BastionGuard-ransomware-alert ${RANSW_ALERT_SOURCES})
|
|
target_include_directories(BastionGuard-ransomware-alert PRIVATE src)
|
|
target_link_libraries(BastionGuard-ransomware-alert PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${YARA_LIBRARIES}
|
|
${SOUP_LIBRARIES}
|
|
${SMBCLIENT_LIBRARIES}
|
|
CURL::libcurl
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
phishing_common
|
|
firewall
|
|
)
|
|
bg_set_rpath(BastionGuard-ransomware-alert)
|
|
target_compile_definitions(BastionGuard-ransomware-alert PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
install(TARGETS BastionGuard-ransomware-alert RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# ================================
|
|
# Alert realtime (SOCKET UNIX)
|
|
# BastionGuard-ransomware-realtime-alert
|
|
# ================================
|
|
|
|
set(RANSW_REALTIME_ALERT_SOURCES
|
|
src/alert/BastionGuard-ransomware-realtime-alert.cpp
|
|
src/alert/AlertWindowRealtime.cpp
|
|
src/Backend.cpp
|
|
src/AntiRansomEngine.cpp
|
|
src/AntiPhishingEngine.cpp
|
|
src/Quarantine.cpp
|
|
src/Utils.cpp
|
|
)
|
|
|
|
add_executable(BastionGuard-ransomware-realtime-alert ${RANSW_REALTIME_ALERT_SOURCES})
|
|
|
|
target_include_directories(BastionGuard-ransomware-realtime-alert PRIVATE src)
|
|
|
|
target_link_libraries(BastionGuard-ransomware-realtime-alert
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${SOUP_LIBRARIES}
|
|
${YARA_LIBRARIES}
|
|
${SMBCLIENT_LIBRARIES}
|
|
CURL::libcurl
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
phishing_common
|
|
pthread
|
|
firewall
|
|
)
|
|
bg_set_rpath(BastionGuard-ransomware-realtime-alert)
|
|
target_compile_definitions(BastionGuard-ransomware-realtime-alert PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
# Installazione binario
|
|
install(TARGETS BastionGuard-ransomware-realtime-alert
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
|
|
|
# ======================
|
|
# Demone Anti-Phishing
|
|
# ======================
|
|
# ======================
|
|
# BastionGuard DNS Daemon (dnsmasq backend)
|
|
# ======================
|
|
set(BastionGuard_DAEMON_SOURCES
|
|
src/phishing/BastionGuard-daemon.cpp
|
|
src/phishing/local_warning_server.cpp
|
|
src/phishing/dns_cache.cpp
|
|
)
|
|
|
|
add_executable(BastionGuard-daemon ${BastionGuard_DAEMON_SOURCES})
|
|
|
|
target_include_directories(BastionGuard-daemon PRIVATE src src/phishing)
|
|
|
|
target_link_libraries(BastionGuard-daemon
|
|
PRIVATE
|
|
${SOUP_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${GTKMM_LIBRARIES}
|
|
Threads::Threads
|
|
dl
|
|
)
|
|
bg_set_rpath(BastionGuard-daemon)
|
|
target_compile_definitions(BastionGuard-daemon PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
install(TARGETS BastionGuard-daemon RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# ======================
|
|
# Archive inspection support
|
|
# ======================
|
|
|
|
set(BG_ARCHIVE_CORE_SOURCES
|
|
src/security/archive/ArchiveSandbox.cpp
|
|
src/security/archive/ArchiveInspector.cpp
|
|
)
|
|
|
|
set(BG_ARCHIVE_HELPER_SOURCES
|
|
src/helpers/archive_worker.cpp
|
|
)
|
|
|
|
add_executable(archive_worker
|
|
${BG_ARCHIVE_HELPER_SOURCES}
|
|
)
|
|
|
|
target_include_directories(archive_worker
|
|
PRIVATE
|
|
src
|
|
)
|
|
|
|
target_compile_definitions(archive_worker PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
bg_set_rpath(archive_worker)
|
|
|
|
install(TARGETS archive_worker
|
|
RUNTIME DESTINATION /usr/libexec/bastionguard
|
|
)
|
|
|
|
# ======================
|
|
# Demone Anti-Ransomware
|
|
# ======================
|
|
add_executable(BastionGuard-ransomware-scanner
|
|
src/scanner-ransomware/BastionGuard-ransomware-scanner.cpp
|
|
${BG_ARCHIVE_CORE_SOURCES}
|
|
)
|
|
target_link_libraries(BastionGuard-ransomware-scanner
|
|
PRIVATE
|
|
${YARA_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${GTKMM_LIBRARIES}
|
|
phishing_common
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
Threads::Threads
|
|
nlohmann_json::nlohmann_json
|
|
)
|
|
bg_set_rpath(BastionGuard-ransomware-scanner)
|
|
target_compile_definitions(BastionGuard-ransomware-scanner PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
install(TARGETS BastionGuard-ransomware-scanner RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# ======================
|
|
# Demone Anti-Ransomware Realtime (fanotify)
|
|
# ======================
|
|
add_executable(BastionGuard-ransomware-realtime
|
|
src/scanner-ransomware/BastionGuard-ransomware-realtime.cpp
|
|
${BG_ARCHIVE_CORE_SOURCES}
|
|
)
|
|
|
|
target_include_directories(BastionGuard-ransomware-realtime PRIVATE src)
|
|
|
|
target_link_libraries(BastionGuard-ransomware-realtime
|
|
PRIVATE
|
|
${YARA_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${GTKMM_LIBRARIES}
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
phishing_common
|
|
pthread
|
|
)
|
|
bg_set_rpath(BastionGuard-ransomware-realtime)
|
|
target_compile_definitions(BastionGuard-ransomware-realtime PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
install(TARGETS BastionGuard-ransomware-realtime
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
|
# ======================
|
|
# Native Messaging Host
|
|
# ======================
|
|
add_executable(BastionGuard-native-host
|
|
src/native_host/native_host.cpp
|
|
src/wizard/wizard_setup.cpp
|
|
)
|
|
target_include_directories(BastionGuard-native-host PRIVATE src)
|
|
target_link_libraries(BastionGuard-native-host
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${YARA_LIBRARIES}
|
|
${SOUP_LIBRARIES}
|
|
nlohmann_json::nlohmann_json
|
|
)
|
|
bg_set_rpath(BastionGuard-native-host)
|
|
target_compile_definitions(BastionGuard-native-host PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
install(TARGETS BastionGuard-native-host RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# ======================
|
|
# Setup Wizard
|
|
# ======================
|
|
set(WIZARD_SOURCES
|
|
src/wizard/wizard_window.cpp
|
|
src/wizard/wizard_setup.cpp
|
|
src/wizard/main.cpp
|
|
src/wizard/StyleProvider.cpp
|
|
src/Utils.cpp
|
|
)
|
|
|
|
add_executable(BastionGuard-wizard ${WIZARD_SOURCES})
|
|
target_include_directories(BastionGuard-wizard PRIVATE src)
|
|
target_link_libraries(BastionGuard-wizard
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${SOUP_LIBRARIES}
|
|
phishing_common
|
|
)
|
|
bg_set_rpath(BastionGuard-wizard)
|
|
target_compile_definitions(BastionGuard-wizard PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
install(TARGETS BastionGuard-wizard RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# ==============================
|
|
# First Run Services standalone
|
|
# ==============================
|
|
add_executable(BastionGuard-first-run
|
|
src/first_run/first-run-main.cpp
|
|
src/first_run/first-run-services-window.cpp
|
|
src/StyleProvider.cpp
|
|
)
|
|
|
|
target_compile_definitions(BastionGuard-first-run PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
target_include_directories(BastionGuard-first-run
|
|
PRIVATE
|
|
src
|
|
src/first_run
|
|
)
|
|
|
|
target_link_libraries(BastionGuard-first-run
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
|
|
)
|
|
|
|
bg_set_rpath(BastionGuard-first-run)
|
|
|
|
|
|
install(TARGETS BastionGuard-first-run RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# ======================
|
|
# Helper privilegiato — bastionguard-privhelper
|
|
# ======================
|
|
|
|
set(PRIVHELPER_SOURCES
|
|
src/privhelper/bastionguard_privhelper.cpp
|
|
)
|
|
|
|
|
|
|
|
add_executable(bastionguard-privhelper ${PRIVHELPER_SOURCES})
|
|
target_link_libraries(bastionguard-privhelper PRIVATE ${UDEV_LIBRARIES} pthread)
|
|
|
|
install(TARGETS bastionguard-privhelper
|
|
RUNTIME DESTINATION /usr/bin
|
|
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
|
GROUP_READ GROUP_EXECUTE
|
|
WORLD_READ WORLD_EXECUTE)
|
|
|
|
bg_install_code( "
|
|
message(STATUS \"[privhelper] Imposto owner root e setuid su bastionguard-privhelper\")
|
|
|
|
execute_process(
|
|
COMMAND chown root:root /usr/bin/bastionguard-privhelper
|
|
RESULT_VARIABLE CHOWN_RES
|
|
)
|
|
|
|
if(NOT CHOWN_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[privhelper] chown root fallito\")
|
|
endif()
|
|
|
|
execute_process(
|
|
COMMAND chmod 4755 /usr/bin/bastionguard-privhelper
|
|
RESULT_VARIABLE CHMOD_RES
|
|
)
|
|
|
|
if(NOT CHMOD_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[privhelper] chmod 4755 fallito\")
|
|
endif()
|
|
|
|
message(STATUS \"[privhelper] ✔ bastionguard-privhelper installato come setuid root\")
|
|
")
|
|
|
|
# ======================
|
|
# Helper privilegiato — bastionguard-firewall
|
|
# ======================
|
|
|
|
set(FIREWALL_HELPER_SOURCES
|
|
src/privhelper/bastionguard-firewall.cpp
|
|
)
|
|
|
|
|
|
|
|
add_executable(bastionguard-firewall ${FIREWALL_HELPER_SOURCES})
|
|
|
|
# Nessuna dipendenza GTK / Backend
|
|
target_link_libraries(bastionguard-firewall PRIVATE pthread)
|
|
|
|
install(TARGETS bastionguard-firewall
|
|
RUNTIME DESTINATION /usr/bin
|
|
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
|
GROUP_READ GROUP_EXECUTE
|
|
WORLD_READ WORLD_EXECUTE
|
|
)
|
|
|
|
bg_install_code( "
|
|
message(STATUS \"[firewall-helper] Imposto owner root e setuid su bastionguard-firewall\")
|
|
|
|
execute_process(
|
|
COMMAND chown root:root /usr/bin/bastionguard-firewall
|
|
RESULT_VARIABLE CHOWN_RES
|
|
)
|
|
|
|
if(NOT CHOWN_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[firewall-helper] chown root fallito\")
|
|
endif()
|
|
|
|
execute_process(
|
|
COMMAND chmod 4755 /usr/bin/bastionguard-firewall
|
|
RESULT_VARIABLE CHMOD_RES
|
|
)
|
|
|
|
if(NOT CHMOD_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[firewall-helper] chmod 4755 fallito\")
|
|
endif()
|
|
|
|
message(STATUS \"[firewall-helper] ✔ bastionguard-firewall installato come setuid root\")
|
|
")
|
|
|
|
|
|
# ======================
|
|
# Demone Privacy (Webcam + Microfono)
|
|
# ======================
|
|
set(PRIVACYD_SOURCES
|
|
src/BastionGuard-privacyd.cpp
|
|
)
|
|
|
|
add_executable(BastionGuard-privacyd ${PRIVACYD_SOURCES})
|
|
target_include_directories(BastionGuard-privacyd PRIVATE src)
|
|
target_link_libraries(BastionGuard-privacyd
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
)
|
|
bg_set_rpath(BastionGuard-privacyd)
|
|
target_compile_definitions(BastionGuard-privacyd PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
# === Installa l’eseguibile ===
|
|
install(TARGETS BastionGuard-privacyd RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# ======================
|
|
# Demone USB (BastionGuard-usbd)
|
|
# ======================
|
|
|
|
# Trova libsystemd
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(SYSTEMD REQUIRED libsystemd)
|
|
|
|
set(USBD_SOURCES
|
|
src/usb/BastionGuard-usbd.cpp
|
|
src/usb/LiveScanDialog.cpp
|
|
|
|
)
|
|
|
|
add_executable(BastionGuard-usbd ${USBD_SOURCES})
|
|
|
|
target_include_directories(BastionGuard-usbd PRIVATE
|
|
src
|
|
src/usb
|
|
${SYSTEMD_INCLUDE_DIRS}
|
|
)
|
|
|
|
target_link_libraries(BastionGuard-usbd
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${UDEV_LIBRARIES}
|
|
${SYSTEMD_LIBRARIES} # <── FIX CRITICO
|
|
)
|
|
bg_set_rpath(BastionGuard-usbd)
|
|
target_compile_definitions(BastionGuard-usbd PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
install(TARGETS BastionGuard-usbd RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
|
|
|
# ======================
|
|
# BankOpener (wrapper sandbox sicuro)
|
|
# ======================
|
|
add_executable(BastionGuard-bankopener
|
|
src/xdg-open.cpp
|
|
src/xdg-main.cpp
|
|
src/SecureBrowser.cpp
|
|
src/SettingsStore.cpp
|
|
src/phishing/local_warning_server.cpp
|
|
)
|
|
|
|
target_include_directories(BastionGuard-bankopener PRIVATE src)
|
|
|
|
target_link_libraries(BastionGuard-bankopener
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${SOUP_LIBRARIES}
|
|
nlohmann_json::nlohmann_json
|
|
${CEF_LIB}
|
|
${CEF_WRAPPER}
|
|
pthread
|
|
dl
|
|
)
|
|
# In RPM: niente INSTALL_RPATH assoluto
|
|
if(NOT BG_PACKAGING)
|
|
set_target_properties(BastionGuard-bankopener PROPERTIES
|
|
BUILD_RPATH "${CMAKE_SOURCE_DIR}/thirdparty/cef/Release"
|
|
)
|
|
endif()
|
|
bg_set_rpath(BastionGuard-bankopener)
|
|
|
|
|
|
install(TARGETS BastionGuard-bankopener RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# ======================
|
|
# Bank gui desktop
|
|
# ======================
|
|
|
|
add_executable(BastionGuard-bankgui
|
|
src/bankgui-main.cpp
|
|
src/StyleProvider.cpp
|
|
)
|
|
|
|
target_compile_definitions(BastionGuard-bankgui PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
target_include_directories(BastionGuard-bankgui PRIVATE src)
|
|
target_link_libraries(BastionGuard-bankgui
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
)
|
|
bg_set_rpath(BastionGuard-bankgui)
|
|
install(TARGETS BastionGuard-bankgui RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
|
# ======================
|
|
# Pagamenti sicuri
|
|
# ======================
|
|
find_package(Boost REQUIRED)
|
|
add_executable(bastionguard-pacd
|
|
src/pac/BastionGuard-pac.cpp
|
|
)
|
|
|
|
target_link_libraries(bastionguard-pacd PRIVATE Boost::boost)
|
|
target_compile_features(bastionguard-pacd PRIVATE cxx_std_17)
|
|
|
|
install(TARGETS bastionguard-pacd RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
|
|
|
# ======================
|
|
# BastionGuard CEF Proxy (bastionguard-cef)
|
|
# ======================
|
|
|
|
find_package(Threads REQUIRED)
|
|
find_package(Boost REQUIRED)
|
|
|
|
# Boost headers target portability (1.89+)
|
|
if(TARGET Boost::headers)
|
|
set(BG_BOOST_HEADERS Boost::headers)
|
|
elseif(TARGET Boost::boost)
|
|
set(BG_BOOST_HEADERS Boost::boost)
|
|
else()
|
|
message(FATAL_ERROR "Boost headers target not found (Boost::headers/Boost::boost).")
|
|
endif()
|
|
|
|
# libsoup + glib/gobject/gio for local_warning_server.cpp symbols
|
|
pkg_check_modules(GLIB REQUIRED glib-2.0 gobject-2.0 gio-2.0)
|
|
|
|
add_executable(bastionguard-cef
|
|
src/cef/bastionguard_cef.cpp
|
|
src/SecureBrowser.cpp
|
|
src/SettingsStore.cpp
|
|
src/phishing/local_warning_server.cpp
|
|
)
|
|
|
|
target_include_directories(bastionguard-cef
|
|
PRIVATE
|
|
src
|
|
${CEF_ROOT}
|
|
${CEF_ROOT}/include
|
|
${GLIB_INCLUDE_DIRS}
|
|
${SOUP_INCLUDE_DIRS}
|
|
${GTKMM_INCLUDE_DIRS}
|
|
${GIOMM_INCLUDE_DIRS}
|
|
${SIGC_INCLUDE_DIRS}
|
|
)
|
|
|
|
target_compile_options(bastionguard-cef
|
|
PRIVATE
|
|
${GLIB_CFLAGS_OTHER}
|
|
${SOUP_CFLAGS_OTHER}
|
|
)
|
|
|
|
# Asio without boost_system (Boost 1.89+)
|
|
target_compile_definitions(bastionguard-cef PRIVATE
|
|
BOOST_ASIO_DISABLE_BOOST_SYSTEM
|
|
BOOST_ASIO_USE_STD_SYSTEM_ERROR
|
|
)
|
|
|
|
target_link_libraries(bastionguard-cef
|
|
PRIVATE
|
|
${BG_BOOST_HEADERS}
|
|
Threads::Threads
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${SOUP_LIBRARIES}
|
|
${GLIB_LIBRARIES}
|
|
${CEF_LIB}
|
|
${CEF_WRAPPER}
|
|
|
|
dl
|
|
pthread
|
|
)
|
|
|
|
bg_set_rpath(bastionguard-cef)
|
|
|
|
install(TARGETS bastionguard-cef RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
# ======================
|
|
# BastionGuard Secure Payments
|
|
# - BastionGuard-secure (CLI opener)
|
|
# - BastionGuard-secure-gui (GUI selector)
|
|
# src/payment_secure/*
|
|
# ======================
|
|
|
|
# ---- CLI opener ----
|
|
add_executable(BastionGuard-secure
|
|
src/payment_secure/BastionGuard-secure-cli.cpp
|
|
src/payment_secure/BastionGuard-secure.cpp
|
|
src/payment_secure/dns_secure.cpp
|
|
src/SecureBrowser.cpp
|
|
src/SettingsStore.cpp
|
|
src/phishing/local_warning_server.cpp
|
|
)
|
|
|
|
target_compile_definitions(BastionGuard-secure PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
target_include_directories(BastionGuard-secure
|
|
PRIVATE
|
|
src
|
|
src/payment_secure
|
|
${CEF_ROOT}
|
|
${CEF_ROOT}/include
|
|
${GLIBMM_INCLUDE_DIRS}
|
|
${GLIB_INCLUDE_DIRS}
|
|
${SOUP_INCLUDE_DIRS}
|
|
${GTKMM_INCLUDE_DIRS}
|
|
${GIOMM_INCLUDE_DIRS}
|
|
${SIGC_INCLUDE_DIRS}
|
|
)
|
|
|
|
target_compile_options(BastionGuard-secure
|
|
PRIVATE
|
|
${GLIBMM_CFLAGS_OTHER}
|
|
${GLIB_CFLAGS_OTHER}
|
|
${SOUP_CFLAGS_OTHER}
|
|
)
|
|
|
|
target_link_libraries(BastionGuard-secure
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
${SOUP_LIBRARIES}
|
|
${GLIBMM_LIBRARIES}
|
|
${GLIB_LIBRARIES}
|
|
|
|
nlohmann_json::nlohmann_json
|
|
|
|
${CEF_LIB}
|
|
${CEF_WRAPPER}
|
|
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
|
|
Threads::Threads
|
|
dl
|
|
pthread
|
|
)
|
|
|
|
bg_set_rpath(BastionGuard-secure)
|
|
|
|
# (solo per dev non-packaging, se ti serve)
|
|
if(NOT BG_PACKAGING)
|
|
set_target_properties(BastionGuard-secure PROPERTIES
|
|
BUILD_RPATH "/usr/share/BastionGuard/lib;/usr/share/BastionGuard/cef"
|
|
)
|
|
endif()
|
|
|
|
|
|
install(TARGETS BastionGuard-secure RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
|
# ---- GUI selector ----
|
|
add_executable(BastionGuard-secure-gui
|
|
src/payment_secure/BastionGuard-secure-main.cpp
|
|
src/payment_secure/dns_secure.cpp
|
|
src/StyleProvider.cpp
|
|
)
|
|
|
|
target_compile_definitions(BastionGuard-secure-gui PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
target_include_directories(BastionGuard-secure-gui
|
|
PRIVATE
|
|
src
|
|
src/payment_secure
|
|
${GTKMM_INCLUDE_DIRS}
|
|
${GIOMM_INCLUDE_DIRS}
|
|
${SIGC_INCLUDE_DIRS}
|
|
)
|
|
|
|
target_link_libraries(BastionGuard-secure-gui
|
|
PRIVATE
|
|
${GTKMM_LIBRARIES}
|
|
${GIOMM_LIBRARIES}
|
|
${SIGC_LIBRARIES}
|
|
)
|
|
|
|
bg_set_rpath(BastionGuard-secure-gui)
|
|
|
|
if(NOT BG_PACKAGING)
|
|
set_target_properties(BastionGuard-secure-gui PROPERTIES
|
|
BUILD_RPATH "/usr/share/BastionGuard/lib"
|
|
)
|
|
endif()
|
|
|
|
|
|
install(TARGETS BastionGuard-secure-gui RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
|
|
|
|
# ======================
|
|
# BastionGuard-mailproxy — proxy SMTP utente
|
|
# Gira come systemctl --user, senza privilegi root
|
|
# ======================
|
|
|
|
add_executable(BastionGuard-mailproxy
|
|
src/mail/BastionGuard-mailproxy.cpp
|
|
)
|
|
|
|
target_include_directories(BastionGuard-mailproxy PRIVATE src)
|
|
|
|
target_link_libraries(BastionGuard-mailproxy
|
|
PRIVATE
|
|
CURL::libcurl
|
|
OpenSSL::SSL
|
|
OpenSSL::Crypto
|
|
nlohmann_json::nlohmann_json
|
|
pthread
|
|
)
|
|
|
|
target_compile_definitions(BastionGuard-mailproxy PRIVATE
|
|
"DATA_DIR=\"${INSTALL_DATA_DIR}\""
|
|
"LOCALEDIR=\"${INSTALL_LOCALE_DIR}\""
|
|
)
|
|
|
|
bg_set_rpath(BastionGuard-mailproxy)
|
|
|
|
install(TARGETS BastionGuard-mailproxy
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
|
GROUP_READ GROUP_EXECUTE
|
|
WORLD_READ WORLD_EXECUTE
|
|
)
|
|
|
|
# Installa il service file systemd --user
|
|
install(FILES
|
|
data/service/BastionGuard-mailproxy.service
|
|
DESTINATION /usr/lib/systemd/user
|
|
)
|
|
|
|
|
|
# ============================================================
|
|
# BastionGuard WebUI
|
|
# ============================================================
|
|
|
|
set(BG_WEBUI_SOURCE_DIR "${CMAKE_SOURCE_DIR}/webui")
|
|
set(BG_WEBUI_BUILD_DIR "${CMAKE_BINARY_DIR}/webui")
|
|
set(BG_WEBUI_STAMP "${BG_WEBUI_BUILD_DIR}/.webui-staged")
|
|
|
|
if(EXISTS "${BG_WEBUI_SOURCE_DIR}/index.php")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${BG_WEBUI_STAMP}"
|
|
COMMAND ${CMAKE_COMMAND} -E rm -rf "${BG_WEBUI_BUILD_DIR}"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${BG_WEBUI_BUILD_DIR}"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${BG_WEBUI_SOURCE_DIR}"
|
|
"${BG_WEBUI_BUILD_DIR}"
|
|
COMMAND ${CMAKE_COMMAND} -E touch "${BG_WEBUI_STAMP}"
|
|
DEPENDS "${BG_WEBUI_SOURCE_DIR}/index.php"
|
|
COMMENT "Staging BastionGuard WebUI into the build directory"
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_target(BastionGuard-webui ALL
|
|
DEPENDS "${BG_WEBUI_STAMP}"
|
|
)
|
|
|
|
install(DIRECTORY "${BG_WEBUI_BUILD_DIR}/"
|
|
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/webui"
|
|
USE_SOURCE_PERMISSIONS
|
|
COMPONENT webui
|
|
PATTERN ".git" EXCLUDE
|
|
PATTERN "*.bak" EXCLUDE
|
|
PATTERN "*.tmp" EXCLUDE
|
|
PATTERN ".webui-staged" EXCLUDE
|
|
)
|
|
|
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/data/vhosts/webui/"
|
|
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/data/vhosts/webui"
|
|
USE_SOURCE_PERMISSIONS
|
|
COMPONENT webui
|
|
OPTIONAL
|
|
)
|
|
|
|
install(CODE "
|
|
message(STATUS \"[WebUI] Installed in: ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/webui\")
|
|
file(MAKE_DIRECTORY \$ENV{DESTDIR}/var/lib/bastionguard-webui)
|
|
file(MAKE_DIRECTORY \$ENV{DESTDIR}/var/lib/bastionguard-webui/cache)
|
|
file(MAKE_DIRECTORY \$ENV{DESTDIR}/var/lib/bastionguard-webui/quarantine)
|
|
file(MAKE_DIRECTORY \$ENV{DESTDIR}/var/lib/bastionguard-webui/sessions)
|
|
file(MAKE_DIRECTORY \$ENV{DESTDIR}/var/lib/bastionguard-webui/tmp)
|
|
file(MAKE_DIRECTORY \$ENV{DESTDIR}/var/log/bastionguard-webui)
|
|
")
|
|
|
|
else()
|
|
message(WARNING "BastionGuard WebUI source not found at ${BG_WEBUI_SOURCE_DIR}; WebUI will not be installed.")
|
|
endif()
|
|
|
|
# ======================
|
|
# BastionGuard Backup (fork di Timeshift, build via Meson)
|
|
# ======================
|
|
option(ENABLE_BASTIONGUARD_BACKUP "Build bastionguard-backup (Timeshift fork)" ON)
|
|
|
|
if(ENABLE_BASTIONGUARD_BACKUP)
|
|
include(ExternalProject)
|
|
|
|
find_program(MESON_EXECUTABLE meson REQUIRED)
|
|
find_program(NINJA_EXECUTABLE ninja REQUIRED)
|
|
find_program(VALAC_EXECUTABLE valac REQUIRED)
|
|
find_program(PKG_CONFIG_EXECUTABLE pkg-config REQUIRED)
|
|
|
|
# Dipendenze runtime/build del fork
|
|
pkg_check_modules(BG_BACKUP_GTK3 REQUIRED gtk+-3.0)
|
|
pkg_check_modules(BG_BACKUP_GIO REQUIRED gio-2.0 gio-unix-2.0)
|
|
pkg_check_modules(BG_BACKUP_JSON REQUIRED json-glib-1.0)
|
|
pkg_check_modules(BG_BACKUP_VTE REQUIRED vte-2.91)
|
|
pkg_check_modules(BG_BACKUP_GEE REQUIRED gee-0.8)
|
|
|
|
set(BG_BACKUP_SOURCE_DIR "${CMAKE_SOURCE_DIR}/thirdparty/bastionguard-backup")
|
|
set(BG_BACKUP_BINARY_DIR "${CMAKE_BINARY_DIR}/bastionguard-backup-build")
|
|
set(BG_BACKUP_INSTALL_DIR "${CMAKE_BINARY_DIR}/bastionguard-backup-install")
|
|
|
|
message(STATUS "[BG-Backup] Source dir : ${BG_BACKUP_SOURCE_DIR}")
|
|
message(STATUS "[BG-Backup] Build dir : ${BG_BACKUP_BINARY_DIR}")
|
|
message(STATUS "[BG-Backup] Stage dir : ${BG_BACKUP_INSTALL_DIR}")
|
|
message(STATUS "[BG-Backup] Final prefix: ${CMAKE_INSTALL_PREFIX}")
|
|
|
|
ExternalProject_Add(bastionguard_backup_ext
|
|
SOURCE_DIR "${BG_BACKUP_SOURCE_DIR}"
|
|
BINARY_DIR "${BG_BACKUP_BINARY_DIR}"
|
|
|
|
CONFIGURE_COMMAND
|
|
${MESON_EXECUTABLE} setup "${BG_BACKUP_BINARY_DIR}" "${BG_BACKUP_SOURCE_DIR}"
|
|
--prefix=/usr
|
|
--buildtype=release
|
|
--reconfigure
|
|
|
|
BUILD_COMMAND
|
|
${MESON_EXECUTABLE} compile -C "${BG_BACKUP_BINARY_DIR}"
|
|
|
|
INSTALL_COMMAND
|
|
${MESON_EXECUTABLE} install -C "${BG_BACKUP_BINARY_DIR}" --destdir "${BG_BACKUP_INSTALL_DIR}"
|
|
|
|
BUILD_ALWAYS 1
|
|
|
|
USES_TERMINAL_CONFIGURE 1
|
|
USES_TERMINAL_BUILD 1
|
|
USES_TERMINAL_INSTALL 1
|
|
|
|
LOG_CONFIGURE OFF
|
|
LOG_BUILD OFF
|
|
LOG_INSTALL OFF
|
|
)
|
|
|
|
add_custom_target(BastionGuard-backup ALL
|
|
DEPENDS bastionguard_backup_ext
|
|
)
|
|
|
|
install(CODE "
|
|
set(BG_BACKUP_DESTDIR \"\$ENV{DESTDIR}\")
|
|
message(STATUS \"[BG-Backup] =====================================\")
|
|
message(STATUS \"[BG-Backup] Installazione bastionguard-backup\")
|
|
message(STATUS \"[BG-Backup] Stage dir Meson : ${BG_BACKUP_INSTALL_DIR}\")
|
|
message(STATUS \"[BG-Backup] Prefix finale : ${CMAKE_INSTALL_PREFIX}\")
|
|
message(STATUS \"[BG-Backup] DESTDIR : \${BG_BACKUP_DESTDIR}\")
|
|
message(STATUS \"[BG-Backup]\")
|
|
set(BG_BACKUP_STAGE_BIN \"${BG_BACKUP_INSTALL_DIR}/usr/bin\")
|
|
set(BG_BACKUP_STAGE_SHARE \"${BG_BACKUP_INSTALL_DIR}/usr/share\")
|
|
set(BG_BACKUP_STAGE_ETC \"${BG_BACKUP_INSTALL_DIR}/etc\")
|
|
set(BG_BACKUP_DEST_BIN \"\${BG_BACKUP_DESTDIR}${CMAKE_INSTALL_PREFIX}/bin\")
|
|
set(BG_BACKUP_DEST_SHARE \"\${BG_BACKUP_DESTDIR}${CMAKE_INSTALL_PREFIX}/share\")
|
|
set(BG_BACKUP_DEST_ETC \"\${BG_BACKUP_DESTDIR}/etc\")
|
|
message(STATUS \"[BG-Backup] Copia binari : \${BG_BACKUP_STAGE_BIN} -> \${BG_BACKUP_DEST_BIN}\")
|
|
if(EXISTS \"\${BG_BACKUP_STAGE_BIN}\")
|
|
file(MAKE_DIRECTORY \"\${BG_BACKUP_DEST_BIN}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_BACKUP_STAGE_BIN}\"
|
|
\"\${BG_BACKUP_DEST_BIN}\"
|
|
RESULT_VARIABLE BG_BACKUP_BIN_RES
|
|
)
|
|
if(NOT BG_BACKUP_BIN_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-Backup] Errore copiando i binari in \${BG_BACKUP_DEST_BIN}\")
|
|
endif()
|
|
else()
|
|
message(WARNING \"[BG-Backup] Directory bin non trovata: \${BG_BACKUP_STAGE_BIN}\")
|
|
endif()
|
|
message(STATUS \"[BG-Backup] Copia share : \${BG_BACKUP_STAGE_SHARE} -> \${BG_BACKUP_DEST_SHARE}\")
|
|
if(EXISTS \"\${BG_BACKUP_STAGE_SHARE}\")
|
|
file(MAKE_DIRECTORY \"\${BG_BACKUP_DEST_SHARE}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_BACKUP_STAGE_SHARE}\"
|
|
\"\${BG_BACKUP_DEST_SHARE}\"
|
|
RESULT_VARIABLE BG_BACKUP_SHARE_RES
|
|
)
|
|
if(NOT BG_BACKUP_SHARE_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-Backup] Errore copiando share in \${BG_BACKUP_DEST_SHARE}\")
|
|
endif()
|
|
else()
|
|
message(WARNING \"[BG-Backup] Directory share non trovata: \${BG_BACKUP_STAGE_SHARE}\")
|
|
endif()
|
|
message(STATUS \"[BG-Backup] Copia etc : \${BG_BACKUP_STAGE_ETC} -> \${BG_BACKUP_DEST_ETC}\")
|
|
if(EXISTS \"\${BG_BACKUP_STAGE_ETC}\")
|
|
file(MAKE_DIRECTORY \"\${BG_BACKUP_DEST_ETC}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_BACKUP_STAGE_ETC}\"
|
|
\"\${BG_BACKUP_DEST_ETC}\"
|
|
RESULT_VARIABLE BG_BACKUP_ETC_RES
|
|
)
|
|
if(NOT BG_BACKUP_ETC_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-Backup] Errore copiando etc in \${BG_BACKUP_DEST_ETC}\")
|
|
endif()
|
|
else()
|
|
message(STATUS \"[BG-Backup] Nessuna directory etc da installare\")
|
|
endif()
|
|
message(STATUS \"[BG-Backup] ✔ installazione completata\")
|
|
message(STATUS \"[BG-Backup] =====================================\")
|
|
")
|
|
endif()
|
|
|
|
|
|
# ======================
|
|
# BastionGuard Secure Connection (Meson + Go)
|
|
# ======================
|
|
option(ENABLE_BASTIONGUARD_SECURE_CONNECTION "Build bastionguard-secure-connection" ON)
|
|
|
|
if(ENABLE_BASTIONGUARD_SECURE_CONNECTION)
|
|
include(ExternalProject)
|
|
|
|
find_program(MESON_EXECUTABLE meson REQUIRED)
|
|
find_program(NINJA_EXECUTABLE ninja REQUIRED)
|
|
find_program(GO_EXECUTABLE go REQUIRED)
|
|
find_program(PROTOC_EXECUTABLE protoc REQUIRED)
|
|
find_program(GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin REQUIRED)
|
|
find_program(PKG_CONFIG_EXECUTABLE pkg-config REQUIRED)
|
|
|
|
set(BG_SC_SOURCE_DIR "${CMAKE_SOURCE_DIR}/thirdparty/bastionguard-secure-connection")
|
|
set(BG_SC_BINARY_DIR "${CMAKE_BINARY_DIR}/bastionguard-secure-connection-build")
|
|
set(BG_SC_INSTALL_DIR "${CMAKE_BINARY_DIR}/bastionguard-secure-connection-install")
|
|
|
|
message(STATUS "[BG-SC] Source dir : ${BG_SC_SOURCE_DIR}")
|
|
message(STATUS "[BG-SC] Build dir : ${BG_SC_BINARY_DIR}")
|
|
message(STATUS "[BG-SC] Stage dir : ${BG_SC_INSTALL_DIR}")
|
|
message(STATUS "[BG-SC] Final prefix: ${CMAKE_INSTALL_PREFIX}")
|
|
|
|
ExternalProject_Add(bastionguard_secure_connection_ext
|
|
SOURCE_DIR "${BG_SC_SOURCE_DIR}"
|
|
BINARY_DIR "${BG_SC_BINARY_DIR}"
|
|
|
|
CONFIGURE_COMMAND
|
|
${MESON_EXECUTABLE} setup "${BG_SC_BINARY_DIR}" "${BG_SC_SOURCE_DIR}"
|
|
--prefix=/usr
|
|
--sysconfdir=/etc
|
|
--localedir=share/locale
|
|
--buildtype=release
|
|
--reconfigure
|
|
|
|
BUILD_COMMAND
|
|
${MESON_EXECUTABLE} compile -C "${BG_SC_BINARY_DIR}"
|
|
|
|
INSTALL_COMMAND
|
|
${MESON_EXECUTABLE} install -C "${BG_SC_BINARY_DIR}" --destdir "${BG_SC_INSTALL_DIR}"
|
|
|
|
BUILD_ALWAYS 1
|
|
|
|
USES_TERMINAL_CONFIGURE 1
|
|
USES_TERMINAL_BUILD 1
|
|
USES_TERMINAL_INSTALL 1
|
|
|
|
LOG_CONFIGURE OFF
|
|
LOG_BUILD OFF
|
|
LOG_INSTALL OFF
|
|
)
|
|
|
|
add_custom_target(BastionGuard-secure-connection ALL
|
|
DEPENDS bastionguard_secure_connection_ext
|
|
)
|
|
|
|
install(CODE "
|
|
set(BG_SC_DESTDIR \"\$ENV{DESTDIR}\")
|
|
message(STATUS \"[BG-SC] =====================================\")
|
|
message(STATUS \"[BG-SC] Installazione bastionguard-secure-connection\")
|
|
message(STATUS \"[BG-SC] Stage dir Meson : ${BG_SC_INSTALL_DIR}\")
|
|
message(STATUS \"[BG-SC] Prefix finale : ${CMAKE_INSTALL_PREFIX}\")
|
|
message(STATUS \"[BG-SC] DESTDIR : \${BG_SC_DESTDIR}\")
|
|
|
|
set(BG_SC_STAGE_BIN \"${BG_SC_INSTALL_DIR}/usr/bin\")
|
|
set(BG_SC_STAGE_SHARE \"${BG_SC_INSTALL_DIR}/usr/share\")
|
|
set(BG_SC_STAGE_ETC \"${BG_SC_INSTALL_DIR}/etc\")
|
|
set(BG_SC_STAGE_LIB \"${BG_SC_INSTALL_DIR}/usr/lib\")
|
|
|
|
set(BG_SC_DEST_BIN \"\${BG_SC_DESTDIR}${CMAKE_INSTALL_PREFIX}/bin\")
|
|
set(BG_SC_DEST_SHARE \"\${BG_SC_DESTDIR}${CMAKE_INSTALL_PREFIX}/share\")
|
|
set(BG_SC_DEST_ETC \"\${BG_SC_DESTDIR}/etc\")
|
|
set(BG_SC_DEST_LIB \"\${BG_SC_DESTDIR}${CMAKE_INSTALL_PREFIX}/lib\")
|
|
|
|
if(EXISTS \"\${BG_SC_STAGE_BIN}\")
|
|
file(MAKE_DIRECTORY \"\${BG_SC_DEST_BIN}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_SC_STAGE_BIN}\"
|
|
\"\${BG_SC_DEST_BIN}\"
|
|
RESULT_VARIABLE BG_SC_BIN_RES
|
|
)
|
|
if(NOT BG_SC_BIN_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-SC] Errore copiando i binari\")
|
|
endif()
|
|
endif()
|
|
|
|
if(EXISTS \"\${BG_SC_STAGE_SHARE}\")
|
|
file(MAKE_DIRECTORY \"\${BG_SC_DEST_SHARE}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_SC_STAGE_SHARE}\"
|
|
\"\${BG_SC_DEST_SHARE}\"
|
|
RESULT_VARIABLE BG_SC_SHARE_RES
|
|
)
|
|
if(NOT BG_SC_SHARE_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-SC] Errore copiando share\")
|
|
endif()
|
|
endif()
|
|
|
|
if(EXISTS \"\${BG_SC_STAGE_ETC}\")
|
|
file(MAKE_DIRECTORY \"\${BG_SC_DEST_ETC}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_SC_STAGE_ETC}\"
|
|
\"\${BG_SC_DEST_ETC}\"
|
|
RESULT_VARIABLE BG_SC_ETC_RES
|
|
)
|
|
if(NOT BG_SC_ETC_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-SC] Errore copiando etc\")
|
|
endif()
|
|
endif()
|
|
|
|
# ── Copia esplicita config daemon in /etc/bastionguard-secure-connectiond ──
|
|
# Meson installa i JSON con sysconfdir=/etc (assoluto), quindi nella stage
|
|
# finiscono sempre in <INSTALL_DIR>/etc/bastionguard-secure-connectiond/.
|
|
# Con DESTDIR finiscono dentro il pkgdir, senza DESTDIR in /etc di sistema.
|
|
set(BG_SC_CONF_SRC \"${BG_SC_INSTALL_DIR}/etc/bastionguard-secure-connectiond\")
|
|
set(BG_SC_CONF_DST \"\${BG_SC_DESTDIR}/etc/bastionguard-secure-connectiond\")
|
|
|
|
if(EXISTS \"\${BG_SC_CONF_SRC}\")
|
|
file(MAKE_DIRECTORY \"\${BG_SC_CONF_DST}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_SC_CONF_SRC}\"
|
|
\"\${BG_SC_CONF_DST}\"
|
|
RESULT_VARIABLE BG_SC_CONF_RES
|
|
)
|
|
if(NOT BG_SC_CONF_RES EQUAL 0)
|
|
message(WARNING \"[BG-SC] Impossibile copiare la config (permessi?): \${BG_SC_CONF_DST}\")
|
|
else()
|
|
message(STATUS \"[BG-SC] ✔ Config daemon installata: \${BG_SC_CONF_DST}\")
|
|
endif()
|
|
else()
|
|
message(WARNING \"[BG-SC] Directory config non trovata nella stage: \${BG_SC_CONF_SRC}\")
|
|
endif()
|
|
|
|
# ── Copia esplicita autostart in /etc/xdg/autostart ──────────────────
|
|
set(BG_SC_AUTOSTART_SRC
|
|
\"${BG_SC_INSTALL_DIR}/etc/xdg/autostart/bastionguard-sc-autostart.desktop\")
|
|
set(BG_SC_AUTOSTART_DST \"\${BG_SC_DESTDIR}/etc/xdg/autostart/bastionguard-sc-autostart.desktop\")
|
|
|
|
if(EXISTS \"\${BG_SC_AUTOSTART_SRC}\")
|
|
file(MAKE_DIRECTORY \"\${BG_SC_DESTDIR}/etc/xdg/autostart\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy
|
|
\"\${BG_SC_AUTOSTART_SRC}\"
|
|
\"\${BG_SC_AUTOSTART_DST}\"
|
|
RESULT_VARIABLE BG_SC_AUTOSTART_RES
|
|
)
|
|
if(NOT BG_SC_AUTOSTART_RES EQUAL 0)
|
|
message(WARNING \"[BG-SC] Impossibile copiare l'autostart (permessi?): \${BG_SC_AUTOSTART_DST}\")
|
|
else()
|
|
message(STATUS \"[BG-SC] ✔ Autostart installato: \${BG_SC_AUTOSTART_DST}\")
|
|
endif()
|
|
else()
|
|
message(WARNING \"[BG-SC] File autostart non trovato nella stage: \${BG_SC_AUTOSTART_SRC}\")
|
|
endif()
|
|
|
|
if(EXISTS \"\${BG_SC_STAGE_LIB}\")
|
|
file(MAKE_DIRECTORY \"\${BG_SC_DEST_LIB}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_SC_STAGE_LIB}\"
|
|
\"\${BG_SC_DEST_LIB}\"
|
|
RESULT_VARIABLE BG_SC_LIB_RES
|
|
)
|
|
if(NOT BG_SC_LIB_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-SC] Errore copiando lib\")
|
|
endif()
|
|
endif()
|
|
|
|
message(STATUS \"[BG-SC] ✔ installazione completata\")
|
|
message(STATUS \"[BG-SC] =====================================\")
|
|
")
|
|
endif()
|
|
|
|
# ======================
|
|
# BastionGuard Recovery Data (CMake)
|
|
# ======================
|
|
option(ENABLE_BASTIONGUARD_RECOVERY_DATA "Build bastionguard-recovery-data" ON)
|
|
|
|
if(ENABLE_BASTIONGUARD_RECOVERY_DATA)
|
|
include(ExternalProject)
|
|
|
|
set(BG_RD_SOURCE_DIR "${CMAKE_SOURCE_DIR}/thirdparty/bastionguard-recovery-data")
|
|
set(BG_RD_BINARY_DIR "${CMAKE_BINARY_DIR}/bastionguard-recovery-data-build")
|
|
set(BG_RD_INSTALL_DIR "${CMAKE_BINARY_DIR}/bastionguard-recovery-data-install")
|
|
|
|
message(STATUS "[BG-RD] Source dir : ${BG_RD_SOURCE_DIR}")
|
|
message(STATUS "[BG-RD] Build dir : ${BG_RD_BINARY_DIR}")
|
|
message(STATUS "[BG-RD] Stage dir : ${BG_RD_INSTALL_DIR}")
|
|
message(STATUS "[BG-RD] Final prefix: ${CMAKE_INSTALL_PREFIX}")
|
|
|
|
ExternalProject_Add(bastionguard_recovery_data_ext
|
|
SOURCE_DIR "${BG_RD_SOURCE_DIR}"
|
|
BINARY_DIR "${BG_RD_BINARY_DIR}"
|
|
|
|
CONFIGURE_COMMAND
|
|
"${CMAKE_COMMAND}" -S "${BG_RD_SOURCE_DIR}" -B "${BG_RD_BINARY_DIR}"
|
|
-DCMAKE_INSTALL_PREFIX=/usr
|
|
-DCMAKE_BUILD_TYPE=Release
|
|
|
|
BUILD_COMMAND
|
|
"${CMAKE_COMMAND}" --build "${BG_RD_BINARY_DIR}" --parallel
|
|
|
|
INSTALL_COMMAND
|
|
"${CMAKE_COMMAND}" -E env DESTDIR=${BG_RD_INSTALL_DIR}
|
|
"${CMAKE_COMMAND}" --install "${BG_RD_BINARY_DIR}"
|
|
|
|
BUILD_ALWAYS 1
|
|
|
|
USES_TERMINAL_CONFIGURE 1
|
|
USES_TERMINAL_BUILD 1
|
|
USES_TERMINAL_INSTALL 1
|
|
|
|
LOG_CONFIGURE OFF
|
|
LOG_BUILD OFF
|
|
LOG_INSTALL OFF
|
|
)
|
|
|
|
add_custom_target(BastionGuard-recovery-data ALL
|
|
DEPENDS bastionguard_recovery_data_ext
|
|
)
|
|
|
|
install(CODE "
|
|
set(BG_RD_DESTDIR \"\$ENV{DESTDIR}\")
|
|
message(STATUS \"[BG-RD] =====================================\")
|
|
message(STATUS \"[BG-RD] Installazione bastionguard-recovery-data\")
|
|
message(STATUS \"[BG-RD] Stage dir CMake : ${BG_RD_INSTALL_DIR}\")
|
|
message(STATUS \"[BG-RD] Prefix finale : ${CMAKE_INSTALL_PREFIX}\")
|
|
message(STATUS \"[BG-RD] DESTDIR : \${BG_RD_DESTDIR}\")
|
|
|
|
set(BG_RD_STAGE_BIN \"${BG_RD_INSTALL_DIR}/usr/bin\")
|
|
set(BG_RD_STAGE_SHARE \"${BG_RD_INSTALL_DIR}/usr/share\")
|
|
set(BG_RD_STAGE_ETC \"${BG_RD_INSTALL_DIR}/etc\")
|
|
set(BG_RD_STAGE_LIB \"${BG_RD_INSTALL_DIR}/usr/lib\")
|
|
|
|
set(BG_RD_DEST_BIN \"\${BG_RD_DESTDIR}${CMAKE_INSTALL_PREFIX}/bin\")
|
|
set(BG_RD_DEST_SHARE \"\${BG_RD_DESTDIR}${CMAKE_INSTALL_PREFIX}/share\")
|
|
set(BG_RD_DEST_ETC \"\${BG_RD_DESTDIR}/etc\")
|
|
set(BG_RD_DEST_LIB \"\${BG_RD_DESTDIR}${CMAKE_INSTALL_PREFIX}/lib\")
|
|
|
|
if(EXISTS \"\${BG_RD_STAGE_BIN}\")
|
|
file(MAKE_DIRECTORY \"\${BG_RD_DEST_BIN}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_RD_STAGE_BIN}\"
|
|
\"\${BG_RD_DEST_BIN}\"
|
|
RESULT_VARIABLE BG_RD_BIN_RES
|
|
)
|
|
if(NOT BG_RD_BIN_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-RD] Errore copiando i binari\")
|
|
endif()
|
|
else()
|
|
message(WARNING \"[BG-RD] Directory bin non trovata: \${BG_RD_STAGE_BIN}\")
|
|
endif()
|
|
|
|
if(EXISTS \"\${BG_RD_STAGE_SHARE}\")
|
|
file(MAKE_DIRECTORY \"\${BG_RD_DEST_SHARE}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_RD_STAGE_SHARE}\"
|
|
\"\${BG_RD_DEST_SHARE}\"
|
|
RESULT_VARIABLE BG_RD_SHARE_RES
|
|
)
|
|
if(NOT BG_RD_SHARE_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-RD] Errore copiando share\")
|
|
endif()
|
|
else()
|
|
message(WARNING \"[BG-RD] Directory share non trovata: \${BG_RD_STAGE_SHARE}\")
|
|
endif()
|
|
|
|
if(EXISTS \"\${BG_RD_STAGE_ETC}\")
|
|
file(MAKE_DIRECTORY \"\${BG_RD_DEST_ETC}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_RD_STAGE_ETC}\"
|
|
\"\${BG_RD_DEST_ETC}\"
|
|
RESULT_VARIABLE BG_RD_ETC_RES
|
|
)
|
|
if(NOT BG_RD_ETC_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-RD] Errore copiando etc\")
|
|
endif()
|
|
else()
|
|
message(STATUS \"[BG-RD] Nessuna directory etc da installare\")
|
|
endif()
|
|
|
|
if(EXISTS \"\${BG_RD_STAGE_LIB}\")
|
|
file(MAKE_DIRECTORY \"\${BG_RD_DEST_LIB}\")
|
|
execute_process(
|
|
COMMAND \"${CMAKE_COMMAND}\" -E copy_directory
|
|
\"\${BG_RD_STAGE_LIB}\"
|
|
\"\${BG_RD_DEST_LIB}\"
|
|
RESULT_VARIABLE BG_RD_LIB_RES
|
|
)
|
|
if(NOT BG_RD_LIB_RES EQUAL 0)
|
|
message(FATAL_ERROR \"[BG-RD] Errore copiando lib\")
|
|
endif()
|
|
endif()
|
|
|
|
message(STATUS \"[BG-RD] ✔ installazione completata\")
|
|
message(STATUS \"[BG-RD] =====================================\")
|
|
")
|
|
endif()
|
|
|
|
|
|
# ======================
|
|
# Traduzioni con gettext
|
|
# ======================
|
|
set(PO_DIR ${CMAKE_SOURCE_DIR}/locale)
|
|
set(POT_FILE ${PO_DIR}/BastionGuard.pot)
|
|
|
|
file(GLOB PO_FILES RELATIVE ${PO_DIR} ${PO_DIR}/*.po)
|
|
|
|
add_custom_target(update-po
|
|
COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE} --keyword=_ --language=C++ --from-code=UTF-8
|
|
-o ${POT_FILE} ${CMAKE_SOURCE_DIR}/src/*.cpp ${CMAKE_SOURCE_DIR}/src/*.hpp
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
COMMENT "Rigenerazione BastionGuard.pot"
|
|
)
|
|
|
|
if(NOT DEFINED GETTEXT_MSGUNIQ_EXECUTABLE)
|
|
find_program(GETTEXT_MSGUNIQ_EXECUTABLE msguniq)
|
|
endif()
|
|
|
|
if(NOT GETTEXT_MSGUNIQ_EXECUTABLE)
|
|
message(WARNING "msguniq non trovato. I duplicati nelle .po non verranno filtrati automaticamente.")
|
|
endif()
|
|
|
|
set(MO_TARGETS "")
|
|
|
|
foreach(PO_REL ${PO_FILES})
|
|
set(PO_FILE ${PO_DIR}/${PO_REL})
|
|
get_filename_component(LANG ${PO_FILE} NAME_WE)
|
|
|
|
set(BUILD_LOCALE_DIR ${CMAKE_CURRENT_BINARY_DIR}/locale/${LANG}/LC_MESSAGES)
|
|
set(SANITIZED_PO ${CMAKE_CURRENT_BINARY_DIR}/locale/${LANG}/BastionGuard_${LANG}.po)
|
|
set(MO_FILE ${BUILD_LOCALE_DIR}/BastionGuard.mo)
|
|
|
|
if(GETTEXT_MSGUNIQ_EXECUTABLE)
|
|
add_custom_command(
|
|
OUTPUT ${MO_FILE}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${BUILD_LOCALE_DIR}
|
|
COMMAND ${GETTEXT_MSGUNIQ_EXECUTABLE} ${PO_FILE} -o ${SANITIZED_PO}
|
|
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${MO_FILE} ${SANITIZED_PO}
|
|
DEPENDS ${PO_FILE}
|
|
COMMENT "Sanitizzo ${PO_FILE} (msguniq) e compilo ${MO_FILE}"
|
|
)
|
|
else()
|
|
add_custom_command(
|
|
OUTPUT ${MO_FILE}
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${BUILD_LOCALE_DIR}
|
|
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${MO_FILE} ${PO_FILE}
|
|
DEPENDS ${PO_FILE}
|
|
COMMENT "Compilo ${PO_FILE} → ${MO_FILE}"
|
|
)
|
|
endif()
|
|
|
|
add_custom_target(${LANG}.mo ALL DEPENDS ${MO_FILE})
|
|
list(APPEND MO_TARGETS ${LANG}.mo)
|
|
|
|
install(FILES ${MO_FILE}
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/locale/${LANG}/LC_MESSAGES
|
|
)
|
|
endforeach()
|
|
|
|
add_custom_target(translations DEPENDS ${MO_TARGETS})
|
|
|
|
# ======================
|
|
# Installazioni generali
|
|
# ======================
|
|
install(FILES desktop/BastionGuard.desktop
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
|
|
|
|
install(FILES desktop/BastionGuard-bankgui.desktop
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
|
|
|
|
install(FILES desktop/BastionGuard-secure.desktop
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
|
|
|
|
install(FILES desktop/bastionguard-bankopener.desktop
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
|
|
|
|
install(FILES desktop/BastionGuard-autostart.desktop
|
|
DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/xdg/autostart)
|
|
|
|
|
|
if (EXISTS "${CMAKE_SOURCE_DIR}/data/rules")
|
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/data/rules/"
|
|
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/rules")
|
|
else()
|
|
message(WARNING "data/rules not found; skipping install")
|
|
endif()
|
|
|
|
if (EXISTS "${CMAKE_SOURCE_DIR}/data/vhosts")
|
|
install(DIRECTORY "${CMAKE_SOURCE_DIR}/data/vhosts/"
|
|
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/data/vhosts")
|
|
else()
|
|
message(WARNING "data/vhosts not found; skipping install")
|
|
endif()
|
|
|
|
|
|
# ==============================
|
|
# Installazione automatica dei file NGINX (universale)
|
|
# ==============================
|
|
if (INSTALL_NGINX_DEFAULTS)
|
|
message(STATUS "🧩 Installazione automatica dei file di configurazione NGINX abilitata")
|
|
|
|
bg_install_code( "
|
|
message(STATUS \"📦 Creazione directory standard NGINX...\")
|
|
file(MAKE_DIRECTORY /etc/nginx/conf.d)
|
|
file(MAKE_DIRECTORY /etc/nginx/sites-available)
|
|
file(MAKE_DIRECTORY /etc/nginx/sites-enabled)
|
|
|
|
# ============================================================
|
|
# 1️⃣ Copia BastionGuard Virtual Host (nginx.conf → BastionGuard.conf)
|
|
# ============================================================
|
|
if(EXISTS \"/usr/share/BastionGuard/data/vhosts/nginx.conf\")
|
|
message(STATUS \"[NGINX] Installo BastionGuard.conf in /etc/nginx/sites-available/\")
|
|
execute_process(COMMAND cp -f /usr/share/BastionGuard/data/vhosts/nginx.conf /etc/nginx/sites-available/BastionGuard.conf)
|
|
|
|
if(NOT EXISTS /etc/nginx/sites-enabled/BastionGuard.conf)
|
|
execute_process(COMMAND ln -s ../sites-available/BastionGuard.conf /etc/nginx/sites-enabled/BastionGuard.conf)
|
|
message(STATUS \"[NGINX] Abilitato site BastionGuard in sites-enabled/\")
|
|
else()
|
|
message(STATUS \"[NGINX] sites-enabled/BastionGuard.conf già presente\")
|
|
endif()
|
|
else()
|
|
message(WARNING \"[NGINX] nginx.conf non trovato in /usr/share/BastionGuard/data/vhosts/\")
|
|
endif()
|
|
|
|
# ============================================================
|
|
# 2️⃣ Installa il default site per Arch / altre distro
|
|
# ============================================================
|
|
if(EXISTS /etc/os-release)
|
|
file(READ /etc/os-release OSINFO)
|
|
string(FIND \"\${OSINFO}\" \"arch\" _archpos)
|
|
if(NOT _archpos EQUAL -1)
|
|
message(STATUS \"[NGINX] Rilevata Arch Linux → uso nginx-default-arch.conf come default\")
|
|
if(EXISTS \"/usr/share/BastionGuard/data/vhosts/nginx-default-arch.conf\")
|
|
execute_process(COMMAND cp -f /usr/share/BastionGuard/data/vhosts/nginx-default-arch.conf /etc/nginx/sites-available/default)
|
|
endif()
|
|
else()
|
|
message(STATUS \"[NGINX] Uso configurazione standard nginx-default.conf come default\")
|
|
if(EXISTS \"/usr/share/BastionGuard/data/vhosts/nginx-default.conf\")
|
|
execute_process(COMMAND cp -f /usr/share/BastionGuard/data/vhosts/nginx-default.conf /etc/nginx/sites-available/default)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# Link simbolico per default
|
|
if(NOT EXISTS /etc/nginx/sites-enabled/default)
|
|
execute_process(COMMAND ln -s ../sites-available/default /etc/nginx/sites-enabled/default)
|
|
message(STATUS \"[NGINX] Abilitato default site in sites-enabled/\")
|
|
endif()
|
|
|
|
# ============================================================
|
|
# 3️⃣ Pagina di test HTTP
|
|
# ============================================================
|
|
if(NOT EXISTS /srv/http/index.html)
|
|
file(MAKE_DIRECTORY /srv/http)
|
|
file(WRITE /srv/http/index.html \"<html><body><h2>✅ Nginx configurato correttamente per BastionGuard</h2></body></html>\")
|
|
message(STATUS \"[NGINX] Creata pagina di test /srv/http/index.html\")
|
|
endif()
|
|
|
|
# ============================================================
|
|
# 4️⃣ Test configurazione e riavvio
|
|
# ============================================================
|
|
message(STATUS \"[NGINX] Testo configurazione...\")
|
|
execute_process(COMMAND nginx -t RESULT_VARIABLE nginx_test)
|
|
if(nginx_test EQUAL 0)
|
|
execute_process(COMMAND systemctl restart nginx)
|
|
message(STATUS \"[NGINX] ✅ Configurazione valida, Nginx riavviato.\")
|
|
else()
|
|
message(WARNING \"[NGINX] ⚠ Test configurazione fallito. Controlla con: sudo nginx -t\")
|
|
endif()
|
|
")
|
|
else()
|
|
message(STATUS "Installazione automatica dei file NGINX disabilitata (usa -DINSTALL_NGINX_DEFAULTS=ON per abilitarla)")
|
|
endif()
|
|
|
|
|
|
install(FILES data/service/org.BastionGuard.RansomwareAlert.service
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/dbus-1/services)
|
|
|
|
install(FILES actions/policy/org.BastionGuard.policy
|
|
FILES actions/policy/org.BastionGuard.ransomware.policy
|
|
FILES actions/policy/org.BastionGuard.USBD.policy
|
|
FILES actions/policy/eu.bastionguard.install-ca.policy
|
|
DESTINATION /usr/share/polkit-1/actions
|
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
|
|
|
|
install(FILES actions/dbus/org.BastionGuard.USBD.conf
|
|
DESTINATION /usr/share/dbus-1/system.d
|
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
|
|
|
|
# Install DBus system service
|
|
install(
|
|
FILES actions/dbus/org.BastionGuard.USBD.service
|
|
DESTINATION /usr/share/dbus-1/system-services
|
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
|
)
|
|
|
|
# ======================
|
|
# Polkit Policy – Privacy Webcam
|
|
# ======================
|
|
install(FILES actions/policy/it.BastionGuard.camera.policy
|
|
DESTINATION /usr/share/polkit-1/actions
|
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
|
|
|
|
# ======================
|
|
# Permission Policy – Privacy Webcam
|
|
# ======================
|
|
install(FILES data/sudoers/bastionguard-helper
|
|
DESTINATION /etc/sudoers.d
|
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
|
|
|
|
# ======================
|
|
# Permission Policy – Bank helper
|
|
# ======================
|
|
install(FILES data/sudoers/bastionguard-bank
|
|
DESTINATION /etc/sudoers.d
|
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
|
|
|
|
# ======================
|
|
# Permission Policy – Helper anti-phishing-update
|
|
# ======================
|
|
install(FILES data/sudoers/bastionguard-phishing
|
|
DESTINATION /etc/sudoers.d
|
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
|
|
|
|
install(PROGRAMS
|
|
data/scripts/bank-helper
|
|
DESTINATION /usr/bin/
|
|
)
|
|
|
|
# ======================
|
|
# Services
|
|
# ======================
|
|
|
|
# opzione per abilitare automaticamente le user units durante 'cmake --install' (default OFF)
|
|
option(ENABLE_USER_AGENT_AUTO "Attempt to enable systemd --user unit for logged-in users at install time" OFF)
|
|
|
|
# install system units (system-wide)
|
|
install(FILES
|
|
data/service/BastionGuard-phishing-scanner.service
|
|
data/service/BastionGuard-phishing-updater.service
|
|
data/service/BastionGuard-phishing-updater.timer
|
|
data/service/BastionGuard-ransomware-realtime.service
|
|
data/service/bastionguard-sanesecurity.service
|
|
data/service/bastionguard-sanesecurity.timer
|
|
data/service/BastionGuard-usbd.service
|
|
DESTINATION /usr/lib/systemd/system
|
|
)
|
|
|
|
# install user units (systemd --user services)
|
|
install(FILES
|
|
data/service/BastionGuard-useragent.service
|
|
data/service/BastionGuard-privacyd.service
|
|
data/service/BastionGuard-ransomware-alert.service
|
|
data/service/BastionGuard-ransomware-realtime-alert.service
|
|
data/service/BastionGuard-ransomware-scanner.service
|
|
data/service/BastionGuard-pacd.service
|
|
data/service/BastionGuard-cef.service
|
|
data/service/BastionGuard-mailproxy.service
|
|
data/service/BastionGuard-user-session-watch.service
|
|
DESTINATION /usr/lib/systemd/user
|
|
)
|
|
|
|
|
|
|
|
# helper script to enable user agents for logged-in users
|
|
install(PROGRAMS
|
|
data/scripts/enable-user-agents.sh
|
|
data/scripts/BastionGuard-phishing-updater.sh
|
|
data/scripts/BastionGuard-net-setup.sh
|
|
data/scripts/BastionGuard-export-env.sh
|
|
data/scripts/BastionGuard-locale.sh
|
|
data/scripts/BastionGuard-setup-clamav-daemon.sh
|
|
data/scripts/BastionGuard-user-session-watch.sh
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/data/scripts
|
|
)
|
|
|
|
install(PROGRAMS
|
|
data/extension/bastionguard-tb-extension/install-tb-extension.sh
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/data/extension/bastionguard-tb-extension
|
|
)
|
|
|
|
install(FILES
|
|
data/config/nftables.conf
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/BastionGuard/data/config
|
|
)
|
|
|
|
# ============================================================
|
|
# 🔧 Forza RPATH su TUTTI i binari BastionGuard
|
|
# ============================================================
|
|
set(BG_ALL_BINARIES
|
|
BastionGuard
|
|
BastionGuard-ransomware-alert
|
|
BastionGuard-ransomware-realtime-alert
|
|
BastionGuard-daemon
|
|
BastionGuard-privacyd
|
|
BastionGuard-usbd
|
|
BastionGuard-wizard
|
|
BastionGuard-first-run
|
|
BastionGuard-bankopener
|
|
BastionGuard-bankgui
|
|
BastionGuard-native-host
|
|
BastionGuard-ransomware-scanner
|
|
BastionGuard-ransomware-realtime
|
|
BastionGuard-secure
|
|
BastionGuard-secure-gui
|
|
BastionGuard-mailproxy
|
|
bastionguard-cef
|
|
bastionguard-pacd
|
|
bastionguard-privhelper
|
|
bastionguard-firewall
|
|
archive_worker
|
|
)
|
|
|
|
|
|
foreach(tgt IN LISTS BG_ALL_BINARIES)
|
|
if(TARGET ${tgt})
|
|
bg_set_rpath(${tgt})
|
|
endif()
|
|
endforeach()
|
|
|
|
|
|
|
|
# ============================================================
|
|
# 📌 Installazione automatica delle firme custom in /var/lib/clamav
|
|
# ============================================================
|
|
|
|
bg_install_code( "
|
|
message(STATUS \"[ClamAV] Copio tutte le firme custom da data/signature in /var/lib/clamav ...\")
|
|
set(SRC_DIR \"${CMAKE_SOURCE_DIR}/data/signature\")
|
|
set(DEST_DIR \"/var/lib/clamav\")
|
|
|
|
# Crea la directory se non esiste
|
|
file(MAKE_DIRECTORY \${DEST_DIR})
|
|
|
|
# Cerca solo i file con estensioni valide per ClamAV
|
|
file(GLOB SIGNATURE_FILES
|
|
\"\${SRC_DIR}/*.ndb\"
|
|
\"\${SRC_DIR}/*.hdb\"
|
|
\"\${SRC_DIR}/*.ldb\"
|
|
\"\${SRC_DIR}/*.fp\"
|
|
\"\${SRC_DIR}/*.ign\"
|
|
\"\${SRC_DIR}/*.ign2\"
|
|
)
|
|
|
|
list(LENGTH SIGNATURE_FILES NUM_FILES)
|
|
|
|
if(NUM_FILES EQUAL 0)
|
|
message(WARNING \"[ClamAV] Nessun file di signature (.ndb/.hdb/.ldb/.fp/etc) trovato in \${SRC_DIR}\")
|
|
else()
|
|
foreach(f IN LISTS SIGNATURE_FILES)
|
|
get_filename_component(FILENAME \${f} NAME)
|
|
file(INSTALL
|
|
DESTINATION \${DEST_DIR}
|
|
TYPE FILE
|
|
FILES \"\${f}\"
|
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
|
)
|
|
message(STATUS \"[ClamAV] Installato: \${FILENAME} → \${DEST_DIR}\")
|
|
endforeach()
|
|
message(STATUS \"[ClamAV] Completato: \${NUM_FILES} firme custom copiate con successo\")
|
|
endif()
|
|
")
|
|
|
|
# ============================================================
|
|
# ⚙️ Installazione ottimizzazioni DNS (sysctl)
|
|
# ============================================================
|
|
set(SYSCTL_SOURCE_PATH "${CMAKE_INSTALL_FULL_DATAROOTDIR}/BastionGuard/data/config/99-dns-fast.conf")
|
|
set(SYSCTL_DEST_PATH "/etc/sysctl.d/99-dns-fast.conf")
|
|
|
|
bg_install_code( "
|
|
message(STATUS \"[Sysctl] Installazione ottimizzazioni DNS...\")
|
|
if(EXISTS \"${SYSCTL_SOURCE_PATH}\")
|
|
file(INSTALL DESTINATION /etc/sysctl.d
|
|
TYPE FILE
|
|
FILES \"${SYSCTL_SOURCE_PATH}\"
|
|
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
|
|
message(STATUS \"[Sysctl] Copiato: ${SYSCTL_SOURCE_PATH} → ${SYSCTL_DEST_PATH}\")
|
|
|
|
# Applica immediatamente le modifiche
|
|
execute_process(COMMAND sysctl --system
|
|
RESULT_VARIABLE sysctl_result
|
|
OUTPUT_VARIABLE sysctl_output
|
|
ERROR_VARIABLE sysctl_error)
|
|
if(sysctl_result EQUAL 0)
|
|
message(STATUS \"[Sysctl] ✅ Configurazioni DNS applicate correttamente.\")
|
|
else()
|
|
message(WARNING \"[Sysctl] ⚠ Errore applicando sysctl: \${sysctl_error}\")
|
|
endif()
|
|
else()
|
|
message(WARNING \"[Sysctl] ⚠ File non trovato: ${SYSCTL_SOURCE_PATH}\")
|
|
endif()
|
|
")
|
|
|
|
|
|
|
|
|
|
|
|
if(ENABLE_SYSTEMD_SERVICES)
|
|
bg_install_code( "
|
|
message(STATUS \"[Systemd] Ricarico configurazione systemd...\")
|
|
execute_process(COMMAND systemctl daemon-reload)
|
|
|
|
message(STATUS \"[Systemd] Abilito BastionGuard-phishing-scanner...\")
|
|
execute_process(COMMAND systemctl enable BastionGuard-phishing-scanner.service)
|
|
|
|
message(STATUS \"[Systemd] Avvio BastionGuard-phishing-scanner...\")
|
|
execute_process(COMMAND systemctl start BastionGuard-phishing-scanner.service)
|
|
|
|
message(STATUS \"[Systemd] Riavvio BastionGuard-phishing-scanner...\")
|
|
execute_process(COMMAND systemctl restart BastionGuard-phishing-scanner.service)
|
|
|
|
message(STATUS \"[Systemd] Abilito BastionGuard-ransomware-realtime...\")
|
|
execute_process(COMMAND systemctl enable BastionGuard-ransomware-realtime.service)
|
|
|
|
message(STATUS \"[Systemd] Avvio BastionGuard-ransomware-realtime...\")
|
|
execute_process(COMMAND systemctl start BastionGuard-ransomware-realtime.service)
|
|
|
|
message(STATUS \"[Systemd] Riavvio BastionGuard-ransomware-realtime...\")
|
|
execute_process(COMMAND systemctl restart BastionGuard-ransomware-realtime.service)
|
|
|
|
message(STATUS \"[Systemd] Abilito BastionGuard-phishing-scanner on graphical...\")
|
|
execute_process(COMMAND systemctl enable BastionGuard-restart-on-graphical.service)
|
|
|
|
message(STATUS \"[Systemd] Riavvio BastionGuard-phishing-scanner on graphical...\")
|
|
execute_process(COMMAND systemctl start BastionGuard-restart-on-graphical.service)
|
|
|
|
message(STATUS \"[Systemd] Riavvio polkit ...\")
|
|
execute_process(COMMAND systemctl start polkit.service)
|
|
")
|
|
else()
|
|
message(STATUS "Systemd service install-time actions are disabled. To enable, run CMake with -DENABLE_SYSTEMD_SERVICES=ON")
|
|
endif()
|
|
|
|
# ============================================================
|
|
# Installazione automatica regola udev per BastionGuard USB
|
|
# ============================================================
|
|
set(UDEV_RULE_SOURCE "${CMAKE_SOURCE_DIR}/data/udev/99-BastionGuard-usb.rules")
|
|
set(UDEV_RULE_DEST "/etc/udev/rules.d/99-BastionGuard-usb.rules")
|
|
|
|
if(EXISTS ${UDEV_RULE_SOURCE})
|
|
message(STATUS "✔ Regola UDEV trovata: ${UDEV_RULE_SOURCE}")
|
|
|
|
bg_install_code( "
|
|
message(STATUS \"[UDEV] Installazione regola USB...\")
|
|
|
|
# Determina l'utente reale
|
|
set(INSTALL_USER \"$ENV{SUDO_USER}\")
|
|
if(NOT INSTALL_USER OR INSTALL_USER STREQUAL \"\")
|
|
set(INSTALL_USER \"$ENV{USER}\")
|
|
endif()
|
|
message(STATUS \"[UDEV] Utente reale: \${INSTALL_USER}\")
|
|
|
|
# 1️⃣ Copia regola udev UNA SOLA VOLTA
|
|
execute_process(
|
|
COMMAND cp -f \"${UDEV_RULE_SOURCE}\" \"${UDEV_RULE_DEST}\"
|
|
)
|
|
message(STATUS \"[UDEV] Copiata: ${UDEV_RULE_SOURCE} → ${UDEV_RULE_DEST}\")
|
|
|
|
# 2️⃣ Gruppo plugdev
|
|
execute_process(
|
|
COMMAND getent group plugdev
|
|
RESULT_VARIABLE PLUGDEV_EXISTS
|
|
OUTPUT_QUIET ERROR_QUIET
|
|
)
|
|
if(PLUGDEV_EXISTS EQUAL 0)
|
|
message(STATUS \"[UDEV] Gruppo plugdev già esistente.\")
|
|
else()
|
|
message(STATUS \"[UDEV] Creo gruppo plugdev...\")
|
|
execute_process(COMMAND groupadd plugdev)
|
|
endif()
|
|
|
|
# 3️⃣ Aggiunta utente
|
|
execute_process(
|
|
COMMAND id -nG \${INSTALL_USER}
|
|
OUTPUT_VARIABLE USER_GROUPS
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
string(FIND \"\${USER_GROUPS}\" \"plugdev\" FOUND_PLUGDEV)
|
|
if(NOT FOUND_PLUGDEV EQUAL -1)
|
|
message(STATUS \"[UDEV] Utente \${INSTALL_USER} già nel gruppo plugdev.\")
|
|
else()
|
|
message(STATUS \"[UDEV] Aggiungo \${INSTALL_USER} al gruppo plugdev...\")
|
|
execute_process(COMMAND usermod -aG plugdev \${INSTALL_USER})
|
|
endif()
|
|
|
|
# 4️⃣ Reload
|
|
message(STATUS \"[UDEV] Ricarico regole udev...\")
|
|
execute_process(COMMAND udevadm control --reload-rules)
|
|
|
|
# 5️⃣ Trigger
|
|
message(STATUS \"[UDEV] Eseguo udevadm trigger...\")
|
|
execute_process(COMMAND udevadm trigger)
|
|
|
|
message(STATUS \"[UDEV] ✔ Installazione UDEV completata.\")
|
|
")
|
|
|
|
else()
|
|
message(WARNING "⚠ File UDEV non trovato: ${UDEV_RULE_SOURCE}")
|
|
endif()
|
|
|
|
|
|
# ======================
|
|
# Helper uninstall target (CMake uninstall support)
|
|
# ======================
|
|
if(NOT TARGET uninstall)
|
|
configure_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
IMMEDIATE @ONLY
|
|
)
|
|
|
|
add_custom_target(uninstall
|
|
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
|
|
COMMENT "Rimozione completa di tutti i file installati da BastionGuard"
|
|
)
|
|
endif()
|