[Midnightbsd-cvs] mports: mports/sysutils: add midnightbsd-stats
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Fri Oct 10 21:25:40 EDT 2008
Log Message:
-----------
add midnightbsd-stats
Modified Files:
--------------
mports/sysutils:
Makefile (r1.81 -> r1.82)
Added Files:
-----------
mports/sysutils/midnightbsd-stats:
Makefile (r1.1)
pkg-descr (r1.1)
pkg-install (r1.1)
pkg-message (r1.1)
pkg-plist (r1.1)
mports/sysutils/midnightbsd-stats/files:
310.statistics (r1.1)
midnightbsd-stats.sh (r1.1)
-------------- next part --------------
Index: Makefile
===================================================================
RCS file: /home/cvs/mports/sysutils/Makefile,v
retrieving revision 1.81
retrieving revision 1.82
diff -L sysutils/Makefile -L sysutils/Makefile -u -r1.81 -r1.82
--- sysutils/Makefile
+++ sysutils/Makefile
@@ -50,6 +50,7 @@
SUBDIR += mdf2iso
SUBDIR += memtest
SUBDIR += memtest86
+ SUBDIR += midnightbsd-stats
SUBDIR += mixer
SUBDIR += munin-main
SUBDIR += munin-node
--- /dev/null
+++ sysutils/midnightbsd-stats/pkg-message
@@ -0,0 +1,24 @@
+This script, meant to be run monthly, submits statistics anonymously
+to a checkin server (http://rpt.midnightbsd.org), in an attempt to
+generate reasonably accurate demographics of MidnightBSD usage and
+hardware.
+
+To enable monthly reporting, edit or create /etc/periodic.conf and
+add this line:
+ monthly_statistics_enable="YES"
+
+To enable boottime reporting, edit or create /etc/rc.conf and add
+this line:
+ midnightbsd_stats_enable="YES"
+
+To enable device reporting, add this line:
+ monthly_statistics_report_devices="YES"
+
+To enable ports reporting, add this line:
+ monthly_statistics_report_ports="YES"
+
+To run it manually the first time, just run it as:
+ /usr/local/etc/periodic/monthly/310.statistics -nodelay
+
+To view current statistics, go to:
+ http://rpt.midnightbsd.org
--- /dev/null
+++ sysutils/midnightbsd-stats/pkg-install
@@ -0,0 +1,93 @@
+#!/bin/sh
+#
+# $MidnightBSD: mports/sysutils/midnightbsd-stats/pkg-install,v 1.1 2008/10/11 01:25:37 laffer1 Exp $
+# pkg-install : based off ${PORTSDIR}/mail/courier/files/pkg-install.in
+#
+LOCALBASE=${LOCALBASE:=/usr/local}
+
+ask() {
+ local question default answer
+
+ question=$1
+ default=$2
+ if [ -z "${PACKAGE_BUILDING}" ]; then
+ read -p "${question} [${default}]? " answer
+ fi
+ if [ -z "${answer}" ]; then
+ answer=${default}
+ fi
+ echo ${answer}
+}
+
+yesno() {
+ local question default answer
+
+ question=$1
+ default=$2
+ while :; do
+ answer=$(ask "${question}" "${default}")
+ case "${answer}" in
+ [Yy]*) return 0;;
+ [Nn]*) return 1;;
+ esac
+ echo "Please answer yes or no."
+ done
+}
+
+if [ ":$2" = ":POST-INSTALL" ]; then
+ if [ -f "/etc/periodic.conf" ]; then
+ if [ `grep monthly_statistics /etc/periodic.conf | wc -l` = 0 ]; then
+ if yesno "Would you like to activate monthly reporting in /etc/periodic.conf" n; then
+ echo "monthly_statistics_enable=\"YES\"" >> /etc/periodic.conf
+ if yesno "Would you like to send a list of installed hardware as well" n; then
+ echo "monthly_statistics_report_devices=\"YES\"" >> /etc/periodic.conf
+ fi
+ if yesno "Would you like to send a list of installed ports as well" n; then
+ echo "monthly_statistics_report_ports=\"YES\"" >> /etc/periodic.conf
+ fi
+ if yesno "Would you like to run it now" y; then
+ ${PKG_PREFIX}/etc/periodic/monthly/300.statistics -nodelay
+ fi
+ fi
+ fi
+ elif [ ! -f "/etc/periodic.conf" ]; then
+ if yesno "Would you like to activate monthly reporting in /etc/periodic.conf" n; then
+ echo "monthly_statistics_enable=\"YES\"" >> /etc/periodic.conf
+ if yesno "Would you like to send a list of installed hardware as well" n; then
+ echo "monthly_statistics_report_devices=\"YES\"" >> /etc/periodic.conf
+ fi
+ if yesno "Would you like to send a list of installed ports as well" n; then
+ echo "monthly_statistics_report_ports=\"YES\"" >> /etc/periodic.conf
+ fi
+ if yesno "Would you like to run it now" y; then
+ ${PKG_PREFIX}/etc/periodic/monthly/300.statistics -nodelay
+ fi
+ fi
+ fi
+ if [ -f "/etc/rc.conf" ]; then
+ if [ `grep bsdstats_enable /etc/rc.conf | wc -l` = 0 ]; then
+ echo ""
+ echo "If running as a desktop, or on a laptop, it is recommended that you"
+ echo "enable bsdstats within /etc/rc.conf, so that it will run on reboot."
+ echo ""
+ echo "This will ensure that even if your computer is off when monthly runs,"
+ echo "your computer will be properly counted."
+ echo ""
+ if yesno "Would you like to activate reporting on reboot in /etc/rc.conf" n; then
+ echo "bsdstats_enable=\"YES\"" >> /etc/rc.conf
+ fi
+ fi
+ elif [ ! -f "/etc/rc.conf" ]; then
+ echo ""
+ echo "If running as a desktop, or on a laptop, it is recommended that you"
+ echo "enable bsdstats within /etc/rc.conf, so that it will run on reboot."
+ echo ""
+ echo "This will ensure that even if your computer is off when monthly runs,"
+ echo "your computer will be properly counted."
+ echo ""
+ if yesno "Would you like to activate reporting on reboot in /etc/rc.conf" n; then
+ echo "bsdstats_enable=\"YES\"" >> /etc/rc.conf
+ fi
+ fi
+fi
+
--- /dev/null
+++ sysutils/midnightbsd-stats/pkg-descr
@@ -0,0 +1,5 @@
+The purpose of this port is to attempt to produce reasonably accurate
+statistics on MidnightBSD deployment, to be used for both marketing, and
+advocacy purposes by the project.
+
+WWW: http://rpt.midnightbsd.org/
--- /dev/null
+++ sysutils/midnightbsd-stats/pkg-plist
@@ -0,0 +1,4 @@
+etc/periodic/monthly/310.statistics
+etc/rc.d/midnightbsd-stats.sh
+ at dirrmtry etc/periodic/monthly
+ at dirrmtry etc/periodic
--- /dev/null
+++ sysutils/midnightbsd-stats/Makefile
@@ -0,0 +1,26 @@
+# New ports collection makefile for: midnightbsd-stats
+# Date created: 7 October 2008
+# Whom: Lucas Holt <luke at midnightbsd.org>
+#
+# $MidnightBSD: mports/sysutils/midnightbsd-stats/Makefile,v 1.1 2008/10/11 01:25:37 laffer1 Exp $
+#
+
+PORTNAME= midnightbsd-stats
+PORTVERSION= 1.0
+CATEGORIES= sysutils
+DISTFILES=
+
+MAINTAINER= ports at MidnightBSD.org
+COMMENT= Monthly script for reporting anonymous statistics about your machine
+LICENSE= unknown
+
+.include <bsd.port.pre.mk>
+
+NO_BUILD= yes
+
+do-install:
+ ${MKDIR} ${PREFIX}/etc/periodic/monthly
+ ${INSTALL_SCRIPT} ${FILESDIR}/310.statistics ${PREFIX}/etc/periodic/monthly
+ ${INSTALL_SCRIPT} ${FILESDIR}/midnightbsd-stats.sh ${PREFIX}/etc/rc.d
+
+.include <bsd.port.post.mk>
--- /dev/null
+++ sysutils/midnightbsd-stats/files/310.statistics
@@ -0,0 +1,445 @@
+#!/bin/sh -
+#
+# $MidnightBSD: mports/sysutils/midnightbsd-stats/files/310.statistics,v 1.1 2008/10/11 01:25:37 laffer1 Exp $
+#
+
+# If there is a global system configuration file, suck it in.
+#
+if [ -r /etc/defaults/periodic.conf ]
+then
+ . /etc/defaults/periodic.conf
+ source_periodic_confs
+ periodic_conf=/etc/periodic.conf
+else
+ . /etc/rc.conf # For systems without periodic.conf, use rc.conf
+ if [ -r /etc/rc.conf.local ]
+ then
+ . /etc/rc.conf.local
+ fi
+ periodic_conf=/etc/rc.conf.local
+fi
+
+oldmask=$(umask)
+umask 066
+
+version="1.0"
+checkin_server=${monthly_statistics_checkin_server:-"rpt.midnightbsd.org"}
+bsdstats_log=${monthly_statistics_logfile:-"/var/log/midnightbsd-stats"}
+id_token_file='/var/db/midnightbsd-stats'
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
+export PATH
+
+unset HTTP_USER_AGENT
+
+IFS="
+"
+
+random () {
+ jot -r 1 0 900
+}
+
+# RFC 2396
+uri_escape () {
+ echo ${1+$@} | sed -e '
+ s/%/%25/g
+ s/;/%3b/g
+ s,/,%2f,g
+ s/?/%3f/g
+ s/:/%3a/g
+ s/@/%40/g
+ s/&/%26/g
+ s/=/%3d/g
+ s/+/%2b/g
+ s/\$/%24/g
+ s/,/%2c/g
+ s/ /%20/g
+ '
+}
+
+do_fetch () {
+ url="http://$checkin_server/scripts/$1"
+ case $(uname) in
+ MidnightBSD )
+ /usr/bin/fetch -q -o - "$url"
+ ;;
+ * )
+ /usr/bin/ftp -V -o - "$url"
+ ;;
+ esac
+}
+
+check_dns () {
+ if [ `dig midnightbsd.org txt | grep TXT | grep UP | wc -l` = 0 ]
+ then
+ echo "DNS not reachable, Network Down?"
+ exit
+ fi
+}
+
+send_devices () {
+ case $(uname) in
+ MidnightBSD )
+ for line in `/usr/sbin/pciconf -l`
+ do
+ DRIVER=`echo $line | awk -F\@ '{print $1}'`
+ DEV=`echo $line | awk '{print $4}' | cut -c8-15`
+ CLASS=`echo $line | awk '{print $2}' | cut -c9-14`
+ query_string=$query_string`echo \&dev[]=$DRIVER:$DEV:$CLASS`
+ done
+
+ report_devices
+ ;;
+ * )
+ # Not supported
+ ;;
+ esac
+}
+
+send_ports () {
+ case $(uname) in
+ MidnightBSD )
+ for line in `/usr/sbin/pkg_info | /usr/bin/awk '{print $1}' `
+ do
+ category=`grep "@comment ORIGIN" /var/db/pkg/${line}/+CONTENTS | sed -E 's/^\@comment ORIGIN:(.+)\/.+/\1/g'`
+ line=$(uri_escape $line)
+ category=$(uri_escape $category)
+ query_string=$query_string`echo \&port[]=${category}:${line}`
+ done
+
+ report_ports
+ ;;
+ * )
+ # Not supported
+ ;;
+ esac
+}
+
+report_ports () {
+ # Handle HTTP proxy services
+ #
+ # HTTP_PROXY/http_proxy can take the following form:
+ # [http://][username:password@]proxy[:port][/]
+ # Authentication details may also be provided via HTTP_PROXY_AUTH:
+ # HTTP_PROXY_AUTH="basic:*:username:password"
+ #
+
+ if [ -z "$HTTP_PROXY" -a -n "$http_proxy" ]; then
+ HTTP_PROXY=$http_proxy
+ fi
+ if [ -n "$HTTP_PROXY" ]; then
+ # Attempt to resolve any HTTP authentication
+ if [ -n "$HTTP_PROXY_AUTH" ]; then
+ PROXY_AUTH_USER=`echo $HTTP_PROXY_AUTH | sed -E 's/^.+:\*:(.+):.+$/\1/g'`
+ PROXY_AUTH_PASS=`echo $HTTP_PROXY_AUTH | sed -E 's/^.+:\*:.+:(.+)$/\1/g'`
+ else
+ # Check for authentication within HTTP_PROXY
+ HAS_HTTP_AUTH=`echo $HTTP_PROXY | sed -E 's/^(http:\/\/)?(.+:.+@)?.+/\2/'`
+ if [ -n "$HAS_HTTP_AUTH" ]; then
+ # Found HTTP authentication details
+ PROXY_AUTH_USER=`echo $HAS_HTTP_AUTH | cut -d: -f1`
+ PROXY_AUTH_PASS=`echo $HAS_HTTP_AUTH | cut -d: -f2`
+ fi
+ fi
+
+ # Determine the proxy components
+ PROXY_HOST=`echo $HTTP_PROXY | sed -E 's/^(http:\/\/)?(.+:.+@)?([^@:]+)(:.+)?/\3/'`
+ PROXY_PORT=`echo $HTTP_PROXY | sed -E 's/^(http:\/\/)?(.+:.+@)?(.+):([0-9]+)/\4/' | sed -e 's/[^0-9]//g'`
+ if [ -z "$PROXY_PORT" ]; then
+ # Use default proxy port
+ PROXY_PORT=3128
+ fi
+ fi
+
+ # Determine the host/port netcat should connect to
+ if [ -n "$PROXY_HOST" -a -n "$PROXY_PORT" ]; then
+ nc_host=$PROXY_HOST
+ nc_port=$PROXY_PORT
+ url_prefix="http://${checkin_server}"
+ else
+ nc_host=$checkin_server
+ nc_port=80
+ fi
+
+ # Proxy authentication, if required
+ if [ -n "$PROXY_AUTH_USER" -a -n "$PROXY_AUTH_PASS" ]; then
+ auth_base64=`echo "$PROXY_AUTH_USER:$PROXY_AUTH_PASS" | openssl base64`
+ proxy_auth="Proxy-Authorization: Basic $auth_base64
+"
+ fi
+
+
+ # Make the request
+ string_length=`echo ${query_string} | wc -m`
+ string_length=`expr ${string_length} - 1`
+
+ echo "POST ${url_prefix}/scripts/report_ports.php HTTP/1.0
+Host: ${checkin_server}
+User-Agent: midnightbsd-stats ${version}
+Connection: close
+${proxy_auth}Content-Type: application/x-www-form-urlencoded
+Content-Length: ${string_length}
+
+token=${TOKEN}&key=${KEY}${query_string}" | \
+ nc $nc_host $nc_port | \
+ grep STATUS= | {
+ local IFS
+ IFS='=
+'
+
+ while read var val
+ do
+ case $var in
+ STATUS)
+ if [ $val = "OK" ]
+ then
+ echo "[`date`] System Ports reported"
+ else
+ echo "[`date`] System Ports not reported, exiting"
+ exit
+ fi
+ ;;
+ *)
+ echo "[`date`] Error with fetch to server"
+ exit
+ ;;
+ esac
+ done
+ } >> $bsdstats_log
+
+}
+
+report_devices () {
+ do_fetch report_devices.php?token=$TOKEN\&key=$KEY$query_string | {
+ local IFS
+ IFS='=
+'
+
+ while read var val
+ do
+ case $var in
+ STATUS)
+ if [ $val = "OK" ]
+ then
+ echo "[`date`] System Devices reported"
+ else
+ echo "[`date`] System Devices not reported, exiting"
+ exit
+ fi
+ ;;
+ *)
+ echo "[`date`] Error with fetch to server"
+ exit
+ ;;
+ esac
+ done
+ } >> $bsdstats_log
+}
+
+get_id_token () {
+ if [ -f $id_token_file ]
+ then
+ if [ `wc -l < $id_token_file` -lt 3 ]
+ then
+ rm $id_token_file
+ fi
+ fi
+
+ if [ ! -f $id_token_file -o ! -s $id_token_file ] ;
+ then
+ IDTOKEN=$(uri_escape $( openssl rand -base64 32 ) )
+
+ idf=$( mktemp "$id_token_file.XXXXXX" ) && \
+ chown root:wheel $idf && \
+ chmod 600 $idf
+
+ do_fetch getid.php?key=$IDTOKEN | {
+ local IFS
+ IFS='=
+'
+
+ while read var val
+ do
+ case $var in
+ KEY)
+ echo "KEY=$val"
+ ;;
+ TOKEN)
+ echo "TOKEN=$val"
+ ;;
+ *)
+ ;;
+ esac
+ done
+ echo "VERSION=$version"
+ } > $idf && \
+
+ mv $idf $id_token_file
+ if [ ! -s $id_token_file ] ;
+ then
+ echo "Nothing returned from $checkin_server"
+ exit 1
+ fi
+ fi
+ . $id_token_file
+ KEY=$( uri_escape $KEY )
+ TOKEN=$( uri_escape $TOKEN )
+}
+
+
+enable_token () {
+ do_fetch enable_token.php?key=$TOKEN\&token=$KEY | {
+ local IFS
+ IFS='=
+'
+
+ while read var val
+ do
+ case $var in
+ STATUS)
+ if [ $val = "OK" ]
+ then
+ echo "[`date`] System enabled"
+ else
+ echo "[`date`] System not enabled, exiting"
+ exit
+ fi
+ ;;
+ *)
+ echo "[`date`] Error with fetch to server"
+ exit
+ ;;
+ esac
+ done
+ } >> $bsdstats_log
+}
+
+disable_token () {
+ do_fetch disable_token.php?key=$TOKEN\&token=$KEY | {
+ local IFS
+ IFS='=
+'
+
+ while read var val
+ do
+ case $var in
+ STATUS)
+ if [ $val = "OK" ]
+ then
+ echo "[`date`] System disabled"
+ else
+ echo "[`date`] System not disabled, exiting"
+ exit
+ fi
+ ;;
+ *)
+ echo "[`date`] Error with fetch to server"
+ exit
+ ;;
+ esac
+ done
+ } >> $bsdstats_log
+}
+
+report_system () {
+ do_fetch report_system.php?token=$TOKEN\&key=$KEY\&rel=$REL\&arch=$ARCH\&opsys=$OS | {
+ local IFS
+ IFS='=
+'
+
+ while read var val
+ do
+ case $var in
+ STATUS)
+ if [ $val = "OK" ]
+ then
+ echo "[`date`] System reported"
+ else
+ echo "[`date`] System report failed, exiting"
+ exit
+ fi
+ ;;
+ *)
+ echo "[`date`] Error with fetch to server"
+ exit
+ ;;
+ esac
+ done
+ } >> $bsdstats_log
+}
+
+report_cpu () {
+ do_fetch report_cpu.php?token=$TOKEN\&key=$KEY\&cpus=$count\&vendor=$VEN\&cpu_type=$DEV | {
+ local IFS
+ IFS='=
+'
+
+ while read var val
+ do
+ case $var in
+ STATUS)
+ if [ $val = "OK" ]
+ then
+ echo "[`date`] System CPU reported"
+ else
+ echo "[`date`] System CPU report failed, exiting"
+ exit
+ fi
+ ;;
+ *)
+ echo "[`date`] Error with fetch to server"
+ exit
+ ;;
+ esac
+ done
+ } >> $bsdstats_log
+}
+case "$monthly_statistics_enable" in
+ [Yy][Ee][Ss])
+ check_dns
+ REL=`/usr/bin/uname -r`
+ ARCH=`/usr/bin/uname -m`
+ OS=`/usr/bin/uname -s`
+ get_id_token
+ test X"$1" = X-nodelay || sleep `random`
+ enable_token
+ report_system
+ echo "Posting monthly OS statistics to $checkin_server"
+ if [ X"$1" != X-nodelay ]; then
+ case "$monthly_statistics_report_devices" in
+ [Yy][Ee][Ss])
+ send_devices
+ echo "Posting monthly device statistics to $checkin_server"
+ line=$( sysctl -n hw.model )
+ VEN=$( echo $line | cut -d ' ' -f 1 )
+ DEV=$( uri_escape $( echo $line | cut -d ' ' -f 2- ) )
+ count=$( sysctl -n hw.ncpu )
+ report_cpu
+ echo "Posting monthly CPU statistics to $checkin_server"
+ ;;
+ *)
+ echo "Posting monthly device/CPU statistics disabled"
+ echo " set monthly_statistics_report_devices=\"YES\" in $periodic_conf"
+ ;;
+ esac
+ case "$monthly_statistics_report_ports" in
+ [Yy][Ee][Ss])
+ send_ports
+ echo "Posting monthly ports statistics to $checkin_server"
+ ;;
+ *)
+ echo "Posting monthly ports statistics disabled"
+ echo " set monthly_statistics_report_ports=\"YES\" in $periodic_conf"
+ ;;
+ esac
+ fi
+ disable_token
+ ;;
+ *)
+ echo "Posting monthly OS statistics disabled"
+ echo " set monthly_statistics_enable=\"YES\" in $periodic_conf"
+ ;;
+esac
+
+umask $oldmask
+exit $rc
--- /dev/null
+++ sysutils/midnightbsd-stats/files/midnightbsd-stats.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+#
+# $MidnightBSD: mports/sysutils/midnightbsd-stats/files/midnightbsd-stats.sh,v 1.1 2008/10/11 01:25:37 laffer1 Exp $
+#
+
+# PROVIDE: midnightbsd_stats
+# REQUIRE: LOGIN
+# KEYWORD: shutdown
+
+# midnightbsd_stats is disabled by default, if you have configuration file
+#
+# Add the following line to /etc/rc.conf to enable midnightbsd_stats:
+#
+#midnightbsd_stats_enable="YES"
+#
+
+. /etc/rc.subr
+
+load_rc_config midnightbsd_stats
+
+name=midnightbsd_stats
+rcvar=`set_rcvar`
+
+command=/usr/local/etc/periodic/monthly/310.statistics
+
+# default to disable
+midnightbsd_stats_enable=${midnightbsd_stats_enable:-"NO"}
+midnightbsd_stats_flags=${midnightbsd_stats_flags:-"-nodelay"}
+
+run_rc_command "$1"
More information about the Midnightbsd-cvs
mailing list