mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-22 00:35:15 +00:00
898fbce0b3
- 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
232 lines
8.0 KiB
Bash
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
|