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


73

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

Existe-t-il un moyen de faire la même chose à partir de la ligne de commande de Cygwin directement? Comme font les outils apt-get.

Réponses:


40

Jetez un coup d'oeil ici:

En plus des autres choses, il donne la liste suivante d’options pour setup.exe:

Command Line Options:
 -A --disable-buggy-antivirus           Disable known or suspected buggy anti
                    virus software packages during execution.
 -C --categories                        Specify entire categories to install
 -D --download                          Download from internet
 -d --no-desktop                        Disable creation of desktop shortcut
 -h --help                              print help
 -K --pubkey                            Path to extra public key file (gpg format)
 -L --local-install                     Install from local directory
 -l --local-package-dir                 Local package directory
 -n --no-shortcuts                      Disable creation of desktop and start menu
                    shortcuts
 -N --no-startmenu                      Disable creation of start menu shortcut
 -O --only-site                         Ignore all sites except for -s
 -P --packages                          Specify packages to install
 -p --proxy                             HTTP/FTP proxy (host:port)
 -q --quiet-mode                        Unattended setup mode
 -r --no-replaceonreboot                Disable replacing in-use files on next
                    reboot.
 -R --root                              Root installation directory
 -S --sexpr-pubkey                      Extra public key in s-expr format
 -s --site                              Download site
 -U --keep-untrusted-keys               Use untrusted keys and retain all
 -u --untrusted-keys                    Use untrusted keys from last-extrakeys
 -X --no-verify                         Don't verify setup.ini signatures

Alors setup.exe -P <package name>devrait faire le travail. N'avez pas de cygwin ici, alors testez-le pour confirmer qu'il fonctionne comme prévu.

Pour rechercher un package, par:

vous pouvez utiliser cygcheck -p:

  cygcheck -p REGEXP
  ...
  -p, --package-query  search for REGEXP in the entire cygwin.com package
                       repository (requires internet connectivity)

qui produit une sortie comme (exemple du site ci-dessus):

$ cygcheck -p 'libexpat.*\.a'
Found 2 matches for 'libexpat.*\.a'.

expat-1.95.7-1            XML parser library written in C
expat-1.95.8-1            XML parser library written in C

9
Mise en garde: si la mise à jour remplace cygwin1.dll, les programmes Cygwin commenceront à se comporter de manière incorrecte, et les documentations Cygwin recommandent un redémarrage. Il est donc préférable de fermer tous les programmes Cygwin, puis de les exécuter setup.exedirectement à partir de cmd(si vous souhaitez automatiser, utilisez un fichier de commandes, pas un script shell).
Gilles, arrête de faire le mal '25

Merci! Une autre chose dont j'ai besoin est la capacité de recherche, car je ne sais pas encore quel paquet je veux télécharger. Une fois que je trouverai la liste complète des forfaits, je pourrais le grepfaire au moins ...
Pavel Vlasov

Voir l'édition pour un exemple.
icyrock.com

22

Ceci effectue une mise à niveau sans surveillance de tous les composants de cygwin

cd C:\cygwin
wget -N https://cygwin.com/setup-x86.exe
setup-x86.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode

Vous devez redémarrer une fois la mise à niveau terminée pour éviter que les applications cygwin ne se comportent mal en raison de la mise à niveau de cygwin1.dll.

--no-desktop Désactive la création d'un raccourci sur le bureau

--no-shortcuts Désactive la création du bureau et le menu de démarrage

--no-startmenu Désactive la création du raccourci du menu Démarrer

--quiet-mode Mode d'installation sans assistance


Souhaitez-vous développer la réponse pour expliquer le rôle de chaque commande?
Raystafarian

9
Je crois que maintenant vous aurez peut-être besoin de setup-x86_64.exe ou de setup-x86.exe.
drescherjm

Sur cygwin 2.9, je reçois zsh: command not found: setup.exe, mais l'exécutable d'installation est ici.
Timo

Si vous utilisez no-shortcutspourquoi auriez-vous aussi besoin de no-desktopet no-startmenu?
Hashim

Très utile, je n'ai jamais su à ce sujet. Vous pouvez même spécifier les packages à installer, ce qui vous permet de gagner du temps. Voir ici pour un exemple: gist.github.com/piotrpolak/c616455f1da8dfc2d4e101afbfdcdc8d
Sridhar Sarnobat

10

Une autre solution consisterait à utiliser le apt-cygscript disponible sur GitHub.


