Vue normale

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierLe blog de Seboss666

Installez Winget depuis Github sans Microsoft Store

Par : Seboss666
20 septembre 2021 à 16:00

Je vous cache pas que ça a été un peu long, que ça demande un peu trop de steps à mon goût (Microsoft vous répondra « installez le Store »), mais comme ça peut servir dans pas mal de situations et que cet outil commence à devenir réellement intéressant, je partage 🙂

Eh oui, pour rappel, mon PC de jeu est installé avec un Winfows 10 LTSC  2019, donc bloqué en release 18.09, et il est dégraissé de pas mal d’éléments comme Cortana et le Microsoft Store. Ça n’a pas que des avantages, notez :

  • Une release qui date d’avant la sortie de mon matériel
  • Pas de WSL2
  • Pas de Windows Terminal

Et certainement d’autres petits détails qui ne m’ont pas sauté aux yeux. Après le dernier article de NextINpact sur l’outil (je vous laisse aller les lire pour en comprendre l’intérêt), je me suis penché donc sur l’installation de winget depuis les paquets fournis sur Github pour faire un peu joujou avec.

Mais pour ceux qui ont trop la flemme, c’est un utilitaire, qui fait penser à Chocolatey ou WAPT, qui permet d’installer via une commande unique, plusieurs applications provenant de sources différentes. Beaucoup plus efficace et rapide que d’aller sur chaque site officiel (quand les résultats de recherche ne sont pas pourris de liens sponsorisés et de packages frelatés), récupérer chaque fichier d’installation, les vérifier, et enfin se taper tous les process d’installation à grand renfort de clics.

Comme j’envisage de refaire mon installation de Windows en fin d’année avec la dernière LTSC de Windows 10 (à moi WSL2, Windows Terminal et j’en passe), ce logiciel a toute mon attention.

Première erreur : il manque les dépendances

C’est bien un truc qui m’emmerde profondément sous Windows : toutes les applications que vous installez embarquent la plupart du temps leurs propres dépendances, ce qui fait que vous installez x copies d’une même brique utilisée dans plusieurs logiciels. Un point que les distributions Linux ont compris depuis longtemps, ce qui fait que les logiciels proposés dans leurs dépôts sont tous construits sur la même base de dépendances, la mise à jour d’une des briques profitant de fait à tout le monde (et on retombe dans les mêmes problématiques avec snap, flatpak et appImage…).

Donc après avoir récupéré le package sur le dépôt Github, premier échec de l’installation. Ici le message d’erreur était relativement clair :

PS C:\Users\Seboss666\Downloads> Add-AppxPackage -Path .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
Add-AppxPackage : Échec du déploiement avec HRESULT: 0x80073CF3, Échec des mises à jour, de la dépendance ou de la
validation des conflits du package.
Windows ne peut pas installer le package Microsoft.DesktopAppInstaller_1.12.11692.0_x64__8wekyb3d8bbwe, car ce package
dépend d’une infrastructure qui n’a pas pu être trouvée. Indiquez l’infrastructure «Microsoft.VCLibs.140.00.UWPDesktop
» publiée par «CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US», avec une
architecture neutre ou de processeur x64 et la version minimale 14.0.29231.0, en plus de ce package à installer. Les
infrastructures avec le nom «Microsoft.VCLibs.
Windows ne peut pas installer le package Microsoft.DesktopAppInstaller_1.12.11692.0_x64__8wekyb3d8bbwe, car ce package
dépend d’une infrastructure qui n’a pas pu être trouvée. Indiquez l’infrastructure «Microsoft.VCLibs.140.00.UWPDesktop
» publiée par «CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US», avec une
architecture neutre ou de processeur x64 et la version minimale 14.0.29231.0, en plus de ce package à installer. Les
infrastructures avec le nom «Microsoft.VCLibs.140.00.UWPDesktop» installées actuellement sont: {}
REMARQUE: pour obtenir des informations supplémentaires, recherchez [ActivityId] e5511a5d-ad1a-0008-3346-51e51aadd701
dans le journal des événements ou utilisez la ligne de commande Get-AppPackageLog -ActivityID
e5511a5d-ad1a-0008-3346-51e51aadd701
Au caractère Ligne:1 : 1
+ Add-AppxPackage -Path .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.m ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\Users\Seboss...bbwe.msixbundle:String) [Add-AppxPackage], IOException
    + FullyQualifiedErrorId : DeploymentError,Microsoft.Windows.Appx.PackageManager.Commands.AddAppxPackageCommand

