<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/837d1cf79d447bc4e692d5b5bb1f4e50cce01462">https://github.com/macports/macports-ports/commit/837d1cf79d447bc4e692d5b5bb1f4e50cce01462</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 837d1cf mail-server: Add logrotate variant and fix launch daemon issue
</span>837d1cf is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 837d1cf79d447bc4e692d5b5bb1f4e50cce01462
</span>Author: Steven Thomas Smith <s.t.smith@ieee.org>
AuthorDate: Thu Apr 2 17:08:25 2020 -0400
<span style='display:block; white-space:pre;color:#404040;'> mail-server: Add logrotate variant and fix launch daemon issue
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> * Add +logrotate variant with its own launch daemon
</span><span style='display:block; white-space:pre;color:#404040;'> * Fixes https://trac.macports.org/ticket/60273
</span>---
mail/mail-server/Portfile | 185 ++++++++++++++++++++++++++++++----------------
1 file changed, 122 insertions(+), 63 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/mail/mail-server/Portfile b/mail/mail-server/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 4f408ec..8a86576 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/mail/mail-server/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/mail/mail-server/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4,7 +4,7 @@ PortSystem 1.0
</span> PortGroup active_variants 1.1
name mail-server
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version 1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version 1.2
</span> revision 0
categories mail net
platforms darwin
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -32,7 +32,6 @@ set dovecot_required_variants \
</span> depends_lib-append port:dcc \
port:dovecot \
port:dovecot-sieve \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- port:logrotate \
</span> path:lib/libssl.dylib:openssl \
port:postfix \
port:rspamd \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -61,6 +60,11 @@ variant initialize_always \
</span> "
}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+variant logrotate \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ description {Use mail-server logrotate configuration.} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ depends_lib-append port:logrotate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> use_configure no
pre-build {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -276,22 +280,24 @@ destroot {
</span> }
# logrotate
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach d {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logrotate.d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 0755 -d ${destroot}${prefix}/etc/${d}.macports
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach f [glob -nocomplain ${filespath}/prefix/etc/${d}/*] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if {[file isfile ${f}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 0644 ${f} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${destroot}${prefix}/etc/${d}.macports/[file tail ${f}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if { [variant_isset "logrotate"] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach d {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ logrotate.d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0755 -d ${destroot}${prefix}/etc/${d}.macports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach f [glob -nocomplain ${filespath}/prefix/etc/${d}/*] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file isfile ${f}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0644 ${f} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${destroot}${prefix}/etc/${d}.macports/[file tail ${f}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
}
<span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach f {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logrotate.conf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 0644 ${filespath}/prefix/etc/${f} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${destroot}${prefix}/etc/${f}.macports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach f {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ logrotate.conf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ xinstall -m 0644 ${filespath}/prefix/etc/${f} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ${destroot}${prefix}/etc/${f}.macports
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
# TLS certificate surrogate
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -320,6 +326,14 @@ destroot {
</span>
destroot.keepdirs ${destroot}${prefix}/var/log/mail
<span style='display:block; white-space:pre;background:#e0ffe0;'>+proc plutil_startup {plcmds label} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ global prefix startupitem.location
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach cmd ${plcmds} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ system -W ${prefix}/etc/${startupitem.location}/${label} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "/usr/bin/plutil ${cmd} ${label}.plist"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # Network configuration
# hard-coded examples
set host host
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -335,12 +349,41 @@ set DOMAINTLD [string toupper ${domaintld}]
</span> set relayhost mymailrelay.tld
post-activate {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ # modify the launch daemons
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ plutil_startup [list \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-remove KeepAlive" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-insert RunAtLoad -bool YES" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ org.macports.${name}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Cf. port logrotate's ${prefix}/share/logrotate/org.macports.logrotate.plist.example
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if { [variant_isset "logrotate"] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ plutil_startup [list \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-remove KeepAlive" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-insert RunAtLoad -bool YES" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-replace ProgramArguments \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -xml '<array> \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <string>${prefix}/sbin/logrotate</string> \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <string>${prefix}/etc/logrotate.conf</string> \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ </array>'" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ "-insert StartCalendarInterval \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -xml '<dict> \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <key>Hour</key> \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <integer>5</integer> \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <key>Minute</key> \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ <integer>30</integer> \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ </dict>'" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ org.macports.${name}.logrotate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # use network settings for installed example configuration
set fullhost [exec /bin/hostname -f]
<span style='display:block; white-space:pre;background:#ffe0e0;'>- set host [lindex [split ${fullhost} .] 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set domaintld [join [lrange [split ${fullhost} .] 1 end] .]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set domain [lindex [split ${domaintld} .] 0]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- set tld [lindex [split ${domaintld} .] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if { [llength [split ${fullhost} .]] >= 3 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set host [lindex [split ${fullhost} .] 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set domaintld [join [lrange [split ${fullhost} .] 1 end] .]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set domain [lindex [split ${domaintld} .] 0]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tld [lindex [split ${domaintld} .] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> set HOST [string toupper ${host}]
set DOMAIN [string toupper ${domain}]
set TLD [string toupper ${tld}]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -511,16 +554,13 @@ SOLR_DELETE_DOVECOT
</span> }
# logrotate configuration
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach f_or_d {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logrotate.conf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logrotate.d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- install_initial_configuration ${prefix}/etc/${f_or_d}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if { ![file exists /Library/LaunchDaemons/org.macports.logrotate.plist] } {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- xinstall -m 0644 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ${prefix}/share/logrotate/org.macports.logrotate.plist.example \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- /Library/LaunchDaemons/org.macports.logrotate.plist
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if { [variant_isset "logrotate"] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach f_or_d {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ logrotate.conf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ logrotate.d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ install_initial_configuration ${prefix}/etc/${f_or_d}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
# TLS certificate surrogate -- certificate authority chain of trust
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -682,14 +722,19 @@ TLS_CERTIFICATE_SURROGATE
</span> ${certificates_dir}/${fullhost}.${certificate_sha1}.chain.pem
# configure all template files with local settings
<span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach d_or_f {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- postfix
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- dovecot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- rspamd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- redis.conf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logrotate.conf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- logrotate.d
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set d_or_f_templates { \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ postfix \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dovecot \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rspamd \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ redis.conf \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if { [variant_isset "logrotate"] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ append d_or_f_templates { \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ logrotate.conf \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ logrotate.d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach d_or_f ${d_or_f_templates} {
</span> fs-traverse f ${prefix}/etc/${d_or_f} {
if { [file isfile ${f}]
&& ![string match ".macports" ${f}]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -773,12 +818,40 @@ in ${prefix}/etc/dovecot/sieve*/*.sieve are compiled with sievec.
</span> _rspamd
} {
system "dseditgroup -o edit -a ${u} -t user mail"
<span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-startupitem.create yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+startupitem.create yes
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>-startupitem.start "port load clamav-server
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if { [variant_isset "logrotate"] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ startupitems \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ name ${name} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ start "port load clamav-server
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport load apache-solr8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport load redis
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport load dcc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport load postfix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport load dovecot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport load rspamd" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ stop "port unload apache-solr8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport unload dcc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport unload postfix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport unload dovecot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport unload rspamd" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ restart "port reload apache-solr8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport reload redis
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport reload dcc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport unload postfix ; \\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tsleep 1 ; \\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport load postfix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport unload dovecot ; \\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tsleep 1 ; \\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport load dovecot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+\tport reload rspamd" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ name ${name}.logrotate \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ executable ${prefix}/sbin/logrotate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+} else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ startupitem.start "port load clamav-server
</span> \tport load apache-solr8
\tport load redis
\tport load dcc
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -786,13 +859,13 @@ startupitem.start "port load clamav-server
</span> \tport load dovecot
\tport load rspamd"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-startupitem.stop "port unload apache-solr8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ startupitem.stop "port unload apache-solr8
</span> \tport unload dcc
\tport unload postfix
\tport unload dovecot
\tport unload rspamd"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-startupitem.restart "port reload apache-solr8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ startupitem.restart "port reload apache-solr8
</span> \tport reload redis
\tport reload dcc
\tport unload postfix ; \\
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -802,22 +875,6 @@ startupitem.restart "port reload apache-solr8
</span> \tsleep 1 ; \\
\tport load dovecot
\tport reload rspamd"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-proc plutil_startup {plcmds label} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- global prefix startupitem.location
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- foreach cmd ${plcmds} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- system -W ${prefix}/etc/${startupitem.location}/${label} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "/usr/bin/plutil ${cmd} ${label}.plist"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-post-activate {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # modify the launch daemons
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- plutil_startup [list \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "-remove KeepAlive" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- "-insert RunAtLoad -bool YES" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ] \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- org.macports.${startupitem.name}
</span> }
notes "A mail server is a complex, interdependent set of tools that must\
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -877,13 +934,15 @@ that must be changed before deployment.
</span> DKIM:
${prefix}/var/lib/rspamd/dkim
<span style='display:block; white-space:pre;background:#ffe0e0;'>-The ports dns-server and logrotate provide necessary DNS service on the LAN\
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-and log rotation capabilities:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The ports dns-server provide necessary DNS service on the LAN; variant\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++logrotate provides log rotation capabilities:
</span>
<span style='display:block; white-space:pre;background:#ffe0e0;'>- sudo port install dns-server logrotate
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sudo port install dns-server
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sudo port install mail-server +logrotate
</span>
This port assume indepedent installation and management of DNS and\
<span style='display:block; white-space:pre;background:#ffe0e0;'>-log rotation; mail-server includes example logrotate configuration files.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+log rotation; mail-server includes example logrotate configuration files\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+and a logroate launchdaemon.
</span>
The port's launch daemon controls launching for each of the dependendent\
services. These may be controlled independently, e.g.
</pre><pre style='margin:0'>
</pre>