Merge pull request #12 from southseact-3d/cto-task-ok-so-for-the-opensmtpd-i-get-this-error-please-fix-and-star-e02

Ensure OpenSMTPD symlink setup at runtime
This commit is contained in:
Liam Hetherington
2026-02-09 14:07:43 +00:00
committed by GitHub
2 changed files with 50 additions and 15 deletions

View File

@@ -168,11 +168,47 @@ fi
log "Setting up OpenSMTPD service..." log "Setting up OpenSMTPD service..."
# Start OpenSMTPD if configuration exists
OPENSMTPD_CONFIG="/workspace/src/backend/app/opensmtpd/install/etc/smtpd.conf"
OPENSMTPD_PID_FILE="/workspace/src/backend/app/opensmtpd/install/var/run/smtpd.pid"
OPENSMTPD_CUSTOM_BINARY="/workspace/src/backend/app/opensmtpd/install/sbin/smtpd"
OPENSMTPD_SYSTEM_BINARY="/usr/sbin/smtpd" OPENSMTPD_SYSTEM_BINARY="/usr/sbin/smtpd"
OPENSMTPD_INSTALL_ROOT="/workspace/src/backend/app/opensmtpd/install"
if [ -d "${REPO_DIR}/backend/app/opensmtpd" ]; then
OPENSMTPD_INSTALL_ROOT="${REPO_DIR}/backend/app/opensmtpd/install"
fi
OPENSMTPD_CONFIG="${OPENSMTPD_INSTALL_ROOT}/etc/smtpd.conf"
OPENSMTPD_PID_FILE="${OPENSMTPD_INSTALL_ROOT}/var/run/smtpd.pid"
OPENSMTPD_CUSTOM_BINARY="${OPENSMTPD_INSTALL_ROOT}/sbin/smtpd"
ensure_opensmtpd_layout() {
if [ ! -x "$OPENSMTPD_SYSTEM_BINARY" ]; then
return
fi
mkdir -p "${OPENSMTPD_INSTALL_ROOT}/sbin"
mkdir -p "${OPENSMTPD_INSTALL_ROOT}/etc"
mkdir -p "${OPENSMTPD_INSTALL_ROOT}/var/spool/smtpd"
mkdir -p "${OPENSMTPD_INSTALL_ROOT}/var/spool/queue"
mkdir -p "${OPENSMTPD_INSTALL_ROOT}/var/run"
if [ ! -e "$OPENSMTPD_CUSTOM_BINARY" ]; then
ln -s "$OPENSMTPD_SYSTEM_BINARY" "$OPENSMTPD_CUSTOM_BINARY"
fi
if [ -x "/usr/sbin/smtpctl" ] && [ ! -e "${OPENSMTPD_INSTALL_ROOT}/sbin/smtpctl" ]; then
ln -s "/usr/sbin/smtpctl" "${OPENSMTPD_INSTALL_ROOT}/sbin/smtpctl"
fi
if [ -x "/usr/bin/sendmail" ] && [ ! -e "${OPENSMTPD_INSTALL_ROOT}/sbin/sendmail" ]; then
ln -s "/usr/bin/sendmail" "${OPENSMTPD_INSTALL_ROOT}/sbin/sendmail"
fi
if [ -d "/etc/ssl/certs" ] && [ ! -e "${OPENSMTPD_INSTALL_ROOT}/etc/certs" ]; then
ln -s "/etc/ssl/certs" "${OPENSMTPD_INSTALL_ROOT}/etc/certs"
fi
chmod -R 755 "${OPENSMTPD_INSTALL_ROOT}/var" 2>/dev/null || true
}
ensure_opensmtpd_layout
# Determine which binary to use (prefer custom, fallback to system) # Determine which binary to use (prefer custom, fallback to system)
OPENSMTPD_BINARY="" OPENSMTPD_BINARY=""
@@ -192,13 +228,7 @@ fi
if [ -n "$OPENSMTPD_BINARY" ] && [ -f "$OPENSMTPD_CONFIG" ]; then if [ -n "$OPENSMTPD_BINARY" ] && [ -f "$OPENSMTPD_CONFIG" ]; then
log "OpenSMTPD configuration found at $OPENSMTPD_CONFIG" log "OpenSMTPD configuration found at $OPENSMTPD_CONFIG"
# Ensure required directories exist with proper permissions
mkdir -p /workspace/src/backend/app/opensmtpd/install/var/spool/smtpd
mkdir -p /workspace/src/backend/app/opensmtpd/install/var/spool/queue
mkdir -p /workspace/src/backend/app/opensmtpd/install/var/run
chmod -R 755 /workspace/src/backend/app/opensmtpd/install/var
# Check if OpenSMTPD is already running # Check if OpenSMTPD is already running
if [ -f "$OPENSMTPD_PID_FILE" ] && kill -0 "$(cat "$OPENSMTPD_PID_FILE")" 2>/dev/null; then if [ -f "$OPENSMTPD_PID_FILE" ] && kill -0 "$(cat "$OPENSMTPD_PID_FILE")" 2>/dev/null; then
log "OpenSMTPD is already running (PID: $(cat "$OPENSMTPD_PID_FILE"))" log "OpenSMTPD is already running (PID: $(cat "$OPENSMTPD_PID_FILE"))"
@@ -206,7 +236,7 @@ if [ -n "$OPENSMTPD_BINARY" ] && [ -f "$OPENSMTPD_CONFIG" ]; then
log "Starting OpenSMTPD..." log "Starting OpenSMTPD..."
"$OPENSMTPD_BINARY" -d -f "$OPENSMTPD_CONFIG" 2>&1 & "$OPENSMTPD_BINARY" -d -f "$OPENSMTPD_CONFIG" 2>&1 &
OPENSMTPD_PID=$! OPENSMTPD_PID=$!
# Wait for OpenSMTPD to start # Wait for OpenSMTPD to start
sleep 2 sleep 2
if kill -0 "$OPENSMTPD_PID" 2>/dev/null; then if kill -0 "$OPENSMTPD_PID" 2>/dev/null; then

