Mail-MIMEDefang

 view release on metacpan or  search on metacpan

t/docker/dockerPostfix.sh  view on Meta::CPAN

#!/bin/sh

echo "Building MIMEDefang inside Docker..."

VER=$(perl -I modules/lib -e 'use Mail::MIMEDefang; print Mail::MIMEDefang::md_version();')
echo "MIMEDefang source version: $VER"

echo ">>> Removing existing mimedefang package..."
dnf remove -y --noautoremove mimedefang 1>/dev/null 2>&1 || true
echo ">>> make distclean..."
make distclean 1>/dev/null 2>&1 || true

echo ">>> perl Makefile.PL..."
perl Makefile.PL MAKEMETA=1 INSTALLDIRS=vendor 1>/dev/null 2>&1 || { echo "perl Makefile.PL FAILED"; exit 1; }
echo ">>> make tardist..."
make tardist 1>/dev/null 2>&1 || { echo "make tardist FAILED"; exit 1; }
mkdir -p ~/rpmbuild/SOURCES ~/rpmbuild/BUILD
cp "Mail-MIMEDefang-${VER}.tar.gz" ~/rpmbuild/SOURCES
make spec 1>/dev/null 2>&1 || { echo "make spec FAILED"; exit 1; }
rm -rf ~/rpmbuild/RPMS/x86_64/mimedefang-*
echo ">>> rpmbuild -bb..."
rpmbuild -bb redhat/mimedefang.spec 1>/dev/null 2>&1 || { echo "rpmbuild FAILED"; exit 1; }
echo ">>> dnf install..."
dnf -y install ~/rpmbuild/RPMS/x86_64/mimedefang-* || { echo "dnf install FAILED"; exit 1; }

cp t/data/mimedefang-test-filter /etc/mail/mimedefang-filter

# Ensure Postfix uses the inet milter socket (RPM %post may reset this)
postconf -e 'smtpd_milters = inet:127.0.0.1:10997'
postconf -e 'non_smtpd_milters = $smtpd_milters'
postconf -e 'milter_default_action = tempfail'

chown root t/data/md.conf
mkdir -p /root/.spamassassin
touch /root/.spamassassin/user_prefs
rm -f /var/spool/mail/defang*

# Ensure spool dir exists and is writable by defang
mkdir -p /var/spool/MIMEDefang
chown defang:defang /var/spool/MIMEDefang
chmod 750 /var/spool/MIMEDefang

# Enable Postfix file-based logging (no syslog daemon in Docker)
postconf -e 'maillog_file = /var/log/maillog'
touch /var/log/maillog

cat > /tmp/rsyslog-test.conf << 'EOF'
module(load="imuxsock" SysSock.Use="on")
*.* /var/log/messages
EOF
touch /var/log/messages
chmod 666 /var/log/messages

echo "Starting rsyslogd..."
/usr/sbin/rsyslogd -n -f /tmp/rsyslog-test.conf >/var/log/rsyslog.out 2>&1 &

echo "Waiting for /dev/log socket..."
for i in $(seq 1 30); do
    if [ -S /dev/log ]; then
        echo "/dev/log is ready"
        break
    fi
    if [ "$i" -eq 30 ]; then
        echo "WARNING: /dev/log did not appear in time"
    fi
    sleep 1
done

echo "Starting mimedefang-multiplexor..."
/usr/bin/mimedefang-multiplexor -D -m 2 -x 10 -y 0 -U defang -b 600 -l \
    -s /var/spool/MIMEDefang/mimedefang-multiplexor.sock \
    >/var/log/multiplexor.log 2>&1 &

echo "Starting mimedefang..."
/usr/bin/mimedefang -D -m /var/spool/MIMEDefang/mimedefang-multiplexor.sock \
    -U defang -q -p inet:10997 \
    >/var/log/mimedefang-milter.log 2>&1 &

echo "Starting postfix..."
/usr/sbin/postfix start

echo "Waiting for multiplexor socket..."
for i in $(seq 1 30); do
    if [ -S /var/spool/MIMEDefang/mimedefang-multiplexor.sock ]; then
        echo "Multiplexor socket is ready"
        break
    fi
    if [ "$i" -eq 30 ]; then
        echo "WARNING: Multiplexor socket did not appear in time"
    fi
    sleep 1
done

echo "Waiting for MIMEDefang milter to be ready on port 10997..."
for i in $(seq 1 30); do



( run in 2.134 seconds using v1.01-cache-2.11-cpan-2aafcb1aa8b )