git: c67c83894cc9 - main - sysutils/bareos24-*: New ports: Backup archiving recovery open sourced

From: Jose Alonso Cardenas Marquez <acm_at_FreeBSD.org>
Date: Sat, 27 Dec 2025 23:59:52 UTC
The branch main has been updated by acm:

URL: https://cgit.FreeBSD.org/ports/commit/?id=c67c83894cc97fb0e85b506f9617c29aebc123a1

commit c67c83894cc97fb0e85b506f9617c29aebc123a1
Author:     Jose Alonso Cardenas Marquez <acm@FreeBSD.org>
AuthorDate: 2025-12-27 23:58:21 +0000
Commit:     Jose Alonso Cardenas Marquez <acm@FreeBSD.org>
CommitDate: 2025-12-27 23:58:21 +0000

    sysutils/bareos24-*: New ports: Backup archiving recovery open sourced
    
    Bareos (BackupArchivingRecoveryOpenSourced) is a reliable network open source
    software to backup, archive and restore files from all major operating systems.
    The fork was founded 2010 out of the bacula.org project. The fork has been
    actively developed and many new features have been added.
---
 sysutils/Makefile                                  |    3 +
 sysutils/bareos24-client/Makefile                  |   19 +
 sysutils/bareos24-server/Makefile                  |  233 ++
 sysutils/bareos24-server/Makefile.common           |   54 +
 sysutils/bareos24-server/distinfo                  |    3 +
 sysutils/bareos24-server/files/bareos-barcodes     |   51 +
 sysutils/bareos24-server/files/bareos-dir.in       |   57 +
 sysutils/bareos24-server/files/bareos-fd.in        |   46 +
 sysutils/bareos24-server/files/bareos-sd.in        |   37 +
 sysutils/bareos24-server/files/chio-bareos         |  190 ++
 .../bareos24-server/files/patch-CMakeLists.txt     |   16 +
 .../files/patch-cmake_BareosCcache.cmake           |   12 +
 .../files/patch-contrib-misc-bsmc_CMakeLists.txt   |   11 +
 .../files/patch-contrib_CMakeLists.txt             |   27 +
 .../files/patch-core-CMakeLists.txt                |   41 +
 .../patch-core-cmake_BareosCheckIncludes.cmake     |   12 +
 .../patch-core-cmake_BareosFindAllLibraries.cmake  |   12 +
 ...patch-core-cmake_BareosInstallConfigFiles.cmake |  118 +
 .../files/patch-core-manpages_CMakeLists.txt       |   26 +
 .../files/patch-core-scripts_CMakeLists.txt        |   76 +
 .../files/patch-core-src-dird_CMakeLists.txt       |   20 +
 .../files/patch-core-src-dird_vbackup.cc           |   11 +
 .../patch-core-src-plugins-stored_CMakeLists.txt   |   23 +
 .../patch-core-src-qt-tray-monitor_CMakeLists.txt  |   38 +
 .../files/patch-core-src-stored_CMakelists.txt     |   20 +
 .../files/patch-core-src-tools_CMakeLists.txt      |   43 +
 .../files/patch-core-src_CMakeLists.txt            |   51 +
 .../bareos24-server/files/patch-core_src_lib_cli.h |   10 +
 .../bareos24-server/files/pkg-deinstall.client.in  |   30 +
 .../bareos24-server/files/pkg-install.client.in    |   13 +
 .../bareos24-server/files/pkg-message.client.in    |   17 +
 .../bareos24-server/files/pkg-message.server.in    |   74 +
 sysutils/bareos24-server/pkg-descr                 |    4 +
 sysutils/bareos24-server/pkg-plist                 |  157 ++
 sysutils/bareos24-server/pkg-plist.client          |  108 +
 sysutils/bareos24-traymonitor/Makefile             |   31 +
 sysutils/bareos24-traymonitor/pkg-descr            |    6 +
 sysutils/bareos24-traymonitor/pkg-plist            |    8 +
 www/Makefile                                       |    1 +
 www/bareos24-webui/Makefile                        |   70 +
 www/bareos24-webui/distinfo                        |    3 +
 www/bareos24-webui/files/pkg-message.in            |   19 +
 www/bareos24-webui/pkg-descr                       |    8 +
 www/bareos24-webui/pkg-plist                       | 2565 ++++++++++++++++++++
 44 files changed, 4374 insertions(+)

diff --git a/sysutils/Makefile b/sysutils/Makefile
index 7b71b1c7ea29..a612d8e1f35d 100644
--- a/sysutils/Makefile
+++ b/sysutils/Makefile
@@ -107,6 +107,9 @@
     SUBDIR += bareos23-client
     SUBDIR += bareos23-server
     SUBDIR += bareos23-traymonitor
+    SUBDIR += bareos24-client
+    SUBDIR += bareos24-server
+    SUBDIR += bareos24-traymonitor
     SUBDIR += barrier
     SUBDIR += bashtop
     SUBDIR += bastille
