Chocolatey è un gestore di pacchetti concettualmente molto simile ad APT o YUM in ambiente Linux, che permette quindi di creare, aggiornare, distribuire o rimuovere pacchetti software in modo centralizzato e automatizzato.
Alla base del suo funzionamento ci sono due macro-piattaforme: NuGet e Windows PowerShell. La prima è a sua volta un package manager per .NET, che consente di sviluppare e distribuire pacchetti software sotto forma di librerie DLL, mentre PowerShell è la nota shell integrata negli ambienti Microsoft Windows. Disponibile sia tramite interfaccia a linea di comando, che con una GUI dedicata, Chocolatey nasce come progetto open source disponibile con tre modelli di licensing: gratuito, Pro e Business a cui si aggiungono i piani MSP e Architect per utilizzi specifici.
Nel primo caso si tratta della versione con meno funzionalità e priva di supporto ufficiale, limitata – ad esempio – nel fatto di non poter creare propri pacchetti, convertirne di esistenti o avere una console per la gestione centralizzata. La versione Pro è limitata all’uso su massimo 8 macchine ed è escluso l’utilizzo in contesti aziendali: il prezzo è di 96 dollari l’anno e comprende funzioni evolute come il Package Builder grafico e il supporto ufficiale via email. La licenza Business è decisamente più articolata ed organizzata in pacchetti il cui prezzo varia a seconda del numero di macchine su cui Chocolatey verrà distribuito. Naturalmente non ha limitazioni a livello di funzionalità ed è previsto il supporto completo. A seguire si trovano due edizioni per contesti particolari, come la MSP, distribuita con un minimo di 200 licenze, e la Architect. Quest’ultima valida per utilizzi di sviluppo e ad un prezzo molto contenuto. (tabella comparativa QUI).
Chocolatey in azione
Come gestore di pacchetti, Chocolatey integra le funzioni principali che ci si aspetta da una piattaforma di questo tipo: installazione, aggiornamento, gestione delle dipendenze, disinstallazione automatizzata e auditing. È inoltre possibile avere un proprio server dedicato a questo scopo, che ospiti anche il repository dei pacchetti.
L’installazione di Chocolatey non richiede caratteristiche particolarmente evolute, è sufficiente un sistema Windows 7 o successivo (equivalente a Windows Server 2003 o successivo), PowerShell 2 o superiori e .NET almeno versione 4.x (se non presente, verrà installato automaticamente). L’installer è un semplice script che si può copiare e incollare nel prompt dei comandi (con privilegi amministrativi), oppure in una finestra PowerShell (disponibile QUI) e una volta terminata l’installazione, è possibile provarne subito il funzionamento digitando choco o choco -?. Se l’installazione via internet non dovesse funzionare, è disponibile un apposito pacchetto offline.
Da sottolineare che l’installazione di base riguarda la versione trial, nel caso di acquisto della licenza è necessario effettuare una specifica procedura di attivazione. Al variare delle versioni, è possibile aggiornare la piattaforma con il semplice comando choco upgrade chocolatey, esattamente nello stesso modo utilizzato per gli altri pacchetti. Una volta reso operativo l’ambiente, l’installazione di pacchetti si può lanciare utilizzando il semplice comando choco install packagename. Naturalmente sono disponibili una vasta serie di opzioni aggiuntive che si possono passare come parametro all’installer, ad esempio la cartella di installazione se diversa da quella di default.
Similmente a quanto accade in ambiente Linux, i parametri aggiuntivi si possono inserire utilizzando le combinazioni di caratteri: -, / o – a seconda del tipo di parametro. Ad esempio le opzioni a singolo carattere non devono utilizzare il comando /. Altri caratteri con funzioni specifiche sono il segno di uguale o diverso per valutare le opzioni, così come -d per il debug, -v per la descrizione estesa e -y per la conferma automatica.
Passaggi chiave nell’utilizzo di Chocolatey
Le tre fasi attraverso cui i pacchetti possono passare sono: installazione, aggiornamento e rimozione. Andiamo quindi a vedere nel dettaglio come vengono gestiti questi passaggi.
Abbiamo visto in precedenza come Chocolatey sia basato sull’utilizzo di NuGet, è proprio grazie a questa piattaforma che può iniziare l’installazione. NuGet viene utilizzato per ottenere dalla sorgente il pacchetto che si desidera installare: questo può avvenire da una cartella locale, un percorso di rete o un repository su Internet, tramite HTTP o HTTPS. Come avviene in ambito Linux, i Source Repository possono essere aggiunti o rimossi manualmente a seconda delle necessità (ad esempio se si dispone di un proprio). Il percorso di installazione standard è ChocolateyInstall\lib\ e non è configurabile in quanto viene utilizzato per tenere traccia della vita del pacchetto per fini di aggiornamento o rimozione. Chocolatey è quindi in grado di appurare se il pacchetto richiede delle dipendenze e crea uno snapshot del registro di sistema prima e dopo l’installazione, in modo da poter creare un apposito file dove salvare le informazioni per la corretta disinstallazione.
Per finire, il software controlla la presenza di file eseguibili nella cartella di lavoro e genera apposite librerie (chiamate Shims e che servono per tradurre le chiamate API e cambiare/tradurre gli argomenti passati all’occorrenza) che vengono quindi rese disponibili nel pacchetto finale nella cartella \bin.
L’upgrade dei pacchetti avviene in modo simile a quanto accade durante l’installazione: Chocolatey infatti crea uno snapshot della cartella relativa al pacchetto, prima di tentare l’aggiornamento, in modo da consentire un rollback completo alla situazione di partenza. Bisogna però prestare attenzione perché il salvataggio viene fatto solo per la cartella relativa al pacchetto, di conseguenza eventuali integrazioni o sviluppi esterni a quest’ultima saranno persi.
Infine la rimozione avviene lanciando lo script automatizzato contenuto nella cartella del pacchetto, previo backup della stessa. Al termine della procedura, se la cartella è rimasta vuota, viene anch’essa rimossa.
Di seguito la sintassi dei comandi da utilizzare nelle tre situazioni: choco install <pkg|package.config> [<options/switches>]
choco upgrade <pkg|all> [<options/switches>]
choco unistall <pkg|all> [<options/switches>] oppure cunist <pkg|all> [<options/switches>]
l’aggiunta dei repository invece si realizza con il comando choco source [list]|add|remove|disable|enable [<options/switches>]
Chocolatey può anche lavorare con software già installati sulla macchina, è infatti in grado sia di integrarsi con l’installazione presente, sia di essere utilizzato per installare uno specifico pacchetto senza agire sul suo omologo già presente nel sistema. Naturalmente non sempre è possibile sapere a priori il nome esatto del pacchetto che ci serve installare, in questi casi è molto utile il comando search che permette di ricercare sia in locale che in remoto. Le tre modalità di utilizzo principale sono:
choco search <filter> [<options/switches>]
choco list <filter> [<options/switches>] o l’alternativa compatta clist <filter> [<options/switches>]
Creazione dei pacchetti
Nel contesto di Chocolatey, un pacchetto è un file nupkg, compilato utilizzando NuSpec (oppure un file zip) che è completamente autonomo dal punto di vista dei suoi metadati, dipendenze e versioning. Si tratta quindi di versioni evolute dei semplici pacchetti NuGet di cui abbiamo parlato in precedenza, in quanto contengono una serie di informazioni aggiuntive necessarie a Chocolatey per funzionare correttamente.
Prima di tutto è necessario definire se si intende realizzare un pacchetto auto-contenuto, oppure uno script di automazione: nel primo caso sarà più facile e sicuro mantenere il pacchetto nel tempo, naturalmente previa verifica dei diritti necessari per la distribuzione del contenuto stesso. In alternativa si può sfruttare PowerShell per l’esecuzione di script di automazione. Il requisito minimo per poter iniziare a creare pacchetti propri è la presenza si NuSpec, ovvero di appositi file XML che descrivono il pacchetto stesso e contengono, ad esempio, la definizione delle dipendenze.
Il comando di base è choco new <package_name>
Un breve esempio di creazione di un pacchetto con sorgente HTTP può essere:
$packageName = ‘gurupackage’
$fileType = ‘exe’
$url = ‘http://download.guruadvisor.net/packages/gurupackage.exe’
$silentArgs = ‘-y’
Install-ChocolateyPackage $packageName $fileType $silentArgs $url
Nella versione For Business è disponibile il Package Builder con interfaccia grafica, uno strumento che semplifica di molto la creazione dei pacchetti. È infatti sufficiente selezionare il file eseguibile o zip interessato e selezionare “Crea pacchetto Chocolatey”, con relativa cartella di output.
Per concludere, Chocolatey si integra con numerose piattaforme di automazione come Ansible, Boxstarter, Chef, PowerShell DSC, PowerShell PackageManagement e altre che si possono trovare QUI