View File

@@ -174,9 +174,14 @@ main() {
# Check OpenSMTPD service (ports 25, 587, 465) # Check OpenSMTPD service (ports 25, 587, 465)
health_log "INFO" "=== OpenSMTPD Service ===" health_log "INFO" "=== OpenSMTPD Service ==="
OPENSMTPD_CUSTOM_BINARY="/workspace/src/backend/app/opensmtpd/install/sbin/smtpd" REPO_DIR="${REPO_DIR:-/home/web/data}"
OPENSMTPD_INSTALL_ROOT="/workspace/src/backend/app/opensmtpd/install"
if [ -d "${REPO_DIR}/backend/app/opensmtpd" ]; then
OPENSMTPD_INSTALL_ROOT="${REPO_DIR}/backend/app/opensmtpd/install"
fi
OPENSMTPD_CUSTOM_BINARY="${OPENSMTPD_INSTALL_ROOT}/sbin/smtpd"
OPENSMTPD_SYSTEM_BINARY="/usr/sbin/smtpd" OPENSMTPD_SYSTEM_BINARY="/usr/sbin/smtpd"
# Determine which binary to use (prefer custom, fallback to system) # Determine which binary to use (prefer custom, fallback to system)
OPENSMTPD_BINARY="" OPENSMTPD_BINARY=""
if [ -x "$OPENSMTPD_CUSTOM_BINARY" ]; then if [ -x "$OPENSMTPD_CUSTOM_BINARY" ]; then
@@ -186,7 +191,7 @@ main() {
elif command -v smtpd &>/dev/null; then elif command -v smtpd &>/dev/null; then
OPENSMTPD_BINARY="$(command -v smtpd)" OPENSMTPD_BINARY="$(command -v smtpd)"
fi fi
if [ -n "$OPENSMTPD_BINARY" ]; then if [ -n "$OPENSMTPD_BINARY" ]; then
# Check SMTP port 25 # Check SMTP port 25
if check_port 25 "SMTP"; then if check_port 25 "SMTP"; then