29/06/2013

Cygwin e schedulazione script bash

cygwinCygwin? Lo adoro, lo venero, costruirei una statua in ogni piazza a chi l’ha inventato!
Ops scusate, cominciamo dall’inizio, cos’è Cygwin lo trovate qui; cosa Cygwin fa è presto detto: rende più semplice la vita di ogni sistemista offrendo un livello di integrazione unico e praticamente totale tra sistemi Windows e Unix like.

In parole povere Cygwin permette di utilizzare su Windows tutto quel popò di software (molti dei quali ricadono nel calderone delle GNU Utils) che rendono i sistemi Unix like (quindi anche GNU/Linux) lo standard di fatto in ambito server.
Ad esempio il terminale Cygwin risulta infinitamente più integrato con Windows rispetto al semplice (e ottimo) Putty, grazie a Cygwin è possibile installare su Windows un’infinità di software e servizi (un esempio su tutti OpenSSH, ma potremmo parlare di Squid, X Window System e tanti altri) che sono standard di fatto e che su Windows non si trovano, oppure sono disponibili in modalità differenti e con differenti contratti di licenza.

Uno dei tanti vantaggi, anzi imho forse il principale vantaggio che offre Cygwin è quello di utilizzare le shell di Unix su Windows, ad esempio la celebre e mai abbastanza osannata bash shell.
Già sento l’eco dei lamenti dei fan Microsoft protagonisti di infiniti flame su “bash vs powershell”, non è questa la sede e non è questo l’argomento, è comunque un dato di fatto che la bash sia una shell semplice da usare, potente, estremamente versatile e soprattutto disponibile sia in ambito Unix che Windows, e questo grazie a Cygwin.
Quindi perchè complicarsi la vita utilizzando diverse sintassi quando usando la bash possiamo tranquillamente riciclare script tra sistemi operativi Unix like e Windows?

Una volta creato un bello script occorre anche farlo girare, ecco che quindi entra in gioco l’integrazione tra Cygwin e Windows, in particolare lo scheduler del sistema operativo Microsoft.
Il tutto è molto semplice, basta lanciare la bash passando uno script bash (oppure un semplice comando) e come argomento della stessa utilizzando l’opzione -c.

Ad esempio il seguente comando permette di comprimere con bzip2 i file presenti in C:\Apache\logs e che hanno nome che comincia per “access_log.” e “error_log.”, escludendo però i file che contengono nel nome la stringa “bz2” (quindi i file già compressi precedentemente); l’output della compressione è di tipo verboso e verrà salvato nella stessa directory in un log diverso per ogni giorno e avente nome compress.AAAMMGG.

c:\cygwin\bin\bash.exe -l -c "find /cygdrive/c/Apache/logs/ -type f -name "access_log.*" -o -name "error_log.*" | grep -v bz2 | xargs bzip2 -v >> /cygdrive/c/Apache/logs/compress.$(date +\%Y\%m\%d).log 2>&1"

Per schedulare il seguente comando con frequenza giornaliera basta creare un nuovo scheduled job
01

Specificare la frequenza con cui questo job dovrà girare
02

03

Infine specificare il comando desiderato come “Programma o script”
04

05

In questo modo il comando verrà eseguito ogni giorno alle ore 02:00, ovviamente si tratta di un esempio banale lungi dall’essere uno script completo e ben fatto per l’archiviazione di logs, è solo un esempio su come sia facile riciclare e schedulare script bash anche su Windows, ragione più che sufficiente per installare Cygwin su qualsiasi macchina su cui gira questo sistema operativo.

17/06/2013

Lei disse sì

leidissesiQualche giorno fa mi è cascato l’occhietto su un video pubblicato da Repubblica.it che riassume brevemente la storia (ahimè straordinaria) di Ingrid e Lorenza, due ragazze di Firenze che convivono da diversi anni e che hanno deciso di sposarsi.

Dico “ahimè straordinaria” perchè purtroppo l’Italia è ancora una Teocrazia Cristiana Cattolica talmente bigotta che parlare di matrimoni tra persone dello stesso sesso è ancora considerato tabù, un Paese i cui rappresentanti si riempiono la bocca di concetti come amore e famiglia, salvo poi non riconoscerli nemmeno quando sono palesi, come nel caso di Ingrid e Lorenza.

