Visualizzazione post con etichetta package manager. Mostra tutti i post
Visualizzazione post con etichetta package manager. Mostra tutti i post

giovedì 10 novembre 2022

Windows: Winget package manager

Winget è il package manager che Microsoft ha integrato nei suoi sistemi operativi (Windows 10 e Windows 11). La sua interfaccia a riga di comando, che può scoraggiare gli utenti meno esperti, consente di utilizzarlo per la creazione di script di installazione, per importare/esportare la lista dei software installati nel sistema e aggiornare tutti i programmi presenti con un solo comando.
Winget utilizza un’architettura flessibile che offre il supporto anche a sorgenti multiple in maniera analoga a quanto accade nei package manager in ambiente Linux. I repository possono essere integrati in un unico archivio locale e ciò rappresenta una funzionalità molto utile in ambito enterprise per garantire il controllo sulla distribuzione e aggiornamento dei software.
Per visualizzare un elenco dei comandi e opzioni disponibili del package manager, basta eseguire, da una finestra PowerShell, il comando
Winget
Winget
FIG 1 - Winget
Per visualizzare la versione di winget installata
Winget -v
Versione di Winget
FIG 2 - Versione di Winget
Per ricercare un applicazione nel repository il comando sarà simile a
winget search <appname>
ad esempio per ricercare le applicazioni acrobat il comando sarà
Winget search acrobat
quando si usa il comando per la prima volta bisogna accettare le condizioni dei contratti (FIG 3) per poter procedere.
Termini di utilizzo msstore
FIG 3 - Termini di utilizzo msstore
Il motore di ricerca integrato in Winget analizza tutti i metadati di ciascun elemento (non solo il nome dell'app ma anche l'ID ed altre informazioni aggiuntive). Se da un lato questo garantisce di visualizzare un'elenco il più esaustivo possibile dall'altro potrebbe mettere in difficoltà l'utente meno esperto che non sa quale software scegliere tra quelli proposti. Ad esempio possono essere proposti più versioni del software oppure possono esserci software presenti sia all'interno del repository principale di Winget che nel Microsoft Store
Ricerca applicazioni nei repository
FIG 4 - Ricerca applicazioni nei repository

Per limitare la ricerca ad un solo repository si può utilizzare l'opzione -s e specificando il repository desiderato (winget o msstore)
winget search acrobat -s winget
Winget, limitare la ricerca ad un solo repository
FIG 5 - Winget, limitare la ricerca ad un solo repository