Relativement hein… Qwant a été mon ami pas mal de fois pendant ce voyage. Déjà, dans la plupart des tutos, donc avec le Store activé, on vous dit « double-cliquez sur le paquet téléchargé ». Vu qu’on ne peut pas cliquer sur le paquet, on lance PowerShell en mode administrateur, et on prie. Cette fois les recherches pointent vers des commandes qui… font lancer le téléchargement de la dépendance depuis le Microsoft Store *clap, clap*

La réponse se trouve dans l’installation manuelle de cette dépendance après l’avoir téléchargé depuis le site de Microsoft, après que je me sois perdu plusieurs dizaines de minutes sur le forum dev de MS et sur des issues Github qui mentionnaient toutes des manipulations depuis Visual Studio, ce qui sans surprise ne me convenait pas. L’installation se fait de la même manière que pour winget, et après ça, on peut retenter  :

PS C:\Users\Seboss666\Downloads> Add-AppxPackage -Path .\Microsoft.VCLibs.x64.14.00.Desktop.appx
PS C:\Users\Seboss666\Downloads> Add-AppxPackage -Path .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle

Je n’ai eu de message de retour pour aucune des deux commandes (alors que n’importe quel package manager sous Linux est autrement plus verbeux, pour votre bien). Mais winget est bien installé désormais.

Deuxième erreur : comment dire…

Sauf que là, on retombe dans des travers très « microsoftiens », quand je le lance la première fois :

PS C:\Users\Seboss666\Downloads> winget.exe --help
Le programme «winget.exe» n’a pas pu s’exécuter: Aucune licence d'application applicable n'a été trouvéeAu caractère
Ligne:1 : 1
+ winget.exe --help
+ ~~~~~~~~~~~~~~~~~.
Au caractère Ligne:1 : 1
+ winget.exe --help
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (:) [], ApplicationFailedException
    + FullyQualifiedErrorId : NativeCommandFailed

Je… n’ai pas de mots pour décrire la connerie. Et là, ça a été encore plus long, le thread qui m’aura finalement sauvé se trouve dans une issue Github où l’on constate que plusieurs personnes se plaignent de problèmes d’installation sur des Windows Server, pour lesquels le Store est très facilement dégommé, voire la machine n’a même pas d’accès internet direct pour des raisons de sécurité. Vous me direz, pourquoi installer winget dans ce cas, j’avoue j’ai pas la réponse, à part pour scripter la phase d’installation de prérequis au déploiement d’une machine (ce que j’ai prévu de faire, remember).

Le fichier de licence a cependant été ajouté par Microsoft sans tambours ni trompettes (comprenez sans que ça soit explicitement mentionné ni documenté) dans la liste des ressources accompagnant la release, ce qui ne permet pas d’identifier quand/si on en a besoin. Une fois le fichier récupéré, la commande d’installation se complique salement :

PS C:\Users\Seboss666\Downloads>
>> Add-AppxProvisionedPackage -Online -PackagePath .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle -LicensePath .\08d8788d59cf47ed9bf42c31e31f8efa_License1.xml -Verbose
COMMENTAIRES : Version de l’image cible 10.0.17763.2183


Path          :
Online        : True
RestartNeeded : False

Cette fois on a un message de retour, pour la bonne raison qu’on a ajouté le flag -Verbose. Est-ce pour autant la fin du calvaire ?

