Anlan Blog

Un posto per scrivere quello che sento
Options:

Autenticazione AD per MailArchiva con Scalix

Sono un paio d’anni che usiamo, con soddisfazione, Scalix sia per la nostra struttura, che per quella dei nostri clienti. Innumerevoli sono i vantaggi offerti da Scalix rispetto ad Exchange:

  • Lo stack di investimento: per avere un server Exchange devi comprare per forza Windows Server e relative CAL. Con Scalix invece puoi affidarti ad un robusto e spesso gratuito server Linux tra quelli compatibili. Con soddisfazione abbiamo sempre adottato CentOS (ora alla versione 5.4) spendendo solo quanto necessario per dotarsi di un buon hardware sufficientemente dimensionato. In termini di costo licenza per il mail server poi i due prodotti non sono nemmeno comparabili con un indubbio vantaggio a favore di Scalix. E’ pur vero che il costo di licenza andrebbe rinnovato di anno in anno per poter ricevere le nuove release. Ma se la vostra installazione è stabile, protetta da un buon firewall e non sono cambiate le vostre esigenze di interfacciamento con altre periferiche o software, potete rimanere allo stato dell’ultima release che avete installato.
  • Continuità : è un fatto che i continui windows update richiedono sempre più spesso riavvii della macchina.  Con Scalix, e Linux ovviamente, i tempi di down per l’applicazione delle patch di aggiornamento sono significativamente ridotti.
  • Spazio : Exchange nella versione Standard ha dei limiti di spazio, per quanto ampi, allo storage della posta e degli altri elementi. Scalix invece ha come unico limite lo spazio fisico dei dischi presso i quali è attestato il suo database.
  • Multi Client : Exchange elegge come client preferenziale Outlook. Per usarlo con altri client è necessario sfruttarne la connessione IMAP o POP3 (in questi casi molte funzionalità vengono perse, specialmente per tutti gli elementi NON POSTA come i contatti, il calendario ecc.) oppure limitarsi ad accedervi tramite l’interfaccia Web. Scalix offre tutto questo (con una WebMail decisamente più avanzata) e come plus offre anche un connettore per Evolution il che vi rende possibile l’integrazione di un PIM Linux all’interno della struttura di rete (davvero tutti gli utenti devono avere Windows per forza ? Perchè non iniziate a risparmiare su quelle postazioni che non richiedono applicazioni office ????).

Ovviamente anche Scalix, dato che il suo competitor è proprio Exchange, cerca di combattere nello stesso campo (Windows), offrendo un sistema di autenticazione integrato SSO (Single Sign On) basato su Active Directory: in pratica l’accesso a Scalix tramite Outlook avviene nell’ambito delle credenziali di accesso a Windows (esattamente come Exchange).

Anche Scalix comunque, come tutti i server di posta, soffre. E soffre si di un male che non ha nulla a che vedere con l’aspetto tecnico: la “pigrizia” degli utenti. Pigrizia che porta a mantenere nelle caselle postali migliaia di messaggi, risalenti alla notte dei tempi, nell’eterna convinzione che prima o poi mi serviranno anche queste mail vecchie. Tutto questo trasforma il server di posta in un archiviatore mostruoso sul quale gli utenti avranno sempre modo di lamentarsi perchè diventa lento nelle ricerche.

Ovviamente il lavoro dell’archiviatore NON lo deve fare il server di posta. Piuttosto dei servizi specifici che tengano traccia di tutte le email che passano dal server e le organizzino in archivi debitamente indicizzati che poi andranno interrogati successivamente. Tenendo la posta “archiviata” a parte è poi possibile tenere il mail server “snello” con dei clean-up periodici (magari settimanali) che eliminino dalle mailbox tutto quello che non è lavoro quotidiano.

La nostra scelta è caduta su MailArchiva, un software open, disponibile sia in versione “community” (gratuita) sia in versione “enterprise” (a pagamento). Abbiamo adottato la versione community per l’archiviazione della posta.