3
Je pense que cela ne supporte pas la mise à jour de cygwin elle-même.
thoni56

@ThomasNilsson pourquoi pensez-vous cela?
André Chalella

1
Puisque vous l'exécuteriez depuis un shell utilisant cygwin1.dll. Bien sûr, vous pourriez utiliser un autre shell ...
thoni56

la "vraie" question n'était PAS la mise à jour, mais "comment installer un paquet sans utiliser l'interface utilisateur de configuration", et c'est la vraie réponse ... vraiment, c'est BEAUCOUP mieux que la configuration -p be cuz, elle vous dira de quoi. FAITES, et ne vous contentez pas aveuglément de votre confiance
THESorcerer

7

L'emplacement de la configuration de Cygwin semble avoir été modifié et divisé. Maintenant vous avez besoin soit

wget http://cygwin.com/setup-x86.exe

ou

wget http://cygwin.com/setup-x86_64.exe

j'ai un fichier setup.bat avec le contenu bin\wget.exe --timestamping http://www.cygwin.com/setup-x86_64.exe && start setup-x86_64.exe, en m'assurant d'exécuter toujours le dernier programme d'installation et de le télécharger s'il existe une nouvelle version (c'est ce que fait l'horodatage), puis le fichier bat le démarre
hanshenrik

4

L' installateur le permet depuis la ligne de commande ( shell élevé , s'il vous plaît):

setup-x86.exe --root c:\cygwin -q --upgrade-also

pour la version 64 bits:

setup-x86_64.exe --root c:\cygwin -q --upgrade-also

Détails:

  • Remplacez-le c:\cygwinpar le répertoire d'installation racine de votre CygWin.
  • Il est suggéré de fermer tout shell ou programme CygWin (par exemple, net stop sshdsi vous avez installé OpenSSH).
  • Le paramètre -qn'est pas obligatoire.

Fonctionne via une interface graphique (shell DOS) ou même sur une console distante (SSH ou telnet). Non testé sur PowerShell (quelqu'un l'a fait?).

Exemple de sortie de mise à jour correcte:

G:\Instalac\CygWin\v2.852>Starting cygwin install, version 2.852
User has backup/restore rights
Current Directory: g:\Instalac\CygWin\Packages
Could not open service McShield for query, start and stop. McAfee may not be installed, or we don't have access.
root: c:\cygwin system
Selected local directory: g:\Instalac\CygWin\Packages
net: Direct
Loaded cached mirror list
get_url_to_membuf http://cygwin.com/mirrors.lst
getUrlToStream http://cygwin.com/mirrors.lst
site: http://ftp.hawo.stw.uni-erlangen.de/cygwin/
get_url_to_membuf http://ftp.hawo.stw.uni-erlangen.de/cygwin/x86/setup.bz2
getUrlToStream http://ftp.hawo.stw.uni-erlangen.de/cygwin/x86/setup.bz2
get_url_to_membuf http://ftp.hawo.stw.uni-erlangen.de/cygwin/x86/setup.bz2.sig
getUrlToStream http://ftp.hawo.stw.uni-erlangen.de/cygwin/x86/setup.bz2.sig
Changing gid back to original
Visited: 122 nodes out of 4415 while creating dependency order.
Dependency order of packages: _autorebase base-cygwin cygwin _update-info-dir libgcc1 libiconv2 libintl8 alternatives libattr1 li
bgmp10 coreutils libstdc++6 terminfo libncursesw10 libreadline7 bash findutils sed base-files libuuid1 libblkid1 libsmartcols1 zl
ib0 util-linux bashdb zlib-devel binutils libbz2_1 bzip2 libffi6 libp11-kit0 libtasn1_6 p11-kit p11-kit-trust ca-certificates cry
pt libmpfr4 gawk editrights libpcre1 grep libsigsegv2 diffutils csih cygrunsrv popt libpopt0 cygutils cygwin-devel dash file liba
tomic1 libcloog-isl4 libgomp1 libisl10 libmpc3 libquadmath0 libssp0 w32api-headers w32api-runtime windows-default-manifest gcc-co
re libexpat1 liblzma5 libdb4.8 libgdbm4 libopenssl100 libsqlite3_0 libcharset1 libiconv libintl-devel libuuid-devel python gdb li
bargp getent groff gzip hostname info ipc-utils libncurses10 less libapr1 libiodbc2 libmysqlclient18 libcom_err2 libkrb5support0
libk5crypto3 libkrb5_3 libgssapi_krb5_2 libsasl2_3 libopenldap2_4_2 perl openssl libpq5 libaprutil1 libedit0 libproxy1 libneon27
libpipeline1 libserf1_0 login lynx make man-db mintty nano ncurses openssh procps psmisc rebase run screen subversion xz tar tzco
de vim-minimal which zsh
Changing gid to Administrators
Ending cygwin install

