¿Cómo instalo componentes cygwin desde la línea de comandos?

178

¿Hay alguna herramienta en el paquete Cygwin similar a apt-getDebian o yumredhat que me permita instalar componentes desde la línea de comandos?

vy32
fuente
2
Stack Overflow es un sitio para preguntas de programación y desarrollo. Esta pregunta parece estar fuera de tema porque no se trata de programación o desarrollo. Consulte los temas sobre los que puedo preguntar aquí en el Centro de ayuda. Quizás Super User sería un mejor lugar para preguntar. Consulte también ¿Dónde publico preguntas sobre Dev Ops?
jww
77
@jww, esto no es devops.
Pacerier

Respuestas:

102

No hay ninguna herramienta específicamente en el instalador 'setup.exe' que ofrezca la funcionalidad de apt-get. Sin embargo, hay un instalador de paquetes de línea de comandos para Cygwin que se puede descargar por separado, pero no es completamente estable y depende de soluciones alternativas.

apt-cyg: http://github.com/transcode-open/apt-cyg

Consulte la pestaña de problemas del proyecto para ver los problemas conocidos.

Zorobabel
fuente
¡Gracias! Justo lo que quería saber. Me pregunto por qué no son maduros.
vy32
44
@ vy32: porque no ayudaste a hacerlos madurar? :) No pueden escribir por sí mismos. Alguien tiene que trabajar en ellos. Y dado que su usabilidad es bastante limitada (para sobrescribir archivos actualmente en uso en Windows, primero debe cerrar Cygwin, por lo que no es posible ejecutar ningún administrador de paquetes en Cygwin cerrado :), no hay muchas personas interesadas.
David Ferenczy Rogožan
10
De otra respuesta: setup-x86.exe -q -P packagename1,packagename2. No es tan elegante como apt-geto incluso, apt-cygpero funciona en la mayoría de los casos. Y también puede ejecutar esto desde cmd.exe(después de cerrar Cygwin).
kqw
2
@ Steve, la respuesta de Dawid dice que se movió a "sabio". stackoverflow.com/a/23143997/80772
anguila ghEEz
3
Dado que el proyecto original está muerto, sugiero mirar esta bifurcación activa (a la fecha de este comentario): github.com/kou1okada/apt-cyg
Vladimir Panteleev
136

La configuración de Cygwin acepta argumentos de línea de comandos para instalar paquetes desde la línea de comandos.

por ejemplo, setup-x86.exe -q -P packagename1,packagename2para instalar paquetes sin interacción GUI ('modo de instalación desatendida').

(Tenga en cuenta que debe usar setup-x86.exeo setup-x86_64.exesegún corresponda).

Consulte http://cygwin.com/packages/ para ver la lista de paquetes.

jturney
fuente
55
¡Agradable! setup.exe ahora se llama setup-x86.exe, o una variante que depende de los bits de la CPU. También vea aquí la lista de paquetes cygwin.com/packages
ErichBSchulz
2
Además, para especificar varios paquetes, sepárelos con comas. por ejemplo, en DOS, escribasetup-x86_64 --packages="openssh,python"
Michael Scheper
No parece haber una forma de configurar versiones específicas.
CMCDragonkai
@jturney, ¿es estable?
Pacerier
1
@Pacerier, no está claro lo que está preguntando. Esta debería ser una característica de la configuración en la que es seguro confiar.
jturney
134

Para un instalador más conveniente, puede usarlo apt-cygcomo administrador de paquetes. Su sintaxis es similar a apt-get, que es una ventaja. Para esto, siga los pasos anteriores y luego use Cygwin Bash para los siguientes pasos

wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
chmod +x apt-cyg
mv apt-cyg /usr/local/bin

Ahora que apt-cygestá instalado. Aquí hay algunos ejemplos de instalación de algunos paquetes.

apt-cyg install nano
apt-cyg install git
apt-cyg install ca-certificates
sagunms
fuente
17
Obviamente utilice setup-x86_64.exe -q -P wget, tar, qawk, bzip2, subversion, vim para ventanas de 64 bits.
Arun
3
Necesario para agregar --no-check-certificate al comando wget. De lo contrario, excelente.
akauppi
Y ahora es un 404 (después de algunas redirecciones)
Shadow
Acabo de probar wgety se descarga apt-cygsin problemas. ¿En qué punto aparece el 404?
sagunms
1
wget no está instalado de manera predeterminada con cygwin, lo que significa que debe iniciarse con una instalación manual y no programática.
51

