#!/bin/sh /etc/rc.common START=95 STOP=10 USE_PROCD=1 NAME="mailserver" start_service() { local enabled=$(uci -q get mailserver.main.enabled) [ "$enabled" = "1" ] || { echo "Mail server is disabled. Enable with: uci set mailserver.main.enabled=1" return 0 } local container=$(uci -q get mailserver.main.container) container="${container:-mailserver}" if ! lxc-info -n "$container" >/dev/null 2>&1; then echo "Container '$container' not found. Create with: mailctl install" return 1 fi echo "Starting mail server container: $container" lxc-start -n "$container" # Wait for container to get IP sleep 3 # Start IMAP/SMTP proxies for Docker containers (if socat available) # This allows Docker-based webmail to connect to LXC mailserver if command -v socat >/dev/null 2>&1; then local mail_ip=$(lxc-info -n "$container" -iH 2>/dev/null | head -1) if [ -n "$mail_ip" ]; then # Kill existing proxies pkill -f "socat.*10143" 2>/dev/null pkill -f "socat.*10025" 2>/dev/null # Start IMAP proxy on port 10143 for Docker containers socat TCP-LISTEN:10143,bind=0.0.0.0,fork,reuseaddr TCP:${mail_ip}:143 & # Start SMTP proxy on port 10025 for Docker containers socat TCP-LISTEN:10025,bind=0.0.0.0,fork,reuseaddr TCP:${mail_ip}:25 & echo "Started Docker-to-LXC mail proxies (IMAP:10143, SMTP:10025)" fi fi } stop_service() { local container=$(uci -q get mailserver.main.container) container="${container:-mailserver}" # Stop Docker-to-LXC mail proxies pkill -f "socat.*10143" 2>/dev/null pkill -f "socat.*10025" 2>/dev/null if lxc-info -n "$container" 2>/dev/null | grep -q "RUNNING"; then echo "Stopping mail server container: $container" lxc-stop -n "$container" -t 30 fi } reload_service() { local container=$(uci -q get mailserver.main.container) container="${container:-mailserver}" if lxc-info -n "$container" 2>/dev/null | grep -q "RUNNING"; then echo "Reloading mail server services..." lxc-attach -n "$container" -- postfix reload 2>/dev/null lxc-attach -n "$container" -- doveadm reload 2>/dev/null fi } status() { local container=$(uci -q get mailserver.main.container) container="${container:-mailserver}" if lxc-info -n "$container" 2>/dev/null | grep -q "RUNNING"; then echo "Mail server: Running" lxc-attach -n "$container" -- postfix status 2>/dev/null else echo "Mail server: Stopped" fi }