Si, lors de la mise à jour, vous rencontriez des problèmes tels que ceux-ci:

The following DLLs couldn't be rebased due to errors:
  /usr/bin/cygcrypt-0.dll

ou:

The following DLLs couldn't be rebased because they were in use:
  /usr/bin/cygcrypt-0.dll

ou:

ReBaseImage (/usr/bin/cygcrypt-0.dll) failed with last error = 6

... alors vous devez rebaser après l'installation:

1.- Fermez tous les shell, programmes et services CygWin.
2.- Ouvrir en c:\CygWin\bin\ash.exetant qu'administrateur (élevé).
3.- Run /bin/rebaseall.


1
Travaille pour moi. Merci. Vous devez d'abord télécharger le dernier fichier setup-x86.exe ou setup-x86_64.exe. Et en utilisant le cmd Run en tant qu'administrateur
Marslo

2
Il n'y a presque aucune raison d'exécuter setup en tant qu'administrateur ou avec --root si vous n'installez pas pour tous les utilisateurs (c'est-à-dire lorsque la racine de cygwin nécessite un administrateur pour écrire dans ...). setup-86[_x64].exe -Bpour s'exécuter en tant qu'utilisateur actuel. Vous pouvez ultérieurement installer cygrunsrv en tant que service Windows, si nécessaire.
Cowbert

1

J'ai aussi ressenti ce besoin il y a quelque temps. J'avais l'habitude de garder le fichier d'installation téléchargé pour pouvoir l'installer, mais à l'occasion, Cygwin étant mis à jour, le fichier d'installation deviendrait obsolète. J'ai fini par créer un script Powershell qui élève automatiquement, télécharge le programme d'installation et exécute une mise à niveau sans surveillance. Je l’ai assis sur mon bureau et je peux juste cliquer avec le bouton droit de la souris sur «Exécuter avec Powershell» et il effectuera une mise à niveau sur place de tous mes paquets Cygwin. La seule interaction utilisateur nécessaire concerne le contrôle de compte d'utilisateur et un message "Appuyez sur n'importe quelle touche pour continuer" à la fin. Il peut également être exécuté à partir de la ligne de commande, car il ne s'agit que d'un script.

J'ai le code ici depuis un moment: http://pastebin.com/wMRctAuL

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

# Get the ID and security principal of the current user account
$myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)

# Get the security principal for the Administrator role
$adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator

# Check to see if we are currently running "as Administrator"
if ($myWindowsPrincipal.IsInRole($adminRole)) {
   # We are running "as Administrator" - so change the title and background color to indicate this
   $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
   $Host.UI.RawUI.BackgroundColor = "DarkBlue"
   clear-host
}
else {
   # We are not running "as Administrator" - so relaunch as administrator

   # Create a new process object that starts PowerShell
   $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";

   # Specify the current script path and name as a parameter
   $newProcess.Arguments = $myInvocation.MyCommand.Definition;

   # Indicate that the process should be elevated
   $newProcess.Verb = "runas";

   # Start the new process
   [System.Diagnostics.Process]::Start($newProcess);

   # Exit from the current, unelevated, process
   exit
}

# Run your code that needs to be elevated here
(new-object System.Net.WebClient).DownloadFile('http://cygwin.com/setup-x86_64.exe','setup-x86_64.exe')

if (!$?) {
   Write-Host "Something wrong happened when downloading the Cygwin installer."
   Write-Host -NoNewLine "Press any key to continue..."
   $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 "Cygwin setup failed with an error!"
}

Remove-Item .\setup-x86_64.exe

Write-Host -NoNewLine "Press any key to continue..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

0

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

L'ennui que j'ai rencontré a été l'occasion de préciser que le fichier .ini provient d'une version plus récente du fichier setup.exe de Cygwin.

J'ai moi-même écrit le script suivant pour 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


0

Créez un fichier de commandes tel que "cygwin-update.bat" avec le contenu suivant 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.