diff -Nur --no-dereference smeserver-altqmail-0.1.2.old/createlinks smeserver-altqmail-0.1.2/createlinks --- smeserver-altqmail-0.1.2.old/createlinks 2017-11-19 04:53:47.000000000 -0500 +++ smeserver-altqmail-0.1.2/createlinks 2023-03-23 23:44:37.531000000 -0400 @@ -2,28 +2,55 @@ use esmith::Build::CreateLinks qw(:all); -service_link_enhanced("altqmail", "S80", "7"); -service_link_enhanced("altqmail", "K60", "6"); -service_link_enhanced("altqmail", "K60", "0"); -service_link_enhanced("altqmail", "K60", "1"); -service_link_enhanced("altqmail-smtpd", "S80", "7"); -service_link_enhanced("altqmail-smtpd", "K60", "6"); -service_link_enhanced("altqmail-smtpd", "K60", "0"); -service_link_enhanced("altqmail-smtpd", "K60", "1"); +#service_link_enhanced("altqmail", "S80", "7"); +#service_link_enhanced("altqmail", "K60", "6"); +#service_link_enhanced("altqmail", "K60", "0"); +#service_link_enhanced("altqmail", "K60", "1"); +#service_link_enhanced("altqmail-smtpd", "S80", "7"); +#service_link_enhanced("altqmail-smtpd", "K60", "6"); +#service_link_enhanced("altqmail-smtpd", "K60", "0"); +#service_link_enhanced("altqmail-smtpd", "K60", "1"); safe_touch("root/var/service/altqmail/down"); safe_touch("root/var/service/altqmail-smtpd/down"); -safe_symlink("../daemontools" , 'root/etc/rc.d/init.d/supervise/altqmail'); -safe_symlink("../daemontools" , 'root/etc/rc.d/init.d/supervise/altqmail-smtpd'); +#safe_symlink("../daemontools" , 'root/etc/rc.d/init.d/supervise/altqmail'); +#safe_symlink("../daemontools" , 'root/etc/rc.d/init.d/supervise/altqmail-smtpd'); safe_symlink("/var/service/altqmail" , 'root/service/altqmail'); safe_symlink("/var/service/altqmail-smtpd" , 'root/service/altqmail-smtpd'); -safe_symlink("sighup", "root/etc/e-smith/events/email-update/services2adjust/altqmail"); -safe_symlink("sighup", "root/etc/e-smith/events/email-update/services2adjust/altqmail-smtpd"); +safe_symlink("reload-or-restart", "root/etc/e-smith/events/email-update/services2adjust/altqmail"); +safe_symlink("reload-or-restart", "root/etc/e-smith/events/email-update/services2adjust/altqmail-smtpd"); -foreach my $f (qw(me bouncehost smtproutes concurrencyremote)){ +foreach my $f (qw(me bouncehost smtproutes concurrencyremote outratelimit)){ safe_touch("root/etc/e-smith/templates/var/service/altqmail/root/var/qmail/control/$f/template-begin"); templates2events("/var/service/altqmail/root/var/qmail/control/$f", qw(email-update bootstrap-console-save)); } +my $pkg= "smeserver-altqmail"; +my $event = "${pkg}-update"; + +event_actions($event, qw( + systemd-default 88 + systemd-reload 89 +)); + +event_templates($event, qw( +/var/service/altqmail/root/var/qmail/control/me +/var/service/altqmail/root/var/qmail/control/bouncehost +/var/service/altqmail/root/var/qmail/control/smtproutes +/var/service/altqmail/root/var/qmail/control/concurrencyremote +/var/service/altqmail/root/var/qmail/control/outratelimit +)); + +event_services($event, qw( + altqmail reload-or-restart + altqmail-smtpd reload-or-restart + qmail restart +)); + +#nothing to backup restore +#use esmith::Build::Backup qw(:all); +#backup_includes($pkg, qw( +#/opt/foo/ +#)); diff -Nur --no-dereference smeserver-altqmail-0.1.2.old/root/etc/e-smith/templates/var/service/altqmail/root/var/qmail/control/outratelimit/10all smeserver-altqmail-0.1.2/root/etc/e-smith/templates/var/service/altqmail/root/var/qmail/control/outratelimit/10all --- smeserver-altqmail-0.1.2.old/root/etc/e-smith/templates/var/service/altqmail/root/var/qmail/control/outratelimit/10all 1969-12-31 19:00:00.000000000 -0500 +++ smeserver-altqmail-0.1.2/root/etc/e-smith/templates/var/service/altqmail/root/var/qmail/control/outratelimit/10all 2023-03-23 23:29:13.227000000 -0400 @@ -0,0 +1 @@ +{ $DB->get('altqmail')->prop('OutRateLimit') || "20/3600"; } diff -Nur --no-dereference smeserver-altqmail-0.1.2.old/root/usr/lib/systemd/system/altqmail.service smeserver-altqmail-0.1.2/root/usr/lib/systemd/system/altqmail.service --- smeserver-altqmail-0.1.2.old/root/usr/lib/systemd/system/altqmail.service 1969-12-31 19:00:00.000000000 -0500 +++ smeserver-altqmail-0.1.2/root/usr/lib/systemd/system/altqmail.service 2023-03-23 22:10:48.539000000 -0400 @@ -0,0 +1,16 @@ +[Unit] +Description=altqmail, message transfer agent +After=network.target +Requires=runit.service + +[Service] +Type=oneshot +ExecStartPre=/sbin/e-smith/service-status altqmail +ExecStart=/usr/bin/sv u /service/altqmail +ExecStop=/usr/bin/sv stop /service/altqmail +ExecReload=/usr/bin/sv t /service/altqmail +RemainAfterExit=yes + +[Install] +WantedBy=sme-server.target + diff -Nur --no-dereference smeserver-altqmail-0.1.2.old/root/usr/lib/systemd/system/altqmail-smtpd.service smeserver-altqmail-0.1.2/root/usr/lib/systemd/system/altqmail-smtpd.service --- smeserver-altqmail-0.1.2.old/root/usr/lib/systemd/system/altqmail-smtpd.service 1969-12-31 19:00:00.000000000 -0500 +++ smeserver-altqmail-0.1.2/root/usr/lib/systemd/system/altqmail-smtpd.service 2023-03-23 22:19:27.855000000 -0400 @@ -0,0 +1,16 @@ +[Unit] +Description=altqmail-smtpd, message transfer agent +After=network.target +Requires=runit.service + +[Service] +Type=oneshot +ExecStartPre=/sbin/e-smith/service-status altqmail-smtpd +ExecStart=/usr/bin/sv u /service/altqmail-smtpd +ExecStop=/usr/bin/sv stop /service/altqmail-smtpd +ExecReload=/usr/bin/sv t /service/altqmail-smtpd +RemainAfterExit=yes + +[Install] +WantedBy=sme-server.target + diff -Nur --no-dereference smeserver-altqmail-0.1.2.old/root/var/service/altqmail/finish smeserver-altqmail-0.1.2/root/var/service/altqmail/finish --- smeserver-altqmail-0.1.2.old/root/var/service/altqmail/finish 2017-11-19 04:53:47.000000000 -0500 +++ smeserver-altqmail-0.1.2/root/var/service/altqmail/finish 2023-03-23 23:19:04.622000000 -0400 @@ -1,5 +1,6 @@ #!/bin/sh -umount /var/service/altqmail/root/var/qmail/bin +#umount /var/service/altqmail/root/var/qmail/bin +rm -rf /var/service/altqmail/root/var/qmail/bin/* rm -rf root/etc rm -rf root/lib{,64} diff -Nur --no-dereference smeserver-altqmail-0.1.2.old/root/var/service/altqmail/qmail-remote-throttle smeserver-altqmail-0.1.2/root/var/service/altqmail/qmail-remote-throttle --- smeserver-altqmail-0.1.2.old/root/var/service/altqmail/qmail-remote-throttle 1969-12-31 19:00:00.000000000 -0500 +++ smeserver-altqmail-0.1.2/root/var/service/altqmail/qmail-remote-throttle 2023-03-23 23:33:43.608000000 -0400 @@ -0,0 +1,119 @@ +#!/usr/bin/perl + +use Fcntl ':flock'; +$QMAIL = "/var/qmail"; +$CONTROL = "$QMAIL/control"; + +open LOG, ">>", "/tmp/qmail-remote-log"; +{ my $ofh = select LOG; $|=1; select $ofh; } +Log("starting"); + +$msgs = 0; +$time = 0; + +load_policy(); + + +while(1) { + my @last = grep {$_ > time() - $time} read_log(); + Log("status " . @last . "/$msgs"); + + if (@last >= $msgs) { +# Log("sleeping"); + } else { + last; + } + + while (@last >= $msgs) { + my $oldest = $last[0]; + my $age = time() - $oldest; + # When will the oldest message expire off the queue? + # The end of the queue is $time seconds ago + # The age of the oldest message is now time() - $oldest + # The oldest message will expire in $time - $age seconds + my $zzz = $time - $age + int(rand(3)); + $zzz = 1 if $zzz < 1; +# Log("Sleeping for $zzz secs"); + sleep $zzz; + shift @last while @last && $last[0] < time() - $time; + load_policy(); + } +} + +append_log(time()); + +#if (open F, ">>", "/tmp/qmail-remote-log") { +# print F time(), " @ARGV\n"; +#} +Log("sending @ARGV"); +exec "/var/qmail/bin/qmail-remote.real", @ARGV; +exit 0; + + +sub fail { + my $msg = shift; + Log("fail: $msg"); + print "Z$msg"; + exit 0; +} + +my $last_policy_load ; +sub load_policy { + my $POLICY = "$CONTROL/outratelimit"; + return if ((stat($POLICY))[9] <= $last_policy_load); + if (open F, "<", $POLICY) { + chomp(my $line = ); + ($msgs, $time) = split m{/}, $line; + if (defined $last_policy_load) { + Log("Policy changed to $msgs/$time"); + } + $last_policy_load = time(); + close F; + } +} + + +sub read_log { + lock_semaphore(LOCK_SH); + + my @last; + if (open(F, "+<", "$CONTROL/outlog")) { + chomp(@last = ); + close F; + } + + lock_semaphore(LOCK_UN); + + return @last; +} + +sub append_log { + lock_semaphore(LOCK_EX); + + if (open(F, "+<", "$CONTROL/outlog")) { + my @last = grep {$_ > time() - $time} ; + chomp(@last); + truncate F, 0; + seek F, 0, 0; + print F join "\n", @last, @_, ""; + close F; + } + + lock_semaphore(LOCK_UN); +} + + +sub lock_semaphore { + if (open SEM, ">", "$CONTROL/qmail-remote-semaphore") { + flock(SEM, $_[0]) or fail("Couldn't lock semaphore: $!"); + } else { + fail("Couldn't open semaphore: $!"); + } +} + +sub Log { + my @args = @_; + tr/\n//d for @args; + print LOG time(), " $$ @args\n"; +} + diff -Nur --no-dereference smeserver-altqmail-0.1.2.old/root/var/service/altqmail/run smeserver-altqmail-0.1.2/root/var/service/altqmail/run --- smeserver-altqmail-0.1.2.old/root/var/service/altqmail/run 2017-11-19 04:53:47.000000000 -0500 +++ smeserver-altqmail-0.1.2/root/var/service/altqmail/run 2023-03-23 23:18:46.569000000 -0400 @@ -2,7 +2,13 @@ exec 2>&1 -/bin/mount --bind /var/qmail/bin/ root/var/qmail/bin +#/bin/mount --bind /var/qmail/bin/ root/var/qmail/bin +if [ ! -f root/var/qmail/bin/ ]; then + cp -a /var/qmail/bin/* root/var/qmail/bin/ + mv root/var/qmail/bin/qmail-remote root/var/qmail/bin/qmail-remote.real + cp -a qmail-remote-throttle root/var/qmail/bin/qmail-remote + +fi if [ ! -d root/etc ]; then mkdir root/etc @@ -13,13 +19,10 @@ fi LIBDIR="lib" -LIBC="2.5" +LIBC="2.17" if [ -d /lib64 ]; then LIBDIR="lib64" fi -if [ -e /$LIBDIR/libc-2.12.so ]; then - LIBC="2.12" -fi if [ ! -d root/$LIBDIR ]; then mkdir root/$LIBDIR @@ -35,6 +38,66 @@ ln -s libnss_files-$LIBC.so root/$LIBDIR/libnss_files.so.2 cp -a /$LIBDIR/libresolv-$LIBC.so root/$LIBDIR ln -s libresolv-$LIBC.so root/$LIBDIR/libresolv.so.2 + + ## added for throttle + # for perl /usr/bin/perl + #cp --parents `ldd BIN_PATH | cut -d " " -f 3` CHROOT_PATH + #cp -a --parents `ldd /usr/bin/perl | cut -d " " -f 3` root/ + # wold almost work inside a loop checking if link and cpying also the target + cp -a --parents /usr/$LIBDIR/perl5/CORE/libperl.so root/ + cp -a --parents /$LIBDIR/libresolv.so.2 root/ + cp -a --parents /$LIBDIR/libnsl.so.1 root/ + cp -a --parents /$LIBDIR/libnsl-$LIBC.so root/ + cp -a --parents /$LIBDIR/libdl.so.2 root/ + cp -a --parents /$LIBDIR/libdl-$LIBC.so root/ + cp -a --parents /$LIBDIR/libm.so.6 root/ + cp -a --parents /$LIBDIR/libm-$LIBC.so root/ + cp -a --parents /$LIBDIR/libcrypt.so.1 root/ + cp -a --parents /$LIBDIR/libcrypt-$LIBC.so root/ + cp -a --parents /$LIBDIR/libutil.so.1 root/ + cp -a --parents /$LIBDIR/libutil-$LIBC.so root/ + cp -a --parents /$LIBDIR/libpthread.so.0 root/ + cp -a --parents /$LIBDIR/libpthread-$LIBC.so root/ + cp -a --parents /lib64/libfreebl3.so root/ + + cp -a --parents /usr/$LIBDIR/perl5/Fcntl.pm root/ + cp -a --parents /usr/$LIBDIR/perl5/auto/Fcntl root/ + cp -a --parents /usr/share/perl5/strict.pm root/ + cp -a --parents /usr/share/perl5/AutoLoader.pm root/ + cp -a --parents /usr/share/perl5/Carp.pm root/ + cp -a --parents /usr/share/perl5/Carp/Heavy.pm root/ + cp -a --parents /usr/share/perl5/Exporter.pm root/ + cp -a --parents /usr/share/perl5/Exporter root/ + cp -a --parents /usr/share/perl5/warnings.pm root/ + + cp -a --parents /usr/$LIBDIR/perl5/XSLoader.pm root/ + cp -a --parents /usr/$LIBDIR/perl5/DynaLoader.pm root/ + cp -a --parents /usr/$LIBDIR/perl5/Config.pm root/ + cp -a --parents /usr/$LIBDIR/perl5/Config_heavy.pl root/ + cp -a --parents /usr/$LIBDIR/perl5/Config_git.pl root/ + cp -a --parents /usr/$LIBDIR/perl5/auto/DynaLoader/dl_findfile.al root/ + + # might better somewhere else + cp -a --parents /usr/bin/perl root/ + # this one is needed to set locale for perl + cp -a --parent /usr/lib/locale root/ + + #bin sh for qmail-qstat + cp -a --parents /bin/sh root/ + cp -a --parents /bin/bash root/ + cp -a --parents /$LIBDIR/libtinfo.so.5 root/ + cp -a --parents /$LIBDIR/libtinfo.so.5.7 root/ + + cp -a --parents /usr/bin/wc root/ + cp -a --parents /bin/find root/ + cp -a --parents /usr/bin/expr root/ + cp -a --parents /$LIBDIR/libselinux.so.1 root/ + cp -a --parents /$LIBDIR/librt.so.1 root/ + cp -a --parents /$LIBDIR/librt-2.12.so root/ + cp -a --parents /usr/$LIBDIR/libgmp.so.3 root/ + cp -a --parents /usr/$LIBDIR/libgmp.so.3.5.0 root/ + + fi chown qmails:qmail root/var/qmail/queue/lock/trigger