PS C:\Users\Seboss666\Downloads> winget --help
Windows Package Manager v1.0.11692
Copyright (c) Microsoft Corporation. Tous droits réservés.

L’utilitaire de ligne de commande winget permet d’installer des applications et d’autres packages à partir de la ligne de commande.

consommation: winget [<commande>] [<options>]

Les commandes suivantes sont disponibles :
  install    Installe le package donné
  show       Affiche des informations sur un package
  source     Gérer les sources des packages
  search     Rechercher et afficher des informations de base sur les packages
  list       Afficher les packages installés
  upgrade    Met à niveau le package donné
  uninstall  Désinstallation du paquet donné
  hash       Assistant pour le hachage des fichiers d’installation
  validate   Valide un fichier manifeste
  settings   Ouvrir les paramètres
  features   Affiche le statut des fonctionnalités expérimentales
  export     Exporte une liste des packages installés
  import     Installe tous les packages dans un fichier

Pour en savoir plus sur une commande spécifique, passez-la à l’argument aide. [-?]

Les options suivantes sont disponibles :
  -v,--version  Afficher la version de l’outil
  --info        Afficher les informations générales de l’outil

Vous trouverez de l’aide supplémentaire sur : https://aka.ms/winget-command-help

Enfin, ça semble fonctionner, et une recherche de package montre bien des résultats :

PS C:\Users\Seboss666\Downloads> winget search gimp
Nom          ID                Version Correspondance
-----------------------------------------------------
GIMP         GIMP.GIMP         2.10.24
GIMP Nightly GIMP.GIMP.Nightly 2.99.6  Tag: gimp

PS C:\Users\Seboss666\Downloads> winget show gimp
Trouvé GIMP [GIMP.GIMP]
Version: 2.10.24
Publisher: The GIMP Team
Author: The GIMP Team
Moniker: GIMP
Description: GIMP is an acronym for GNU Image Manipulation Program. It is a freely distributed program for such tasks as photo retouching, image composition and image authoring.
Homepage: https://www.gimp.org
License: Copyright (C) 2007 Free Software Foundation, Inc. - GNU General Public License
License Url: https://www.gimp.org/about/COPYING
Installer:
  Type: Inno
  Download Url: https://download.gimp.org/pub/gimp/v2.10/windows/gimp-2.10.24-setup-1.exe
  SHA256: 84a542d717217f5fb996a18093c4424136978ebbf3815db2ee3c5daa8dcafc0b

Quand j’ai fait la recherche, l’annonce de la sortie de la version 2.10.28 de GIMP venait de tomber dans mes flux RSS, donc je me fais pas trop de soucis que ça sera à jour sous peu.

Ah, dernière petite erreur, sans surprise vu que c’est un outil Microsoft, il embarque de la télémétrie. Pour la désactiver, il faut faire un winget settings et vous croisez les doigts (chez moi sans que je sache pourquoi j’avais pas d’éditeur par défaut pour les fichiers json, du coup ça complique temporairement les choses), il faut ajouter les éléments suivants :

"telemetry": {
    "disable": true
},

Attention : packages en anglais

C’est très fréquent pour des logiciels jeunes comme winget, surtout quand c’est initié par une boite américaine : la plupart des logiciels vont être installés par défaut dans la langue de Shakespeare. Je n’ai pas trop regardé encore comment améliorer ça pour les gens que ça dérange, pour ma part, je suis assez à l’aise, même si certains logiciels sont quand même plus agréables à gérer dans notre si belle langue (surtout avec des sites web qui détectent votre langue à partir de celle de votre navigateur préféré par exemple).

Le fait est que la source des manifestes d’installation se trouve sur Github, et les contributions sont ouvertes, donc dans la grande tradition de git et de la plateforme en particulier, les ajouts peuvent se faire à coup de forks et de pull requests. Il est même possible de créer son propre dépôt ou « source » de packages si l’envie vous en prend. On est donc sur un bel outil qui semble amené à un bel avenir. Il va être temps de se préparer un joli script d’installation massive 🙂

❌
❌