#
#
# BastionGuard™
# Copyright (C) 2025–2026 Calogero Scarnà
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
# BastionGuard™ is a trademark of Calogero Scarnà.
# The BastionGuard™ name and branding are not licensed under the GPL.
#
#
# Spec file for BastionGuard (openSUSE Leap 16.0)
#
Name: bastionguard
Version: 2.0.3
Release: 1leap
Summary: BastionGuard Security Platform
License: GPLv3
URL: https://bastionguard.eu
Vendor: BastionGuard
Source0: %{name}-%{version}.tar.gz
# Disable debuginfo / debugsource packages.
%global debug_package %{nil}
# Hyperscan is disabled by default because it is not part of the standard
# Leap 16.0 repositories. Enable it only when a trusted repository providing
# pkgconfig(hyperscan) has been configured in the build environment.
%bcond_with hyperscan
# Core build tools
BuildRequires: binutils
BuildRequires: cmake
BuildRequires: file
BuildRequires: findutils
BuildRequires: gcc-c++
BuildRequires: gettext-tools
BuildRequires: git
BuildRequires: gzip
BuildRequires: make
BuildRequires: ninja
BuildRequires: patch
BuildRequires: pkgconf-pkg-config
BuildRequires: rsync
BuildRequires: tar
BuildRequires: which
# Leap 16 uses the distribution Python selected by /usr/bin/python3.
BuildRequires: python3
BuildRequires: python3-devel
# Main GTK/C++ application
BuildRequires: pkgconfig(gtk4)
BuildRequires: pkgconfig(gtkmm-4.0)
BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(glibmm-2.68)
BuildRequires: pkgconfig(giomm-2.68)
BuildRequires: pkgconfig(pangomm-2.48)
BuildRequires: pkgconfig(sigc++-3.0)
BuildRequires: pkgconfig(libudev)
BuildRequires: pkgconfig(libsoup-3.0)
BuildRequires: pkgconfig(libsecret-1)
BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(libidn2)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(libcurl)
BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(polkit-gobject-1)
BuildRequires: pkgconfig(yara)
BuildRequires: pkgconfig(re2)
BuildRequires: nlohmann_json-devel
BuildRequires: boost-devel
BuildRequires: libboost_atomic-devel
BuildRequires: libboost_system-devel
BuildRequires: libboost_thread-devel
%if %{with hyperscan}
BuildRequires: pkgconfig(hyperscan)
%endif
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(libtiff-4)
BuildRequires: pkgconfig(libwebp)
BuildRequires: pkgconfig(fribidi)
BuildRequires: pkgconfig(nspr)
BuildRequires: pkgconfig(nss)
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xcursor)
BuildRequires: pkgconfig(xrandr)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xinerama)
BuildRequires: pkgconfig(xdamage)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xfixes)
BuildRequires: pkgconfig(xkbcommon)
BuildRequires: pkgconfig(wayland-client)
BuildRequires: pkgconfig(wayland-protocols)
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(libpipewire-0.3)
BuildRequires: samba-devel
# bastionguard-backup (GTK4/Vala, Meson)
BuildRequires: meson
BuildRequires: vala
BuildRequires: pkgconfig(gio-unix-2.0)
BuildRequires: pkgconfig(json-glib-1.0)
BuildRequires: pkgconfig(vte-2.91-gtk4)
BuildRequires: pkgconfig(gee-0.8)
BuildRequires: help2man
# bastionguard-secure-connection (Meson + Go)
BuildRequires: go
BuildRequires: protobuf-devel
BuildRequires: grpc-devel
# Secure Connection GUI, map and eBPF daemon
BuildRequires: pkgconfig(shumate-1.0)
BuildRequires: libnetfilter_queue-devel
BuildRequires: clang
BuildRequires: libbpf-devel
BuildRequires: bpftool
BuildRequires: pkgconfig(libzstd)
BuildRequires: lzo-devel
BuildRequires: bubblewrap
BuildRequires: clamav
BuildRequires: curl
BuildRequires: dnsmasq
BuildRequires: mozilla-nss
BuildRequires: mozilla-nss-tools
BuildRequires: nginx
BuildRequires: polkit
BuildRequires: rsync
BuildRequires: sudo
BuildRequires: yara
BuildRequires: libyara-devel
# Packaging/build helpers used by the project
BuildRequires: bubblewrap
BuildRequires: patchelf
BuildRequires: system-user-wwwrun
# vmlinux.h must already be present in Source0.
# bpftool and libbpf-tools are deliberately not BuildRequires because they are
# not guaranteed by the standard Leap 16.0 repositories. The Leap CI workflow
# generates vmlinux.h before creating the source archive.
# Runtime requirements available in the standard Leap repositories
Requires: bubblewrap
Requires: clamav
Requires: curl
Requires: dnsmasq
Requires: mozilla-nss
Requires: mozilla-nss-tools
Requires: nginx
Requires: polkit
Requires: rsync
Requires: sudo
Requires: yara
# Provides the openSUSE web-service account used by the writable Web UI dirs.
Requires(pre): system-user-wwwrun
# Optional integrations. These remain weak dependencies so the RPM can be
# installed from the standard Leap repositories even when they are unavailable.
Recommends: bpftool
Recommends: python3
Recommends: php8-fpm
%description
Transparent security control plane for Linux desktops.
BastionGuard is not a "trust us" security product. It is a security control
plane for Linux desktops where every protection mechanism is explicit,
deterministic, and observable.
Unlike most desktop security tools, which hide decisions behind opaque
engines, cloud scoring, or silent automation, BastionGuard exposes what is
happening, why it is happening, and how protections are applied. Users and
administrators can see, control, and reason about every security decision.
%prep
%autosetup -n %{name}-%{version}
%build
unset LD_LIBRARY_PATH LIBRARY_PATH CMAKE_PREFIX_PATH PKG_CONFIG_PATH
export CFLAGS="%{optflags}"
export CXXFLAGS="%{optflags}"
unset LDFLAGS
%if %{with hyperscan}
%global hyperscan_flag -DENABLE_HYPERSCAN=ON
%else
%global hyperscan_flag -DENABLE_HYPERSCAN=OFF
%endif
# Use an explicit, deterministic out-of-source build. This does not depend
# on distribution-specific CMake helper macro definitions.
rm -rf build
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=%{_prefix} \
-DCMAKE_INSTALL_SYSCONFDIR=%{_sysconfdir} \
-DCMAKE_INSTALL_LOCALSTATEDIR=%{_localstatedir} \
-DCMAKE_INSTALL_DATAROOTDIR=%{_datadir} \
-DBoost_NO_BOOST_CMAKE=ON \
-DCMAKE_POLICY_DEFAULT_CMP0167=OLD \
-DENABLE_SYSTEMD_SERVICES=ON \
-DENABLE_USER_AGENT_AUTO=OFF \
-DINSTALL_NGINX_DEFAULTS=OFF \
-DBG_PACKAGING=ON \
-DBG_DEBIAN_NO_INSTALL_CODE=ON \
-DENABLE_CEF=OFF \
-DENABLE_EMBEDDED_CEF=ON \
-DENABLE_CEF_DAEMON=OFF \
-DENABLE_SYSTEM_CA_INSTALL=OFF \
-DBASTIONGUARD_INIT_SYSTEM=SYSTEMD \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON \
-DCMAKE_INSTALL_RPATH='$ORIGIN/../share/BastionGuard/lib;$ORIGIN/../share/BastionGuard/cef' \
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF \
%{hyperscan_flag}
test -f build/CMakeCache.txt
test -f build/build.ninja
grep '^CMAKE_GENERATOR:' build/CMakeCache.txt || true
cmake --build build --parallel 1 --verbose
%install
rm -rf %{buildroot}
test -f build/CMakeCache.txt
DESTDIR=%{buildroot} cmake --install build
# icon-theme.cache is generated metadata and must not be packaged.
find "%{buildroot}%{_datadir}/icons" \
-type f -name 'icon-theme.cache' -delete
install -dm750 %{buildroot}%{_sharedstatedir}/bastionguard-webui/{cache,quarantine,sessions,tmp}
install -dm755 %{buildroot}%{_localstatedir}/log/bastionguard-webui
# Sanity checks
test -x %{buildroot}%{_bindir}/BastionGuard
file %{buildroot}%{_bindir}/BastionGuard | grep -q "ELF"
readelf -d %{buildroot}%{_bindir}/BastionGuard | grep -q NEEDED
%post
if [ -d /run/systemd/system ] && command -v systemctl >/dev/null 2>&1; then
systemctl daemon-reload >/dev/null 2>&1 || :
fi
:
%postun
if [ -d /run/systemd/system ] && command -v systemctl >/dev/null 2>&1; then
systemctl daemon-reload >/dev/null 2>&1 || :
fi
:
%files
%{_bindir}/*
%{_datadir}/BastionGuard
%{_datadir}/bastionguard-backup
%{_datadir}/bastionguard-sc
%{_datadir}/bastionguard-rootguard
%{_datadir}/applications/BastionGuard.desktop
%{_datadir}/applications/BastionGuard-bankgui.desktop
%{_datadir}/applications/BastionGuard-secure.desktop
%{_datadir}/applications/bastionguard-bankopener.desktop
%{_datadir}/applications/bastionguard-sc.desktop
%{_datadir}/applications/bastionguard-backup-gtk.desktop
%config(noreplace) %{_sysconfdir}/xdg/autostart/BastionGuard-autostart.desktop
%config(noreplace) %{_sysconfdir}/xdg/autostart/bastionguard-sc-autostart.desktop
%{_datadir}/dbus-1/services/org.BastionGuard.RansomwareAlert.service
%{_datadir}/dbus-1/system-services/org.BastionGuard.USBD.service
%{_datadir}/dbus-1/system.d/org.BastionGuard.USBD.conf
%{_datadir}/polkit-1/actions/it.BastionGuard.camera.policy
%{_datadir}/polkit-1/actions/org.BastionGuard.policy
%{_datadir}/polkit-1/actions/org.BastionGuard.ransomware.policy
%{_datadir}/polkit-1/actions/org.BastionGuard.USBD.policy
%{_datadir}/polkit-1/actions/eu.bastionguard.sc.policy
%{_datadir}/polkit-1/actions/org.bastionguard.pkexec.backup.policy
%{_datadir}/polkit-1/actions/org.bastionguard.rootguard.policy
%{_unitdir}/*
%{_userunitdir}/*
%{_datadir}/locale/*/LC_MESSAGES/*.mo
%{_datadir}/icons/hicolor/*/*/*
%{_datadir}/metainfo/*
%{_mandir}/man*/*
%{_datadir}/pixmaps/*
%dir %{_sysconfdir}/bastionguard-backup
%config(noreplace) %{_sysconfdir}/bastionguard-backup/*
%{_prefix}/lib/bastionguard-sc/*
%dir %{_libexecdir}/bastionguard
%{_libexecdir}/bastionguard/*
%config(noreplace) %{_sysconfdir}/sudoers.d/bastionguard-helper
%config(noreplace) %{_sysconfdir}/sudoers.d/bastionguard-bank
%config(noreplace) %{_sysconfdir}/sudoers.d/bastionguard-phishing
%dir %attr(750,wwwrun,www) %{_sharedstatedir}/bastionguard-webui
%dir %attr(750,wwwrun,www) %{_sharedstatedir}/bastionguard-webui/cache
%dir %attr(750,wwwrun,www) %{_sharedstatedir}/bastionguard-webui/quarantine
%dir %attr(750,wwwrun,www) %{_sharedstatedir}/bastionguard-webui/sessions
%dir %attr(750,wwwrun,www) %{_sharedstatedir}/bastionguard-webui/tmp
%dir %attr(755,root,root) %{_localstatedir}/log/bastionguard-webui
# BastionGuard Recovery Data
%{_datadir}/bastionguard-recovery-data
%{_datadir}/applications/com.bastionguard.RecoveryData.desktop
%{_datadir}/polkit-1/actions/com.bastionguard.RecoveryData.policy
# Plymouth theme
%{_datadir}/plymouth/themes/bastionguard
# BastionGuard Secure Connection daemon configuration
%dir %{_sysconfdir}/bastionguard-secure-connectiond
%config(noreplace) %{_sysconfdir}/bastionguard-secure-connectiond/*
# ROOTGUARD
%config(noreplace) %{_sysconfdir}/bastionguard/rootguard.conf
%config(noreplace) %{_sysconfdir}/bastionguard/rootguard.conf.default
%{_includedir}/rootguard/
%{_libdir}/libbastionguard-rootguard-gtk.a
%{_datadir}/doc/bastionguard-rootguard/
%changelog
* Fri Aug 27 2026 Calogero Scarnà - 2.0.3
- Update package