Existen algunos scripts, que pueden usarse como simples administradores de paquetes para Cygwin. Pero es importante saber que siempre serán bastante limitados , debido a ... ehm ... Windows.

Instalar o eliminar paquetes está bien, cada administrador de paquetes de Cygwin puede hacerlo. Pero la actualización es una molestia ya que Windows no le permite sobrescribir un ejecutable, que se está ejecutando actualmente. Por lo tanto, no puede actualizar, por ejemplo, Cygwin DLL o cualquier paquete que contenga el ejecutable actualmente en ejecución desde el propio Cygwin. También hay esta nota en la página de instalación de Cygwin :

"La razón básica para no tener un administrador de paquetes con más funciones es que dicho programa necesitaría acceso completo a toda la funcionalidad POSIX de Cygwin. Sin embargo, eso es difícil de proporcionar en un entorno libre de Cygwin, como existe en primer lugar instalación. Además, Windows no permite sobrescribir fácilmente los ejecutables en uso, por lo que instalar una nueva versión de la DLL de Cygwin mientras un administrador de paquetes usa la DLL es problemático ".

La configuración de Cygwin usa el registro de Windows para sobrescribir los ejecutables que están en uso y este método requiere reiniciar Windows . Por lo tanto, es mejor cerrar todos los procesos de Cygwin antes de actualizar los paquetes , para que no tenga que reiniciar su computadora para aplicar los cambios. La instalación de un nuevo paquete debe ser completamente sin problemas. No creo que ninguno de los administradores de paquetes, excepto Cygwin's, setup.exeimplemente algún método para sobrescribir archivos en uso, por lo que simplemente fallaría si no puede sobrescribirlos.


Algunos gestores de paquetes para Cygwin:

apt-cyg

Actualización : el repositorio se deshabilitó recientemente debido a problemas de derechos de autor ( eliminación de DMCA ). Se ve como el propietario del repositorio emitió la DMCA en su propio repositorio y crea un nuevo proyecto llamado Sage (ver abajo).

El mejor para mi. Simplemente porque es uno de los más recientes. No usa Cygwin's setup.exe, sino que lo vuelve a implementar, lo que setup.exehace. Funciona correctamente para ambas plataformas, x86 y x86_64 . Hay muchas horquillas con más o menos características adicionales. Por ejemplo, la bifurcación kou1okada es una de las versiones mejoradas , que es realmente genial.

apt-cyg es solo un script de shell, no hay instalación. Simplemente descárguelo (o clone el repositorio), hágalo ejecutable y cópielo en algún lugar de la RUTA:

chmod +x apt-cyg # set executable bit
mv apt-cyg /usr/local/bin # move somewhere to PATH
# ...and use it:
apt-cyg install vim

También hay un montón de tenedores con diferentes características.


sabio

Otro administrador de paquetes implementado como un script de shell. No lo intenté pero en realidad se ve bien.

Puede buscar paquetes en un repositorio, enumerar paquetes en una categoría, verificar dependencias, enumerar archivos de paquetes y más. Tiene características que otros gestores de paquetes no tienen.


cyg-apt

Tenedor de original abandonado cyg-aptcon mejoras y correcciones de errores. Tiene muchas características y está implementado en Python. La instalación se realiza utilizando make.


Cyg-get de Chocolatey

Si usó Chocolatey para instalar Cygwin, puede instalar el paquete cyg-get , que en realidad es un simple envoltorio alrededor de Cygwin setup.exeescrito en PowerShell.


Cygwin's setup.exe

También tiene un modo de línea de comando . Además, le permite actualizar todos los paquetes instalados a la vez (como lo apt-get upgradehace en Linux basado en Debian).

Ejemplo de uso:

setup-x86_64.exe -q --packages=bash,vim

Puede crear un alias para un uso más fácil, por ejemplo:

alias cyg-get="/cygdrive/d/path/to/cygwin/setup-x86_64.exe -q -P"

Luego puede, por ejemplo, instalar el paquete Vim con:

cyg-get vim