Sia Scalix che MailArchiva permettono l’integrazione con Active Directory per l’autenticazione degli utenti e la loro configurazione è decisamente alla portata. Tuttavia MailArchiva, se attivata l’autenticazione con Active Directory, non trova nessuna mail per gli utenti. Perchè ? Il motivo è molto semplice. MailArchiva “legge” gli indirizzi email associati all’utente nell’attributo proxyAddresses dello schema di Active Directory (l’impostazione predefinita per chi ha installato Exchange) mentre Scalix scrive gli indirizzi email in un suo attributo nominato scalixEmailAddress. Ne consegue che MailArchiva non sa quali siano le email di pertinenza dell’utente che ha effettuato l’accesso e, a meno che non sia un admin, non ne mostra nessuna.  La soluzione proposta dal team di MailArchiva è quella di passare ad un sistema di autenticazione LDAP e di specificare quale sia l’attributo dello schema che specifica l’indirizzo email : a meno che non abbiate la versione Enterprise (a pagamento) è una spina nel sedere.

La vera soluzione è molto più semplice e di facile implementazione. Basta copiare gli indirizzi email presenti nell’attributo scalixEmailAddress e metterli anche nell’attributo proxyAddresses (che è un attributo standard di Active Directory e quindi presente anche se non avete Exchange montato). I due attributi hanno forme sintattiche leggermente diverse ma con un piccolo script (facilmente schedulabile) potete mantenere allineate le informazioni.

Siete pigri ? … vabbè … ecco lo script per farlo.

Download ScxPAUtil.zip

Scarica lo zip ed estrai il contenuto (incluse sottodirectory) in una cartella di tua scelta. Per lanciare l’allineamento tra i due attributi basta eseguire, da una macchina membro del dominio e nelle credenziali di un utente che ha diritti di scrittura su AD:

cscript ScxPAUtil.wsf

Verrano eseguite le seguenti operazioni :

  1. Estrazione di tutti gli oggetti “user” dallo schema Active Directory
  2. Se l’oggetto user non è associato ad email Scalix, l’attributo proxyAddress viene svuotato
  3. Se l’oggetto è associato ad email Scalix, l’attributo proxyAddress viene popoplato (o aggiornato) con i valori presenti in scalixEmailAddress.

Semplice e lineare. Ora MailArchiva “vede” le email corrette.

Powershell e Windows 2000

Si può avere PowerShell su Windows 2000 ? Si
Da dove scarico l’installer di PowerShell per Windows 2000 ? Non lo puoi scaricare perchè non esiste. PowerShell non è nemmeno minimamente supportata per Windows 2000 e vi sono pure dei dubbi sul fatto che sia legale installarla su Windows 2000. E quand’anche riuscissi ad installarla, non ti aspettare che funzioni senza problemi.

