Various FreeBSD improvements (#3219)

* Fix permission denied (/var/run/stalwart.pid) on FreeBSD install

* Remove jemalloc dependency on FreeBSD (which is already using jemalloc)

* Enabling binding to privileged ports on FreeBSD
This commit is contained in:
Martin
2026-07-14 08:56:05 +02:00
committed by GitHub
parent 764c2c1e1c
commit 45602a35ba
5 changed files with 14 additions and 11 deletions

View File

@@ -40,7 +40,7 @@ migration = { path = "../migration" }
tokio = { version = "1.47", features = ["full"] }
rustls = { version = "0.23.5", default-features = false, features = ["std", "aws_lc_rs", "tls12"] }
[target.'cfg(not(target_env = "msvc"))'.dependencies]
[target.'cfg(not(any(target_env = "msvc", target_os = "freebsd")))'.dependencies]
jemallocator = "0.5.0"
[features]

View File

@@ -23,10 +23,10 @@ use utils::wait_for_shutdown;
#[cfg(feature = "dev_mode")]
pub mod test_data;
#[cfg(not(target_env = "msvc"))]
#[cfg(not(any(target_env = "msvc", target_os = "freebsd")))]
use jemallocator::Jemalloc;
#[cfg(not(target_env = "msvc"))]
#[cfg(not(any(target_env = "msvc", target_os = "freebsd")))]
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;

View File

@@ -486,7 +486,8 @@ desc="Stalwart Server"
load_rc_config \$name
: \${stalwart_enable:="NO"}
: \${stalwart_user:="${_user}"}
: \${stalwart_runas_user:="${_user}"}
: \${stalwart_runas_group:="${_user}"}
: \${stalwart_config:="${_config}"}
: \${stalwart_envfile:="${_env}"}
: \${stalwart_logfile:="${_log_dir}/stalwart.log"}
@@ -495,7 +496,7 @@ load_rc_config \$name
pidfile="/var/run/stalwart.pid"
procname="${_bin}"
command="/usr/sbin/daemon"
command_args="-f -o \${stalwart_logfile} -p \${pidfile} -u \${stalwart_user} ${_bin} --config=\${stalwart_config}"
command_args="-f -o \${stalwart_logfile} -p \${pidfile} ${_bin} --config=\${stalwart_config}"
sig_stop="INT"
start_precmd="stalwart_precmd"
@@ -507,10 +508,12 @@ stalwart_precmd()
. "\${stalwart_envfile}"
set +a
fi
ulimit -n "\${stalwart_fdlimit}"
# Binding privileged ports (25/443/465/993/...) as a non-root user
# requires: sysctl net.inet.ip.portrange.reservedhigh=0
# Stalwart binds its listeners as root, then setuid()s to this account
export RUN_AS_USER="\${stalwart_runas_user}"
export RUN_AS_GROUP="\${stalwart_runas_group}"
ulimit -n "\${stalwart_fdlimit}"
}
run_rc_command "\$1"

View File

@@ -89,5 +89,5 @@ time = "0.3"
testcontainers = { version = "0.27", features = ["reusable-containers"] }
rust-s3 = { version = "0.37", default-features = false, features = ["tokio-rustls-tls"] }
[target.'cfg(not(target_env = "msvc"))'.dependencies]
[target.'cfg(not(any(target_env = "msvc", target_os = "freebsd")))'.dependencies]
jemallocator = "0.5.0"

View File

@@ -6,10 +6,10 @@
#[cfg(test)]
use ::store::registry::bootstrap::Bootstrap;
#[cfg(not(target_env = "msvc"))]
#[cfg(not(any(target_env = "msvc", target_os = "freebsd")))]
use jemallocator::Jemalloc;
#[cfg(not(target_env = "msvc"))]
#[cfg(not(any(target_env = "msvc", target_os = "freebsd")))]
#[global_allocator]
static GLOBAL: Jemalloc = Jemalloc;