Slackware Updates Checker: differenze tra le versioni
(23/09/2010: Versione 1.0 rilasciata) |
m (uso di SyntaxHighlight nel wiki) |
||
| Riga 30: | Riga 30: | ||
Per fermarlo digitare '''./slack-updates stop''' |
Per fermarlo digitare '''./slack-updates stop''' |
||
| + | <source lang="bash"> |
||
| + | #!/bin/bash |
||
| − | #!/bin/bash |
+ | # slack-updates -> Controlla periodicamente la presenza di aggiornamenti slackware e avvisa tramite kde-alert |
| − | + | ||
| − | # slack-updates -> Controlla periodicamente la presenza di aggiornamenti slackware e avvisa tramite kde-alert |
+ | # by Matteo Rossini ( zerouno @ slacky.it ) |
| − | + | # |
|
| − | # by Matteo Rossini ( zerouno @ slacky.it ) |
+ | # versione 1.0 |
| − | # |
+ | # |
| − | # versione 1.0 |
+ | # news: |
| − | # |
+ | # 1.0: Script rilasciato |
| − | # news: |
+ | |
| − | # 1.0: Script rilasciato |
+ | # DEFAULT VALUE. DO NOT CHANGE. USE ~/.slack-updates.rc INSTEAD |
| − | + | ||
| − | # DEFAULT VALUE. DO NOT CHANGE. USE ~/.slack-updates.rc INSTEAD |
+ | PRGNAME=$(basename $0) |
| − | + | RC=.slack-updates.rc |
|
| − | PRGNAME=$(basename $0) |
+ | PIDFILE=/tmp/slack-updates.pid |
| − | RC=.slack-updates.rc |
+ | MIN_INTERVAL=60 |
| − | PIDFILE=/tmp/slack-updates.pid |
+ | MAX_INTERVAL=3600 |
| − | MIN_INTERVAL=60 |
+ | RETRY_INTERVAL=60 |
| − | MAX_INTERVAL=3600 |
+ | REPEATUPDATES=0 |
| − | RETRY_INTERVAL=60 |
+ | |
| − | REPEATUPDATES=0 |
+ | ACT="start" |
| − | + | if [ $# -gt 0 ];then |
|
| − | ACT="start" |
+ | for P in $*;do |
| − | if [ $# -gt 0 ];then |
+ | case $1 in |
| − | for P in $*;do |
+ | "--proxy") shift; export PROXY=$1; shift;; |
| − | case $1 in |
+ | "start") ACT="start";; |
| − | "--proxy") shift; export PROXY=$1; shift;; |
+ | "stop") ACT="stop";; |
| − | "start") ACT="start";; |
+ | *) usage; exit 1;; |
| − | "stop") ACT="stop";; |
+ | esac |
| − | *) usage; exit 1;; |
+ | done |
| − | esac |
+ | fi |
| − | done |
+ | |
| − | fi |
+ | if [ -e ~/$RC ];then |
| − | + | . ~/$RC |
|
| − | if [ -e ~/$RC ];then |
+ | fi |
| − | . ~/$RC |
+ | if [ ! -z "$PROXY" ];then |
| − | fi |
+ | export http_proxy=$PROXY |
| − | if [ ! -z "$PROXY" ];then |
+ | export https_proxy=$PROXY |
| − | export http_proxy=$PROXY |
+ | export ftp_proxy=$PROXY |
| − | export https_proxy=$PROXY |
+ | fi |
| − | export ftp_proxy=$PROXY |
+ | |
| − | fi |
+ | function message(){ |
| − | + | TIME=0 |
|
| − | function message(){ |
+ | if [ "$1" == "-t" ];then |
| − | TIME=0 |
+ | TIME=$2 |
| − | if [ "$1" == "-t" ];then |
+ | shift 2 |
| − | TIME=$2 |
+ | fi |
| − | shift 2 |
+ | if tty 2>/dev/null|grep -q dev;then |
| − | fi |
+ | echo "$*" |
| − | if tty 2>/dev/null|grep -q dev;then |
+ | else |
| − | echo "$*" |
+ | kdialog --passivepopup "$*" $TIME |
| − | else |
+ | fi |
| − | kdialog --passivepopup "$*" $TIME |
+ | sleep $[$TIME+1] |
| − | fi |
+ | |
| − | sleep $[$TIME+1] |
+ | } |
| − | + | ||
| − | } |
+ | |
| − | + | ||
| − | + | do_start() { |
|
| − | + | ||
| − | do_start() { |
+ | if [ -e $PIDFILE ];then |
| − | + | if ps $(cat $PIDFILE) 2>/dev/null|grep -q $PRGNAME;then |
|
| − | if [ -e $PIDFILE ];then |
+ | echo "Demone già avviato." |
| − | if ps $(cat $PIDFILE) 2>/dev/null|grep -q $PRGNAME;then |
+ | exit 1 |
| − | echo "Demone già avviato." |
+ | else |
| − | exit 1 |
+ | rm $PIDFILE |
| − | else |
+ | fi |
| − | rm $PIDFILE |
+ | fi |
| − | fi |
+ | LAUNCHDAEMON=$$ |
| − | fi |
+ | export LAUNCHDAEMON |
| − | LAUNCHDAEMON=$$ |
+ | $0 & |
| − | export LAUNCHDAEMON |
+ | echo "$!" > $PIDFILE |
| − | $0 & |
+ | exit |
| − | echo "$!" > $PIDFILE |
+ | } |
| − | exit |
+ | do_stop(){ |
| − | } |
+ | if [ ! -e $PIDFILE ];then |
| − | do_stop(){ |
+ | echo "Demone non avviato" |
| − | if [ ! -e $PIDFILE ];then |
+ | exit |
| − | echo "Demone non avviato" |
+ | fi |
| − | exit |
+ | kill `cat $PIDFILE` 2>/dev/null |
| − | fi |
+ | rm $PIDFILE |
| − | kill `cat $PIDFILE` 2>/dev/null |
+ | exit |
| − | rm $PIDFILE |
+ | } |
| − | exit |
+ | |
| − | } |
+ | usage(){ |
| − | + | echo "Usage: $0 { start | stop }" |
|
| − | usage(){ |
+ | } |
| − | echo "Usage: $0 { start | stop }" |
+ | |
| − | } |
+ | if [ -z "$LAUNCHDAEMON" ];then |
| − | + | ## LAUNCHER |
|
| − | if [ -z "$LAUNCHDAEMON" ];then |
+ | |
| − | ## LAUNCHER |
+ | if [ "$ACT" == "start" ];then do_start |
| − | + | elif [ "$ACT" == "stop" ];then do_stop |
|
| − | if [ "$ACT" == "start" ];then do_start |
+ | else usage |
| − | elif [ "$ACT" == "stop" ];then do_stop |
+ | fi |
| − | else usage |
+ | exit |
| − | fi |
+ | |
| − | exit |
+ | fi |
| − | + | ||
| − | fi |
+ | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ## DEMONE VERO E PROPRIO |
|
| − | + | ||
| − | ## DEMONE VERO E PROPRIO |
+ | if [ ! -z "$LAUNCHDAEMON" ];then |
| − | + | INTERVAL=$MIN_INTERVAL |
|
| − | if [ ! -z "$LAUNCHDAEMON" ];then |
+ | |
| − | INTERVAL=$MIN_INTERVAL |
+ | MSG="Check Update started. " |
| − | + | if [ ! -z "$http_proxy" ];then |
|
| − | MSG="Check Update started. " |
+ | MSG="$MSG Using proxy $http_proxy." |
| − | if [ ! -z "$http_proxy" ];then |
+ | fi |
| − | MSG="$MSG Using proxy $http_proxy." |
+ | message -t 2 "$MSG" |
| − | fi |
+ | |
| − | message -t 2 "$MSG" |
+ | NEWUPDATE=0 |
| − | + | ||
| − | NEWUPDATE=0 |
+ | while true;do |
| − | + | PID=$(ls /var/lock/slackpkg.* 2>/dev/null|sed 's/^.*\.\([0-9]*\)$/\1/'|head -1) |
|
| − | while true;do |
+ | if [ ! -z "$PID" ];then |
| − | PID=$(ls /var/lock/slackpkg.* 2>/dev/null|sed 's/^.*\.\([0-9]*\)$/\1/'|head -1) |
+ | if ps $PID 2>/dev/null|grep -q slackpkg ;then |
| − | 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 |
sleep $RETRY_INTERVAL |
||
continue |
continue |
||
| − | fi |
+ | else |
| − | echo $U|grep -q "News on ChangeLog.txt" |
+ | rm -f /var/lock/slackpkg.* >/dev/null 2>&1 |
| − | NEWS=$? |
+ | rm -f /tmp/slackpkg.* >/dev/null 2>&1 |
| − | + | sleep $RETRY_INTERVAL |
|
| − | DATE="$(date '+%a %H:%M')" |
+ | continue |
| − | if [ $NEWS -eq 0 ];then |
+ | fi |
| − | if [ $NEWUPDATE -ne 0 ];then |
+ | fi |
| − | message -t 3 "$DATE: Sono stati trovati aggiornamenti per slackware" |
+ | U=$(slackpkg check-updates) |
| − | else |
+ | if [ $? -ne 0 ];then |
| − | message -t 7 "$DATE: Trovati nuovi aggiornamenti per slackware: |
+ | sleep $RETRY_INTERVAL |
| − | + | continue |
|
| − | $(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 |
| − | + | echo $U|grep -q "News on ChangeLog.txt" |
|
| − | fi |
+ | NEWS=$? |
| − | INTERVAL=$MAX_INTERVAL |
+ | |
| − | NEWUPDATE=$[1-$REPEATUPDATES] |
+ | DATE="$(date '+%a %H:%M')" |
| − | else |
+ | if [ $NEWS -eq 0 ];then |
| − | NEWUPDATE=0 |
+ | if [ $NEWUPDATE -ne 0 ];then |
| − | INTERVAL=$MIN_INTERVAL |
+ | message -t 3 "$DATE: Sono stati trovati aggiornamenti per slackware" |
| − | fi |
+ | else |
| − | + | message -t 7 "$DATE: Trovati nuovi aggiornamenti per slackware: |
|
| − | sleep $INTERVAL |
+ | |
| − | done |
+ | $(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 |
+ | |
| + | fi |
||
| + | INTERVAL=$MAX_INTERVAL |
||
| + | NEWUPDATE=$[1-$REPEATUPDATES] |
||
| + | else |
||
| + | NEWUPDATE=0 |
||
| + | INTERVAL=$MIN_INTERVAL |
||
| + | fi |
||
| + | sleep $INTERVAL |
||
| + | done |
||
| + | fi |
||
| + | </source> |
||
==Configurazione== |
==Configurazione== |
||
Questo script consente la personalizzazione di alcuni parametri con un file di configurazione '''.slack-update.rc''' da inserire nella propria home. |
Questo script consente la personalizzazione di alcuni parametri con un file di configurazione '''.slack-update.rc''' da inserire nella propria home. |
||
Versione attuale delle 10:52, 22 apr 2011
Indice |
[modifica] 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
[modifica] 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.
[modifica] News
23/09/2010: Versione 1.0 rilasciata.
[modifica] 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
[modifica] 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)