Slackware Updates Checker
Indice |
Introduzione
Chi vuole la propria slackware-current alla -currentissima, si trova a monitorare continuamente il ChangeLog di Slackware mettendolo come home della macchina o lanciando slackpkg ogni ora o altro.
Io mi sono fatto uno script che si lancia come demone e notifica nella system tray di kde la presenza di nuovi aggiornamenti.
Nota: Lo script è studiato per kde; chi usa xfce o altro può comunque provare se funziona; in caso contrario può utilizzare il progetto Updates checker per conky che è simile però usa conky al posto del subsystem di kde
v. la discussione sul forum
Il funzionamento
Lo script si starta come demone ed effettua un controllo periodico (default=1 minuto) con slackpkg per controllare se ci sono aggiornamenti.
In caso positivo viene inviato un avviso nel sistema di notification di kde con la lista degli aggiornamenti disponibili. Dopo aver notificato la cosa, lo script fermerà il check per evitare una successiva notifica ogni minuto.
Lo script NON ESEGUE ALCUN AGGIORNAMENTO!!! L'utente dovrà autonomamente lanciare il classico slackpkg update.
Lo script aspetterà un'ora dopodichè se questo non è stato fatto provvederà a ricordare all'utente che ci sono aggiornamenti.
Tutti i tempi di cui sopra sono parametrizzabili in un file di configurazione esterno.
News
23/09/2010: Versione 1.0 rilasciata.
Lo script
Potete prendere lo script, salvarlo e renderlo eseguibile con chmod +x; io l'ho chiamato 'slack-updates'. Lo potete salvare nella vostra home o in /usr/bin o (consigliato) in $HOME/.kde/Autostart in modo che si avvii automaticamente.
Per avviarlo manualmente lanciare ./slack-updates senza parametri come utente (va lanciato con lo stesso utente con cui kde è running); ritornerà subito il prompt e verrà notificato dall'alerter di sistema che è stato lanciato.
Per fermarlo digitare ./slack-updates stop
#!/bin/bash
# slack-updates -> Controlla periodicamente la presenza di aggiornamenti slackware e avvisa tramite kde-alert
# by Matteo Rossini ( zerouno @ slacky.it )
#
# versione 1.0
#
# news:
# 1.0: Script rilasciato
# DEFAULT VALUE. DO NOT CHANGE. USE ~/.slack-updates.rc INSTEAD
PRGNAME=$(basename $0)
RC=.slack-updates.rc
PIDFILE=/tmp/slack-updates.pid
MIN_INTERVAL=60
MAX_INTERVAL=3600
RETRY_INTERVAL=60
REPEATUPDATES=0
ACT="start"
if [ $# -gt 0 ];then
for P in $*;do
case $1 in
"--proxy") shift; export PROXY=$1; shift;;
"start") ACT="start";;
"stop") ACT="stop";;
*) usage; exit 1;;
esac
done
fi
if [ -e ~/$RC ];then
. ~/$RC
fi
if [ ! -z "$PROXY" ];then
export http_proxy=$PROXY
export https_proxy=$PROXY
export ftp_proxy=$PROXY
fi
function message(){
TIME=0
if [ "$1" == "-t" ];then
TIME=$2
shift 2
fi
if tty 2>/dev/null|grep -q dev;then
echo "$*"
else
kdialog --passivepopup "$*" $TIME
fi
sleep $[$TIME+1]
}
do_start() {
if [ -e $PIDFILE ];then
if ps $(cat $PIDFILE) 2>/dev/null|grep -q $PRGNAME;then
echo "Demone già avviato."
exit 1
else
rm $PIDFILE
fi
fi
LAUNCHDAEMON=$$
export LAUNCHDAEMON
$0 &
echo "$!" > $PIDFILE
exit
}
do_stop(){
if [ ! -e $PIDFILE ];then
echo "Demone non avviato"
exit
fi
kill `cat $PIDFILE` 2>/dev/null
rm $PIDFILE
exit
}
usage(){
echo "Usage: $0 { start | stop }"
}
if [ -z "$LAUNCHDAEMON" ];then
## LAUNCHER
if [ "$ACT" == "start" ];then do_start
elif [ "$ACT" == "stop" ];then do_stop
else usage
fi
exit
fi
## DEMONE VERO E PROPRIO
if [ ! -z "$LAUNCHDAEMON" ];then
INTERVAL=$MIN_INTERVAL
MSG="Check Update started. "
if [ ! -z "$http_proxy" ];then
MSG="$MSG Using proxy $http_proxy."
fi
message -t 2 "$MSG"
NEWUPDATE=0
while true;do
PID=$(ls /var/lock/slackpkg.* 2>/dev/null|sed 's/^.*\.\([0-9]*\)$/\1/'|head -1)
if [ ! -z "$PID" ];then
if ps $PID 2>/dev/null|grep -q slackpkg ;then
sleep $RETRY_INTERVAL
continue
else
rm -f /var/lock/slackpkg.* >/dev/null 2>&1
rm -f /tmp/slackpkg.* >/dev/null 2>&1
sleep $RETRY_INTERVAL
continue
fi
fi
U=$(slackpkg check-updates)
if [ $? -ne 0 ];then
sleep $RETRY_INTERVAL
continue
fi
echo $U|grep -q "News on ChangeLog.txt"
NEWS=$?
DATE="$(date '+%a %H:%M')"
if [ $NEWS -eq 0 ];then
if [ $NEWUPDATE -ne 0 ];then
message -t 3 "$DATE: Sono stati trovati aggiornamenti per slackware"
else
message -t 7 "$DATE: Trovati nuovi aggiornamenti per slackware:
$(wget -q -O - $(grep -v \# /etc/slackpkg/mirrors)/ChangeLog.txt 2>/dev/null| diff - /var/lib/slackpkg/ChangeLog.txt|grep '^<'|cut -c3-|grep ^[a-z])"
fi
INTERVAL=$MAX_INTERVAL
NEWUPDATE=$[1-$REPEATUPDATES]
else
NEWUPDATE=0
INTERVAL=$MIN_INTERVAL
fi
sleep $INTERVAL
done
fi
Configurazione
Questo script consente la personalizzazione di alcuni parametri con un file di configurazione .slack-update.rc da inserire nella propria home.
## Il path del pidfile. #default /tmp/slack-updates.pid #PIDFILE=/tmp/slack-updates.pid ## il tempo tra un controllo e l'altro. #default 60 secondi #MIN_INTERVAL=60 ## se ci sono nuovi aggiornamenti ricordamelo più tardi. #default 3600 secondi #MAX_INTERVAL=3600 ## se fallisce il check riprova dopo. #default 60 secondi #RETRY_INTERVAL=60 ## usa il proxy. se vuoto usa le variabili di ambiente http_proxy e ftp_proxy #default vuoto #PROXY= ## negli avvisi di update trovati ripeti la lista dei pacchetti #default 0 (no) REPEATUPDATES=1
PIDFILE: Il pidfile del processo; default /tmp/slack-updates
MIN_INTERVAL: Il tempo tra un controllo e un altro; default 60 secondi
MAX_INTERVAL: Il tempo di "ricordamelo più tardi"; default 3600 secondi
PROXY: Specifica il proxy da usare; se non specificato usa le variabili di ambiente http_proxy/ftp_proxy; se non settate non usa il proxy; default vuoto
REPEATUPDATES: Quando lo script ti ricorda che ci sono aggiornamenti, di default non ti dice quali. Settando ad 1, oltre alla segnalazione ti ripete anche la lista; default 0 (non ripetere)