1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-22 00:35:15 +00:00
freebsd-ports/mail/mailman/files/pkg-install.in
Ben Woods 898fbce0b3 mail/mailman: Use .conf suffix for /usr/local/etc/newsyslog.conf.d/
- Rename the files installed to /usr/local/etc/newsyslog.conf.d/ to end
  with a '.conf' suffix.
- Add pkg-install script to automatically move any copies of the old
  newsyslog file to the new location if the new file is unmodified from the default,
  or print a warning if it the new file has been modified.
- Add a note to UPDATING and pkg-message to warn users of this, in case
  they are using provisioning/configuration management tools which need
  to be modified. Note the UPDATING entry was committed in r485721.

Recent changes to /etc/newsyslog.conf (r340318) will only include files
from the /usr/local/etc/newsyslog.conf.d/ directory which end with
'.conf' and do not beginning with a '.' character.

Reviewed by:	mat
Approved by:	mandree (maintainer)
Differential Revision:	https://reviews.freebsd.org/D17088
2018-11-28 14:18:08 +00:00

232 lines
8.0 KiB
Bash

#! /bin/sh
#
# $FreeBSD$
PATH=/bin:/usr/bin:/usr/sbin
check_rcfile_fix_perms() {
(
. /etc/rc.subr
name="mailman"
rcvar=mailman_enable
load_rc_config $name
: ${mailman_fix_perms="YES"}
checkyesno mailman_fix_perms
)
}
add_default_virtuals() {
cat >>"$1" <<_EOF
# This and the next three lines added by FreeBSD's post-install script
DEFAULT_EMAIL_HOST="$(hostname -f)"
DEFAULT_URL_HOST="$(hostname -f)"
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
_EOF
}
move_newsyslog_conf() {
oldfile=${PKG_PREFIX}/etc/newsyslog.conf.d/mailman.newsyslog
newfile=${PKG_PREFIX}/etc/newsyslog.conf.d/mailman.conf
samplefile=${PKG_PREFIX}/share/examples/mailman/mailman.newsyslog.sample
if [ -f ${oldfile} ]; then
echo "Configuration file found in old location: ${oldfile}"
if cmp -s ${samplefile} ${newfile} > /dev/null; then
echo "Configuration file in new location has not been modified from the default: ${newfile}"
echo " => Moving old configuration file to new location"
mv -f ${oldfile} ${newfile}
else
echo "Configuration file in new location has been modified from the default: ${newfile}"
echo " => You should either delete the old file, or move it to the new location"
fi
fi
}
set -e
MYTMP="$(mktemp -d "${TMPDIR-/tmp}/mminstall.XXXXXXXXXX")"
trap "rm -rf \"$MYTMP\"" EXIT
case "$2" in
POST-INSTALL)
echo "---> Starting post-install script"
LC_ALL=C
export LC_ALL
move_newsyslog_conf
# fix up permissions - this is under investigation; pkg or libarchive
# goof up the group writable and/or setgid bits
/usr/bin/find "%%MAILMANDIR%%/qfiles" -maxdepth 1 -type d -exec \
/bin/chmod u+rwx,g+rwsx,o-w "{}" +
/bin/chmod 02775 "%%MAILMANDIR%%" \
"%%MAILMANDIR%%/Mailman" \
"%%MAILMANDIR%%/bin" \
"%%MAILMANDIR%%/cgi-bin" \
"%%MAILMANDIR%%/icons" \
"%%MAILMANDIR%%/mail" \
"%%MAILMANDIR%%/scripts" \
"%%MAILMANDIR%%/tests" \
"%%MAILMANDIR%%/pythonlib" \
"%%MAILMANDIR%%/spam" \
"%%MAILMANDIR%%/locks" \
"%%MAILMANDIR%%/Mailman/Archiver" \
"%%MAILMANDIR%%/Mailman/Bouncers" \
"%%MAILMANDIR%%/Mailman/Cgi" \
"%%MAILMANDIR%%/Mailman/Commands" \
"%%MAILMANDIR%%/Mailman/Gui" \
"%%MAILMANDIR%%/Mailman/Handlers" \
"%%MAILMANDIR%%/Mailman/Logging" \
"%%MAILMANDIR%%/Mailman/MTA" \
"%%MAILMANDIR%%/Mailman/Queue" \
"%%MAILMANDIR%%/tests/bounces" \
"%%MAILMANDIR%%/tests/msgs" \
"%%MAILMANDIR%%/cron" \
"%%MAILMANDIR%%/data" \
"%%MAILMANDIR%%/lists" \
"%%MAILMANDIR%%/archives" \
"%%MAILMANDIR%%/archives/public"
# this can be 2770 or 2771 but should not be stomped over
test -d "%%MAILMANDIR%%/archives/private" \
|| /usr/bin/install -m 02771 -g "%%GROUP%%" \
-d "%%MAILMANDIR%%/archives/private"
/bin/chmod u+rwx,g+srwx "%%MAILMANDIR%%/archives/private"
/bin/chmod u+rwx,g+srwx,o+rx "%%MAILMANDIR%%/logs"
/usr/bin/find "%%MAILMANDIR%%/messages" "%%MAILMANDIR%%/templates" -type d \
-exec chmod 02775 '{}' +
echo "---> Running update"
if test -r /var/tmp/last_mailman_version ; then
mkdir -p "%%MAILMANDIR%%/data"
mv -f /var/tmp/last_mailman_version "%%MAILMANDIR%%/data"
fi
LC_ALL=C "%%MAILMANDIR%%/bin/update"
echo "---> Checking crontab(5) file for user \"%%USER%%\""
if [ -e /var/cron/allow ]; then
grep -q "^%%USER%%\$" /var/cron/allow || \
printf '%s\n' "%%USER%%" >> /var/cron/allow
fi
if /usr/bin/crontab -u "%%USER%%" -l >"$MYTMP/crontab" ; then
if test -s "$MYTMP/crontab" && ! cmp -s "$MYTMP/crontab" "%%MAILMANDIR%%/cron/crontab.in"; then
echo "---> User \"%%USER%%\" already has a non-default crontab."
echo "---> Not overwriting it."
echo "---> Please review and merge any changes from the standard crontab file"
echo "---> %%MAILMANDIR%%/cron/crontab.in"
else
echo "---> Installing crontab(5) file for user \"%%USER%%\""
/usr/bin/crontab -u "%%USER%%" "%%MAILMANDIR%%/cron/crontab.in"
fi
else
echo "---> Installing crontab(5) file for user \"%%USER%%\""
/usr/bin/crontab -u "%%USER%%" "%%MAILMANDIR%%/cron/crontab.in"
fi
rm -f "$MYTMP/crontab"
if check_rcfile_fix_perms ; then
echo "---> Checking (and fixing) file and directory permissions"
output="$("%%MAILMANDIR%%/bin/check_perms" -f 2>&1)" || :
printf '%s\n' "$output" | egrep -v '^Re-run' || :
else
echo "---> rcfile sets mailman_fix_perms to no, skipping check_perms"
fi
# check if we need to add our hostname to the configuration:
if cmp -s "%%MAILMANDIR%%/Mailman/mm_cfg.py" "%%MAILMANDIR%%/Mailman/mm_cfg.py.dist" \
|| test "{'localhost': 'localhost'}" = "$(PYTHONPATH="%%MAILMANDIR%%/bin" "%%PYTHON_CMD%%" -c 'import paths;from Mailman import mm_cfg;_x=dict(mm_cfg.VIRTUAL_HOSTS);print repr(_x);')"
then
echo "---> adding default host configuration to %%MAILMANDIR%%/Mailman/mm_cfg.py."
add_default_virtuals "%%MAILMANDIR%%/Mailman/mm_cfg.py"
fi
echo "---> Running assorted other checks"
if egrep -q "^[ \t]*MTA.*=.*Postfix" "%%MAILMANDIR%%/Mailman/mm_cfg.py" ; then
# run Postfix-specific checks
POSTCONF=$(PATH="${PKG_PREFIX}/sbin:/usr/sbin:/sbin:$PATH" which postconf)
if [ "x`${POSTCONF} -h myhostname`" != "xlocalhost" ] \
&& ! egrep -q "^[ \t]*SMTPHOST.*=.*`${POSTCONF} -h myhostname`" \
"%%MAILMANDIR%%/Mailman/mm_cfg.py"
then
echo ""
echo "Your Postfix hostname is non-default."
echo -n "You must add \"SMTPHOST = '`${POSTCONF} -h myhostname`'"
echo "\" to the bottom of mm_cfg.py (without quotes)."
echo ""
fi
fi
;;
####### DEINSTALLATION PART #######
DEINSTALL)
echo "---> Starting deinstall script"
if /usr/bin/crontab -u "%%USER%%" -l | \
/usr/bin/diff -B -b - "%%MAILMANDIR%%/cron/crontab.in" >/dev/null 2>&1 ; then
echo "---> Zeroing unchanged crontab for \"%%USER%%\""
/usr/bin/crontab -u "%%USER%%" -r </dev/null
if [ -e /var/cron/allow ]; then
grep -v "^%%USER%%$" /var/cron/allow > /var/cron/allow.new$$
mv /var/cron/allow.new$$ /var/cron/allow
fi
else
echo "---> Crontab for \"%%USER%%\" modified, not removed: please deinstall"
echo "---> it manually if you no longer wish to use Mailman. E.g.:"
echo "---> /usr/bin/crontab -u \"%%USER%%\" -r"
fi
echo "---> Preserving the \"last_mailman_version\" file"
/bin/mv -f "%%MAILMANDIR%%/data/last_mailman_version" /var/tmp/ || :
# If the errorlog is the only existing logfile, delete it. (If Mailman's
# qrunner had not been running, then the process of trying to stop the
# qrunner (above) will cause the errorlog to be written to. Hence, even if
# the Mailman port/package is installed and immediately deinstalled, the
# errorlog will exist.)
if [ "`echo %%MAILMANDIR%%/logs/*`" = "%%MAILMANDIR%%/logs/error" ]; then
echo "---> Deleting errorlog (It is the only existing logfile.)"
/bin/rm -f "%%MAILMANDIR%%/logs/error"
fi
# attempt removal, but do not care if it is not empty
/bin/rmdir "%%MAILMANDIR%%/archives/private/" 2>/dev/null || :
# if configuration is unchanged, remove it explicitly,
# @sample wouldn't work because we added our hostname
cat "%%MAILMANDIR%%/Mailman/mm_cfg.py.dist" >"$MYTMP/mm_cfg.tmp"
add_default_virtuals "$MYTMP/mm_cfg.tmp"
if cmp -s "%%MAILMANDIR%%/Mailman/mm_cfg.py" "$MYTMP/mm_cfg.tmp" ; then
echo "---> Removing default configuration file."
rm -f "%%MAILMANDIR%%/Mailman/mm_cfg.py"
fi
;;
POST-DEINSTALL)
echo "---> Starting post-deinstall script"
set -- "%%MAILMANDIR%%/lists"/*
if [ $# -gt 1 ] || [ "x$1" != "x%%MAILMANDIR%%/lists/*" ] ; then
echo '---> %%MAILMANDIR%%/lists is not empty - this installation may have active lists! Listing max. 10:'
find "%%MAILMANDIR%%/lists" -mindepth 1 -maxdepth 1 | head -n 10 || :
echo "---> Restoring \"last_mailman_version\" file"
if test -d "%%MAILMANDIR%%" ; then
/bin/mkdir -p "%%MAILMANDIR%%/data" && \
/bin/mv -f /var/tmp/last_mailman_version "%%MAILMANDIR%%/data/"
else
/bin/rm -f /var/tmp/last_mailman_version
fi
fi
;;
esac