Se tutto questo non ti spaventa e vuoi per forza avere PowerShell v. 1.0 sul tuo “vecchio”, fedelissimo e ormai super stabile Windows 2000 … ecco come fare.

  1. Sul tuo Windows 2000 crea una cartella (nel disco che preferisci) direttamente sotto la radice principale che chiameremo PWS2000. Es. C:\Pws2000
  2. Assicurati di avere installato il il framework .NET 2.o Se non sei sicuro o se lo devi installare scaricalo da qui FrameWork .NET 2.0 e poi installalo.
  3. Scarica e installa l’SDK per .NET 2.0. Puoi effettuare il download direttamente da questo link : FrameWork .NET 2.0 SDK
  4. Scarica e NON installare il package di installazione per PowerShell 1.0 per Windows XP. Puoi trovare il package direttamente a questo link. Salva il file di installazione nella directory che hai creato al punto 1. Dovrebbe chiamarsi WindowsXP-KB926139-v2-x86-ENU.exe
  5. Ora serve un editor binario/esadecimale. Se non ne hai uno puoi scaricare Hexplorer da SourceForge ed installarlo.
  6. Apri un prompt di comando ed accedi alla directory che hai creato al punto 1.
  7. Crea la sottocartella KB926139. Es. C:\PWS2000\KB926139
  8. Esegui il comando WindowsXP-KB926139-v2-x86-ENU.exe /extract
  9. Quando appare la finestra che ti chiede dove vuoi estrarre i file inserisci il nome della cartella che hai creato al punto 7
  10. Al termine della estrazione, con l’editor esadecimale che hai installato, apri il file ‘powershell.exe” che si trova nella cartella C:\PWS2000\KB926139
  11. Vai all’offset 132 e modifica il 01 con 00 (zero zero). Questo è necessario perchè la versione di Windows 2000 è la 5.00 e non la 5.01.  Se hai installato Hexplorer segui esattamente questi passi: Avvia Hexplorer dal Menu Start; File -> Open e apri C:\PWS2000\KB926139\powershell.exe; quando il file è aperto premi il tasto F5 (goto) e nel campo Offset digita 132 e poi invio; il quadratino rosso si posiziona in un punto dove c’è scritto 01; usando il tastierino numerico digita 00; Ora dal menu scegli File->Save. Il file è stato modificato e ora puoi chiudere Hexplorer
  12. Ora scarica questo file PWS2000_Setup.zip e salvalo nella directory C:\PWs2000 (o comunque quella che hai creato al punto 1). E’ un file in formato zip.
  13. Estrai il contenuto del file appena salvato direttamente nella cartella C:\PWS2000.
  14. Prendi nota della cartella di installazione di Windows. Generalmente dovrebbe essere C:\WINNT. Se la directory NON è questa allora procedi con il punto 15 altrimenti salta al punto 16.
  15. Con un editor di testo qualsiasi apri il file PWS2000_Registry.reg e modifica tutti i punti in cui è indicato C:\WINNT con il nome della tua cartella Windows. Attenzione: alcune volte è scritto C:\WINNT (con un solo backslash) altre volte è scritto C:\\WINNT (con due backslash). Rispetta il numero di backslash. Dopo aver modificato salva il file.
  16. Torna al prompt di comando ed accedi, se non ci sei già, alla cartella C:\PWs2000.
  17. Esegui InstallPWS2000.bat. Lo script copierà i file necessari, genererà gli assembly ed infine li registra nella GAC (Global Assembly Cache). Inoltre crea il collegamento a PowerShell nel menu start.
  18. Al termine, se vuoi, puoi disinstallare .NET Framework 2.0 SDK (che occupa quasi 1Gb di spazio). Puoi anche cancellare la cartella che hai creato al punto 1

La procedura si conclude qui.
Attenzione. Questa procedura serve solo per l’installazione. Non è previsto uno script per la disinstallazione e non troverai PowerShell installato nella sezione “Add/Remove Programs” del pannello di controllo. Se vuoi rimuovere PowerShell dovrai farlo a mano, seguendo a ritroso i passi scritti nel batch di installazione.

Buona PowerShell a tutti.

PowerShell ti fa il Backup dei file con 7-zip

In questo mio precedente articolo mi sono già cimentato nell’implementazione di un sistema di backup utilizzando 7-zip come archiviatore. Purtroppo lo script batch che ne è uscito fuori, per quanto funzionante, è soggetto a molte, troppe limitazioni: una su tutte, la pratica impossibilità di maneggiare correttamente in un file batch nomi di file o cartelle che contengano caratteri speciali come “&” (ampersand).

Da non trascurare nemmeno le non eccellenti performance generali dello script che, non potendo gestire delle vere e proprie variabili, è costretto ad impostare continuamente variabili di ambiente. Insomma … la cara vecchia shell DOS è alla frusta da un bel pezzo, specialmente se paragonata alle estese e flessibilissime shell di comando Linux.

Forse proprio per quest’ultimo motivo (l’arretratezza delle shell di comando), Microsoft ha, ormai da un pezzo, la sua PowerShell. In pochissime parole : “Una eccellente implementazione del framework .Net in una console a riga di comando“. Troppo complicato ? Nahhhh.

PowerShell è forse uno dei maggiori balzi in avanti registrati nelle tecniche di scripting per Windows, nonchè la chiave di volta per la risoluzione dei problemi del mio script di backup con 7-zip.

E’ così nato il nuovo script : 7zBackup.ps1 . L’intero progetto è ospitato su Codeplex (la piattaforma Microsoft per la condivisione di progetti open) e non me ne vogliano gli amici italiani se è tutto in inglese. La soluzione offerta da questo script è, per me, molto interessante e con l’inglese è più facile trovare dei contributors o dei tester.

>> Backup dei file con 7-zip e PowerShell <<

Backup dei file con 7-zip