Queste ragazze hanno organizzato il loro matrimonio nella lontana Svezia, e hanno raccolto la loro testimonianza in un bellissimo sito che vi invito a visitare.
La cosa davvero stupefacente è il modo leggero, allegro, spontaneo ed estremamente solare con cui sono riuscite nell’intento; come giustamente dicono loro stesse nel filmato pubblicato da Repubblica i matrimoni omosessuali vengono sempre trattati come argomenti conflittuali, testimonianze sofferenti di un diritto sacrosanto che in Italia viene calpestato. Al contrario dal loro sito, dai loro filmati e dal documentario che hanno in programma di realizzare traspare una gioia genuina, cosa che non sempre mi è capitato di osservare anche tra le coppie etero in procinto di sposarsi, magari sommerse dalle rogne organizzative, da stupidi corsi prematrimoniali o impegni con i parenti.

A Ingrid e Lorenza va il mio più grande abbraccio e l’augurio di una vita lunga, serena e piena di felicità insieme (ma su questo vedo che le premesse ci sono tutte :D), sperando che questa loro testimonianza apra gli occhi a quanti si ostinano ad arroccarsi su posizioni discriminatorie.

 

15/06/2013

Subsonic

SubsonicLogoOggi si sente un gran parlare di servizi di streaming audio per portarsi appresso tutta la propria musica ovunque ci si trovi, servizi tipo Spotify o altre vaccate simili promettono mari e monti, salvo poi ritrovarsi inondati da una tale quantità di brani da non saper più quale scegliere…

Se anzichè dipendere da questi servizi preferite “degooglelizzarvi” e portarvi davvero ovunque la VOSTRA musica, sul VOSTRO hardware, con i VOSTRI servizi, allora vi consiglio di dare un’occhiata a questo fantastico servizio che risponde al nome di Subsonic.

Subsonic è ufficialmente un server di streaming audio completamente free che vi permette di ascoltare i vostri mp3 usando una comoda interfaccia web oppure delle applicazioni dedicate (anche per dispositivi mobile).
Tecnicamente parlando si tratta di una applicazione java disponibile sia come comodo package .war da deployare su un servlet container a piacimento (es Apache Tomcat), oppure come setup omnicomprensivo (applicazione + jetty) per Windows, GNU/Linux RedHat (rpm), Debian/Ubuntu (deb) oppure MacOS (pkg).

Tutto quello che dovete fare è lanciare il setup, attendere il completamento dell’operazione e poi collegarvi sulla porta standard 4040 (ovviamente personalizzabile a piacimento), loggarvi come amministratore e configurare i pochi semplici parametri necessari al funzionamento (es la directory che contiene i propri mp3).
Per esporre il servizio online potete scegliere se nattare il servizio oppure esporlo mediante un reverse proxy (io ho scelto quest’ultima strada), per fare in modo che il servizio utilizzi il protocollo https dovete seguire le semplici istruzioni che trovate in coda a questa pagina.

Riguardo alle applicazioni mobile (ma non solo) avete solo l’imbarazzo della scelta, a questo link trovate tutte le possibili alternative free o a pagamento; per utilizzarle vi basta installare la vostra prescelta sul dispositivo, puntare alla url del vostro server Subsonic e inserire le credenziali per autenticarvi.

Infine per raggiungere il vostro server Subsonic dalla fida ADSL di casa vi basterà registrarvi su uno dei tanti servizi di dns dinamico, crearvi un hostname pubblico e fare in modo che questo venga costantemente aggiornato con il vostro ip dinamico mediante le apposite utility fornite dal provider del servizio.

Beccatevi il mio gioiellino appena installato… e già, sono un fan sfegatato dei Dire Straits ;)

subsonic

03/06/2013

Schedulazione clamwin

Oh antivirus! Croce e delizia di ogni sistema Windows!
Se vi ritrovate nella spiacevole condizione di amministrare qualche server Windows è possibile che da un giorno con l’altro vi capiti a tiro qualche burocrate che “pretende” (non si sa bene in base a quale astrusa norma o principio) sia installato un antivirus, che questo sia aggiornato quotidianamente e che sia schedulata una scansione del sistema.

