2 votes

Comment définir `DEBIAN_FRONTEND=noninteractive` à partir de powershell?

Scenario

En mettant en œuvre une installation sans surveillance de certains logiciels sur WSL Ubuntu 18.04 depuis Windows Powershell, la commande apt upgrade retourne l'invite suivante :

entrer la description de l'image ici

Cette question explique bien que l'on peut éviter cette invite en définissant la variable d'environnement dans WSL Ubuntu 18.04 avant d'exécuter la commande apt upgrade. J'ai vérifié que cela fonctionne en effet. Cependant, je rencontre des problèmes pour définir cette variable d'environnement pour WSL Ubuntu 18.04 à partir de Powershell. Ces problèmes sont détaillés dans la section "Tentatives".

Question

Comment puis-je définir la variable d'environnement DEBIAN_FRONTEND=noninteractive dans WSL Ubuntu 18.04 à partir d'un script Powershell ?

MWE

Un exemple avec quelques tentatives est inclus ci-dessous.

# Définition du chemin vers le fichier ubuntu1804.exe installé
$str1="/Users/"
$str2="/AppData/Local/Microsoft/WindowsApps/ubuntu1804"
$hdd_name=(Get-WmiObject Win32_OperatingSystem).SystemDrive
$username=$env:UserName
[String] $ubuntu1804_path=$hdd_name+$str1+$username+$str2

Write-Host "Terminé avec la configuration, maintenant démarrage de l'apt update."

# Effectuer l'apt update
$str1=" exécuter 'yes | apt update'"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command

Write-Host "Mise à jour effectuée, maintenant définition de la variable d'environnement."

# définir la variable d'environnement DEBIAN_FRONTEND=noninteractive
$str1=" exécuter DEBIAN_FRONTEND=noninteractive"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command 

Write-Host "Variable d'environnement définie, maintenant mise à niveau."

# Effectuer la mise à niveau de l'apt
$str1=" exécuter 'yes | apt upgrade'"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command

Write-Host "Mise à niveau effectuée."

Tentatives

Au début, j'ai essayé de définir la variable d'environnement en analysant bash -c DEBIAN_FRONTEND=noninteractive depuis WSL. Ensuite, j'ai essayé wsl DEBIAN_FRONTEND=noninteractive. Puis j'ai utilisé invoke-expression -Command comme décrit dans l'exemple ci-dessus. Tous ces essais soit bloquent sur l'invite (les 2 premiers n'affichent pas l'invite mais attendent indéfiniment, (j'ai attendu plus de 2h pour chacun et vérifié que la commande dans wsl elle-même prend seulement environ 30 mins)), le dernier ouvre l'invite dans Powershell: entrer la description de l'image ici.

Doutes

Je pense que les observations des 3 tentatives impliquent l'un des 2 cas suivants :

  1. Je ne définis pas correctement la variable d'environnement DEBIAN_FRONTEND=noninteractive depuis Powershell.
  2. Ou bien, Powershell définit correctement la variable d'environnement DEBIAN_FRONTEND=noninteractive dans un shell, mais ouvre ensuite un nouveau shell pour la commande suivante, dans lequel la variable d'environnement n'est pas définie.

Pour vérifier si j'ai correctement défini la variable d'environnement, j'ai essayé de lancer wsl printenv, cependant cela renvoie une liste différente de celle obtenue en exécutant printenv depuis wsl. Si je définis manuellement la variable d'environnement DEBIAN_FRONTEND=noninteractive dans wsl, la commande printenv affiche correctement la variable d'environnement. Cependant, si je ferme et réouvre WSL Ubuntu 18.04 et que je relance la commande printenv, la variable d'environnement a disparu. Cette observation implique que l'option 2 des doutes est possible. Je n'ai pas encore trouvé de moyen de déterminer si la variable d'environnement est correctement définie depuis Powershell, car elle ne figure pas parmi les sorties de printenv dans Powershell, alors qu'elle apparaît dans la sortie de printenv dans WSL.

0voto

a.t. Points 333

Après avoir recherché des scripts powershell sur git contenant DEBIAN_FRONTEND=noninteractive, j'ai trouvé un exemple qui montre comment spécifier une variable d'environnement pour une commande spécifique, à partir d'un script powershell, avec la commande suivante:

# Définir d'abord le chemin vers le fichier ubuntu1804.exe installé
$str1="/Users/"
$str2="/AppData/Local/Microsoft/WindowsApps/ubuntu1804"
$hdd_name=(Get-WmiObject Win32_OperatingSystem).SystemDrive
$username=$env:UserName
[String] $ubuntu1804_path=$hdd_name+$str1+$username+$str2

# Exécuter une commande avec une variable d'environnement
$str1=" run DEBIAN_FRONTEND=noninteractive apt-get upgrade -y"
$command=$ubuntu1804_path+$str1
invoke-expression -Command $command

J'ai vérifié que cela empêche effectivement la demande d'interaction de l'utilisateur, ce qui résout le problème XY. Même si je ne suis pas encore capable de le vérifier directement en inspectant les variables d'environnement de ce shell, je suppose que cela définit effectivement (temporairement) la variable d'environnement DEBIAN_FRONTEND=noninteractive.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X