Le procedure di backup sono sempre una bella gatta da pelare. Personalmente non amo sistemi di backup “proprietari” che utilizzano codifiche esclusive perchè gli archivi generati (indipendentemente dal fatto che si tratti di copie su nastro o su disco) non sono facilmente portabili. A parte sistemi di classe enterprise che consentono procedure di disaster recovery, quello che mi aspetto da un archivio di backup è la semplice possibilità di portarlo, all’occorrenza, su un’altra macchina e di ripristinare i file senza dover installare pesanti software specifici. Insomma … che l’archivio di backup generato sia leggibile facilmente e ovunque con minime installazioni.

Il diminuito costo dello storage rende sempre più frequente l’utilizzo di backup su file (utilizzando SAN, NAS o gli stessi dischi dei server) relegando le copie su tape library ad ambiti sempre più ristretti e specializzati. In questo contesto ho sempre preferito, per il backup dei dati su server Windows, l’utilizzo dell’utilità di backup Microsoft (NTBackup) per i motivi che ho descritto sopra soprattutto la portabilità (leggo lo stesso archivio su un altro server Windows senza dover installare praticamente nulla).

L’utilizzo di NTBackup porta vantaggi ma anche svantaggi:

  • I file di backup sono molto grandi: NTBackup copia e archivia i file senza comprimerli
  • Creare una procedura per il backup automatico è piuttosto semplice ma non è altrettanto facile controllare l’esito: NTBackup non riporta ERRORLEVEL corretti (esce sempre con zero se si backuppa su disco) anche quando vi sono rilevanti errori.

Ho deciso allora di “cimentarmi” nella creazione di un batch di automazione per il backup che rispondesse ai seguenti requisiti:

  • Minime installazioni richieste sul computer e soprattuto che i software necessari siano disponibili gratuitamente
  • Possibilità di selezione di backup “Complete”, “Incrementali”, “Differenziali”
  • Compressione degli archivi salvati
  • Controllo dei codici di ERRORLEVEL
  • Gestione della rotazione dei file
  • Portabilità su sistemi diversi e, perchè no, anche su Linux

Il risultato è 7backup.bat : un singolo script batch (.bat) la cui esecuzione è facilmente schedulabile con minimi ed intuitivi switch da riga di comando.

Clicca qui per il download 7Backup.bat

Attenzione !! Questo script utilizza i junction points come caratteristica del file system NTFS. I Junction points vengono rappresentati da Windows Explorer come normali cartelle. MAI e ripeto MAI cancellare un junction point utlizzando Windows Explorer perchè questo porta alla cancellazione anche dei dati nella cartella di destinazione (ovvero quella oggetto del puntamento junction).

Disclaimer : questo script è stato testato con cura tuttavia può non essere esente da errori. Non utilizzatelo in ambienti ad alta criticità senza prima averlo testato adeguatamente su computer di prova. L’utilizzo del software è a vostra completa discrezione e rischio. Non rispondo di perdite di dati e non fornisco supporto diretto se non per il tramite, secondo tempo e disponibilità, di questo sito web.

I requisiti per il funzionamento sono :

  • Aver installato 7-zip che viene utilizzato per la generazione degli archivi compressi. Download 7-Zip.
  • Disporre di un filesystem NTFS
  • Aver installato l’utilità Junction di Sysinternals per la creazione di link simbolici alle directory

Lo script batch è interamente documentato (in inglese) e tutte le impostazioni rilevanti possono essere codificate come costanti o passate da riga di comando. Solo due valori devono essere impostati a mano. Per fare questo potete editare il file 7backup.bat con un normale editor di testo come notepad (vi consiglio comunque di dotarvi di Notepad++). I valori rilevanti sono :

:: 7-zip executable path.
:: If you have installed 7zip using standard path, then you do not need to
:: change this
SET BK-7ZBIN=%ProgramFiles%\7-zip\7z.exe

In questa variabile dovrete inserire il percorso completo che punta all’applicazione 7-zip. Se avete installato 7-zip con le impostazioni standard non dovreste avere bisogno di modificare nulla.

L’altra variabile rilevante è la seguente:

:: Junction executable path.
:: Find where Junction.exe is and set it here. If Junction.exe is in
:: a directory within the PATH variable you can simply indicate
:: junction.exe
SET BK-JUNCTION=%ProgramFiles%\SysInternalsSuite\Junction.exe

