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
|
L'ultima versione disponibile è: PHP SCUD 2.4.5 (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 | ||||
|---|---|---|---|---|
|
|
4 KB | CHANGE.LOG | 20:46:10 28-08-2010 | 967854e1711568a6bdae1d395f968037 |
|
|
30 KB | class.chkupd.php | 20:46:10 28-08-2010 | 131d3822cf6ebd76be5e73e587de9556 |
|
|
44 KB | class.phpmailer.php | 12:59:42 02-04-2010 | 16b53c58fcc5ed01f9dbd046eecde42b |
|
|
33 KB | class.smtp.php | 12:59:45 02-04-2010 | 4b458a4f4ac2e812b2a42ee039fd5876 |
|
|
492 B | example_chkupd.sh | 12:59:47 02-04-2010 | 4ee1880f80d33c7da8a8aca4df683bcb |
|
|
1 KB | example_index.php | 20:46:10 28-08-2010 | e247df42cc221698688efd3105bd5273 |
|
|
7 KB | example_locale_checks.php | 20:46:10 28-08-2010 | 11cd67b5ea9d18c4a6ede84392fad7f5 |
|
|
676 B | example_php.ini | 13:24:15 02-04-2010 | ede2f1a5d2364bad950c25b72b8d4080 |
|
|
4 KB | mail.tpl | 12:59:53 02-04-2010 | 72edc459424aa3ea9015904e407840f6 |
|
|
4 KB | mail_simple.tpl | 12:59:55 02-04-2010 | 045eefdf2055e73aef9423e8362360eb |
|
|
1 KB | phpmailer.lang-en.php | 12:59:56 02-04-2010 | 65f77d3d32da59b19ed6c65559be50d7 |
|
|
12 KB | remote_checks.php | 20:46:10 28-08-2010 | be11de5677ab69522c73889cd94bed1a |
|
|
6 KB | translations.php | 20:46:09 28-08-2010 | 9648bc58af28cd3540428497601881e4 |
|
Email images |
||||
|
|
2 KB | ico_chklnk.png | 14:29:02 09-01-2009 | 268181e91ac0e19eae452f6fd85a1e7d |
|
|
4 KB | ico_hd.png | 14:29:03 09-01-2009 | cd601c4fa8a8d6dae44e9a80716699d6 |
|
|
2 KB | ico_hp.png | 14:29:04 09-01-2009 | c90fc2e7ae40861d7dec4653c989c824 |
|
|
2 KB | ico_hps.png | 14:29:05 09-01-2009 | 200c8ea23c305053398356212f2e55d7 |
|
|
3 KB | ico_proc.png | 14:29:07 09-01-2009 | 49eb03648da9874467176be7a154c973 |
|
|
3 KB | ico_ram.png | 14:29:07 09-01-2009 | a3436d455b958761ccf275b5093f01ed |
|
|
7 KB | logo.png | 14:29:10 09-01-2009 | 3c103a57b854fc5ef960051f52abe37c |
|
|
4 KB | rows.png | 14:29:10 09-01-2009 | f304e432cdb38e98bbda8d19cb503135 |
|
|
2 KB | rows_begin.png | 14:29:11 09-01-2009 | 6ae5098a28d9c05908535c7e522d1f9c |
|
|
2 KB | rows_end.png | 14:29:12 09-01-2009 | 7bd6b25b08fee43ba597cb8b089e5886 |
|
|
2 KB | stats.png | 14:29:13 09-01-2009 | bab7bab7d6635736a150ab460439109a |
|
|
1 KB | stats_begin.png | 14:29:13 09-01-2009 | bd13accb58069205aa440913f223118a |
|
|
1 KB | stats_end.png | 14:29:17 09-01-2009 | 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.5.tar.gz
# rm phpscud-2.4.5.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.5) - 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):
ChangeLog
PHP System Check Update Changelog
Copyright (c) 2008, WoollySheep - luke [at] woolly-sheep [dot] net
All rights reserved.
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


