Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Daily cron job to send popcon information to Debian
#!/bin/sh
set -e
# don't run if this package is removed but not purged
if [ ! -f /usr/sbin/popularity-contest ]; then
exit 0
fi
MODE="$1"
unset MAILFROM
unset MAILTO
unset MY_HOSTID
unset PARTICIPATE
unset SUBMITURLS
unset USEHTTP
unset USETOR
unset MTAOPS
TORIFY_PATH=/usr/bin/torify
torify_enabled() {
# Return 1 to enable torify for HTTP submission, otherwise 0; exit on error
TORSOCKS_PATH=/usr/bin/torsocks
[ -f "$TORIFY_PATH" ] && [ -f "$TORSOCKS_PATH" ] && TOR_AVAILABLE=1
case "$USETOR" in
"yes")
if [ -z $TOR_AVAILABLE ]; then
echo "popularity-contest: USETOR is set but torify is not available." 2>&1
echo "popularity-contest: Please install the tor and torsocks packages." 2>&1
exit 1
fi
if [ "yes" != "$USEHTTP" ]; then
echo "popularity-contest: when USETOR is set USEHTTP must be set as well" 2>&1
exit 1
fi
return 0
;;
"maybe")
[ "yes" = "$USEHTTP" ] && [ ! -z $TOR_AVAILABLE ] && return 0
return 1
;;
"no")
return 1
;;
esac
}
# get configuration information
. /usr/share/popularity-contest/default.conf
. /etc/popularity-contest.conf
if test -d /etc/popularity-contest.d/; then
for file in `run-parts --list --regex '\.conf$' /etc/popularity-contest.d/`;
do
. $file
done
fi
# don't run if MAILTO address is blank, and not configured to use HTTP POST!
if [ -z "$MAILTO" ] && [ "yes" != "$USEHTTP" ]; then exit 0; fi
# don't run if PARTICIPATE is "no" or unset!
if [ "$PARTICIPATE" = "no" ] || [ -z "$PARTICIPATE" ]; then exit 0; fi
# enable torify
if torify_enabled; then
TORIFY=$TORIFY_PATH
else
TORIFY=''
fi
if [ -n "$HTTP_PROXY" ]; then
export http_proxy="$HTTP_PROXY";
fi
POPCONOLD=/var/log/popularity-contest
POPCONNEW=/var/log/popularity-contest.new
POPCON="$POPCONNEW"
# Only run on the given day, to spread the load on the server a bit
if [ "$DAY" ] && [ "$DAY" != "$(date +%w)" ] ; then
# Ensure that popcon runs at least once in the last week
if [ -f "$POPCONOLD" ] ; then
now=$(date +%s)
lastrun=$(date -r $POPCONOLD +%s)
if [ "$MODE" = "--crond" ]; then
# 6.5 days, in seconds
week=561600
else
# 7.5 days, in seconds
week=648000
fi
if [ "$(( $now - $lastrun ))" -le "$week" ]; then
exit 0
fi
fi
fi
# keep old logs
cd /var/log
umask 022
savelog -c 7 popularity-contest >/dev/null
run_popcon()
{
runuser -s /bin/sh -c "/usr/sbin/popularity-contest" nobody
}
do_sendmail()
{
if [ -n "$MAILFROM" ]; then
sendmail -oi $MTAOPS -f "$MAILFROM" $MAILTO
else
sendmail -oi $MTAOPS $MAILTO
fi
}
# generate the popularity contest data
run_popcon > $POPCON
GPG=/usr/bin/gpg
if [ "$ENCRYPT" = "yes" ] && ! [ -x "$GPG" ]; then
logger -t popularity-contest "encryption required but gpg is not available."
echo "popularity-contest: encryption required but gpg is not available." 2>&1
exit 1
fi
if [ -x "$GPG" ] && [ "$ENCRYPT" = "maybe" ] || [ "$ENCRYPT" = "yes" ]; then
POPCONGPG="$POPCON.gpg"
rm -f "$POPCONGPG"
GPGHOME=`mktemp -d`
$GPG --batch --no-options --no-default-keyring --trust-model=always \
--homedir "$GPGHOME" --keyring $KEYRING --quiet \
--armor -o "$POPCONGPG" -r $POPCONKEY --encrypt "$POPCON"
rm -rf "$GPGHOME"
POPCON="$POPCONGPG"
fi
SUBMITTED=no
# try to post the report through http POST
if [ "$SUBMITURLS" ] && [ "yes" = "$USEHTTP" ]; then
for URL in $SUBMITURLS ; do
if setsid $TORIFY /usr/share/popularity-contest/popcon-upload \
-u $URL -f $POPCON 2>/dev/null ; then
SUBMITTED=yes
else
logger -t popularity-contest "unable to submit report to $URL."
fi
done
fi
# try to email the popularity contest data
# skip emailing if USETOR is set
if [ "$MODE" = "--crond" ] && [ yes != "$SUBMITTED" ] && [ yes != "$USETOR" ] && [ "$MAILTO" ]; then
if [ -x "`which sendmail 2>/dev/null`" ]; then
(
if [ -n "$MAILFROM" ]; then
echo "From: <$MAILFROM>"
echo "Sender: <$MAILFROM>"
fi
echo "To: $MAILTO"
echo "Subject: popularity-contest submission"
echo "MIME-Version: 1.0"
echo "Content-Type: text/plain"
echo
cat $POPCON
) | do_sendmail
SUBMITTED=yes
else
logger -t popularity-contest "unable to submit report using sendmail."
fi
fi
if [ "yes" != "$SUBMITTED" ] ; then
logger -t popularity-contest "unable to submit report."
else
mv $POPCONNEW $POPCONOLD
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.