Le applicazioni di SysInternals non prevedono una procedura di setup e quindi possono essere inserite in qualsiasi percorso. Prendetevi un momento per individuare Junction.exe all’interno del computer ed indicate quindi il percorso in cui si trova. Se il percorso prevede directory con spazi NON mettete le virgolette. Verranno aggiunte automaticamente dallo script quando serviranno.

A questo punto potete provare ad eseguire il batch senza nessun parametro. Viene emessa la schermata di aiuto come segue:

7Backup-ScreenShot 

Tutti gli switch di comando sono spiegati e documentati.

Non resta altro che creare una “lista” di directory che vorrete backuppare. Con un normale editor scrivete l’elenco delle directory da backuppare, una per riga, indicandone il percorso completo inclusa la lettera di unità. Ad esempio:

C:\Dir1\Dati
C:\Dir3
D:\Archivi

Salvate il file in formato testo e annotatevi la posizione.
Attenzione. Non è ammessa l’indicazione di una Directory e di una sua Sottodirectory. Per esempio non è possibile indicare:
C:\Dir1\Dati
C:\Dir1\Dati\Commerciale
Questo perchè la procedura crea, per ogni directory elencata, un junction point nell’area di lavoro, includendo automaticamente tutte le sottodirectory. Il mancato rispetto di questa regola può portare a risultati imprevedibili e loop infiniti.

Potete ora lanciare il backup come ad esempio seguente:

7backup.bat --dirlist "C:\Mie Selezioni\Lista.txt" --type full --destdir "F:\MieiBackup" --rotation 3

Questo produrrà la generazione di un archivio di backup completo (ovvero di tutti i file contenuti nelle directory indicate nel file c:\Mie Selezioni\Lista.txt). Il file archivio verrà depositato nella directory F:\MieiBackup dove verranno mantenuti solo i 3 più recenti backup dello stesso tipo.

Alcune cose da considerare:

  • Lo script utilizza come directory di lavoro predefinita il percorso indicato nella variabile %temp% del sistema operativo. Questa impostazione può essere di disturbo nel momento in cui si desidera effettuare il backup di directory che stanno al di sopra della directory %temp%. Per ovviare al problema è sufficiente indicare una directory di lavoro (tramite lo switch –workdir) che sia al di fuori dei percorsi da backuppare.
  • La directory di destinazione degli archivi di backup deve essere in un’area di storage sufficientemente capiente
  • E’ possibile indicare nell’elenco delle directory da salvare un intero disco (Es. C:\). In questo caso non dovranno essere presenti, nell’elenco di selezione, altre directory appartenenti allo stesso disco e la directory di destinazione e di lavoro dovranno essere al di fuori del disco da backuppare
  • Le impostazioni di default codificate all’interno dello script abilitano il multithreading per 7-zip: questa impostazione riduce i tempi di archiviazione/compressione ma come effetto secondario occupa la/le cpu al massimo delle prestazioni per periodi di tempo anche prolungati. In caso di utilizzo su macchine virtuali con monitoraggio delle risorse attive, o nel caso in cui si debba prevedere l’esecuzione di altre procedure batch (per esempio in notturna) questa impostazione può generare warning o errori. Modificate nello script la sezione dedicata agli switch di 7-zip secondo le necessità più consone all’ambiente in cui eseguirete lo script.
  • La presenza di antivirus la cui protezione residente sia attiva può essere motivo di sensibili rallentamenti durante il processo di archiviazione/compressione. Se possibile inserite tra le esclusioni della protezione permanente dell’antivirus almeno il percorso di destinazione dell’archivio di backup.
  • All’interno del file di selezione non è attualmente possibile indicare cartelle con percorso UNC (es. \\nomeserver\nomecartella). Questa possibilità verrà inserita in una prossima release.
  • Durante la fase di selezione dei file da archiviare è noto un problema che impedisce la corretta selezione nel caso in cui nel nome del file (o della directory che lo contiene) è presente il carattere “&”. Al momento e finchè l’intera procedura viene eseguita in un solo file batch (senza l’aiuto di componenti di scripting esterni) non sono riuscito a trovare una valida soluzione al problema.
  • Il file archivio generato alla fine della procedura di backup contiene, oltre ai dati archiviati, copia del file di selezione delle directory ed il log completo delle operazioni effettuate (anche leggendo l’archivio da un’altra postazione potrete sapere come e quando è stato creato).

Ogni commento o integrazione è bene accetto.