82 votes

Comment mettre à jour Cygwin depuis la ligne de commande de Cygwin?

Pour rechercher et télécharger un package manqué dans Cygwin, je dois exécuter setup.exe GUI à chaque fois, cliquer plusieurs fois et faire d'autres choses ennuyeuses.

Y a-t-il un moyen de faire la même chose directement depuis la ligne de commande de Cygwin? Comme le font les outils apt-get.

1voto

Marcos Points 1151

En reprenant la réponse de @Johnny https://superuser.com/a/624731/110335

L'ennui que j'ai rencontré était des invites occasionnelles indiquant que le fichier .ini est d'une version plus récente de setup.exe de Cygwin

J'ai écrit le script suivant pour me mettre à jour automatiquement, puis mettre à jour tout ce qui doit l'être, de manière non interactive.

cygwinSetup64.cmd

@echo on
cd /d e:\cygwin
move /y cygwinSetup-x86_64.exe   setup-x86_64.exe
wget --progress=dot -S -N  http://cygwin.com/setup-x86_64.exe
move /y  setup-x86_64.exe cygwinSetup-x86_64.exe 

cygwinSetup-x86_64.exe   --no-desktop --no-shortcuts --no-startmenu --quiet-mode

1voto

KIM Taegyoon Points 113

Mise à niveau non surveillée

https://cygwin.com/faq.html#faq.setup.cli

setup-x86.exe -q -g

Sens :

Options de ligne de commande :
 -q --mode-silencieux          Mode d'installation non surveillé
 -g --mettre-a-jour-aussi      mettre également à jour les packages installés

1voto

Ben Richards Points 12439

J'ai ressenti ce besoin il y a quelque temps également. Je l'habitude de simplement conserver le fichier d'installation téléchargé afin de pouvoir l'exécuter pour l'installer, mais de temps en temps, lorsque Cygwin serait mis à jour, le fichier d'installation devenait obsolète. J'ai fini par créer un script Powershell qui s'auto-élève, télécharge l'installateur et lance une mise à niveau silencieuse. Je le garde sur mon bureau et je peux simplement clic droit dessus et "Exécuter avec Powershell" pour effectuer une mise à niveau sur place de tous mes packages Cygwin. La seule interaction utilisateur nécessaire est pour l'UAC et un message "Appuyez sur n'importe quelle touche pour continuer" à la toute fin. Il peut également être exécuté en ligne de commande, car c'est simplement un script.

J'ai mis le code en ligne il y a un moment déjà : http://pastebin.com/wMRctAuL

Je l'ai copié ci-dessous. Je l'ai écrit avec l'aide de quelques questions-réponses sur StackOverflow aussi. :) Tout ce que vous avez à faire pour pouvoir l'exécuter est de activer les scripts Powershell locaux sur votre machine. C'est une solution Windows complète et native.

# Obtenez l'identifiant et le principal de sécurité du compte utilisateur actuel
$monWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$monWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($monWindowsID)

# Obtenez le principal de sécurité pour le rôle Administrateur
$rôleAdmin=[System.Security.Principal.WindowsBuiltInRole]::Administrator

# Vérifiez si nous exécutons actuellement "en tant qu'administrateur"
if ($monWindowsPrincipal.IsInRole($rôleAdmin)) {
   # Nous exécutons "en tant qu'administrateur" - donc changez le titre et la couleur de fond pour le signaler
   $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Élevé)"
   $Host.UI.RawUI.BackgroundColor = "DarkBlue"
   clear-host
}
else {
   # Nous n'exécutons pas "en tant qu'administrateur" - donc relancez en tant qu'administrateur

   # Créez un nouvel objet de processus qui lance PowerShell
   $nouveauProcessus = new-object System.Diagnostics.ProcessStartInfo "PowerShell";

   # Spécifiez le chemin actuel du script et le nom en tant que paramètre
   $nouveauProcessus.Arguments = $myInvocation.MyCommand.Definition;

   # Indiquez que le processus doit être élevé
   $nouveauProcessus.Verb = "runas";

   # Démarrez le nouveau processus
   [System.Diagnostics.Process]::Start($nouveauProcessus);

   # Quittez le processus actuel, non élevé
   exit
}

# Exécutez votre code qui doit être élevé ici
(new-object System.Net.WebClient).DownloadFile('http://cygwin.com/setup-x86_64.exe','setup-x86_64.exe')

if (!$?) {
   Write-Host "Quelque chose s'est mal passé lors du téléchargement de l'installateur Cygwin."
   Write-Host -NoNewLine "Appuyez sur n'importe quelle touche pour continuer..."
   $null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
   exit
}

$p = Start-Process .\setup-x86_64.exe -ArgumentList "--upgrade-also --quiet-mode" -wait -NoNewWindow -PassThru

if ($p.ExitCode -ne 0) {
   Write-Host "Échec de la configuration de Cygwin avec une erreur!"
}

Remove-Item .\setup-x86_64.exe

Write-Host -NoNewLine "Appuyez sur n'importe quelle touche pour continuer..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

0voto

Dean Householder Points 136

Créez un fichier batch tel que "cygwin-update.bat" avec les contenus suivants et placez-le dans votre chemin:

@echo off
"%~dp0\gnubin\wget.exe" --no-check-certificate https://www.cygwin.com/setup-x86_64.exe -O C:\cygwin64\setup-x86_64.exe
cd /d C:\cygwin64
setup-x86_64.exe -q -g

0voto

pinouchon Points 7706

Il semble qu'il n'y ait pas de moyen pris en charge de faire ce que vous essayez de faire.

Vous pourriez jeter un œil à MSYS2, un projet quelque peu similaire. Il bénéficie d'un meilleur support de développement (le cmake de msys prend en charge la construction en ligne de commande en utilisant MSVC et fournit des mises à jour très fréquentes des outils de construction, c'est-à-dire les dernières versions de cmake et gcc) mais ne prend pas en charge les liens symboliques (qui sont de toute façon faux sur cygwin). Là-bas, vous appelez simplement pacboy update ou utilisez pacman directement. Cependant, vous rencontrez un problème quelque peu similaire avec l'exécution de sessions : si un composant du système de base est mis à jour, on vous demande immédiatement de terminer l'interpréteur de commandes en cours d'exécution.

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