Table of Content

Introduzione

Nel 2001 sono entrato a far parte del team di sistemisti della società @ Mediaservice.net.
Le policies aziendali di quei tempi prevedevano l'installazione manuale di tutti i componenti più delicati (servizi, librerie, ecc) ed è quindi nata l'esigenza di disporre di un software in grado di monitorare il web alla ricerca di nuove releases. Il software doveva essere in grado di confrontare le versioni remote con quelle locali e, in caso di discrepanze, avvisare gli amministratori di rete.
Quando le macchine da gestire diventano numerose, capisco che è necessario riscivere il codice da 0 inserendo nuove funzionalità per centralizzare la gestione dei check, così facendo si riducono drasticamente i tempi di aggiornamento delle regole.

Downloads

paypal
  L'ultima versione disponibile è: PHP SCUD 2.4.9 (download tar.gz, tar.bz2 o zip)
Se hai trovato utile questo programma e vuoi supportarne lo sviluppo, fai una donazione.

PHP SCUD Core files
icon 5 KB CHANGE.LOG 08:42:57 13-05-2012 33836224ff0c092ddf7cda4037f26a54
icon 31 KB class.chkupd.php 08:41:51 13-05-2012 b70d657360cc447a31758bc58ccfdcdd
icon 44 KB class.phpmailer.php 11:42:55 12-04-2012 16b53c58fcc5ed01f9dbd046eecde42b
icon 33 KB class.smtp.php 19:29:15 01-03-2012 4b458a4f4ac2e812b2a42ee039fd5876
icon 657 B example_chkupd.sh 20:04:25 01-03-2012 b4cbb345dd9c5c41acae27b350c76eb3
icon 1 KB example_index.php 08:15:57 17-04-2012 523f9f9612a1f3c6aaa4a91364d55cb3
icon 8 KB example_locale_checks.php 08:15:53 17-04-2012 818ee7a9d399c01626cfd68190e76660
icon 676 B example_php.ini 19:29:17 01-03-2012 ede2f1a5d2364bad950c25b72b8d4080
icon 5 KB mail.tpl 20:38:47 01-03-2012 b547e427fc1829a6963d2e76d388393d
icon 4 KB mail_simple.tpl 20:38:41 01-03-2012 a04928aec3086f86158897f9ae28886c
icon 1 KB phpmailer.lang-en.php 19:29:18 01-03-2012 65f77d3d32da59b19ed6c65559be50d7
icon 12 KB remote_checks.php 08:20:53 17-04-2012 387aeb8a74357c9286a4d0b670f5eb71
icon 6 KB translations.php 08:15:16 17-04-2012 2332a58d7d51759071dc6a11e413655e

Email images
icon 2 KB ico_chklnk.png 19:29:21 01-03-2012 268181e91ac0e19eae452f6fd85a1e7d
icon 4 KB ico_hd.png 19:29:21 01-03-2012 cd601c4fa8a8d6dae44e9a80716699d6
icon 2 KB ico_hp.png 19:29:21 01-03-2012 c90fc2e7ae40861d7dec4653c989c824
icon 2 KB ico_hps.png 19:29:22 01-03-2012 200c8ea23c305053398356212f2e55d7
icon 3 KB ico_proc.png 19:29:22 01-03-2012 49eb03648da9874467176be7a154c973
icon 3 KB ico_ram.png 19:29:23 01-03-2012 a3436d455b958761ccf275b5093f01ed
icon 7 KB logo.png 19:29:23 01-03-2012 3c103a57b854fc5ef960051f52abe37c
icon 4 KB rows.png 19:29:23 01-03-2012 f304e432cdb38e98bbda8d19cb503135
icon 2 KB rows_begin.png 19:29:24 01-03-2012 6ae5098a28d9c05908535c7e522d1f9c
icon 2 KB rows_end.png 19:29:24 01-03-2012 7bd6b25b08fee43ba597cb8b089e5886
icon 2 KB stats.png 19:29:24 01-03-2012 bab7bab7d6635736a150ab460439109a
icon 1 KB stats_begin.png 19:29:25 01-03-2012 bd13accb58069205aa440913f223118a
icon 1 KB stats_end.png 19:29:25 01-03-2012 cad8858ea4508ab365068704c89a96dc

