Come aggiornare Cygwin dalla riga di comando di Cygwin?


73

Per cercare e scaricare un pacchetto perso da Cygwin, devo eseguire la GUI di setup.exe ogni volta, fare clic più volte e fare altre cose noiose.

C'è un modo per fare lo stesso direttamente dalla riga di comando di Cygwin? Come fanno gli strumenti apt-get.

Risposte:


40

Dai un'occhiata qui:

A parte le altre cose, offre il seguente elenco di opzioni per 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

Quindi setup.exe -P <package name>dovrebbe fare il lavoro. Non hai Cygwin proprio qui, quindi testalo per confermare che funzioni come previsto.

Per cercare un pacchetto, per:

puoi usare cygcheck -p:

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

che produce output come (esempio dal sito sopra):

$ 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
Avvertenza: se l'aggiornamento viene sostituito cygwin1.dll, i programmi Cygwin inizieranno a comportarsi in modo anomalo e le documentazioni Cygwin raccomandano un riavvio. Quindi è meglio chiudere tutti i programmi Cygwin, quindi eseguire setup.exedirettamente da cmd(se si desidera automatizzare, utilizzare un file batch, non uno script di shell).
Gilles 'SO- smetti di essere malvagio' il

Grazie! Un'altra cosa di cui ho bisogno è la possibilità di cercare, perché non so ancora quale pacchetto voglio scaricare. Una volta trovata la lista completa dei pacchetti, potrei grepalmeno ...
Pavel Vlasov,

Vedi la modifica per un esempio.
icyrock.com,

22

Ciò esegue un aggiornamento automatico di tutti i componenti di Cygwin

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

È necessario riavviare al termine dell'aggiornamento per impedire il malfunzionamento delle app cygwin a causa dell'aggiornamento di cygwin1.dll

--no-desktop Disabilita la creazione del collegamento sul desktop

--no-shortcuts Disabilita la creazione di desktop e menu di avvio

--no-startmenu Disabilita la creazione del collegamento al menu di avvio

--quiet-mode Modalità di installazione automatica


Ti dispiacerebbe espandere la risposta per spiegare cosa fa ogni comando?
Raystafarian,

9
Credo che ora potresti aver bisogno di setup-x86_64.exe o setup-x86.exe.
drescherjm,

Su cygwin 2.9, ottengo zsh: command not found: setup.exe, ma l'installazione exe è qui.
Timo,

Se stai usando no-shortcutsperché si anche bisogno no-desktope no-startmenu?
Hashim,

Molto utile, non l'ho mai saputo. Puoi anche specificare quali pacchetti installare, il che fa risparmiare tempo. Vedi qui per un esempio: gist.github.com/piotrpolak/c616455f1da8dfc2d4e101afbfdcdc8d
Sridhar Sarnobat

10

Una soluzione alternativa sarebbe quella di utilizzare lo apt-cygscript disponibile su GitHub.


3
Non supporta l'aggiornamento stesso di Cygwin, credo.
thoni56,

@ThomasNilsson perché pensi che?
André Chalella,

1
Dal momento che lo avresti eseguito da una shell usando cygwin1.dll. Naturalmente si potrebbe utilizzare un altro shell ...
thoni56

la "vera" domanda NON era l'aggiornamento, ma "come installare un pacchetto senza usare l'interfaccia utente dell'installazione", e questa è la risposta REALE ... davvero, è MOLTO meglio dell'installazione -p sia perché, ti dirà QUALE FA, e non solo mettere la tua fede alla cieca sul set
incantatore il

7

La posizione per l'installazione di Cygwin sembra essere cambiata e divisa. Ora hai bisogno di entrambi

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

o

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

ho un setup.bat con il contenuto bin\wget.exe --timestamping http://www.cygwin.com/setup-x86_64.exe && start setup-x86_64.exe, assicurandomi di eseguire sempre l'ultimo programma di installazione e di scaricare il programma di installazione solo se esiste effettivamente una nuova versione (ecco cosa fa - timestamping), quindi il file bat lo avvia
hanshenrik

4

Il programma di installazione lo consente dalla riga di comando ( shell elevata , per favore):

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

per versione a 64 bit:

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

Dettagli:

  • Sostituisci c:\cygwincon la directory di installazione principale di CygWin.
  • Suggerito di chiudere qualsiasi shell o programma CygWin (es .: net stop sshdse hai installato OpenSSH).
  • Il parametro -qnon è obbligatorio

Funziona tramite GUI (shell DOS) o anche su console remota (SSH o telnet). Non testato su PowerShell (qualcuno l'ha fatto?).

Esempio di output di aggiornamento corretto:

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

Se, durante l'aggiornamento, hai avuto problemi come questi:

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

o:

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

o:

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

... quindi è necessario rifare la procedura dopo l'installazione:

1.- Chiudi tutta la shell, i programmi e i servizi di CygWin.
2.- Apri c:\CygWin\bin\ash.execome admin (elevato).
3.- Esegui /bin/rebaseall.


1
Per me va bene. Grazie. È necessario prima scaricare l'ultimo setup-x86.exe o setup-x86_64.exe. E usando il cmd Esegui come amministratore
Marslo

2
Non c'è quasi motivo di eseguire il programma di installazione come amministratore o con --root se non si sta eseguendo l'installazione per tutti gli utenti (ovvero dove cygwin root richiede all'amministratore di scrivere su ...). setup-86[_x64].exe -Bper essere eseguito come utente corrente. In seguito è possibile elevare per installare cygrunsrv come servizio di Windows, se necessario.
cowbert,

1

Ho sentito questo bisogno troppo tempo fa. Un tempo tenevo solo il download del file di installazione in modo da poterlo semplicemente eseguire per l'installazione, ma a volte, dato che Cygwin veniva aggiornato, il file di installazione diventava obsoleto. Ho finito per creare uno script Powershell che si eleva automaticamente, scarica il programma di installazione ed esegue un aggiornamento automatico. Lo faccio sedere sul mio desktop e posso semplicemente fare clic con il tasto destro e "Esegui con Powershell" e eseguirà un aggiornamento sul posto di tutti i miei pacchetti Cygwin. L'unica interazione dell'utente necessaria è per UAC e un prompt "Premere un tasto qualsiasi per continuare" alla fine. Può essere eseguito anche dalla riga di comando, tuttavia, poiché è solo uno script.

Ho avuto il codice qui per un po ': http://pastebin.com/wMRctAuL

L'ho copiato di seguito. L'ho scritto con l'aiuto di alcune domande e risposte StackOverflow. :) Tutto quello che devi fare per essere in grado di eseguirlo è abilitare gli script Powershell locali sul tuo computer . È una soluzione completa, nativa di 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

Espandendo la risposta di @ Johnny https://superuser.com/a/624731/110335

Il fastidio che ho dovuto affrontare in alcuni casi mi ha suggerito che il file .ini proviene da una versione più recente di setup.exe di Cygwin

Mi sono scritto il seguente script per l'auto-aggiornamento e quindi aggiornare tutto ciò che è necessario, in modo non interattivo.

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

Creare un file batch come "cygwin-update.bat" con i seguenti contenuti e inserirlo nel percorso:

@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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.