diff --git a/sysutils/bareos24-client/Makefile b/sysutils/bareos24-client/Makefile
new file mode 100644
index 000000000000..d79650cb9504
--- /dev/null
+++ b/sysutils/bareos24-client/Makefile
@@ -0,0 +1,19 @@
+PORTNAME=	bareos
+
+PORTREVISION=	0
+
+PKGNAMESUFFIX=	24-client
+
+COMMENT=	Backup archiving recovery open sourced (client)
+
+CONFLICTS=	bareos22-client bareos23-client bareos-client
+
+WITH_CLIENT_ONLY=yes
+USE_RC_SUBR=	bareos-fd
+
+PLIST=		${PKGDIR}/pkg-plist.client
+MASTERDIR=	${.CURDIR}/../../sysutils/bareos24-server
+
+OPTIONS_DEFINE=	NLS PYTHON SCSICRYPTO
+
+.include "${MASTERDIR}/Makefile"
diff --git a/sysutils/bareos24-server/Makefile b/sysutils/bareos24-server/Makefile
new file mode 100644
index 000000000000..068ba82004a6
--- /dev/null
+++ b/sysutils/bareos24-server/Makefile
@@ -0,0 +1,233 @@
+PORTNAME=	bareos
+DISTVERSIONPREFIX=	Release/
+DISTVERSION=	24.0.8
+PORTREVISION?=	0
+CATEGORIES?=	sysutils
+PKGNAMEPREFIX?=	#
+PKGNAMESUFFIX?=	24-server
+
+MAINTAINER=	acm@FreeBSD.org
+COMMENT?=	Backup archiving recovery open sourced (server)
+WWW=		https://www.bareos.org/
+
+LICENSE=	AGPLv3 LGPL3
+LICENSE_COMB=	multi
+
+CONFLICTS?=	bareos22-server bareos23-server bareos-server
+
+BUILD_DEPENDS+=	utf8cpp>0:devel/utf8cpp \
+		microsoft-gsl>0:devel/microsoft-gsl \
+		xxhash>0:devel/xxhash \
+		tl-expected>0:devel/tl-expected \
+		cli11>0:devel/cli11
+RUN_DEPENDS=	bash:shells/bash
+LIB_DEPENDS+=	liblzo2.so:archivers/lzo2 \
+		libjansson.so:devel/jansson \
+		libfmt.so:devel/libfmt \
+		libxxhash.so:devel/xxhash
+
+USES+=		cmake compiler:c++11-lang cpe localbase:ldflags perl5 pkgconfig readline \
+		shebangfix
+USE_GITHUB=	yes
+USE_PERL5=	run
+
+USERS=		bareos
+GROUPS=		${USERS}
+
+PLIST_SUB+=	LIB_VERSION=${PORTVERSION}
+
+USE_LDCONFIG=	yes
+SHEBANG_LANG=	bash perl python
+SHEBANG_GLOB=	*.sh *.py
+SHEBANG_FILES=	${WRKSRC}/contrib/misc/bsmc/bin/bsmc
+
+CPPFLAGS+=	-I${LOCALBASE}/readline
+
+OPTIONS_DEFAULT=	OPENSSL
+OPTIONS_SINGLE=		CRYPTO
+OPTIONS_SINGLE_CRYPTO=	OPENSSL GNUTLS
+OPTIONS_SUB=		yes
+CRYPTO_DESC=		Cryptographic library
+MTX_DESC=		Install mtx for control of autochanger devices
+NDMP_DESC=		Enable build of NDMP support
+SCSICRYPTO_DESC=	Build LTO AME crypto plugin
+
+.if ${PKGNAMESUFFIX} == "24-server"
+OPTIONS_DEFINE=		MTX PYTHON LMDB NDMP NLS SCSICRYPTO
+OPTIONS_DEFAULT+=	LMDB PGSQL SCSICRYPTO
+OPTIONS_SINGLE_DATABASE=	PGSQL
+OPTIONS_SINGLE+=		DATABASE
+BACKENDS_DESC=		Storage backends
+DATABASE_DESC=		Database support
+LMDB_DESC=	Enable faster accurate backup support
+
+NDMP_CMAKE_ON=	-Dndmp=ON
+NDMP_CMAKE_OFF=	-Dndmp=OFF
+.endif
+
+GNUTLS_CONFIGURE_WITH=	gnutls=${LOCALBASE}
+GNUTLS_LIB_DEPENDS=	libgnutls.so:security/gnutls
+
+OPENSSL_USES=		ssl
+OPENSSL_CMAKE_ON=	-Dopenssl=ON
+OPENSSL_CMAKE_OFF=	-Dopenssl=OFF
+
+SCSICRYPTO_CMAKE_ON=	-Dscsi-crypto=ON
+SCSICRYPTO_CMAKE_OFF=	-Dscsi-crypto=OFF
+
+.if ${PKGNAMESUFFIX} == "24-client" || ${PKGNAMESUFFIX} == "24-server"  #Till end of the file
+PYTHON_USES=		python
+PYTHON_CMAKE_ON=	-DENABLE_PYTHON=ON
+PYTHON_CMAKE_OFF=	-DENABLE_PYTHON=OFF
+PYTHON_PLUGIN=		yes
+
+.if !defined(WITH_CLIENT_ONLY)
+LIB_DEPENDS+=	libbareos.so:sysutils/bareos24-client
+USE_RC_SUBR?=	bareos-dir bareos-sd
+.endif
+
+.if defined(WITH_CLIENT_ONLY)
+SUB_FILES+=	pkg-install.client pkg-deinstall.client pkg-message.client
+.else
+SUB_FILES+=	pkg-message.server
+.endif
+
+CMAKE_ARGS+=	-Dtcp-wrappers=ON \
+		-Dsmartalloc=ON \
+		-Dsysconfdir=${PREFIX}/etc \
+		-Darchivedir=${BAREOS_DIR}/storage \
+		-Dworkingdir=${BAREOS_DIR} \
+		-Dconfdir=${PREFIX}/etc/bareos \
+		-Dlibdir=${PREFIX}/lib \
+		-Dlogdir=/var/log/bareos \
+		-Dincludedir=${PREFIX}/include/bareos \
+		-Dreadline=ON \
+		-Ddisable-conio=ON \
+		-Dbatch-insert=ON \
+		-Dhave_plugins=ON \
+		-Dplugindir=${PREFIX}/lib/bareos/plugins \
+		-Dscriptdir=${PREFIX}/lib/bareos/scripts \
+		-Dbackenddir=${PREFIX}/lib/bareos/backends \
+		-Ddump_email=root@localhost \
+		-Djob_email=root@localhost \
+		-Ddb_name=bareos \
+		-Dsbin-perm=755 \
+		-Ddb_user=bareos \
+		-Dbaseport=9101 \
+		-Dpiddir=/var/run/bareos
+
+.if defined(WITH_CLIENT_ONLY)
+CFLAGS+=	-DMDB_DSYNC=O_SYNC -DMDB_USE_POSIX_SEM=1
+
+CMAKE_ARGS+=	-Dfd-user=root \
+		-Dfd-group=wheel \
+		-Dlmdb=ON
+.else
+LMDB_CMAKE_ON=	-Dlmdb=ON
+LMDB_CMAKE_OFF=	-Dlmdb=OFF
+LMDB_CFLAGS+=	-DMDB_DSYNC=O_SYNC -DMDB_USE_POSIX_SEM=1
+
+CMAKE_ARGS+=	-Ddir-user=${BAREOS_USER} \
+		-Ddir-group=${BAREOS_GROUP} \
+		-Dsd-user=${BAREOS_USER} \
+		-Dsd-group=operator
+.endif
+
+# The user/group IDs below are registered, see
+# http://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/book.html#DADS-UID
+#
+BAREOS_USER?=	bareos
+BAREOS_GROUP?=	${BAREOS_USER}
+BAREOS_UID?=	997
+BAREOS_GID?=	${BAREOS_UID}
+BAREOS_DIR?=	/var/db/bareos
+
+PLIST_SUB+=	BAREOS_DIR=${BAREOS_DIR}
+
+SUB_LIST=	BAREOS_USER=${BAREOS_USER} \
+		BAREOS_GROUP=${BAREOS_GROUP} \
+		BAREOS_UID=${BAREOS_UID} \
+		BAREOS_GID=${BAREOS_GID} \
+		BAREOS_DIR=${BAREOS_DIR}
+
+NLS_USES=		gettext
+NLS_CMAKE_ON=		-Dnls=ON
+
+# Client only or full server version
+.if defined(WITH_CLIENT_ONLY)
+CONFFILES=	fd
+CMAKE_ARGS+=	-Dclient-only=ON \
+		-DENABLE_WEBUI=OFF
+
+PKGDEINSTALL=	${FILESDIR}/pkg-deinstall.client
+PKGINSTALL=	${FILESDIR}/pkg-install.client
+.else
+# Server only Options
+CONFFILES=		sd dir
+CMAKE_ARGS+=	-Dbuild-dird=ON \
+		-Dbuild-stored=ON \
+		-Dbuild_client_only=OFF \
+		-DENABLE_WEBUI=OFF
+# Server default database
+
+MTX_RUN_DEPENDS=	${LOCALBASE}/sbin/mtx:misc/mtx
+PGSQL_CMAKE_ON=		-Dpostgresql=ON
+PGSQL_USES=		pgsql
+PGSQL_SUB_LIST=		REQ_PGSQL=postgresql
+PGSQL_SUB_LIST_OFF=	REQ_PGSQL=""
+.endif
+
+.if defined(WITH_CLIENT_ONLY)
+MP1+=	bconsole.1
+MP8+=	bareos-fd.8
+.else
+MP8+=	bareos.8 bareos-dir.8 bareos-sd.8 bcopy.8 bextract.8 bls.8 bscan.8 \
+	btape.8 btraceback.8 bareos-dbcheck.8
+MP1+=	bsmtp.1 bregex.1 bwild.1 bareos-tray-monitor.1
+.endif
+
+MAKE_ENV+=	MAN8="${MP8}" MAN1="${MP1}"
+
+post-patch:
+.if ${PKGNAMESUFFIX} == "24-server"
+	@${REINPLACE_CMD}  '51d' ${WRKSRC}/core/src/plugins/CMakeLists.txt
+.endif
+.if ${PKGNAMESUFFIX} == "24-client"
+	@${REINPLACE_CMD} -e 's|-Werror -Wall|-Wall|g' ${PATCH_WRKSRC}/core/CMakeLists.txt
+	@${REINPLACE_CMD} -e 's|enable_testing()||g' ${WRKSRC}/CMakeLists.txt
+.endif
+
+	@${REINPLACE_CMD} -e 's/CMAKE_INSTALL_FULL_DATAROOTDIR/CMAKE_INSTALL_DATAROOTDIR/g' \
+		${WRKSRC}/cmake/BareosSetVariableDefaults.cmake \
+		${WRKSRC}/webui/CMakeLists.txt
+
+post-extract:
+.if defined(WITH_CLIENT_ONLY)
+.	if defined(PYTHON_PLUGIN)
+		@${MKDIR} ${STAGEDIR}${ETCDIR}/python-ldap-conf.d/bareos-dir.d/fileset
+		@${MKDIR} ${STAGEDIR}${ETCDIR}/python-ldap-conf.d/bareos-dir.d/job
+.	endif
+.endif
+	@${MV} ${WRKSRC}/core/src/defaultconfigs/bareos-dir.d/fileset/'Windows All Drives.conf' \
+		${WRKSRC}/core/src/defaultconfigs/bareos-dir.d/fileset/'WindowsAllDrives.conf'
+	@${MV} ${WRKSRC}/contrib/misc/bsmc/etc/bareos/bsmc.conf \
+		${WRKSRC}/contrib/misc/bsmc/etc/bareos/bsmc.conf.sample
+
+.if !target(post-install)
+post-install:
+.if defined(WITH_CLIENT_ONLY)
+	${MKDIR} ${STAGEDIR}${ETCDIR}/bconsole.d/
+	${MV} ${STAGEDIR}${ETCDIR}/bconsole.conf.sample ${STAGEDIR}${ETCDIR}/bconsole.d/bconsole.conf.sample
+.else
+	${INSTALL_SCRIPT} ${FILESDIR}/chio-bareos ${STAGEDIR}${PREFIX}/sbin
+	${INSTALL_DATA} ${FILESDIR}/bareos-barcodes ${STAGEDIR}${ETCDIR}/bareos-barcodes.sample
+	${CHMOD} o+x ${STAGEDIR}${PREFIX}/bin/bsmtp
+	${MV} ${STAGEDIR}${ETCDIR}/mtx-changer.conf ${STAGEDIR}${ETCDIR}/mtx-changer.conf.sample
+.endif
+	@${MKDIR} ${STAGEDIR}/var/run/bareos
+.endif
+.else
+.include "${MASTERDIR}/Makefile.common"
+.endif # 24-client and 24-server are defined
+
+.include <bsd.port.mk>
diff --git a/sysutils/bareos24-server/Makefile.common b/sysutils/bareos24-server/Makefile.common
new file mode 100644
index 000000000000..0ab755cf514b
--- /dev/null
+++ b/sysutils/bareos24-server/Makefile.common
@@ -0,0 +1,54 @@
+post-patch:
+.if ${PKGNAMESUFFIX} == "24-traymonitor"
+	@${REINPLACE_CMD} -e 's|-Werror -Wall|-Wall|g' ${PATCH_WRKSRC}/core/CMakeLists.txt
+	@${REINPLACE_CMD} -e 's|\@bindir\@|${LOCALBASE}/bin|g' ${WRKSRC}/core/src/qt-tray-monitor/bareos-tray-monitor.desktop.in
+	@${REINPLACE_CMD}  '207d' ${WRKSRC}/CMakeLists.txt
+.endif
+
+post-extract:
+.if ${PKGNAMESUFFIX} == "24-traymonitor"
+	@${MV} ${WRKSRC}/core/src/defaultconfigs/tray-monitor.d/client/FileDaemon-local.conf.in \
+		${WRKSRC}/core/src/defaultconfigs/tray-monitor.d/client/FileDaemon-local.conf
+	@${MV} ${WRKSRC}/core/src/defaultconfigs/tray-monitor.d/director/Director-local.conf.in \
+		${WRKSRC}/core/src/defaultconfigs/tray-monitor.d/director/Director-local.conf
+	@${MV} ${WRKSRC}/core/src/defaultconfigs/tray-monitor.d/monitor/bareos-mon.conf.in \
+		${WRKSRC}/core/src/defaultconfigs/tray-monitor.d/monitor/bareos-mon.conf
+	@${MV} ${WRKSRC}/core/src/defaultconfigs/tray-monitor.d/storage/StorageDaemon-local.conf.in \
+		${WRKSRC}/core/src/defaultconfigs/tray-monitor.d/storage/StorageDaemon-local.conf
+.endif
+
+post-build:
+.if ${PKGNAMEPREFIX} == "nagios-check_"
+	${MAKE_CMD} -C ${WRKSRC}/examples/nagios/check_bareos
+.endif
+
+pre-install:
+.if ${PKGNAMESUFFIX} == "24-traymonitor"
+.	for d in client director monitor storage
+		${MKDIR} ${STAGEDIR}${ETCDIR}/tray-monitor.d/${d}
+		${FIND} ${WRKSRC}/core/src/defaultconfigs/tray-monitor.d/${d} -type f -name '*.conf' -exec ${MV} -v {} {}.sample \;
+.	endfor
+.endif
+
+do-install:
+.if ${PKGNAMEPREFIX} == "nagios-check_"
+	@${MKDIR} ${STAGEDIR}${PREFIX}/libexec/nagios
+	${INSTALL_PROGRAM} ${WRKSRC}/examples/nagios/check_bareos/check_bareos \
+	${STAGEDIR}${PREFIX}/libexec/nagios
+.endif
+.if ${PKGNAMESUFFIX} == "-client-static"
+	${INSTALL_PROGRAM} ${WRKSRC}/src/filed/static-bareos-fd ${STAGEDIR}${PREFIX}/sbin/bareos-fd-static
+	${INSTALL_PROGRAM} ${WRKSRC}/src/console/static-bconsole ${STAGEDIR}${PREFIX}/sbin/bconsole-static
+.endif
+.if ${PKGNAMESUFFIX} == "24-traymonitor"
+# Install config files and preserve existing ones
+.for d in client director monitor storage
+	${INSTALL_SCRIPT} ${WRKSRC}/core/src/defaultconfigs/tray-monitor.d/${d}/*.sample ${STAGEDIR}${ETCDIR}/tray-monitor.d/${d}/
+.endfor
+	${INSTALL_PROGRAM} ${CONFIGURE_WRKSRC}/core/src/qt-tray-monitor/bareos-tray-monitor ${STAGEDIR}${PREFIX}/bin
+	@${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/128x128/apps
+	${INSTALL_DATA} ${WRKSRC}/core/src/images/bareos-logo_128x128.png ${STAGEDIR}${PREFIX}/share/icons/hicolor/128x128/apps/bareos-tray-monitor.png
+	@${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/scalable/apps
+	${INSTALL_DATA} ${WRKSRC}/core/src/images/bareos-logo.svg ${STAGEDIR}${PREFIX}/share/icons/hicolor/scalable/apps/bareos-tray-monitor.svg
+	${INSTALL_DATA} ${WRKSRC}/core/src/qt-tray-monitor/bareos-tray-monitor.desktop.in ${STAGEDIR}${DESKTOPDIR}/bareos-tray-monitor.desktop
+.endif
diff --git a/sysutils/bareos24-server/distinfo b/sysutils/bareos24-server/distinfo
new file mode 100644
index 000000000000..f49bbab2e3ea
--- /dev/null
+++ b/sysutils/bareos24-server/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1766877958
+SHA256 (bareos-bareos-Release-24.0.8_GH0.tar.gz) = a0934802aa4459af854db59bfd14d84ca2dd9d755fcf03a9bf04b3f3150f565d
+SIZE (bareos-bareos-Release-24.0.8_GH0.tar.gz) = 13432277
diff --git a/sysutils/bareos24-server/files/bareos-barcodes b/sysutils/bareos24-server/files/bareos-barcodes
new file mode 100644
index 000000000000..f42cb7f7aeea
--- /dev/null
+++ b/sysutils/bareos24-server/files/bareos-barcodes
@@ -0,0 +1,51 @@
+#
+# Bacula barcode simulation file
+# used by ${PREFIX}/sbin/chio-bareos (FreeBSD)
+#
+# The volumenames are returned by the "changer list" command
+# labeling in the console is done by "label barcodes"
+# (then all volumes belog to the default pool).
+# All Lines with an "#" at the bedinning are ignored
+#
+# !!!! If you export an tape and reinsert another one,
+# !!!! don't forget to change the volume name in this file!
+#
+1:Volume1-100
+2:Volume1-101
+3:Volume1-102
+4:Volume1-103
+5:Volume1-104
+6:Volume1-105
+7:Volume1-106
+8:Volume1-107
+9:Volume1-108
+10:Volume1-109
+11:Volume1-110
+12:Volume1-111
+#
+# Further volumes exported from the changer
+#
+# 36GB AIT2 tapes
+#Volume1-100
+#Volume1-101
+#Volume1-102
+#Volume1-103
+#Volume1-104
+#Volume1-105
+#Volume1-106
+#Volume1-107
+#Volume1-108
+#Volume1-109
+#Volume1-110
+#Volume1-111
+#Volume1-112
+#Volume1-113
+#Volume1-114
+#Volume1-115
+#
+# 50GB AIT2 tapes
+#Volume2-200
+#Volume2-201
+#Volume2-202
+#Volume2-203
+#Volume2-204
diff --git a/sysutils/bareos24-server/files/bareos-dir.in b/sysutils/bareos24-server/files/bareos-dir.in
new file mode 100644
index 000000000000..271e2050a9b8
--- /dev/null
+++ b/sysutils/bareos24-server/files/bareos-dir.in
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+# PROVIDE: bareos_dir
+# REQUIRE: DAEMON %%REQ_PGSQL%%
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# bareos_dir_enable  (bool):   Set to NO by default.
+#                Set it to YES to enable bareos_dir.
+# bareos_dir_flags (params):   Set params used to start bareos_dir.
+# bareos_dir_config (params):  Path to the config file/directory
+#
+
+. /etc/rc.subr
+
+name="bareos_dir"
+rcvar=${name}_enable
+
+load_rc_config $name
+
+export PATH="${PATH}:%%LOCALBASE%%/bin:%%LOCALBASE%%/sbin"
+
+: ${bareos_dir_enable="NO"}
+: ${bareos_dir_flags="-u bareos -g bareos -v"}
+: ${bareos_dir_config="%%PREFIX%%/etc/bareos/"}
+: ${bareos_dir_pidfile="/var/run/bareos/bareos-dir.9101.pid"}
+
+command=%%PREFIX%%/sbin/bareos-dir
+command_args="-c ${bareos_dir_config} -p ${bareos_dir_pidfile}"
+pidfile="${bareos_dir_pidfile}"
+bconsole_command=/usr/local/bin/bconsole
+start_precmd="bareos_start_precmd"
+restart_precmd="bareos_dir_configtest"
+reload_precmd="bareos_dir_configtest"
+reload_cmd="bareos_dir_reload"
+configtest_cmd="bareos_dir_configtest"
+
+bareos_start_precmd() {
+	[ -d "${pidfile%/*}" ] || install -d -o bareos -g bareos ${pidfile%/*}
+	bareos_dir_configtest
+}
+
+bareos_dir_configtest() {
+	echo "Performing sanity check on ${bareos_dir_config} configuration:"
+	eval ${command} -c ${bareos_dir_config} -t
+}
+
+bareos_dir_reload() {
+	echo "Performing a graceful reload"
+	# bconsole always exits with 0, so we can't check the return status for success.
+	echo "reload" | ${bconsole_command}
+}
+
+extra_commands="reload configtest"
+run_rc_command "$1"
diff --git a/sysutils/bareos24-server/files/bareos-fd.in b/sysutils/bareos24-server/files/bareos-fd.in
new file mode 100644
index 000000000000..8d57c3c858bc
--- /dev/null
+++ b/sysutils/bareos24-server/files/bareos-fd.in
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+# PROVIDE: bareos_fd
+# REQUIRE: DAEMON
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# bareos_fd_enable  (bool):  Set to NO by default.
+#               Set it to YES to enable bareos_fd.
+# bareos_fd_flags (params):  Set params used to start bareos_fd.
+# bareos_fd_config (params):  Path to the config file/directory
+#
+
+. /etc/rc.subr
+
+name="bareos_fd"
+rcvar=${name}_enable
+
+load_rc_config $name
+
+: ${bareos_fd_enable="NO"}
+: ${bareos_fd_flags="-u root -g wheel -v"}
+: ${bareos_fd_config="%%PREFIX%%/etc/bareos/"}
+: ${bareos_fd_pidfile="/var/run/bareos/bareos-fd.9102.pid"}
+
+command=%%PREFIX%%/sbin/bareos-fd
+command_args="-c ${bareos_fd_config} -p ${bareos_fd_pidfile}"
+pidfile="${bareos_fd_pidfile}"
+start_precmd="bareos_start_precmd"
+
+bareos_start_precmd() {
+	[ -d "${pidfile%/*}" ] || {
+		getent passwd bareos > /dev/null 2&>1
+		if [ $? -eq 0] ; then
+			# user bareos exists
+			install -d -o bareos -g bareos ${pidfile%/*}
+		else
+			# bareos_fd as solitair service
+			install -d -o root -g wheel ${pidfile%/*}
+		fi
+	}
+}
+
+run_rc_command "$1"
diff --git a/sysutils/bareos24-server/files/bareos-sd.in b/sysutils/bareos24-server/files/bareos-sd.in
new file mode 100644
index 000000000000..529cf55140c0
--- /dev/null
+++ b/sysutils/bareos24-server/files/bareos-sd.in
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+# PROVIDE: bareos_sd
+# REQUIRE: DAEMON
+# KEYWORD: shutdown
+#
+# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
+# to enable this service:
+#
+# bareos_sd_enable  (bool):  Set to NO by default.
+#               Set it to YES to enable bareos_sd.
+# bareos_sd_flags (params):  Set params used to start bareos_sd.
+# bareos_sd_config (params): Path to the config file/directory
+#
+
+. /etc/rc.subr
+
+name="bareos_sd"
+rcvar=${name}_enable
+
+load_rc_config $name
+
+: ${bareos_sd_enable="NO"}
+: ${bareos_sd_flags="-u bareos -g bareos -v"}
+: ${bareos_sd_config="%%PREFIX%%/etc/bareos/"}
+: ${bareos_sd_pidfile="/var/run/bareos/bareos-sd.9103.pid"}
+
+command=%%PREFIX%%/sbin/bareos-sd
+command_args="-c ${bareos_sd_config} -p ${bareos_sd_pidfile}"
+pidfile="${bareos_sd_pidfile}"
+start_precmd="bareos_start_precmd"
+
+bareos_start_precmd() {
+	[ -d "${pidfile%/*}" ] || install -d -o bareos -g bareos ${pidfile%/*}
+}
+
+run_rc_command "$1"
diff --git a/sysutils/bareos24-server/files/chio-bareos b/sysutils/bareos24-server/files/chio-bareos
new file mode 100644
index 000000000000..f006ef78e6ce
--- /dev/null
+++ b/sysutils/bareos24-server/files/chio-bareos
@@ -0,0 +1,190 @@
+#!/bin/sh
+#
+# BAREOS interface to tape libraries and autoloaders for FreeBSD
+# (by Rudolf Cejka <cej...@fit.vutbr.cz>, v1.2, 2012/11/14)
+#
+# If you set in your Device resource
+#   Changer Command = "path-to-this-script/chio-changer %c %o %S %a %d"
+# you will have the following input to this script:
+#   chio-changer "changer-device" "command" "slot" "tape-device" "drive-index"
+#                       $1           $2       $3         $4            $5
+# for example (on a FreeBSD system):
+#   chio-changer /dev/ch0 load 1 /dev/nsa0 0
+#
+# If you change the script, take care to return either the chio exit
+# code or a 0. If the script exits with a non-zero exit code, BAREOS
+# will assume the request failed.
+#
+
+PROGNAME=`basename $0`
+
+# Uncomment the following line, if you want to log debug output.
+#DEBUG=/var/run/bareos/${PROGNAME}.log
+
+# Uncomment the following line, if you need to eject a tape before moving
+# it from the drive.
+#OFFLINE=yes
+
+# Uncomment one or more of the following lines, if you need to wait for
+# some time (in seconds) after unloading, loading or transferring a tape.
+#OFFLINE_SLEEP=10
+#LOAD_SLEEP=10
+#MOVE_SLEEP=10
+
+# Uncomment the following line, if you do not have a changer with volume
+# reader.
+#FAKE_BARCODES=/usr/local/etc/bareos-barcodes
+
+usage()
+{
+  cat <<EOF
+Usage: ${PROGNAME} <changer-device> <cmd> [slot] [tape-device] [drive-index]
+
+Commands (<cmd>):
+  unload          Unload a tape into the slot from where it was loaded
+  load <slot>     Load a tape from the slot <slot> (1-based)
+  transfer <slot> <slotdst> Transfer a tape from the slot <slot> to
+                  the slot <slotdst> (1-based)
+  list            List full storage slots
+  listall         List all storage slots and drives with source information
+  loaded          Give slot from where the tape was loaded (0 = empty drive)
+  slots           Give number of available slots
+
+Example:
+  ${PROGNAME} /dev/ch0 load 1        Load a tape from the slot 1
+
+EOF
+  exit 1
+}
+
+# Default settings
+CHANGER=/dev/ch0
+TAPE=/dev/nsa0
+DRIVE=0
+
+CHIO=/bin/chio
+MT=/usr/bin/mt
+
+if [ -n "${DEBUG}" ]; then
+  MSG=$0
+  for PAR; do MSG="${MSG} \"${PAR}\""; done
+  echo `date +"%Y/%m/%d %H:%M:%S"` ${MSG} >> ${DEBUG}
+fi
+
+if [ -n "$1" ]; then
+  CHANGER=$1;
+fi
+COMMAND=$2
+SLOT=$3
+SLOTDST=$4
+if [ -n "$4" ]; then
+  TAPE=$4
+fi
+if [ -n "$5" ]; then
+  DRIVE=$5
+fi
+
+case ${COMMAND} in
+unload)
+  if [ "${OFFLINE}" = yes ]; then
+    ${MT} -f ${TAPE} offline
+    if [ $? = 0 -a -n "${OFFLINE_SLEEP}" ]; then
+      sleep ${OFFLINE_SLEEP}
+    fi
+  fi
+  if [ -z "${SLOT}" ]; then
+    ${CHIO} -f ${CHANGER} return drive ${DRIVE}
+  else
+    ${CHIO} -f ${CHANGER} move drive ${DRIVE} slot $((${SLOT} - 1))
+  fi
+  if [ $? -ne 0 ]; then
+    # In case of an error, try to unload the cartridge to the first free slot
+    FREE=`${CHIO} -f ${CHANGER} status slot | \
+      sed -ne '/FULL/d;s/^slot *\([0-9]*\):.*/\1/p' | \
+      awk 'BEGIN { n = 0 } { n = $1 + 1; exit } END { print n }'`
+    if [ ${FREE} -gt 0 ]; then
+      ${CHIO} -f ${CHANGER} move drive ${DRIVE} slot $((${FREE} - 1))
+    else
+      exit 1
+    fi
+  fi
+  ;;
+load)
+  if [ -z "${SLOT}" ]; then
+    usage
+  fi
+  ${CHIO} -f ${CHANGER} move slot $((${SLOT} - 1)) drive ${DRIVE}
+  if [ $? -ne 0 ]; then
+    exit 1
+  fi
+  if [ -n "${LOAD_SLEEP}" ]; then
+    sleep ${LOAD_SLEEP}
+  fi
+  ;;
+transfer)
+  if [ -z "${SLOT}" -o -z "${SLOTDST}" ]; then
+    usage
+  fi
+  ${CHIO} -f ${CHANGER} move slot $((${SLOT} - 1)) slot $((${SLOTDST} - 1))
+  if [ $? -ne 0 ]; then
+    exit 1
+  fi
+  if [ -n "${MOVE_SLEEP}" ]; then
+    sleep ${MOVE_SLEEP}
+  fi
+  ;;
+list)
+  if [ -z "${FAKE_BARCODES}" ]; then
+    ${CHIO} -f ${CHANGER} status -v slot | \
+      sed -ne 's/^slot *\([0-9]*\):.*FULL.*voltag.*<\([^:]*\):.*/\1:\2/p' | \
+      awk -F: '{ print $1 + 1 ":" $2 }'
+  else
+    if [ -f "${FAKE_BARCODES}" ]; then
+      grep -v -e "^#" -e "^$" < ${FAKE_BARCODES}
+    else
+      echo "${PROGNAME}: Barcode file ${FAKE_BARCODES} is missing"
+      exit 1
+    fi
+  fi
+  ;;
+listall)
+  if [ -z "${FAKE_BARCODES}" ]; then
+    ${CHIO} -f ${CHANGER} status -vS | \
+      sed -ne '
+      s/^slot *\([0-9]*\):.*ENAB.*FULL.*voltag.*<\([^:]*\):.*/I:\1:F:\2/p;t
+      s/^slot *\([0-9]*\):.*FULL.*voltag.*<\([^:]*\):.*/S:\1:F:\2/p;t
+      s/^drive *\([0-9]*\):.*FULL.*voltag.*<\([^:]*\):.*source.*<[^0-9]*\([0-9]*\)>.*/D:\1:F:\3:\2/p;t
+      s/^slot *\([0-9]*\):.*ENAB.*voltag.*<\([^:]*\):.*/I:\1:E/p;t
+      s/^slot *\([0-9]*\):.*voltag.*<\([^:]*\):.*/S:\1:E/p;t
+      s/^drive *\([0-9]*\):.*voltag.*<\([^:]*\):.*/D:\1:E/p' | \
+      awk -F: '{ for (n = 1; n <= NF; n++) printf "%s%s",
+      (n == ($1 == "D" ? 4 : 2)) ? ($n == "" ? 0 : $n + 1) : $n,
+      (n == NF) ? "\n" : ":" }'
+  else
+    if [ -f "${FAKE_BARCODES}" ]; then
+      grep -v -e "^#" -e "^$" < ${FAKE_BARCODES} | \
+        awk -F: '{ print "S:" $1 (match($2, "^ *$") ? ":E" : ":F:" $2) }'
+    else
+      echo "${PROGNAME}: Barcode file ${FAKE_BARCODES} is missing"
+      exit 1
+    fi
+  fi
+  ;;
+loaded)
+  # If a tape is loaded, but the source slot is unknown (for example,
+  # after library reboot), try to report the first free slot
+  FREE=`${CHIO} -f ${CHANGER} status slot | \
+    sed -ne '/FULL/d;s/^slot *\([0-9]*\):.*/\1/p' | \
+    awk 'BEGIN { n = 0 } { n = $1 + 1; exit } END { print n }'`
+  ${CHIO} -f ${CHANGER} status -S drive | \
+    sed -ne 's/^drive *'${DRIVE}':.*FULL.*source.*<[^0-9]*\([0-9]*\)>.*/\1/p' \
+    | awk 'BEGIN { n = 0 } { n = ($1 == "") ? '${FREE}' : $1 + 1 } \
+    END { print n }'
+  ;;
+slots)
+  ${CHIO} -f ${CHANGER} status | grep -c "^slot "
+  ;;
+*)
+  usage
+  ;;
+esac
diff --git a/sysutils/bareos24-server/files/patch-CMakeLists.txt b/sysutils/bareos24-server/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..4404b90a2c50
--- /dev/null
+++ b/sysutils/bareos24-server/files/patch-CMakeLists.txt
@@ -0,0 +1,16 @@
+--- CMakeLists.txt	2024-12-16 09:10:50.000000000 -0800
++++ CMakeLists.txt	2024-12-31 23:52:42.840766000 -0800
+@@ -202,11 +202,8 @@
+   if(ENABLE_WEBUI)
+     add_subdirectory(webui)
+   endif()
+-  if(NOT client-only)
+-    if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+-      add_subdirectory(contrib)
+-    endif()
+-    add_subdirectory(systemtests)
++  if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows")
++    add_subdirectory(contrib)
+   endif()
+ endif()
+ 
diff --git a/sysutils/bareos24-server/files/patch-cmake_BareosCcache.cmake b/sysutils/bareos24-server/files/patch-cmake_BareosCcache.cmake
new file mode 100644
index 000000000000..d8b63ec3265e
--- /dev/null
+++ b/sysutils/bareos24-server/files/patch-cmake_BareosCcache.cmake
@@ -0,0 +1,12 @@
+--- cmake/BareosCcache.cmake	2024-12-31 23:51:38.882883000 -0800
++++ cmake/BareosCcache.cmake	2024-12-31 23:51:48.133339000 -0800
+@@ -20,9 +20,6 @@
+ find_program(CCACHE_PROGRAM ccache)
+ if(CCACHE_PROGRAM)
+   set(CCACHE_CMDLINE "${CCACHE_PROGRAM}")
+-  list(APPEND CCACHE_CMDLINE "base_dir=${CMAKE_SOURCE_DIR}")
+-  list(APPEND CCACHE_CMDLINE "hash_dir=true")
+-  list(APPEND CCACHE_CMDLINE "namespace=bareos")
+   set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_CMDLINE}")
+   set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_CMDLINE}")
+ endif()
diff --git a/sysutils/bareos24-server/files/patch-contrib-misc-bsmc_CMakeLists.txt b/sysutils/bareos24-server/files/patch-contrib-misc-bsmc_CMakeLists.txt
new file mode 100644
index 000000000000..2074cf886be9
--- /dev/null
+++ b/sysutils/bareos24-server/files/patch-contrib-misc-bsmc_CMakeLists.txt
@@ -0,0 +1,11 @@
+--- contrib/misc/bsmc/CMakeLists.txt	2023-04-07 17:32:44.243346000 -0500
++++ contrib/misc/bsmc/CMakeLists.txt	2023-04-07 17:33:04.594841000 -0500
+@@ -27,7 +27,7 @@
+ )
+ 
+ install(
+-  FILES etc/bareos/bsmc.conf
++  FILES etc/bareos/bsmc.conf.sample
+   PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ
+   DESTINATION "${confdir}"
+ )
diff --git a/sysutils/bareos24-server/files/patch-contrib_CMakeLists.txt b/sysutils/bareos24-server/files/patch-contrib_CMakeLists.txt
new file mode 100644
index 000000000000..0c896142edfe
--- /dev/null
+++ b/sysutils/bareos24-server/files/patch-contrib_CMakeLists.txt
@@ -0,0 +1,27 @@
+--- contrib/CMakeLists.txt	2023-03-24 08:05:20.000000000 -0500
++++ contrib/CMakeLists.txt	2023-04-07 17:52:51.095371000 -0500
+@@ -24,10 +24,18 @@
+ include(GNUInstallDirs)
+ include(BareosSetVariableDefaults)
+ 
+-add_subdirectory(fd-plugins)
+-if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
+-  add_subdirectory(misc)
+-endif()
+-if(NOT client-only)
+-  add_subdirectory(dir-plugins)
++if(ENABLE_PYTHON)
++  if(client-only)
++    add_subdirectory(fd-plugins)
++  endif()
++
++  if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
++    if(client-only)
++      add_subdirectory(misc)
++    endif()
++  endif()
++
++  if(NOT client-only)
++    add_subdirectory(dir-plugins)
++  endif()
+ endif()
diff --git a/sysutils/bareos24-server/files/patch-core-CMakeLists.txt b/sysutils/bareos24-server/files/patch-core-CMakeLists.txt
new file mode 100644
index 000000000000..136514c20b69
--- /dev/null
+++ b/sysutils/bareos24-server/files/patch-core-CMakeLists.txt
@@ -0,0 +1,41 @@
+--- core/CMakeLists.txt	2023-12-13 17:44:47.000000000 -0500
++++ core/CMakeLists.txt	2024-01-10 01:25:40.807505000 -0500
+@@ -333,7 +333,9 @@
+   set(HAVE_FREEBSD_OS 1)
+   include_directories(/usr/local/include)
+   link_directories(/usr/local/lib)
+-  link_libraries(intl)
++  if(nls)
++    link_libraries(intl)
++  endif()
+   check_cxx_compiler_flag(
+     -Wunused-but-set-variable compiler_will_warn_of_unused_but_set_variable
+   )
+@@ -386,7 +388,9 @@
+   add_definitions("-D_FILE_OFFSET_BITS=64")
+ endif()
+ 
+-include(FindIntl)
++if(nls)
++  include(FindIntl)
++endif()
+ 
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wextra")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra")
+@@ -400,7 +404,7 @@
+ include(BareosFindStaticCodeAnalysisTools)
+ 
+ if(NOT client-only
+-   AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS"
++   AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "SunOS|FreeBSD"
+    AND CMAKE_SIZEOF_VOID_P EQUAL 8
+ )
+   # droplet does not build on solaris because of sys/cdefs.h: No such file or
+@@ -777,7 +781,6 @@
+ 
+ include(BareosConfigureFile)
+ 
+-add_subdirectory(platforms)
+ add_subdirectory(src)
+ add_subdirectory(scripts)
+ add_subdirectory(manpages)
diff --git a/sysutils/bareos24-server/files/patch-core-cmake_BareosCheckIncludes.cmake b/sysutils/bareos24-server/files/patch-core-cmake_BareosCheckIncludes.cmake
new file mode 100644
index 000000000000..c43a68df2c25
--- /dev/null
+++ b/sysutils/bareos24-server/files/patch-core-cmake_BareosCheckIncludes.cmake
@@ -0,0 +1,12 @@
+--- core/cmake/BareosCheckIncludes.cmake.orig	2024-12-16 09:10:50.000000000 -0800
++++ core/cmake/BareosCheckIncludes.cmake	2024-12-22 19:21:38.094235000 -0800
+@@ -62,7 +62,9 @@
+ 
+   include(CheckSymbolExists)
+ 
++if(gfapi)
+   check_include_files(glusterfs/api/glfs.h HAVE_GLUSTERFS_API_GLFS_H)
++endif()
+ 
+   check_include_files(sys/prctl.h HAVE_SYS_PRCTL_H)
+ 
diff --git a/sysutils/bareos24-server/files/patch-core-cmake_BareosFindAllLibraries.cmake b/sysutils/bareos24-server/files/patch-core-cmake_BareosFindAllLibraries.cmake
new file mode 100644
index 000000000000..40bcee0e6b50
--- /dev/null
+++ b/sysutils/bareos24-server/files/patch-core-cmake_BareosFindAllLibraries.cmake
@@ -0,0 +1,12 @@
+--- core/cmake/BareosFindAllLibraries.cmake	2023-03-24 08:05:20.000000000 -0500
++++ core/cmake/BareosFindAllLibraries.cmake	2023-04-05 16:21:00.503424000 -0500
+@@ -177,7 +177,9 @@
+ 
+ bareosfindlibraryandheaders("pthread" "pthread.h" "")
*** 3724 LINES SKIPPED ***