From 6c12d282cd7dfd77ec7c9d2590811789111988f3 Mon Sep 17 00:00:00 2001 From: "cto-new[bot]" <140088366+cto-new[bot]@users.noreply.github.com> Date: Mon, 9 Feb 2026 13:44:48 +0000 Subject: [PATCH] Ensure OpenSMTPD symlink setup at runtime --- scripts/entrypoint.sh | 54 ++++++++++++++++++++++++++++++++---------- scripts/healthcheck.sh | 11 ++++++--- 2 files changed, 50 insertions(+), 15 deletions(-) diff --git a/scripts/entrypoint.sh b/scripts/entrypoint.sh index fcc219b..ab2462b 100755 --- a/scripts/entrypoint.sh +++ b/scripts/entrypoint.sh @@ -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 diff --git a/scripts/healthcheck.sh b/scripts/healthcheck.sh index fdcf142..1cc6485 100644 --- a/scripts/healthcheck.sh +++ b/scripts/healthcheck.sh @@ -174,9 +174,14 @@ main() { # Check OpenSMTPD service (ports 25, 587, 465) 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" - + # Determine which binary to use (prefer custom, fallback to system) OPENSMTPD_BINARY="" if [ -x "$OPENSMTPD_CUSTOM_BINARY" ]; then @@ -186,7 +191,7 @@ main() { elif command -v smtpd &>/dev/null; then OPENSMTPD_BINARY="$(command -v smtpd)" fi - + if [ -n "$OPENSMTPD_BINARY" ]; then # Check SMTP port 25 if check_port 25 "SMTP"; then