Wie aktualisiere ich Cygwin über die Befehlszeile von Cygwin?


73

Um ein von Cygwin verpasstes Paket zu suchen und herunterzuladen, muss ich jedes Mal setup.exe GUI ausführen, mehrmals klicken und andere langweilige Dinge tun.

Gibt es eine Möglichkeit, dasselbe direkt über die Befehlszeile von Cygwin zu tun? Wie bei apt-get tools.

Antworten:


40

Schauen Sie sich hier um:

Abgesehen von den anderen Dingen enthält es die folgende Liste von Optionen für 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

Sollte setup.exe -P <package name>also den Job machen. Haben Sie Cygwin hier nicht, testen Sie es, um zu bestätigen, dass es wie erwartet funktioniert.

So suchen Sie nach einem Paket:

Sie können verwenden cygcheck -p:

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

die Ausgabe erzeugt wie (Beispiel von oben):

$ 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
Vorsichtsmaßnahme: Wenn das Update ersetzt wird cygwin1.dll, verhalten sich die Cygwin-Programme nicht mehr richtig und in den Cygwin-Dokumentationen wird ein Neustart empfohlen. Schließen Sie daher am besten alle Cygwin-Programme und führen Sie sie setup.exedirekt aus cmd(wenn Sie automatisieren möchten, verwenden Sie eine Batch-Datei, kein Shell-Skript).
Gilles

Vielen Dank! Eine andere Sache, die ich brauche, ist die Möglichkeit zu suchen, da ich noch nicht weiß, was für ein Paket ich herunterladen möchte. Sobald ich die vollständige Liste der Pakete gefunden habe, könnte ich grepes zumindest ...
Pavel Vlasov

Ein Beispiel finden Sie in der Bearbeitung.
icyrock.com

22

Dadurch werden alle Cygwin-Komponenten unbeaufsichtigt aktualisiert

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

Sie sollten nach Abschluss des Upgrades einen Neustart durchführen, um zu verhindern, dass sich Cygwin-Apps aufgrund eines Upgrades von cygwin1.dll schlecht verhalten

--no-desktop Deaktiviert die Erstellung einer Desktop-Verknüpfung

--no-shortcuts Deaktiviert die Erstellung des Desktops und des Startmenüs

--no-startmenu Deaktiviert die Erstellung einer Startmenü-Verknüpfung

--quiet-mode Unbeaufsichtigter Setup-Modus


Würde es Ihnen etwas ausmachen, die Antwort zu erweitern, um zu erklären, was jeder Befehl tut?
Raystafarian

9
Ich glaube, jetzt brauchen Sie möglicherweise setup-x86_64.exe oder setup-x86.exe.
Drescherjm

Auf Cygwin 2.9 bekomme ich zsh: command not found: setup.exe, aber Setup-Exe ist hier.
Timo

Wenn Sie verwenden, no-shortcutswarum brauchen Sie dann auch no-desktopund no-startmenu?
Hashim

Sehr hilfreich, ich wusste nie darüber. Sie können sogar angeben, welche Pakete installiert werden sollen, was Zeit spart. Ein Beispiel finden Sie hier: gist.github.com/piotrpolak/c616455f1da8dfc2d4e101afbfdcdc8d
Sridhar Sarnobat

10

Eine alternative Lösung wäre, das auf GitHub verfügbare apt-cygSkript zu verwenden .


3
Ein Upgrade von Cygwin selbst wird meiner Meinung nach nicht unterstützt.
Thoni56

@ThomasNilsson warum denkst du das?
André Chalella

1
Da Sie es von einer Shell mit cygwin1.dll ausführen würden. Natürlich können Sie auch eine andere Shell verwenden ...
thoni56

Die "echte" Frage lautete NICHT "Update", sondern "Wie installiere ich ein Paket ohne Setup-Benutzeroberfläche?". Dies ist die WIRKLICHE Antwort. Ist wirklich VIEL besser als Setup TUT und setzt nicht nur blind auf Setup
THESorcerer

7

Der Speicherort für Cygwins Setup scheint sich geändert und aufgeteilt zu haben. Jetzt brauchst du entweder

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

oder

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

