Ensure OpenSMTPD symlink setup at runtime

This commit is contained in:
cto-new[bot]
2026-02-09 13:44:48 +00:00
parent 4cd57bc012
commit 6c12d282cd
2 changed files with 50 additions and 15 deletions

View File

@@ -168,11 +168,47 @@ fi
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_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)
OPENSMTPD_BINARY=""
@@ -192,13 +228,7 @@ fi
if [ -n "$OPENSMTPD_BINARY" ] && [ -f "$OPENSMTPD_CONFIG" ]; then
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
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"))"
@@ -206,7 +236,7 @@ if [ -n "$OPENSMTPD_BINARY" ] && [ -f "$OPENSMTPD_CONFIG" ]; then
log "Starting OpenSMTPD..."
"$OPENSMTPD_BINARY" -d -f "$OPENSMTPD_CONFIG" 2>&1 &
OPENSMTPD_PID=$!
# Wait for OpenSMTPD to start
sleep 2
if kill -0 "$OPENSMTPD_PID" 2>/dev/null; then