230 lines
5.7 KiB
Text
230 lines
5.7 KiB
Text
|
#! /bin/sh
|
||
|
|
||
|
#
|
||
|
# Adapted from pkg-install in net/cvsup-mirror,
|
||
|
# presumably by jdp@FreeBSD.org
|
||
|
#
|
||
|
|
||
|
user=hunch
|
||
|
group=hunch
|
||
|
|
||
|
interval=4
|
||
|
|
||
|
ask() {
|
||
|
local question default answer
|
||
|
|
||
|
question=$1
|
||
|
default=$2
|
||
|
if [ -z "${PACKAGE_BUILDING}" ]; then
|
||
|
read -p "${question} [${default}]? " answer
|
||
|
fi
|
||
|
if [ x${answer} = x ]; then
|
||
|
answer=${default}
|
||
|
fi
|
||
|
echo ${answer}
|
||
|
}
|
||
|
|
||
|
yesno() {
|
||
|
local dflt question answer
|
||
|
|
||
|
question=$1
|
||
|
dflt=$2
|
||
|
while :; do
|
||
|
answer=$(ask "${question}" "${dflt}")
|
||
|
case "${answer}" in
|
||
|
[Yy]*) return 0;;
|
||
|
[Nn]*) return 1;;
|
||
|
esac
|
||
|
echo "Please answer yes or no."
|
||
|
done
|
||
|
}
|
||
|
|
||
|
make_account() {
|
||
|
local u g gcos homeopt home
|
||
|
|
||
|
u=$1
|
||
|
g=$2
|
||
|
gcos=$3
|
||
|
homeopt=${4:+"-d $4"}
|
||
|
|
||
|
if pw group show "${g}" >/dev/null 2>&1; then
|
||
|
echo "You already have a group \"${g}\", so I will use it."
|
||
|
else
|
||
|
echo "You need a group \"${g}\"."
|
||
|
if which -s pw && yesno "Would you like me to create it" y; then
|
||
|
pw groupadd ${g} || exit
|
||
|
echo "Done."
|
||
|
else
|
||
|
echo "Please create it, and try again."
|
||
|
if ! grep -q "^${u}:" /etc/passwd; then
|
||
|
echo "While you're at it, please create a user \"${u}\" too,"
|
||
|
echo "with a default group of \"${g}\"."
|
||
|
fi
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if pw user show "${u}" >/dev/null 2>&1; then
|
||
|
echo "You already have a user \"${u}\", so I will use it."
|
||
|
else
|
||
|
echo "You need a user \"${u}\"."
|
||
|
if which -s pw && yesno "Would you like me to create it" y; then
|
||
|
pw useradd ${u} -g ${g} -h - ${homeopt} \
|
||
|
-s /nonexistent -c "${gcos}" || exit
|
||
|
echo "Done."
|
||
|
else
|
||
|
echo "Please create it, and try again."
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ x"$homeopt" = x ]; then
|
||
|
eval home=~${u}
|
||
|
if [ ! -d "${home}" ]; then
|
||
|
if yesno \
|
||
|
"Would you like me to create ${u}'s home directory (${home})" y
|
||
|
then
|
||
|
(umask 77 && \
|
||
|
mkdir -p ${home}/) || exit
|
||
|
chown -R ${u}:${g} ${home} || exit
|
||
|
else
|
||
|
echo "Please create it, and try again."
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
case $2 in
|
||
|
|
||
|
POST-INSTALL)
|
||
|
# . ${base}/config.sh || exit
|
||
|
|
||
|
if which -s pw && which -s lockf; then
|
||
|
:
|
||
|
else
|
||
|
cat <<EOF
|
||
|
|
||
|
This system looks like a pre-2.2 version of FreeBSD. I see that it
|
||
|
is missing the "lockf" and/or "pw" utilities. I need these utilities.
|
||
|
Please get them and install them, and try again. You can get the
|
||
|
sources from:
|
||
|
|
||
|
ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/usr.bin/lockf.tar.gz
|
||
|
ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/usr.sbin/pw.tar.gz
|
||
|
|
||
|
EOF
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
echo ""
|
||
|
make_account ${user} ${group} "Probe-griping user" "/nonexistent"
|
||
|
|
||
|
echo "Fixing ownerships and modes"
|
||
|
chown ${user}:${group} ${PREFIX}/etc/hunch-special
|
||
|
misc_files="/var/db/hunch-timestamp /var/log/hunch.log"
|
||
|
touch $misc_files
|
||
|
chown ${user}:${group} $misc_files
|
||
|
chmod 664 ${PREFIX}/etc/hunch-special $misc_files
|
||
|
|
||
|
echo ""
|
||
|
if grep -q "^[^#]*/var/log/hunch.log" /etc/newsyslog.conf; then
|
||
|
echo -n "It looks like you already have some logging set up, so I "
|
||
|
echo "will use it."
|
||
|
else
|
||
|
if yesno "Would you like me to set up log rotation" y; then
|
||
|
echo "Adding hunch log entry to \"/etc/newsyslog.conf\"."
|
||
|
cat <<EOF >>/etc/newsyslog.conf
|
||
|
/var/log/hunch.log hunch:hunch 644 3 100 * Z
|
||
|
EOF
|
||
|
echo "Done."
|
||
|
else
|
||
|
cat <<EOF
|
||
|
OK, please remember to do it yourself. You should add an entry to
|
||
|
"/etc/newsyslog.conf".
|
||
|
EOF
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
echo ""
|
||
|
if grep -q "^[^#]*${PREFIX}/bin/complain-httpd" /etc/crontab; then
|
||
|
echo "It looks like your crontab is already set up, so I'll use that."
|
||
|
else
|
||
|
if [ ${interval} -eq 1 ]; then
|
||
|
updstr="hourly complaints"
|
||
|
else
|
||
|
updstr="complaints every ${interval} hours"
|
||
|
fi
|
||
|
if yesno "Would you like me to set up your crontab for ${updstr}" y
|
||
|
then
|
||
|
echo "Scheduling ${updstr} in \"/etc/crontab\"."
|
||
|
delay=5
|
||
|
now=$(date "+%s")
|
||
|
start=$((${now} + ${delay}*60))
|
||
|
hh=$(date -r ${start} "+%H")
|
||
|
mm=$(date -r ${start} "+%M")
|
||
|
h=$((${hh}))
|
||
|
m=$((${mm}))
|
||
|
if [ ${interval} -eq 1 ]; then
|
||
|
hstr="*"
|
||
|
else
|
||
|
h0=$((${h} % ${interval}))
|
||
|
if [ ${interval} -eq 24 ]; then
|
||
|
hstr=${h0}
|
||
|
else
|
||
|
h1=$((${h0} + 24 - ${interval}))
|
||
|
hstr=${h0}-${h1}/${interval}
|
||
|
fi
|
||
|
fi
|
||
|
cat <<EOF >>/etc/crontab
|
||
|
${m} ${hstr} * * * ${user} ${PREFIX}/bin/complain-httpd /var/log/httpd-access.log >> /var/log/hunch.log 2>&1
|
||
|
EOF
|
||
|
cat <<EOF
|
||
|
Done.
|
||
|
EOF
|
||
|
else
|
||
|
cat <<EOF
|
||
|
OK, please remember to do it yourself. The crontab entry should run
|
||
|
"${PREFIX}/bin/complain-httpd /var/log/htppd-access.log" as user ${user}
|
||
|
EOF
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
echo ""
|
||
|
if yesno "Would you like me to set up the sender's address as it appears on outgoing complaints" y; then
|
||
|
host=`hostname`
|
||
|
sender=$(ask "Enter sender's email address" "root@$host" )
|
||
|
tmp="${PREFIX}/bin/#complain-httpd$$"
|
||
|
trap "rm -f ${tmp}" 0 1 2 3 15
|
||
|
sed "s/sender = ''/sender = '$sender'/" ${PREFIX}/bin/complain-httpd >${tmp} || exit
|
||
|
chmod 755 ${tmp}
|
||
|
mv ${tmp} ${PREFIX}/bin/complain-httpd || exit
|
||
|
echo "Done."
|
||
|
else
|
||
|
cat <<EOF
|
||
|
OK, please remember to do it yourself. You should modify the "my \$sender=''"
|
||
|
line in "${PREFIX}/bin/complain-httpd".
|
||
|
EOF
|
||
|
fi
|
||
|
|
||
|
echo ""
|
||
|
echo "I can enable hunch right now, or leave it in parse-only mode"
|
||
|
echo "which will scan the logs and determine the contacts, but"
|
||
|
echo "will not actually send any mail."
|
||
|
if yesno "Would you like me enable hunch in mail-sending mode" y; then
|
||
|
nomail=0
|
||
|
else
|
||
|
nomail=1
|
||
|
fi
|
||
|
tmp="${PREFIX}/bin/#complain-httpd$$"
|
||
|
trap "rm -f ${tmp}" 0 1 2 3 15
|
||
|
sed "s/no_mailing = .*;/no_mailing = $nomail;/" ${PREFIX}/bin/complain-httpd >${tmp} || exit
|
||
|
chmod 755 ${tmp}
|
||
|
mv ${tmp} ${PREFIX}/bin/complain-httpd || exit
|
||
|
echo "OK."
|
||
|
|
||
|
echo ""
|
||
|
echo "You are now hunch-enabled"
|
||
|
;;
|
||
|
esac
|