Struttura

L'applicativo è formato dai seguenti files:

chkupd.sh bash script che si occupa di eseguire il php (utilizzato per il crontab)
class.chkupd.php classe core del progetto
class.phpmailer.php classe core del progetto PHPMailer (http://phpmailer.codeworxtech.com)
class.smtp.php classe utilizzata da class.phpmailer.php
index.php file che contiene la configurazione dell'applicativo
locale_checks.php file delle definizioni relative ai check locali
mail.tpl template mail di default (vd. screen shot a lato)
mail_simple.tpl esempio di template mail modificato per non includere immagini remote
remote_checks.php file delle definizioni relative ai check remoti
translations.php file contenente i messaggi (in due lingue: italiano ed inglese)

update.php

file che si occupa di fornire i files da aggiornare
version.php file che si occupa di fornire la release version dei files che compongono il core

Installazione

La procedura di installazione è abbastanza semplice:

# cd /home
# mkdir phpscud
# cd phpscud
# lynx "http://phpscud.lamerone.net/index.php?t=1"
# tar zxvf phpscud-2.4.9.tar.gz
# rm phpscud-2.4.9.tar.gz
# mv example_chkupd.sh chkupd.sh
# chmod +x chkupd.sh
# mv example_index.php index.php
# mv example_locale_checks.php locale_checks.php
# mv example_php.ini php.ini
# vi chkupd.sh

editare le variabili PHP e PATH

# vi locale_checks.php

cancellare o commentare gli elementi non utili togliendo la / alla fine del titolo, ad esempio

da

/** Clam AntiVirus **/
...
/**/

a

/** Clam AntiVirus **
...
/**/

 

Opzioni

Per ottenere l'elenco delle opzioni da passare all'applicativo, utilizzare l'arg --help.
Ecco un esempio dell'output visualizzato:

# php -c php.ini index.php --help

PHP System Check Update (2.4.9) - Copyright (c) 2008-2010, WoollySheep
----------------------------------------------------------------------
Check started at 2009-01-08 14:18:16
-c  --check             execute checks
-n  --nomail            email will not send
-d  --debug             enable debug mode to check only entry where DEBUG is enables, the email will not sent
-h  --help              print this text
-lm --lmodules          show all available local modules
-rm --rmodules          show all available remote modules
-s  --showhtml          show html returned
-u  --update            update SCUD files if necessary
-v  --verbose           show all internal messages

Configurazione

Per configurare PHP SCUD è sufficiente editare il files index.php.

// config
$chkupd->servername     = "Server di casa";
$chkupd->path           = '/home/wwwusers/chkupd/';
$chkupd->phpbin         = '/usr/local/bin/php'; 
$chkupd->language       = 'it_IT';

$chkupd->mailto[]       = array("name" => 'Joe Foo', "email" => "jf@foo.ru", "tpl" => "mail.tpl");
$chkupd->mailto[]       = array("name" => 'Gino Boa', "email" => "gb@email.it", "tpl" => "mail_simple.tpl");

$chkupd->mailfromname   = 'PHP SCUD';
$chkupd->mailfromaddr   = 'phpscud@dominio.it';
$chkupd->smtp           = 'smtp.provider.it';

Qualora si volesse mantenere una propria rete di server "SCUDati", è necessario aggiungere queste 3 linee al file index.php


public $updurl  = "http://foo.domain.co.uk/version.php";
public $updfile = "http://foo.domain.co.uk/update.php";
public $imgurl  = "http://foo.domain.co.uk/images/";

La prima linea fornisce l'indirizzo del file che si occupa di fornire la release version dei moduli remoti (remote_checks.php)
La seconda linea fornisce l'indirizzo del file che si occupa di fornire remote_checks.php
La terza linea corrisponde all'indirizzo della directory nella quale sono depositate le immagini utilizzate dal mail template.

Personalizzazione

L'effettiva potenzialità del progetto è la facilità di inserire in elenco nuovi controlli da effettuare online.
Immaginiamo di voler aggiungere un modulo ai remote_checks.php in grado di controllare l'ultima release di cpulimit (http://cpulimit.sourceforge.net).

La prima operazione è trovare il modo per individuare la versione locale.
Supponendo che il tar.gz scaricato risieda nella directory "/opt/pkgs/tools/"...


# ls -l /opt/pkgs/tools/
drwxr-x---   4 root    root         208 2005-11-01 00:14 avinfo-1.0a15
-rw-r-----   1 root    root      140885 2005-11-01 00:13 avinfo-1.0a15.zip
-rw-r-----   1 root    root     7495513 2005-11-06 12:24 coreutils-5.92.tar.gz
-rw-r-----   1 root    root        5130 2006-12-22 19:38 cpulimit-1.0.1.tar.gz
drwxr-xr-x   2    1002 root         128 2008-10-30 16:30 cpulimit-1.1
-rw-r-----   1 root    root        5130 2006-12-22 19:38 cpulimit-1.1.tar.gz
drwxr-x---   2 root    root         552 2004-11-24 17:23 ddclient-3.6.5
-rw-r-----   1 root    root       35726 2005-10-30 16:43 ddclient-3.6.5.tar.gz
 
#/bin/ls -C1r /opt/pkgs/tools/cpulimit-*.gz
/opt/pkgs/tools/cpulimit-1.1.tar.gz
/opt/pkgs/tools/cpulimit-1.0.1.tar.gz

Una volta trovato il comando utile ai nostri scopi, creiamo la entry in local_checks.php

/** cpulimit **/
$n = 'cpulimit';
$this->addLcp($n, 'CMD', "/bin/ls -C1r /opt/pkgs/tools/cpulimit-*.gz | /usr/local/bin/head -n 1 $out");
$this->addLcp($n, 'MATCH', "/cpulimit\-(.*?)\.t/");
$this->addLcp($n, 'SORT', 2);
$this->addLcp($n, 'DEBUG', 1);
/**/

(per verificare che tutto sia ok, è buona norma attivare il debug)

Occupiamoci ora del check remoto (qualora non sia disponibile nei check "ufficiali").
La pagina web non fornisce il classico "Last update is" quindi dobbiamo cercare nella pagina web eventuali links per il download.
Analizzando il codice HTML


...
last stable version from
<a href="http://downloads.sourceforge.net/cpulimit/cpulimit-1.1.tar.gz">here</a>
or get the latest source code from Subversion repository with this command:
...

Una volta individuato il codice utile, creiamo una nuova entry in remote_checks.php.
Essendo il link al tar.gz l'unico della pagina, possiamo dire al php di cercare


/** cpulimit **/
$n = 'cpulimit';
$this->addRcp($n, 'URL', "http://cpulimit.sourceforge.net/");
$this->addRcp($n, 'MATCH', "/cpulimit\-(.*?)\.tar\.gz\">here/");

A questo punto debugghiamo la modifica eseguendo index.php con l'opzione -d (--debug)

# php -d safe_mode=0 index.php -d
 
PHP System Check Update (2.0) - Copyright (c) 2008-2010, WoollySheep
Debug mode is ON
----------------------------------------------------------------------
 
E' stata trovata una versione differente di remote_checks.php. Aggiorna la versione locale con --update.
Non modificare il file locale! Se hai bisogno di ulteriori check, scrivi a luke [at] lamerone [dot] net.
 
----------------------------------------------------------------------
[D] Debugging cpulimit check...
[D] Prendo la versione locale di cpulimit
[D]   Command: /bin/ls -C1r /opt/pkgs/tools/cpulimit-*.gz | /usr/local/bin/head -n 1  2>&1
[D]   Match: /cpulimit\-(.*?)\.t/
[D]   Coords: 1
[D]   L'output del comando e': /opt/pkgs/tools/cpulimit-1.1.tar.gz
[D]   Le corrispondenze sono: [0] => cpulimit-1.1.t, [1] => 1.1
[D]   La versione locale restituita e': 1.1
[D] Prendo la versione remota di cpulimit
[D]   URL: http://cpulimit.sourceforge.net/
[D]   Port: 80
[D]   Match: /cpulimit\-(.*?)\.tar\.gz">here/
[D]   Sort: 0
[D]   Coords: 0
[D]   Strip: 1
[D]   Depend:
[D]   Le corrispondenze sono:
[D]   La versione remota restituita e':
----------------------------------------------------------------------
 
[D] Results
----------------------------------------------------------------------
[ ] Apache 2.0 (il controllo verra' saltato.)
[ ] BackupPC (il controllo verra' saltato.)
[ ] Bind (il controllo verra' saltato.)
...

Qualcosa è andato storto nel reperire la versione remota.
Se utilizzando l'opzione -s (--showhtml), scopriamo che viene effettuato lo strip dell'HTML.
Disabilitiamolo modificando il remote_checks.php


/** cpulimit **/
$n = 'cpulimit';
$this->addRcp($n, 'URL', "http://cpulimit.sourceforge.net/");
$this->addRcp($n, 'MATCH', "/cpulimit\-(.*?)\.tar\.gz\">here/");
$this->addRcp($n, 'STRIP', 0);

E rieseguiamo il check

# php -d safe_mode=0 index.php -d

PHP System Check Update (2.0) - Copyright (c) 2008-2010, WoollySheep
Debug mode is ON
----------------------------------------------------------------------
E' stata trovata una versione differente di remote_checks.php. Aggiorna la versione locale con --update.
Non modificare il file locale! Se hai bisogno di ulteriori check, scrivi a luke [at] lamerone [dot] net.

----------------------------------------------------------------------
[D] Debugging cpulimit check...
[D] Prendo la versione locale di cpulimit
[D]   Command: /bin/ls -C1r /opt/pkgs/tools/cpulimit-*.gz | /usr/local/bin/head -n 1  2>&1
[D]   Match: /cpulimit\-(.*?)\.t/
[D]   Coords: 1
[D]   L'output del comando e': /opt/pkgs/tools/cpulimit-1.1.tar.gz
[D]   Le corrispondenze sono: [0] => cpulimit-1.1.t, [1] => 1.1
[D]   La versione locale restituita e': 1.1
[D] Prendo la versione remota di cpulimit
[D]   URL: http://cpulimit.sourceforge.net/
[D]   Port: 80
[D]   Match: /cpulimit\-(.*?)\.tar\.gz">here/
[D]   Sort: 0
[D]   Coords: 0
[D]   Strip: 0
[D]   Depend:
[D]   Le corrispondenze sono: [0] => 1.1
[D]   La versione remota restituita e': 1.1
----------------------------------------------------------------------

[D] Results
----------------------------------------------------------------------
[ ] Apache 2.0 (il controllo verra' saltato.)
[ ] BackupPC (il controllo verra' saltato.)
[ ] Bind (il controllo verra' saltato.)
...

Gotcha!

Moduli

Elenco dei moduli disponibili (remote):

APC - Alternative PHP Cache Apache 2.0 Apache 2.2 Apache 2.4 Awstats BackupPC BestCrypt Bind Clam AntiVirus Courier Authlib Courier-IMAP Cyrus SASL DSPAM GrSecurity 2.4 (stab) GrSecurity 2.4 (test) GrSecurity 2.6 (stab) GrSecurity 3.2 (stab) ImageMagick Joomla! Joomla! 1.5 Kernel 2.4 Kernel 2.6 Kernel 2.6 Kernel 2.6 MySQL 5.5 OpenSSH OpenSSL Openwall PHP 5.x Postfix Postfix VDA Pure-FTPd RoundCube Squid 2.7 Squid 3.0 Trac Unreal Webalizer phpMyAdmin 2.x phpMyAdmin 3.x phpPgAdmin

ChangeLog

PHP System Check Update Changelog 
Copyright (c) 2008, WoollySheep - luke [at] woolly-sheep [dot] net 
All rights reserved. 

Release 2.4.9 - 2012/05/13
--------------------------------------------------------------------------------
- Il parametro "EVERY" viene ignorato se si passa il parametro "-n" (no-email)

Release 2.4.8 - 2012/04/12
--------------------------------------------------------------------------------
- Aggiunta il parametro "EVERY" nelle configurazioni locali: come per il crond,
  specificando un numero di giorni, verrà effettuato il controllo solo qualora
  il modulo (%) dell'EVERY con il NUMERO DEL GIORNO ritornerà 0
- Aggiunto la variabile checkevery nell'index (valore di default)

Release 2.4.7 - 2012/03/01
--------------------------------------------------------------------------------
- Fix sul replace dei pattern dei template (email)
- Aggiunta del modulo BestKrypt

Release 2.4.6 - 2012/02/17
--------------------------------------------------------------------------------
- Fix sulla mancata raggiungibilità dell'host di aggiornamento
- Fix relativo al template mail da utilizzare qualora l'host remote images
  sia irraggiungibile

Release 2.4.5 - 2011/12/07
--------------------------------------------------------------------------------
- Il parametro --debug non visualizza più i messaggi relativi al sendmail
- Aggiunta del paramento --debugmail per visualizzare oltre ai dati di debug
  classici anche quelli del sendmail

Release 2.4.5 - 2009/11/16
--------------------------------------------------------------------------------
- Aggiornamento della struttura in relazione alle modifiche di PHP 5.3.x

Release 2.4.4 - 2009/11/16
--------------------------------------------------------------------------------
- Migliorie al sistema di debugging.

Release 2.4.3 - 2009/10/04
--------------------------------------------------------------------------------
- Migliorato il debug relativo all'invio del report via email.

Release 2.4.2 - 2009/05/20
--------------------------------------------------------------------------------
- Modificato l'esempio di php.ini in conformita' con le richieste di PHP 5.3.0.
- Aggiunto Joomla! nella lista degli esempi locali.
- Corretti alcuni problemi minori.

Release 2.4.1 - 2009/05/20
--------------------------------------------------------------------------------
- Patch relativa all'host resolution.

Release 2.4 - 2009/03/26
--------------------------------------------------------------------------------
- Completata la funzionalita' che gestisce le dipendenze dei pacchetti.
- Apportati alcuni fix minori.

Release 2.3 - 2009/01/08 
--------------------------------------------------------------------------------
- Prima release del sistema che gestisce le dipendenze dei pacchetti.
- Modificato il core per migliorare l'output in console. 
- Creazione del modulo addInfo.sh: il file si occupa di generare delle 
  statistiche 

Release 2.2 - 2008/12/30 
--------------------------------------------------------------------------------
- Modificato il sistema di update: SCUD ora si autoriavvia in caso di 
  aggiornamento di uno dei file del core. 

Release 2.1 - 2008/11/05 
--------------------------------------------------------------------------------
- Aggiunto il controllo sul REMOTE_ADDR (block sull'esecuzione via browser) 
- Riscrittura del sistema di verifica degli aggiornamenti. Il sistema si occupa 
  di aggiornare tutto il core (non verranno toccati index.php e 
  locale_checks.php) 
- Rimozione degli argomenti inutilizzati 
- Rimozione delle voci Translations inutilizzate 
- Bugfix della funzione showModules() 
- Classato (css) il template e modificata la classe in modo da evitare 
  l'utilizzo delle icone direttamente nell'html 
- Corretto il problema delle icone nel template mail.tpl 
- Disabilitato il check su SSL CA/Cert 
- Aggiunto il file example_php.ini customizzato sulle esigenze di SCUD 
- Modificato chkupd.sh in modo da utilizzare il php.ini customizzato 
- Bugfix: ccurl ora funziona con qualsiasi HTTPS (spero) 

Release 2.0.2 - 2008/10/30 
--------------------------------------------------------------------------------
- Modifica del controllo remote_checks.php ed aggiunta dell'opzione 
  --forceupdate 

Release 2.0.2 - 2008/10/29 
--------------------------------------------------------------------------------
- Modificata la classe principale in modo da consentire destinatari multipli 
- Modificata la funzione sendMail() in modo che ogni destinatario possa avere un
  template differente 

Release 2.0 alfa - 2008/10/20 
--------------------------------------------------------------------------------
- Riscrittura completa del codice - Implementazione della classe PHPMailer 
- Implementazione dei templates per le email 
- Creazione di un repository remoto che permetta la centralizzazione degli 
  aggiornamenti 

Release 1.0 - 2004/08/08 
--------------------------------------------------------------------------------
- Rilasciata la versione 1.0 

Contacts

Per qualsiasi informazione, scrivi una email a luke [at] lamerone [dot] net

Screenshots