Debian popularity-contest
Índice
1. Introducción.
2. El paquete.
3. ¿Cómo funciona?
3.1. /etc/cron.daily/popularity-contest.
3.2. /usr/share/popularity-contest/default.conf
3.3. /etc/popularity-contest.conf
3.4. /usr/sbin/popularity-contest
3.5. /usr/share/popularity-contest/popcon-upload
3.6. /usr/sbin/popcon-largest-unused
4. Usos
5. Seguridad
1. Introducción.
¿Qué es popularity contest? Su traducción del inglés viene a ser concurso de popularidad.
Este paquete instala un script que genera un informe sobre los paquetes instalados y su uso. Los informes pueden ser utilizados por cada administrador de sistema para decidir qué paquetes pueden ser desintalados debido a su bajo o nulo uso y/o ser enviados a http://popcon.debian.org
Los informes enviados, gracias a un gestor de procesos periódicos en segundo plano como cron o fcron, se utilizan para elaborar estadísticas sobre el uso de los paquetes. Las estadísticas son publicadas en la página oficial del proyecto.
La finalidad de este proyecto es, según se explica en la documentación, “ayudar a decidir qué paquetes deberían incluirse en el primer CD de instalación de Debian o cuáles deberían mantenerse en las réplicas de FTP.”
2. El paquete.
El paquete instala los siguientes archivos:
/etc/cron.daily/popularity-contest
/usr/sbin/popcon-largest-unused
/usr/sbin/popularity-contest
/usr/share/popularity-contest/default.conf
/usr/share/popularity-contest/popcon-upload
/usr/share/doc/popularity-contest/FAQ.gz
/usr/share/doc/popularity-contest/README.gz
/usr/share/doc/popularity-contest/changelog.gz
/usr/share/doc/popularity-contest/copyright
/usr/share/doc/popularity-contest/examples/README.examples
/usr/share/doc/popularity-contest/examples/clean-filter
/usr/share/doc/popularity-contest/examples/clean-genpkglist
/usr/share/doc/popularity-contest/examples/popanal.py
/usr/share/doc/popularity-contest/examples/popcon-process.sh
/usr/share/doc/popularity-contest/examples/popcon-stat.pl
/usr/share/doc/popularity-contest/examples/popcon-submit.cgi
/usr/share/doc/popularity-contest/examples/popcon.pl
/usr/share/doc/popularity-contest/examples/prepop.pl
/usr/share/man/man8/popcon-largest-unused.8.gz
/usr/share/man/man8/popularity-contest.8.gz
En el primer grupo tenemos los scripts para generar el informe, configuración y/o mandar el informe al proyecto ‘Debian popularity contest”. En el tercer grupo tenemos varios ejemplos de scripst de análisis. Los demás grupos son las páginas de man y archivos de ayuda.
A esos archivos hay que añadir dos más:
/etc/popularity-contest.conf creado por # dpkg-reconfigure popularity-contest
/var/log/popularity-contest creado por /usr/sbin/popularity-contest
El primero sobrescribe la configuración de /usr/share/popularity-contest/default.conf, manualmente o con #dpkg-reconfigure popularity-contest.
El segundo es donde se guarda el informe completo de todos los paquetes.
3. ¿Cómo funciona?
Para comprender como funciona debemos analizar lo que hacen los scripts (primer grupo), ya que la documentación no entra mucho en materia.
3.1. /etc/cron.daily/popularity-contest.
Aquí tenemos un script que se ejecuta diariamente, escrito para una bash en modo compatible con POSIX:
#!/bin/sh
Lo primero que hace es comprobar que existe el script popurarity-contest:
# don't run if this package is removed but not purged
if [ ! -f /usr/sbin/popularity-contest ]; then
exit 0
fiElimina las variables:
unset MAILFROM
unset MAILTO
unset MY_HOSTID
unset PARTICIPATE
unset SUBMITURLS
unset USEHTTPEjecuta dos scripts de configuración:
/usr/share/popularity-contest/default.conf que crea y da valor a las anteriores variables:
MAILTO=“survey@popcon.debian.org”
PARTICIPATE=“no”
SUBMITURLS=“http://popcon.debian.org/cgi-bin/popcon.cgi”
USEHTTP=“yes”y /etc/popularity-contest.conf sobreescribe las siguientes:
MY_HOSTID="código de identificación de 128 bits "
PARTICIPATE="yes"
USEHTTP="yes"
DAY="3"Finaliza el script si MAILTO y USEHTTP no tienen los valores adecuados:
# don't run if MAILTO address is blank, and not configured to use HTTP POST!
if [ -z "$MAILTO" ] && [ "yes" != "$USEHTTP" ]; then exit 0; fio, si la variable PARTICIPATE es igual a no o no ha sido creada:
# don't run if PARTICIPATE is "no" or unset!
[ "$PARTICIPATE" = "no" ] || [ -z "$PARTICIPATE" ] && exit 0
si la longitud del valor de la variable HTTP_PROXY es cero:
if [ -n "$HTTP_PROXY" ]; then
export http_proxy="$HTTP_PROXY";
ficomprueba que es el dia y no es domingo:
# Only run on the given day, to spread the load on the server a bit
if [ "$DAY" ] && [ "$DAY" != "$(date +%w)" ] ; then
exit 0
figuarda y comprime los log en la forma popularity-contest.0, popularity-contest.1, …, popularity-contest.6. Cuando llega a 7 étse te borra antes de guardalos:
# keep old logs
cd /var/log
umask 022
savelog -c 7 popularity-contest >/dev/null
POPCON=/var/log/popularity-contestCrea dos funciones:
run_popcon()
{
su -s /bin/sh -c "/usr/sbin/popularity-contest" nobody
}
do_sendmail()
{
if [ -n "$MAILFROM" ]; then
sendmail -oi -f "$MAILFROM" $MAILTO
else
sendmail -oi $MAILTO
fi
}
Corre la funcione función run_popcon() que genera los datos que se van a utilar para el informe:
run_popcon > $POPCON
y crea la variable SUBMITTED:
SUBMITTED=no
Trata de enviar el informe con el script en perl: popcon-upload a traves de http, la configuración por defecto:
# try to post the report through http POST
if [ "$SUBMITURLS" ] && [ "yes" = "$USEHTTP" ]; then
for URL in $SUBMITURLS ; do
if setsid /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
fiIntenta mandar via email si la variable SUBMITTED=“no”, es decir, que no se a enviado a través de http:
# try to email the popularity contest data
if [ yes != "$SUBMITTED" ] && [ "$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
Y, finalmente, si no puede enviarlo (SUBMITTED distinto de “yes”) envia el mensaje abajo escrito al log:
if [ "yes" != "$SUBMITTED" ] ; then
logger -t popularity-contest "unable to submit report."
fi3.2. /usr/share/popularity-contest/default.conf
Crea las variables antes mencionadas:
MAILTO=“survey@popcon.debian.org”
PARTICIPATE=“no”
SUBMITURLS=“http://popcon.debian.org/cgi-bin/popcon.cgi”
USEHTTP=“yes”y deja comentas las siguientes:
#MAILFROM=root@example.org
# HTTP_PROXY allows to specify an HTTP proxy server, the syntax is
# HTTP_PROXY="http://proxy:port". This overrides the environment
# variable http_proxy.
#MY_HOSTID="_ID_"3.3. /etc/popularity-contest.conf
Sobreescribe las variables:
MY_HOSTID="código de identificación de 128 bits "
PARTICIPATE="yes"
USEHTTP="yes"
DAY="3"3.4. /usr/sbin/popularity-contest
Script en perl que genera el informe.
3.5. /usr/share/popularity-contest/popcon-upload
Script en perl que manda el informe, por defecto.
3.6. /usr/sbin/popcon-largest-unused
Coge como entrada el archivo /var/log/popularity-contest:
datafile=/var/log/popularity-contest
Comprueba si existe:
if [ ! -e $datafile ] ; then
echo "warning: Missing required file $datafile."
echo "info: Run 'popularity-contest > $datafile' to generate it."
exit 1
fiSale un informe del formato “Installed-Size Package_name” ordenado de mayor tamaño a menor:
grep '<OLD>' $datafile | cut -d' ' -f3 |
xargs apt-cache -o 'APT::Cache::AllVersions=0' show |
grep -E '^(Package|Installed-Size): ' |
perl -ne 'if (/^Package: (.*)/) { $p = $1 }; if (/^Installed-Size: (.*)/) { print "$1 $p\n"; $p = 'BUG' }' | sort -rn4. Usos
Se puede participar en el proyecto configurando el paquete en su instalación, con # dpkg-reconfigure popularity-contest o configurando manualmente el archivo /etc/popularity-contest.conf.
O simplemente configurándolo para que no envíe el informe y haciendo uso para administrar el sistema. Para ello correr el script /usr/sbin/popularity-contest y luego /usr/sbin/popcon-largest-unused.
Además se incluye en /usr/share/doc/popularity-contest/examples/ una serie de scripts a modo de ejemplo de diversos usos.
5. Seguridad
En el archivo README que acompaña al paquete se advierte que participar en el proyecto no es totalmente anónimo como se pretende ya que los servidores de Internet tienden a añadir cabeceras y mensajes log hasta su recepción. También se afirma que toda esa información que les llega es desechada.