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.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
icon 4 KB CHANGE.LOG 20:46:10 28-08-2010 967854e1711568a6bdae1d395f968037
icon 30 KB class.chkupd.php 20:46:10 28-08-2010 131d3822cf6ebd76be5e73e587de9556
icon 44 KB class.phpmailer.php 12:59:42 02-04-2010 16b53c58fcc5ed01f9dbd046eecde42b
icon 33 KB class.smtp.php 12:59:45 02-04-2010 4b458a4f4ac2e812b2a42ee039fd5876
icon 492 B example_chkupd.sh 12:59:47 02-04-2010 4ee1880f80d33c7da8a8aca4df683bcb
icon 1 KB example_index.php 20:46:10 28-08-2010 e247df42cc221698688efd3105bd5273
icon 7 KB example_locale_checks.php 20:46:10 28-08-2010 11cd67b5ea9d18c4a6ede84392fad7f5
icon 676 B example_php.ini 13:24:15 02-04-2010 ede2f1a5d2364bad950c25b72b8d4080
icon 4 KB mail.tpl 12:59:53 02-04-2010 72edc459424aa3ea9015904e407840f6
icon 4 KB mail_simple.tpl 12:59:55 02-04-2010 045eefdf2055e73aef9423e8362360eb
icon 1 KB phpmailer.lang-en.php 12:59:56 02-04-2010 65f77d3d32da59b19ed6c65559be50d7
icon 12 KB remote_checks.php 20:46:10 28-08-2010 be11de5677ab69522c73889cd94bed1a
icon 6 KB translations.php 20:46:09 28-08-2010 9648bc58af28cd3540428497601881e4

Email images
icon 2 KB ico_chklnk.png 14:29:02 09-01-2009 268181e91ac0e19eae452f6fd85a1e7d
icon 4 KB ico_hd.png 14:29:03 09-01-2009 cd601c4fa8a8d6dae44e9a80716699d6
icon 2 KB ico_hp.png 14:29:04 09-01-2009 c90fc2e7ae40861d7dec4653c989c824
icon 2 KB ico_hps.png 14:29:05 09-01-2009 200c8ea23c305053398356212f2e55d7
icon 3 KB ico_proc.png 14:29:07 09-01-2009 49eb03648da9874467176be7a154c973
icon 3 KB ico_ram.png 14:29:07 09-01-2009 a3436d455b958761ccf275b5093f01ed
icon 7 KB logo.png 14:29:10 09-01-2009 3c103a57b854fc5ef960051f52abe37c
icon 4 KB rows.png 14:29:10 09-01-2009 f304e432cdb38e98bbda8d19cb503135
icon 2 KB rows_begin.png 14:29:11 09-01-2009 6ae5098a28d9c05908535c7e522d1f9c
icon 2 KB rows_end.png 14:29:12 09-01-2009 7bd6b25b08fee43ba597cb8b089e5886
icon 2 KB stats.png 14:29:13 09-01-2009 bab7bab7d6635736a150ab460439109a
icon 1 KB stats_begin.png 14:29:13 09-01-2009 bd13accb58069205aa440913f223118a
icon 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):

Apache 2.0 Apache 2.2 Awstats BackupPC Bind Clam AntiVirus Courier Authlib Courier-IMAP Cyrus SASL DSPAM GrSecurity 2.4 (stab) GrSecurity 2.4 (test) GrSecurity 2.6 (stab) GrSecurity 2.6 (test) ImageMagick Joomla! Kernel 2.4 Kernel 2.6 Kernel 2.6 Kernel 2.6 MySQL 5.1 OpenSSH OpenSSL Openwall PHP PHP 5.3.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.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