Per ottenere maggiori informazioni su il pacchetto si può utilizzare il comando show seguito dal nome del pacchetto o il suo ID (generalmente si utilizza quest'ultimo in quanto consente di specificare con precisione il pacchetto di proprio interesse)
winget show  Adobe.Acrobat.Reader.64-bit
Winget, visualizzare maggiori informazioni su un pacchetto
FIG 6 - Winget, visualizzare maggiori informazioni su un pacchetto
Per l'installazione del software si utilizza il comando install ad es.
winget install --id Adobe.Acrobat.Reader.64-bit
winget install 7zip -s winget
Winget install
FIG 7 - Winget install
Winget scarica e installa per default la versione più recente del software indicato. L'elenco delle versioni disponibili può essere visualizzato aggiungendo il parametro --versions alla fine del comando
winget show 7zip -s winget --versions
Winget, visualizzare le versioni disponibili di un software
FIG 8 - Winget, visualizzare le versioni disponibili di un software
Il parametro -v utilizzato insieme al comando install, consente di specificare la versione del software da installare.
winget install 7zip -s winget -v 21.06
Il comando install supporta l'argomento -i (oppure -interactive)che richiama la modalità di installazione interattiva e l'argomento -h (oppure -silent) che procede con l'installazione senza visualizzare alcuna interfaccia all'utente
Tramite l'argomento --location è possibile indicare il percorso in cui installare il software tuttavia tale funzione dipende dalle opzioni offerte da ogni specifico installer (winget install <app> --location C:\CartellaPersonale).

Con il comando
Winget list
verrà restituito l’elenco completo dei programmi installati in formato testuale. Nell'elenco sono inclusi anche i software che non sono presenti nei repository di Winget e, nel caso in cui il package manager rilevi la presenza di pacchetti più aggiornati rispetto a quelli installati in locale, segnala le nuove versioni in una colonna separata all'interno dell'elenco.
Winget, elenco programmi installati
FIG 9 - Winget, elenco programmi installati
L'elenco dei soli pacchetti aggiornabili può essere ottenuto con il comando
Winget upgrade
Winget upgrade
FIG 10 - Winget upgrade
L'opzione --all, utilizzata con il comando upgrade, consente di aggiornare in un unica operazione tutti i software installati (ad eccezione dei software che non sono presenti nei repository di Winget)
Winget upgrade --all

La procedura di disinstallazione è altrettando semplice e viene utilizzato il comando uninstall. Con il seguente comando
winget uninstall 7zip 
si avvia la procedura di disinstallazione del software specificato.
L'argomento -v consente di specificare la versione del software da disinstallare (utile nel caso in cui siano installate più versioni di uno stesso software)
Come per l'installazione, anche in questo caso è supportato l'argomento -i che richiama la disinstallazione interattiva e l'argomento -h che, invece, avvia la disinstallazione in modalità silente.


Winget può essere difficile da approcciare ma esistono diversi strumenti che vengono in aiuto dell'utente:
  • Archivio dei pacchetti online 
    L'archivio dei pacchetti online è accessibile all’indirizzo https://winget.run. Il sito consente di effettuare ricerche nell’archivio dei software e ottenere righe di comando di installazione da copiare e incollare nel terminale.
    winget.run
    FIG 11 - winget.run

  • Interfaccia grafica WingetUI 
    Si tratta di un vero e proprio front-end nativo di Winget disponibile su Github all’indirizzo https://github.com/martinet101/WingetUI. L'interfaccia è molto intuitiva e divisa in sezioni: Discover Software elenca i pacchetti disponibili, che possono essere filtrati tramite la casella di ricerca in alto a sinistra. Software updates mostra i pacchetti aggiornabili, mentre Installed application propone una lista che comprende tutti i software installati nel sistema.
    WingetUI
    FIG 12 - WingetUI

Configurazione Winget

La configurazione predefinita del Windows Package Manager Winget può essere modificata agendo sul file settings.json (il file si trova in %LOCALAPPDATA%\Packages\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe\LocalState\).
Per visualizzare e modificare il file JSON basta lanciare il comando
Winget settings
Se sul pc non è presente alcun software per la gestione dei file con estensione JSON, è possibile utilizzare un qualunque editor di testo (come ad esempio Blocco Note).
Per un elenco aggiornato delle impostazioni si può consultare la pagina https://aka.ms/winget-settings.

Source

All'interno del blocco Source è possibile specificare, attraverso autoUpdateIntervalInMinutes, ogni quanto tempo controllare gli aggiornamenti di una sorgente. Ad autoUpdateIntervalInMinutes, va assegnato un numero intero positivo che rappresenta l'intervallo di aggiornamento in minuti (di default 5). Assegnando zero il controllo degli aggiornamenti di una sorgente viene disabilitato. 
   "source": {  
     "autoUpdateIntervalInMinutes": 3  
   },  
La sorgente può essere aggiornata manualmente con il comando
winget source update

Visual

Le impostazioni del blocco Visual riguardano la modalità di visualizzazione degli elementi di Winget.
   "visual": {  
     "progressBar": "accent"  
   },  
Tramite progressBar è possibile specificare il colore della barra di avanzamento visualizzata da Winget. I valori accettati sono:
  • accent (default)
  • retro
  • rainbow

InstallBehavior

La sezione installBehavior è forse quella più interessante in quanto permette la modifica del comportamento predefinito dell'installazione e dell'aggiornamento dei pacchetti.

- disableInstallNotes
Con disableInstallNotes è possibile abilitare/disabilitare la visualizzazione delle note di installazione dopo un'installazione riuscita. L'impostazione predefinita è false.
   "installBehavior": {  
     "disableInstallNotes": true  
   },  

- defaultInstallRoot
Con defaultInstallRoot è possibile specificare il percorso di installazione di pacchetto (se il pacchetto ne richiede uno durante l'installazione). Può essere sovrascritto dal parametro --location. Questa impostazione viene utilizzata solo quando il manifest di un pacchetto include InstallLocationRequired e il percorso effettivo si ottiene aggiungendo l'ID del pacchetto alla radice.
   "installBehavior": {  
     "defaultInstallRoot": "C:\installRoot"  
   },       

- portablePackageUserRoot
L'impostazione portablePackageUserRoot influisce sulla directory principale predefinita in cui vengono installati i pacchetti in ambito Utente. Questa impostazione si applica solo ai pacchetti di tipo portable installer. L'impostazione predefinita è %LOCALAPPDATA%/Microsoft/WinGet/Packages/. Il valore del path va specificato come percorso assoluto.
   "installBehavior": {  
     "portablePackageUserRoot": "C:/Users/FooBar/Packages"  
   },  

- Preferences e Requirements
Alcune impostazioni sono duplicate per Preferences e Requirements. Tramite Preferences viene influenzato l'ordinamento delle varie opzioni disponibili quando si sceglie quella su cui agire. Ad esempio, l'ambito predefinito per l'installazione dei pacchetti è quello dell'utente corrente, ma se non si tratta di un'opzione disponibile, verrà scelto un installatore a livello di macchina. I Requirements filtrano le opzioni. Si tratta di requisiti quindi se non rispettati l'installazione non verrà portata a termine. Nell'esempio precedente, un Requirements relativo all'ambito dell'utente non avrebbe prodotto alcun installatore applicabile ma un errore.

Scope permette di specificare se il pacchetto deve essere installato per l'utente corrente o per l'intera macchina. Il parametro corrispondente è --scope e utilizza gli stessi valori (user o machine).
   "installBehavior": {  
     "preferences": {  
       "scope": "user"  
     }  
   },  
Con Locale è possibile specificare le impostazioni locali da usare. Il parametro corrispondente è --locale e utilizza il tag di lingua bcp47
   "installBehavior": {  
     "preferences": {  
       "locale": [ "en-US", "fr-FR" ]  
     }  
   },  
Architectures seleziona l'architettura da installare. ll parametro corrispondente è --architecture. Da notare che è possibile selezionare solo le architetture compatibili con il sistema in uso.
   "installBehavior": {  
     "preferences": {  
       "architectures": ["x64", "arm64"]  
     }  
   },  

UninstallBehavior

Le impostazioni di uninstallBehavior influenzano il comportamento predefinito della disinstallazione (se applicabile) dei pacchetti.

- PurgePortablePackage 
PurgePortablePackage influenza il comportamento predefinito per la disinstallazione di un pacchetto portable. Se impostato su true, la disinstallazione rimuoverà tutti i file e le directory rilevanti per il pacchetto. Questa impostazione si applica solo ai pacchetti con il tipo di installatore portable. Se il valore non è impostato o non è valido, l'impostazione predefinita è false.
   "uninstallBehavior": {  
     "purgePortablePackage": true  
   },  

Telemetry

Le impostazioni di telemetria controllano se Winget scrive eventi ETW che possono essere inviati a Microsoft su un'installazione predefinita di Windows.
   "telemetry": {  
     "disable": true  
   },  
Se impostata su true, l'impostazione telemetry.disable impedisce la scrittura di qualsiasi evento da parte del programma.

Logging

Le impostazioni di log controllano il livello di dettaglio dei file di log. Il parametro --verbose-logs annulla questa impostazione e crea sempre un log verboso. Il valore predefinito è info se il valore non è impostato o non è valido.
   "logging": {  
     "level": ["verbose", "info", "warning", "error", "critical"]  
   },  

Network

Le impostazioni network influenzano il modo in cui Winget utilizza la rete per recuperare pacchetti e metadati.
L'impostazione downloader controlla il codice utilizzato  durante il download dei pacchetti. I valori accettati sono:
  • default, che può essere una qualsiasi delle opzioni in base alla nostra determinazione;
  • wininet usa le API WinINet;
  • do usa il servizio Delivery Optimization.
L'impostazione doProgressTimeoutInSeconds aggiorna il numero di secondi da attendere in assenza di avanzamento prima del fallback. Il numero predefinito di secondi è 60, il minimo è 1 e il massimo è 600.
   "network": {  
     "downloader": "do",  
     "doProgressTimeoutInSeconds": 60  
   }  

Interactivity

Le impostazioni Interactivity controllano se Winget può mostrare messaggi interattivi durante l'esecuzione. Si noti che questo si riferisce solo ai prompt mostrati da Winget stesso e non a quelli mostrati dai programmi di installazione dei pacchetti.
  "interactivity": {  
     "disable": true  
   },  
Se impostata a true, l'impostazione interactivity.disable impedisce la visualizzazione di qualsiasi richiesta interattiva.

ExperimentalFeatures

Le impostazioni di experimentalFeatures riguardano la configurazione di queste funzioni "sperimentali". In questo nodo è possibile abilitare singole funzioni. L'esempio seguente mostra un esempio di funzionalità sperimentali.
   "experimentalFeatures": {  
     "experimentalCmd": true,  
     "experimentalArg": false  
   },  
- zipInstall
Questa funzione consente a Windows Package Manager di installare da un file zip. È possibile attivare la funzione come mostrato di seguito.
   "experimentalFeatures": {  
     "zipInstall": true  
   },  
- directMSI
Questa funzione consente al gestore di pacchetti di Windows di installare direttamente i pacchetti MSI con le API MSI anziché tramite msiexec. Si noti che quando si utilizza l'installazione silenziosa questa funzione è già attiva. È possibile attivare la funzione come mostrato di seguito.   
   "experimentalFeatures": {  
     "directMSI": true  
   },  
- openLogsArgument
Questa funzione consente a Windows Package Manager di aprire la cartella dei log predefinita dopo l'esecuzione, passando l'argomento --open-logs con qualsiasi comando. È possibile attivare la funzione come mostrato di seguito.
   "experimentalFeatures": {  
     "openLogsArgument": true  
   },  

- dependencies
La funzione sperimentale Dependencies mostra, per ora,  solo le informazioni sulle dipendenze dei pacchetti. È possibile attivare la funzione come mostrato di seguito.
  "experimentalFeatures": {  
     "dependencies": true  
   },