¿Cómo actualizar Cygwin desde la línea de comando de Cygwin?

73

Para buscar y descargar un paquete perdido de Cygwin, necesito ejecutar la GUI setup.exe cada vez, hacer clic muchas veces y hacer otras cosas aburridas.

¿Hay alguna manera de hacer lo mismo directamente desde la línea de comando de Cygwin? Como hacen las herramientas apt-get.

Pavel Vlasov
fuente

Respuestas:

40

Echa un vistazo aquí:

Además de las otras cosas, ofrece la siguiente lista de opciones para 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

Entonces setup.exe -P <package name>debería hacer el trabajo. No tenga Cygwin aquí, así que pruébelo para confirmar que funciona como se esperaba.

Para buscar un paquete, por:

puedes usar cygcheck -p:

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

que produce resultados como (ejemplo del sitio anterior):

$ 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
icyrock.com
fuente
9
Advertencia: si la actualización reemplaza cygwin1.dll, los programas de Cygwin comenzarán a comportarse mal, y las documentaciones de Cygwin recomiendan reiniciar. Por lo tanto, es mejor cerrar todos los programas de Cygwin y luego ejecutarlos setup.exedirectamente cmd(si desea automatizar, use un archivo por lotes, no un script de shell).
Gilles 'SO- deja de ser malvado'
¡Gracias! Otra cosa que necesito es la capacidad de búsqueda, porque todavía no sé qué paquete quiero descargar. Una vez que encuentre la lista completa de paquetes grep, al menos podría ...
Pavel Vlasov
Vea la edición para un ejemplo.
icyrock.com
22

Esto realiza una actualización desatendida de todos los componentes de Cygwin

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

Debe reiniciar después de que se complete la actualización para evitar que las aplicaciones de cygwin se comporten mal debido a cygwin1.dll actualizado

--no-desktop Deshabilita la creación de atajos de escritorio

--no-atajos Desactiva la creación de escritorio y menú de inicio

--no-startmenu Deshabilita la creación del acceso directo del menú de inicio

- modo silencioso modo de instalación desatendida

Johnny
fuente
¿Te importaría ampliar la respuesta para explicar lo que hace cada comando?
Raystafarian
9
Creo que ahora puede necesitar setup-x86_64.exe o setup-x86.exe.
drescherjm
En cygwin 2.9, obtengo zsh: command not found: setup.exe, pero setup exe está aquí.
Timo
Si está utilizando, no-shortcuts¿por qué también necesitaría no-desktopy no-startmenu?
Hashim
Muy útil, nunca supe de esto. Incluso puede especificar qué paquetes instalar, lo que ahorra tiempo. Vea aquí un ejemplo: gist.github.com/piotrpolak/c616455f1da8dfc2d4e101afbfdcdc8d
Sridhar Sarnobat
10

Una solución alternativa sería usar el apt-cygscript disponible en GitHub.

Chris Charabaruk
fuente
3
No es compatible con la actualización de Cygwin, creo.
thoni56
@ThomasNilsson, ¿por qué piensas eso?
André Chalella
1
Ya que lo estaría ejecutando desde un shell usando cygwin1.dll. Por supuesto, podría usar otro shell ...
thoni56
la pregunta "real" NO era actualizar, sino "cómo instalar un paquete sin usar la interfaz de usuario de configuración", y esta es la respuesta REAL ... realmente, es MUCHO mejor que la configuración -p, porque te dirá LO QUE Lo hace, y no solo confía ciegamente en la configuración
THESorcerer
7

La ubicación de la configuración de Cygwin parece haber cambiado y dividido. Ahora necesitas cualquiera

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

o

wget http://cygwin.com/setup-x86_64.exe
Skip Huffman
fuente
Tengo un archivo setup.bat con el contenido bin\wget.exe --timestamping http://www.cygwin.com/setup-x86_64.exe && start setup-x86_64.exe, asegurándome de que siempre ejecuto el último instalador y solo descargo el instalador si en realidad hay una nueva versión (eso es lo que hace el estampado), entonces el archivo bat lo inicia
hanshenrik
4

El instalador lo permite desde la línea de comandos ( shell elevado , por favor):

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

para la versión de 64 bits:

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

Detalles:

  • Reemplace c:\cygwincon el directorio de instalación raíz de su CygWin.
  • Se sugiere cerrar cualquier shell o programa de CygWin (es decir, net stop sshdsi instaló OpenSSH).
  • El parámetro -qno es obligatorio.

Funciona a través de GUI (shell de DOS) o incluso en la consola remota (SSH o telnet). No probado en PowerShell (¿alguien lo hizo?).

Ejemplo de salida de actualización correcta:

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, durante la actualización, tuvo problemas como estos:

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

... luego debe volver a crear una base después de la instalación:

1.- Cierre todos los shell, programas y servicios de CygWin.
2.- Abierto c:\CygWin\bin\ash.execomo administrador (elevado).
3.- Corre /bin/rebaseall.

Sopalajo de Arrierez
fuente
1
Funciona para mi. Gracias. Primero debe descargar la última versión de setup-x86.exe o setup-x86_64.exe. Y usando el cmd Ejecutar como administrador
Marslo
2
Casi no hay razón para ejecutar la configuración como administrador o con --root si no está instalando para todos los usuarios (es decir, donde cygwin root requiere que el administrador escriba en ...). setup-86[_x64].exe -Bpara ejecutar como usuario actual. Más tarde puede elevar para instalar cygrunsrv como un servicio de Windows si es necesario.
cowbert
1

Sentí esta necesidad también hace un tiempo. Solía ​​mantener el archivo instalador descargado para poder ejecutarlo e instalarlo, pero ocasionalmente, ya que Cygwin se actualizaría, el archivo instalador quedaría desactualizado. Terminé creando un script de Powershell que se eleva automáticamente, descarga el instalador y ejecuta una actualización desatendida. Lo tengo en mi escritorio y puedo hacer clic derecho y "Ejecutar con Powershell" y realizará una actualización en el lugar de todos mis paquetes de Cygwin. La única interacción necesaria para el usuario es para UAC y al final aparece el mensaje "Presione cualquier tecla para continuar". Sin embargo, también se puede ejecutar desde la línea de comandos, ya que es solo un script.

He tenido el código aquí por un tiempo: http://pastebin.com/wMRctAuL

Lo copié a continuación. Lo escribí con la ayuda de algunas preguntas y respuestas de StackOverflow también. :) Todo lo que tiene que hacer para poder ejecutarlo es habilitar los scripts locales de Powershell en su máquina . Es una solución completa, nativa de 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")
Ben Richards
fuente
0

Ampliando la respuesta de @ Johnny https://superuser.com/a/624731/110335

La molestia que enfrenté fue la ocasión de que el archivo .ini es de una versión más reciente de Cygwin's setup.exe

Me escribí el siguiente script para auto actualizar, y luego actualizar todo lo que necesita, de forma no interactiva.

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
Marcos
fuente
0

Cree un archivo por lotes como "cygwin-update.bat" con los siguientes contenidos y póngalo en su ruta:

@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
Dean Householder
fuente