In questa situazione una persona normale e ragionevole proporrebbe di fare una veloce analisi per capire l’utilità e il rapporto costi/benefici di questa soluzione, ad esempio:

  • sui filesystem del server vengono scritti file?
  • che origine hanno i file che eventualmente vengono scritti sui filesystem?
  • i servizi che girano sul server come reagiscono a fronte di una scansione?
  • quali sono le esclusioni che è necessario definire sull’antivirus per fare in modo che le scansioni non interferiscano con i servizi esistenti?

Tutte domande sensate, ma che dalla mia esperienza nella maggioranza dei casi cadono nel vuoto, per molti utenti l’antivirus è un must, ci deve essere punto e basta, è un tabù intoccabile…

In questi casi Clamwin è una discreta soluzione, è leggero, è poco invasivo, di default non prevede rilevazione realtime (possibile tramite Clam Sentinel) che può compromettere le performance del sistema e infine è free e opensource (cosa utile se questi sono requisiti imposti dal cliente di turno).
Per contro Clamwin non è accurato come altri antivirus più blasonati e rispetto a questi rileva un numero eccessivo di falsi positivi, ma soprattutto ha uno schedulatore un po’ dozzinale che funziona solo se c’è un utente loggato sul sistema.

A tal proposito l’approccio degli sviluppatori è sensato, clamwin funziona splendidamente da CLI, perchè inventarsi uno schedulatore quando il sistema operativo stesso ne ha uno che funziona egregiamente? Della serie KISS (Keep It Simple Stupid…)

Per schedulare aggiornamento e scansione comprensiva di notifiche email bastano questi strumenti:

  • notepad
  • un file .bat
  • blat

Create un semplice file di testo con estensione .bat o .cmd (es clamsched.bat) con questa sintassi:

@echo off
rem ###### Personalizzate queste variabili
SET TARGET=c:\ d:\
SET LOG=c:\temp\clam-results.txt
SET BLATEXE=C:\utils\blat\full\blat.exe
SET BLATLOG=C:\utils\blat\blat.log
SET SMTPSERVER=smtp.domain.local
SET SENDERMAIL=sender@domain.tld
SET RCPTMAIL=utente@dominio.tld
SET ESCLUSIONIDIR=--exclude-dir="C:\\directory-da-escludere" --exclude-dir="C:\\Program Files\\directory-da-escludere2"
SET ESCLUSIONIFILE=--exclude="c:\\directory-esempio\\user\\Administrator\\.bash_history" --exclude="d:\pagefile.sys"
date /T
time /T

rem ###### Aggiornamento db antivirus
echo Aggiorno db antivirus
"c:\Program Files\clamwin\bin\freshclam.exe"
echo.

rem ###### Inizio scansione
echo Scansione avviata
echo.
"c:\Program Files\clamwin\bin\clamscan.exe" -d "C:\Documents and Settings\All Users\.clamwin\db" %ESCLUSIONIFILE% %ESCLUSIONIDIR% -i -r %TARGET% >%LOG% 2>&1
echo.
goto answer%errorlevel%
:answer0
rem # Commentate per non ricevere mail in caso di scansione negativa
 echo Nessun virus rilevato
 %BLATEXE% %LOG% -to %RCPTMAIL% -server %SMTPSERVER% -f %SENDERMAIL% -subject "Scansione antivirus OK" -q -log %BLATLOG%
 echo Scansione completa
 goto end
:answer1
 echo Possibile virus rilevato
 %BLATEXE% %LOG% -to %RCPTMAIL% -server %SMTPSERVER% -f %SENDERMAIL% -subject "PROBLEMA SCANSIONE ANTIVIRUS" -q -log %BLATLOG%
 echo Controlla il file %LOG%
 goto end
:answer2
 echo Errore nell'esecuzione dello script
 %BLATEXE% %LOG% -to %RCPTMAIL% -server %SMTPSERVER% -f %SENDERMAIL% -subject "PROBLEMA ESECUZIONE SCRIPT ANTIVIRUS" -q -log %BLATLOG%
 goto end
:end
echo.
date /T
time /T
echo ===========================
echo.
exit

Per schedulare aggiornamento e scansione vi basta aprire il task scheduler di Windows e creare un nuovo job che esegue il seguente comando:

C:\utils\clamsched.bat >> C:\utils\clamsched.log 2>&1