David Ferenczy Rogožan
fuente
3
sagees una bifurcación de apt-cygsus contribuyentes más activos durante el último año o dos (Steven Penny). Parece que a principios de este año tuvo un desacuerdo con el apt-cygautor original (Stephen Jungels) y emitió el derribo de la DMCA cuando bifurcó el proyecto. Dado que Jungels (también conocido como Transcode) es verificablemente el autor original del proyecto, GitHub restauró el proyecto original poco después. Actualmente, ambos proyectos están disponibles, aunque el proyecto original no ha tenido nuevas actualizaciones de código desde la división. Es una situación desordenada, de verdad.
Anthony Geoghegan
setup-x86_64.exe -q --packages = bash, vim. Este enfoque me ha ayudado en el pasado. Simplemente ejecútelo desde la línea de comandos y funciona sin problemas.
TheWalkingData
9

Primero, descargue el instalador en: https://cygwin.com/setup-x86_64.exe (Windows 64bit), luego:

# move installer to cygwin folder
mv C:/Users/<you>/Downloads/setup-x86_64.exe C:/cygwin64/

# add alias to bash_aliases
echo "alias cygwin='C:/cygwin64/setup-x86_64.exe -q -P'" >> ~/.bash_aliases
source ~/.bash_aliases

# add bash_aliases to bashrc if missing
echo "source ~/.bash_aliases" >> ~/.profile

p.ej

# install vim
cygwin vim

# see other options
cygwin --help
Jason
fuente
Estoy usando un método muy similar a este y me está funcionando muy bien, siempre que conozca los nombres de los paquetes que desea instalar de antemano, es decir ;-)
Gary Doublé
Solución muy simple. acaba de agregar el alias a .bashrc
Ach J
4

Quería una solución similar a esto apt-get --print-uris, pero desafortunadamente apt-cyg no hace esto. La siguiente es una solución que me permitió descargar solo los paquetes que necesitaba, con sus dependencias, y copiarlos en el destino para la instalación. Aquí hay un script bash que analiza la salida de apt-cygen una lista de URI:

#!/usr/bin/bash

package=$1
depends=$( \
    apt-cyg depends $package \
    | perl -ne 'while ($x = /> ([^>\s]+)/g) { print "$1\n"; }' \
    | sort \
    | uniq)
depends=$(echo -e "$depends\n$package")
for curpkg in $depends; do
    if ! grep -q "^$curpkg " /etc/setup/installed.db; then
    apt-cyg show $curpkg \
        | perl -ne '
            if ($x = /install: ([^\s]+)/) { 
                print "$1\n"; 
            }
            if (/\[prev\]/) { 
                exit; 
            }'
    fi
done

Lo anterior imprimirá las rutas de los paquetes que deben descargarse, en relación con la raíz del espejo cygwin, omitiendo cualquier paquete que ya esté instalado. Para descargarlos, escribí el resultado en un archivo cygwin-packages-listy luego usé wget:

mirror=http://cygwin.mirror.constant.com/
uris=$(for line in $(cat cygwin-packages-list); do echo "$mirror$line"; done)
wget -x $uris

El instalador se puede usar para instalar desde un directorio de caché local. Tenga en cuenta que para que esto funcione, necesitaba copiar setup.inidesde un caché de paquete cygwin anterior al directorio con los archivos descargados (de lo contrario, el instalador no sabe qué es qué).

wakjah
fuente
4

Antigua pregunta, pero aún relevante. Esto es lo que funcionó para mí hoy (26/06/16).

Del bash shell:

lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
Steve Isenberg
fuente
1
wgeto curles probablemente una mejor herramienta para esto. (Y personalmente, lo instalaría en algún otro directorio en mi en $PATHlugar de en /bin.)
Keith Thompson
3

La respuesta de Dawid Ferenczy es bastante completa, pero después de probar casi todas sus opciones, descubrí que el cyg-get de Chocolatey era el mejor (al menos, el único que podía poner a trabajar).

Quería instalar wget, los pasos fueron los siguientes:

choco install cyg-get

Luego:

cyg-get wget
fabriciorissetto
fuente
1

Por lo general, antes de instalar un paquete, uno debe saber su nombre exacto:

# define a string to search
export to_srch=perl

# get html output of search and pick only the cygwin package names
wget -qO- "https://cygwin.com/cgi-bin2/package-grep.cgi?grep=$to_srch&arch=x86_64" | \
perl -l -ne 'm!(.*?)<\/a>\s+\-(.*?)\:(.*?)<\/li>!;print $2'

# and install 
# install multiple packages at once, note the
setup-x86_64.exe -q -s http://cygwin.mirror.constant.com -P "<<chosen_package_name>>"
Yordan Georgiev
fuente