Ich habe eine setup.bat mit dem Inhalt bin\wget.exe --timestamping http://www.cygwin.com/setup-x86_64.exe && start setup-x86_64.exe, stelle sicher, dass ich immer den neuesten Installer starte und lade den Installer nur herunter, wenn es tatsächlich eine neue Version gibt (das macht --timestamping), dann startet die bat-Datei
Hanshenrik

4

Der Installer erlaubt es von der Kommandozeile aus ( bitte erhöhte Shell ):

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

für 64 bit version:

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

Einzelheiten:

  • Ersetzen c:\cygwinSie durch das Stammverzeichnis Ihres CygWin.
  • Empfohlen, um eine CygWin-Shell oder ein CygWin-Programm zu schließen (z. B .: net stop sshdwenn Sie OpenSSH installiert haben).
  • Der Parameter -qist nicht obligatorisch.

Funktioniert über die GUI (DOS-Shell) oder sogar auf der Remote-Konsole (SSH oder Telnet). Auf PowerShell nicht getestet (hat jemand was getan?).

Beispiel für die korrekte Aktualisierung der Ausgabe:

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

Wenn Sie während des Updates folgende Probleme hatten :

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

oder:

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

oder:

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

... dann müssen Sie nach der Installation neu starten:

1.- Schließen Sie alle CygWin-Shell, -Programme und -Dienste.
2.- c:\CygWin\bin\ash.exeAls Administrator öffnen (erhöht).
3.- Laufen /bin/rebaseall.


1
Funktioniert bei mir. Vielen Dank. Sie müssen zuerst die neueste Datei setup-x86.exe oder setup-x86_64.exe herunterladen. Und mit dem Befehl Als Administrator
ausführen

2
Es gibt fast keinen Grund, das Setup als Administrator oder mit --root auszuführen, wenn Sie nicht für alle Benutzer installieren (dh wenn für cygwin root ein Administrator zum Schreiben erforderlich ist ...). setup-86[_x64].exe -Bals aktueller Benutzer ausführen. Sie können cygrunsrv später bei Bedarf als Windows-Dienst installieren.
Cowbert

1

Ich hatte vor einiger Zeit das Gefühl, dass dies nötig ist. Früher habe ich nur die Installationsdatei heruntergeladen, damit ich sie zum Installieren ausführen konnte. Da Cygwin jedoch gelegentlich aktualisiert wurde, war die Installationsdatei nicht mehr aktuell. Am Ende habe ich ein Powershell-Skript erstellt, das automatisch erhöht, das Installationsprogramm herunterlädt und ein unbeaufsichtigtes Upgrade ausführt. Ich habe es auf meinem Desktop und kann einfach mit der rechten Maustaste auf "Run with Powershell" klicken und es wird ein direktes Upgrade aller meiner Cygwin-Pakete durchführen. Die einzige Benutzerinteraktion, die benötigt wird, ist für die Benutzerkontensteuerung und die Eingabeaufforderung "Drücken Sie eine beliebige Taste, um fortzufahren" am Ende. Es kann jedoch auch über die Befehlszeile ausgeführt werden, da es sich nur um ein Skript handelt.

Ich habe den Code hier für eine Weile gehabt: http://pastebin.com/wMRctAuL

Ich habe es unten kopiert. Ich habe es auch mit Hilfe einiger Fragen und Antworten zu StackOverflow geschrieben. :) Alles, was Sie tun müssen, um es ausführen zu können, ist, lokale Powershell-Skripte auf Ihrem Computer zu aktivieren . Es ist eine vollständige, native Windows-Lösung.

# 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

Erweitern auf @ Johnnys Antwort https://superuser.com/a/624731/110335

Das Ärgernis, mit dem ich konfrontiert wurde, war die Aufforderung, dass die INI-Datei von einer neueren Version von Cygwins setup.exe stammt

Ich habe mir das folgende Skript geschrieben, um mich selbst zu aktualisieren und dann alles zu aktualisieren, was benötigt wird, und zwar nicht interaktiv.

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

Erstellen Sie eine Batch-Datei wie "cygwin-update.bat" mit folgendem Inhalt und fügen Sie diese in Ihren Pfad ein:

@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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.