remove postfix support since i dont use it
authorIan Kelling <ian@iankelling.org>
Sat, 20 Jul 2019 15:35:35 +0000 (11:35 -0400)
committerIan Kelling <ian@iankelling.org>
Sat, 20 Jul 2019 15:36:07 +0000 (11:36 -0400)
distro-begin
mail-setup
primary-setup

index 690bf856a220662054407508ccd554ac58aef350..ec39e9d1160a610c10fa07ffd9ece72b38e62410 100755 (executable)
@@ -512,12 +512,7 @@ fi
 
 
 ##### setup email
-if isdeb; then
-  mail-setup exim4
-else
-  # todo: probably broken
-  mail-setup postfix
-fi
+mail-setup
 
 #### ubuntu nicety
 if isubuntu; then
index 9b30579ba5c002062e386dfe5055f6bc69169f97..c062362c18b70409db760268fc74a0ef40ea167b 100755 (executable)
@@ -30,32 +30,17 @@ u=$SUDO_USER
 
 usage() {
   cat <<EOF
-Usage: ${0##*/} exim4|postfix
-Setup exim4 / postfix / dovecot
+Usage: ${0##*/}
+Setup exim4 & dovecot & related things
 
 The minimal assumption we have is that /etc/mailpass exists
 
 
-I've had problems with postfix on debian:
-on stretch, a startup ordering issue caused all mail to fail.
-postfix changed defaults to only use ipv6 dns, causing all my mail to fail.
-I haven't gotten around to getting a non-debian exim
-setup.
-
-
-
 -h|--help  Print help and exit.
 EOF
   exit $1
 }
 
-type=$1
-postfix() { [[ $type == postfix ]]; }
-exim() { [[ $type == exim4 ]]; }
-
-if ! exim && ! postfix; then
-  usage 1
-fi
 
 
 ####### instructions for icedove #####
@@ -222,7 +207,6 @@ forward=$u@$mxhost
 # mxport=587
 # forward=ian@iankelling.org
 
-relayhost="[$mxhost]:$mxport" # postfix
 smarthost="$mxhost::$mxport" # exim
 
 # trisquel 8 = openvpn, debian stretch = openvpn-client
@@ -241,96 +225,27 @@ else
   install -m 644 {-o,-g}$postmaster <(e $forward) $(eval echo ~$postmaster)/.forward
 fi
 
-# offlineimap uses this too, it is much easier to use one location than to
-# condition it\'s config and postfix\'s config
-if [[ -f /etc/fedora-release ]]; then
-  /a/exe/lnf -T ca-certificates.crt /etc/ssl/ca-bundle.trust.crt
-fi
 
-if postfix; then
-  # dunno why, but debian installed postfix with builddep emacs
-  # but I will just explicitly install it here since
-  # I use it for sending mail in emacs.
-  if command -v apt-get &> /dev/null; then
-    debconf-set-selections <<EOF
-postfix postfix/main_mailer_type select Satellite system
-postfix postfix/mailname string $(hostname -f)
-postfix postfix/relayhost string $relayhost
-postfix postfix/root_address string $postmaster
-EOF
-    if dpkg -s postfix &>/dev/null; then
-      while fuser /var/lib/dpkg/lock &>/dev/null; do sleep 1; done
-      dpkg-reconfigure -u -fnoninteractive postfix
-    else
-      pi postfix
-    fi
-  else
-    source /a/bin/distro-functions/src/package-manager-abstractions
-    pi postfix
-    # Settings from reading the output when installing on debian,
-    # then seeing which were different in a default install on arch.
-    # I assume the same works for fedora.
-    postconfin <<EOF
-mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
-mailbox_size_limit = 0
-relayhost = $relayhost
-inet_interfaces = loopback-only
-EOF
+pi openvpn
 
-    systemctl enable postfix
-    systemctl start postfix
-  fi
-  # i\'m assuming mail just won\'t work on systems without the sasl_passwd.
-  postconfin <<'EOF'
-smtp_sasl_auth_enable = yes
-smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
-smtp_sasl_security_options = noanonymous
-smtp_tls_security_level = secure
-message_size_limit =  20480000
-smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
-inet_protocols = ipv4
-EOF
-  # msg_size_limit: I ran into a log file not sending cuz of size. double from 10 to 20 meg limit
-  # inet_protocols: without this, I\'ve had postfix try an ipv6 lookup then gives
-  # up and fail forever. snippet from syslog: type=AAAA: Host not found, try again
-
-
-  f=/etc/postfix/sasl_passwd
-  install -m 600 /dev/null $f
-  cat /etc/mailpass| while read -r domain port pass; do
-    # format: domain port user:pass
-    # mailpass is just a name i made up, since postfix and
-    # exim both use a slightly crazy format to translate to
-    # each other, it\'s easier to use my own format.
-    printf "[%s]:%s %s" "$domain" "$port" "${pass/@/#}" >>$f
-  done
-  postmap hash:/etc/postfix/sasl_passwd
-  # need restart instead of reload when changing
-  # inet_protocols
-  service postfix restart
-
-else # begin exim. has debian specific stuff for now
-
-  pi openvpn
-
-  if [[ -e /p/c/filesystem ]]; then
-    # allow failure of these commands when our internet is down, they are likely not needed,
-    # we check that a valid cert is there already.
-    # to put the hostname in the known hosts
-    if ! ssh -o StrictHostKeyChecking=no root@li.iankelling.org :; then
-      # This just causes failure if our cert is going to expire in the next 30 days.
-      # Certs I generate last 10 years.
-      openssl x509 -checkend $(( 60 * 60 * 24 * 30 )) -noout -in /etc/openvpn/mail.crt
-    else
-      # note, man openvpn implies we could just call mail-route on vpn startup/shutdown with
-      # systemd, buuut it can remake the tun device unexpectedly, i got this in the log
-      # after my internet was down for a bit:
-      # NOTE: Pulled options changed on restart, will need to close and reopen TUN/TAP device.
-      /a/exe/vpn-mk-client-cert -b mail -n mail -s /b/ds/mail-route li.iankelling.org
-    fi
+if [[ -e /p/c/filesystem ]]; then
+  # allow failure of these commands when our internet is down, they are likely not needed,
+  # we check that a valid cert is there already.
+  # to put the hostname in the known hosts
+  if ! ssh -o StrictHostKeyChecking=no root@li.iankelling.org :; then
+    # This just causes failure if our cert is going to expire in the next 30 days.
+    # Certs I generate last 10 years.
+    openssl x509 -checkend $(( 60 * 60 * 24 * 30 )) -noout -in /etc/openvpn/mail.crt
+  else
+    # note, man openvpn implies we could just call mail-route on vpn startup/shutdown with
+    # systemd, buuut it can remake the tun device unexpectedly, i got this in the log
+    # after my internet was down for a bit:
+    # NOTE: Pulled options changed on restart, will need to close and reopen TUN/TAP device.
+    /a/exe/vpn-mk-client-cert -b mail -n mail -s /b/ds/mail-route li.iankelling.org
   fi
+fi
 
-  cat >/etc/systemd/system/offlineimapsync.timer <<'EOF'
+cat >/etc/systemd/system/offlineimapsync.timer <<'EOF'
 [Unit]
 Description=Run offlineimap-sync once every min
 
@@ -341,7 +256,7 @@ OnCalendar=*:0/1
 WantedBy=timers.target
 EOF
 
-  cat >/etc/systemd/system/offlineimapsync.service <<EOF
+cat >/etc/systemd/system/offlineimapsync.service <<EOF
 [Unit]
 Description=Offlineimap sync
 After=multi-user.target
@@ -352,7 +267,7 @@ Type=oneshot
 ExecStart=/a/bin/log-quiet/sysd-mail-once offlineimap-sync /a/bin/distro-setup/offlineimap-sync
 EOF
 
-  cat >/etc/systemd/system/mailclean.timer <<'EOF'
+cat >/etc/systemd/system/mailclean.timer <<'EOF'
 [Unit]
 Description=Run mailclean daily
 
@@ -363,7 +278,7 @@ OnCalendar=monthly
 WantedBy=timers.target
 EOF
 
-  cat >/etc/systemd/system/mailclean.service <<EOF
+cat >/etc/systemd/system/mailclean.service <<EOF
 [Unit]
 Description=Delete and archive old mail files
 After=multi-user.target
@@ -374,41 +289,41 @@ Type=oneshot
 ExecStart=/a/bin/log-quiet/sysd-mail-once mailclean /a/bin/distro-setup/mailclean
 EOF
 
-  systemctl daemon-reload
-
-  # wording of question from dpkg-reconfigure exim4-config
-  # 1. internet site; mail is sent and received directly using SMTP
-  # 2. mail sent by smarthost; received via SMTP or fetchmail
-  # 3. mail sent by smarthost; no local mail
-  # 4. local delivery only; not on a network
-  # 5. no configuration at this time
-  #
-  # Note, I have used option 2 in the past for receiving mail
-  # from lan hosts, sending external mail via another smtp server.
-  #
-  # Note, other than configtype, we could set all the options in
-  # both types of configs without harm, they would either be
-  # ignored or be disabled by other settings, but the default
-  # local_interfaces definitely makes things more secure.
-
-  # most of these settings get translated into settings
-  # in /etc/exim4/update-exim4.conf.conf
-  # how /etc/exim4/update-exim4.conf.conf translates into actual exim settings is
-  # documented in man update-exim4.conf, which outputs to the config that
-  # exim actually reads. except the man page is not perfect, for example,
-  # it doesn't document that it sets
-  # DCconfig_${dc_eximconfig_configtype}" "1"
-  # which is a line from update-exim4.conf, which is a relatively short bash script.
-  # mailname setting sets /etc/mailname
+systemctl daemon-reload
 
-  debconf-set-selections <<EOF
+# wording of question from dpkg-reconfigure exim4-config
+# 1. internet site; mail is sent and received directly using SMTP
+# 2. mail sent by smarthost; received via SMTP or fetchmail
+# 3. mail sent by smarthost; no local mail
+# 4. local delivery only; not on a network
+# 5. no configuration at this time
+#
+# Note, I have used option 2 in the past for receiving mail
+# from lan hosts, sending external mail via another smtp server.
+#
+# Note, other than configtype, we could set all the options in
+# both types of configs without harm, they would either be
+# ignored or be disabled by other settings, but the default
+# local_interfaces definitely makes things more secure.
+
+# most of these settings get translated into settings
+# in /etc/exim4/update-exim4.conf.conf
+# how /etc/exim4/update-exim4.conf.conf translates into actual exim settings is
+# documented in man update-exim4.conf, which outputs to the config that
+# exim actually reads. except the man page is not perfect, for example,
+# it doesn't document that it sets
+# DCconfig_${dc_eximconfig_configtype}" "1"
+# which is a line from update-exim4.conf, which is a relatively short bash script.
+# mailname setting sets /etc/mailname
+
+debconf-set-selections <<EOF
 exim4-config exim4/use_split_config boolean true
 EOF
 
-  source /a/bin/bash_unpublished/source-semi-priv
-  mkdir -p /etc/exim4/conf.d/{main,transport,auth,router}
+source /a/bin/bash_unpublished/source-semi-priv
+mkdir -p /etc/exim4/conf.d/{main,transport,auth,router}
 
-  cat >/etc/exim4/rcpt_local_acl <<'EOF'
+cat >/etc/exim4/rcpt_local_acl <<'EOF'
 # Only hosts we control send to mail.iankelling.org, so make sure
 # they are all authed.
 # Note, if we wanted authed senders for all domains,
@@ -418,7 +333,7 @@ deny
   !authenticated = *
   domains = mail.iankelling.org
 EOF
-  cat >/etc/exim4/data_local_acl <<'EOF'
+cat >/etc/exim4/data_local_acl <<'EOF'
 # Except for the "condition =", this was
 # a comment in the check_data acl. The comment about this not
 # being suitable is mostly bs. The only thing related I found was to
@@ -437,7 +352,7 @@ EOF
               X-Spam_report: $spam_report
 
 EOF
-  cat >/etc/exim4/conf.d/auth/29_exim4-config_auth <<'EOF'
+cat >/etc/exim4/conf.d/auth/29_exim4-config_auth <<'EOF'
 # from 30_exim4-config_examples
 
 plain_server:
@@ -451,7 +366,7 @@ server_advertise_condition = ${if eq{$tls_in_cipher}{}{}{*}}
 .endif
 EOF
 
-  cat >/etc/exim4/conf.d/router/900_exim4-config_local_user <<'EOF'
+cat >/etc/exim4/conf.d/router/900_exim4-config_local_user <<'EOF'
 ### router/900_exim4-config_local_user
 #################################
 
@@ -469,7 +384,7 @@ local_user:
   transport = LOCAL_DELIVERY
   cannot_route_message = Unknown user
 EOF
-  cat >/etc/exim4/conf.d/transport/30_exim4-config_dovecot_lmtp <<'EOF'
+cat >/etc/exim4/conf.d/transport/30_exim4-config_dovecot_lmtp <<'EOF'
 dovecot_lmtp:
         driver = lmtp
         socket = /var/run/dovecot/lmtp
@@ -477,7 +392,7 @@ dovecot_lmtp:
         batch_max = 200
 EOF
 
-  cat >/etc/exim4/conf.d/router/190_exim4-config_fsfsmarthost <<'EOF'
+cat >/etc/exim4/conf.d/router/190_exim4-config_fsfsmarthost <<'EOF'
 # smarthost for fsf mail
 # ian: copied from /etc/exim4/conf.d/router/200_exim4-config_primary, and added senders = and
 # replaced DCsmarthost with mail.fsf.org
@@ -494,9 +409,9 @@ fsfsmarthost:
 EOF
 
 
-  #### begin mail cert setup ###
-  f=/usr/local/bin/mail-cert-cron
-  cat >$f <<'EOF'
+#### begin mail cert setup ###
+f=/usr/local/bin/mail-cert-cron
+cat >$f <<'EOF'
 set -eE -o pipefail
 trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
 
@@ -526,9 +441,9 @@ if [[ $new_ret != 0 ]]; then
 fi
 exit 0
 EOF
-  chmod 755 $f
+chmod 755 $f
 
-  cat >/etc/systemd/system/mailcert.service <<'EOF'
+cat >/etc/systemd/system/mailcert.service <<'EOF'
 [Unit]
 Description=Mail cert rsync
 After=multi-user.target
@@ -538,7 +453,7 @@ Type=oneshot
 ExecStart=/a/bin/log-quiet/sysd-mail-once mailcert /usr/local/bin/mail-cert-cron
 EOF
 
-  cat >/etc/systemd/system/mailcert.timer <<'EOF'
+cat >/etc/systemd/system/mailcert.timer <<'EOF'
 [Unit]
 Description=Run mail-cert once a day
 
@@ -548,18 +463,18 @@ OnCalendar=daily
 [Install]
 WantedBy=timers.target
 EOF
-  systemctl daemon-reload
-  systemctl start mailcert
-  systemctl restart mailcert.timer
-  systemctl enable mailcert.timer
+systemctl daemon-reload
+systemctl start mailcert
+systemctl restart mailcert.timer
+systemctl enable mailcert.timer
 
-  ##### end mailcert setup #####
+##### end mailcert setup #####
 
 
 
-  if [[ $HOSTNAME == $MAIL_HOST ]]; then
+if [[ $HOSTNAME == $MAIL_HOST ]]; then
 
-    debconf-set-selections <<EOF
+  debconf-set-selections <<EOF
 # Mail Server configuration
 # -------------------------
 
@@ -669,13 +584,13 @@ exim4-config exim4/dc_postmaster string $postmaster
 # Delivery method for local mail: 2
 exim4-config exim4/dc_localdelivery select Maildir format in home directory
 EOF
-    echo mail.iankelling.org > /etc/mailname
+  echo mail.iankelling.org > /etc/mailname
 
-    # MAIN_HARDCODE_PRIMARY_HOSTNAME might mess up the
-    # smarthost config type, not sure. all other settings
-    # would be unused in that config type.
-    rm -f /etc/exim4/conf.d/main/000_localmacros # old filename
-    cat >/etc/exim4/conf.d/main/000_local <<EOF
+  # MAIN_HARDCODE_PRIMARY_HOSTNAME might mess up the
+  # smarthost config type, not sure. all other settings
+  # would be unused in that config type.
+  rm -f /etc/exim4/conf.d/main/000_localmacros # old filename
+  cat >/etc/exim4/conf.d/main/000_local <<EOF
 # enable 587 in addition to the default 25, so that
 # i can send mail where port 25 is firewalled by isp
 daemon_smtp_ports = 25 : 587
@@ -744,31 +659,31 @@ CHECK_MAIL_HELO_ISSUED = true
 EOF
 
 
-    ####### begin dovecot setup ########
-    # based on a little google and package search, just the dovecot
-    # packages we need instead of dovecot-common.
-    #
-    # dovecot-lmtpd is for exim to deliver to dovecot instead of maildir
-    # directly.  The reason to do this is to use dovecot\'s sieve, which
-    # has extensions that allow it to be almost equivalent to exim\'s
-    # filter capabilities, some ways probably better, some worse, and
-    # sieve has the benefit of being supported in postfix and
-    # proprietary/weird environments, so there is more examples on the
-    # internet. I was torn about whether to do this or not, meh.
-    pi dovecot-core dovecot-imapd dovecot-sieve dovecot-lmtpd
-
-    # if we changed 90-sieve.conf and removed the active part of the
-    # sieve option, we wouldn\'t need this, but I\'d rather not modify a
-    # default config if not needed. This won\'t work as a symlink in /a/c
-    # unfortunately.
-    sudo -u $postmaster /a/exe/lnf -T sieve/main.sieve $(eval echo ~$postmaster)/.dovecot.sieve
-
-    sed -ri -f - /etc/dovecot/conf.d/10-mail.conf <<'EOF'
+  ####### begin dovecot setup ########
+  # based on a little google and package search, just the dovecot
+  # packages we need instead of dovecot-common.
+  #
+  # dovecot-lmtpd is for exim to deliver to dovecot instead of maildir
+  # directly.  The reason to do this is to use dovecot\'s sieve, which
+  # has extensions that allow it to be almost equivalent to exim\'s
+  # filter capabilities, some ways probably better, some worse, and
+  # sieve has the benefit of being supported in postfix and
+  # proprietary/weird environments, so there is more examples on the
+  # internet. I was torn about whether to do this or not, meh.
+  pi dovecot-core dovecot-imapd dovecot-sieve dovecot-lmtpd
+
+  # if we changed 90-sieve.conf and removed the active part of the
+  # sieve option, we wouldn\'t need this, but I\'d rather not modify a
+  # default config if not needed. This won\'t work as a symlink in /a/c
+  # unfortunately.
+  sudo -u $postmaster /a/exe/lnf -T sieve/main.sieve $(eval echo ~$postmaster)/.dovecot.sieve
+
+  sed -ri -f - /etc/dovecot/conf.d/10-mail.conf <<'EOF'
 1i mail_location = maildir:/m/md:LAYOUT=fs:INBOX=/m/md/INBOX
 /^\s*mail_location\s*=/d
 EOF
 
-    cat >/etc/dovecot/conf.d/20-lmtp.conf <<EOF
+  cat >/etc/dovecot/conf.d/20-lmtp.conf <<EOF
 protocol lmtp {
 #per https://wiki2.dovecot.org/Pigeonhole/Sieve/Configuration
   mail_plugins = \$mail_plugins sieve
@@ -806,7 +721,7 @@ protocol lmtp {
 EOF
 
 
-    cat >/etc/dovecot/local.conf <<'EOF'
+  cat >/etc/dovecot/local.conf <<'EOF'
 # so I can use a different login that my shell login for mail.  this is
 # worth doing solely for the reason that if this login is compromised,
 # it won't also compromise my shell password.
@@ -828,12 +743,12 @@ ssl_prefer_server_ciphers = yes
 # auth_verbose=yes
 #mail_debug=yes
 EOF
-    ####### end dovecot setup ########
+  ####### end dovecot setup ########
 
-    # https://selivan.github.io/2017/12/30/systemd-serice-always-restart.html
-    d=/etc/systemd/system/openvpn@mail
-    mkdir -p $d
-    cat >$d/override.conf <<'EOF'
+  # https://selivan.github.io/2017/12/30/systemd-serice-always-restart.html
+  d=/etc/systemd/system/openvpn@mail
+  mkdir -p $d
+  cat >$d/override.conf <<'EOF'
 [Service]
 Restart=always
 # time to sleep before restarting a service
@@ -844,30 +759,30 @@ RestartSec=1
 StartLimitInterval=0
 EOF
 
-    systemctl enable offlineimapsync.timer
-    systemctl start offlineimapsync.timer
-    systemctl enable mailclean.timer
-    systemctl start mailclean.timer
-    systemctl restart $vpn_ser@mail
-    systemctl enable $vpn_ser@mail
-    systemctl enable dovecot
-    systemctl restart dovecot
-
-  else # $HOSTNAME != $MAIL_HOST
-    systemctl disable offlineimapsync.timer &>/dev/null ||:
-    systemctl stop offlineimapsync.timer &>/dev/null ||:
-    systemctl disable mailclean.timer &>/dev/null ||:
-    systemctl stop mailclean.timer &>/dev/null ||:
-    systemctl disable $vpn_ser@mail
-    systemctl stop $vpn_ser@mail
-    systemctl disable dovecot ||:
-    systemctl stop dovecot ||:
-    #
-    #
-    # would only exist because I wrote it i the previous condition,
-    # it\'s not part of exim
-    rm -f /etc/exim4/conf.d/main/000_localmacros
-    debconf-set-selections <<EOF
+  systemctl enable offlineimapsync.timer
+  systemctl start offlineimapsync.timer
+  systemctl enable mailclean.timer
+  systemctl start mailclean.timer
+  systemctl restart $vpn_ser@mail
+  systemctl enable $vpn_ser@mail
+  systemctl enable dovecot
+  systemctl restart dovecot
+
+else # $HOSTNAME != $MAIL_HOST
+  systemctl disable offlineimapsync.timer &>/dev/null ||:
+  systemctl stop offlineimapsync.timer &>/dev/null ||:
+  systemctl disable mailclean.timer &>/dev/null ||:
+  systemctl stop mailclean.timer &>/dev/null ||:
+  systemctl disable $vpn_ser@mail
+  systemctl stop $vpn_ser@mail
+  systemctl disable dovecot ||:
+  systemctl stop dovecot ||:
+  #
+  #
+  # would only exist because I wrote it i the previous condition,
+  # it\'s not part of exim
+  rm -f /etc/exim4/conf.d/main/000_localmacros
+  debconf-set-selections <<EOF
 exim4-config exim4/dc_eximconfig_configtype select mail sent by smarthost; no local mail
 exim4-config exim4/dc_smarthost string $smarthost
 # afaik, on dpkg-reconfigure noninteractive, this sets /etc/mailname if it does not exist.
@@ -876,55 +791,55 @@ exim4-config exim4/dc_smarthost string $smarthost
 # ignoring what I set here is brain dead and might change.
 exim4-config exim4/mailname string $(hostname -f)
 EOF
-    hostname -f > /etc/mailname
+  hostname -f > /etc/mailname
 
-  fi # end $HOSTNAME != $MAIL_HOST
+fi # end $HOSTNAME != $MAIL_HOST
 
-  # if we already have it installed, need to reconfigure, without being prompted
-  if dpkg -s exim4-config &>/dev/null; then
-    # gotta remove this, otherwise the set-selections are completely
-    # ignored. It woulda been nice if this was documented somewhere!
-    rm -f /etc/exim4/update-exim4.conf.conf
-    while fuser /var/lib/dpkg/lock &>/dev/null; do sleep 1; done
-    dpkg-reconfigure -u -fnoninteractive exim4-config
-  fi
+# if we already have it installed, need to reconfigure, without being prompted
+if dpkg -s exim4-config &>/dev/null; then
+  # gotta remove this, otherwise the set-selections are completely
+  # ignored. It woulda been nice if this was documented somewhere!
+  rm -f /etc/exim4/update-exim4.conf.conf
+  while fuser /var/lib/dpkg/lock &>/dev/null; do sleep 1; done
+  dpkg-reconfigure -u -fnoninteractive exim4-config
+fi
 
-  # i have the spool directory be common to distro multi-boot, so
-  # we need the uid to be the same. 608 cuz it's kind of in the middle
-  # of the free system uids.
-  IFS=:; read _ _ uid _ < <(getent passwd Debian-exim ||:) ||:; unset IFS
-  IFS=:; read _ _ gid _ < <(getent group Debian-exim ||:) ||:; unset IFS
-  if [[ ! $uid ]]; then
-    # from /var/lib/dpkg/info/exim4-base.postinst, plus uid and gid options
-    adduser --uid 608 --system --group --quiet --home /var/spool/exim4 \
-           --no-create-home --disabled-login --force-badname Debian-exim
-  elif [[ $uid != 608 ]]; then
-    systemctl stop exim4 ||:
-    usermod -u 608 Debian-exim
-    groupmod -g 608 Debian-exim
-    usermod -g 608 Debian-exim
-    find / /nocow -xdev -uid $uid -exec chown -h 608 {} +
-    find / /nocow -xdev -gid $gid -exec chgrp -h 608 {} +
-  fi
+# i have the spool directory be common to distro multi-boot, so
+# we need the uid to be the same. 608 cuz it's kind of in the middle
+# of the free system uids.
+IFS=:; read _ _ uid _ < <(getent passwd Debian-exim ||:) ||:; unset IFS
+IFS=:; read _ _ gid _ < <(getent group Debian-exim ||:) ||:; unset IFS
+if [[ ! $uid ]]; then
+  # from /var/lib/dpkg/info/exim4-base.postinst, plus uid and gid options
+  adduser --uid 608 --system --group --quiet --home /var/spool/exim4 \
+         --no-create-home --disabled-login --force-badname Debian-exim
+elif [[ $uid != 608 ]]; then
+  systemctl stop exim4 ||:
+  usermod -u 608 Debian-exim
+  groupmod -g 608 Debian-exim
+  usermod -g 608 Debian-exim
+  find / /nocow -xdev -uid $uid -exec chown -h 608 {} +
+  find / /nocow -xdev -gid $gid -exec chgrp -h 608 {} +
+fi
 
 
-  # light version of exim does not have sasl auth support.
-  pi exim4-daemon-heavy spamassassin spf-tools-perl
+# light version of exim does not have sasl auth support.
+pi exim4-daemon-heavy spamassassin spf-tools-perl
 
 
 
-  ##### begin spamassassin config
-  systemctl enable spamassassin
-  # per readme.debian
-  sed -i '/^\s*CRON\s*=/d' /etc/default/spamassassin
-  e CRON=1 >>/etc/default/spamassassin
-  # just noticed this in the config file, seems like a good idea.
-  sed -i '/^\s*NICE\s*=/d' /etc/default/spamassassin
-  e 'NICE="--nicelevel 15"' >>/etc/default/spamassassin
-  systemctl start spamassassin
-  systemctl reload spamassassin
+##### begin spamassassin config
+systemctl enable spamassassin
+# per readme.debian
+sed -i '/^\s*CRON\s*=/d' /etc/default/spamassassin
+e CRON=1 >>/etc/default/spamassassin
+# just noticed this in the config file, seems like a good idea.
+sed -i '/^\s*NICE\s*=/d' /etc/default/spamassassin
+e 'NICE="--nicelevel 15"' >>/etc/default/spamassassin
+systemctl start spamassassin
+systemctl reload spamassassin
 
-  cat >/etc/systemd/system/spamddnsfix.service <<'EOF'
+cat >/etc/systemd/system/spamddnsfix.service <<'EOF'
 [Unit]
 Description=spamd dns bug fix cronjob
 
@@ -932,10 +847,10 @@ Description=spamd dns bug fix cronjob
 Type=oneshot
 ExecStart=/a/bin/distro-setup/spamd-dns-fix
 EOF
-  # 2017-09, debian closed the bug on this saying upstream had fixed it.
-  # remove this when i\'m using the newer package, ie, debian 10, or maybe
-  # ubuntu 18.04.
-  cat >/etc/systemd/system/spamddnsfix.timer <<'EOF'
+# 2017-09, debian closed the bug on this saying upstream had fixed it.
+# remove this when i\'m using the newer package, ie, debian 10, or maybe
+# ubuntu 18.04.
+cat >/etc/systemd/system/spamddnsfix.timer <<'EOF'
 [Unit]
 Description=run spamd bug fix script every 10 minutes
 
@@ -949,39 +864,37 @@ OnUnitActiveSec=550
 [Install]
 WantedBy=timers.target
 EOF
-  systemctl daemon-reload
-  systemctl restart spamddnsfix.timer
-  systemctl enable spamddnsfix.timer
-  #
-  #####   end spamassassin config
-
+systemctl daemon-reload
+systemctl restart spamddnsfix.timer
+systemctl enable spamddnsfix.timer
+#
+#####   end spamassassin config
 
 
 
 
-  # https://blog.dhampir.no/content/make-exim4-on-debian-respect-forward-and-etcaliases-when-using-a-smarthost
-  # i only need .forwards, so just doing that one.
-  cd /etc/exim4/conf.d/router
-  b=userforward_higher_priority
-  # replace the router name so it is unique
-  sed -r s/^\\S+:/$b:/ 600_exim4-config_userforward >175_$b
 
-  # begin setup passwd.client
-  f=/etc/exim4/passwd.client
-  rm -f /etc/exim4/passwd.client
-  install -m 640 -g Debian-exim /dev/null $f
-  cat /etc/mailpass| while read -r domain port pass; do
-    # reference: exim4_passwd_client(5)
-    printf "%s:%s\n" "$domain" "$pass" >>$f
-  done
-  # end setup passwd.client
+# https://blog.dhampir.no/content/make-exim4-on-debian-respect-forward-and-etcaliases-when-using-a-smarthost
+# i only need .forwards, so just doing that one.
+cd /etc/exim4/conf.d/router
+b=userforward_higher_priority
+# replace the router name so it is unique
+sed -r s/^\\S+:/$b:/ 600_exim4-config_userforward >175_$b
 
-  # by default, only 10 days of logs are kept. increase that.
-  sed -ri 's/^(\s*rotate\s).*/\11000/' /etc/logrotate.d/exim4-base
+# begin setup passwd.client
+f=/etc/exim4/passwd.client
+rm -f /etc/exim4/passwd.client
+install -m 640 -g Debian-exim /dev/null $f
+cat /etc/mailpass| while read -r domain port pass; do
+  # reference: exim4_passwd_client(5)
+  printf "%s:%s\n" "$domain" "$pass" >>$f
+done
+# end setup passwd.client
 
-  systemctl restart exim4
+# by default, only 10 days of logs are kept. increase that.
+sed -ri 's/^(\s*rotate\s).*/\11000/' /etc/logrotate.d/exim4-base
 
-fi  #### end if exim4
+systemctl restart exim4
 
 # /etc/alias setup is debian specific, and
 # exim config sets up an /etc/alias from root to the postmaster, which i
@@ -1002,19 +915,19 @@ fi
 #
 # todo: I\'m suspicious of uids for Debian-exim being the same across
 # distros. It would be good to test this.
-dir=/nocow/$type
-sdir=/var/spool/$type
+dir=/nocow/exim4
+sdir=/var/spool/exim4
 # we only do this if our system has $dir
 if [[ -e /nocow && $(readlink -f $sdir) != $dir ]]; then
-  systemctl stop $type
+  systemctl stop exim4
   if [[ ! -e $dir && -d $sdir ]]; then
     mv $sdir $dir
   fi
   /a/exe/lnf -T $dir $sdir
 fi
 
-systemctl restart $type
-systemctl enable $type
+systemctl restart exim4
+systemctl enable exim4
 
 # MAIL_HOST also does radicale, and easier to start and stop it here
 # for when MAIL_HOST changes, so radicale gets the synced files and
@@ -1037,7 +950,3 @@ if dpkg -s radicale &>/dev/null; then
 fi
 exit 0
 :
-# if I wanted the from address to be renamed and sent to a different address,
-# echo "sdx@localhost development@localhost" | sudo dd of=/etc/postfix/recipient_canonical
-# sudo postmap hash:/etc/postfix/recipient_canonical
-# sudo service postfix reload
index 4786827cfc00117b24ead84064a21b28310e153e..4ce132c3c94452274079ee66917c73b0f50051d7 100755 (executable)
@@ -33,6 +33,6 @@ else
   # done
 fi
 
-mail-setup exim4
+mail-setup
 exit 0
 :