Creando un sistema híbrido Linux-Windows con Cygwin

Si nunca has oído hablar de Cygwin, te espera una sorpresa. Lo he usado durante años para homogeneizar mis entornos en uno donde puedo escribir scripts una vez y distribuirlos por todas partes para obtener soluciones de automatización cohesivas. Es doloroso escribir scripts de bash que funcionan en Linux, Mac y Unices comerciales, y luego tener que saltar de cabeza a PowerShell y archivos por lotes para intentar alcanzar el nivel de automatización que puedo lograr con algunos scripts de Bash.

De acuerdo a sitio de Internet, Cygwin es:

  • Una gran colección de herramientas GNU y de código abierto que brindan una funcionalidad similar a una distribución de Linux en Windows.
  • Una DLL (cygwin1.dll) que proporciona una funcionalidad API POSIX sustancial.

Y no es:

  • Una forma de ejecutar aplicaciones nativas de Linux en Windows. Debe reconstruir su aplicación si desea que se ejecute en Windows.
  • Una forma de hacer mágicamente que las aplicaciones nativas de Windows sean conscientes de las características de UNIX® como señales, ptys, etc. Nuevamente, debe crear sus aplicaciones si desea aprovechar la funcionalidad de Cygwin.

Nota: Cygwin funciona tanto en estaciones de trabajo con Windows como en sistemas de servidor.

Índice

    ¿Por qué Cygwin?

    Cygwin sigue siendo relevante si desea tener comandos * nix nativos en la plataforma Windows. Sí, estoy familiarizado con Windows Subsystem for Linux (WSL), pero Cygwin y WSL no son lo mismo. Cygwin le brinda el poder de los comandos * nix en su entorno nativo de Windows. No hay emulación, máquina virtual ni capas adicionales entre el sistema operativo y este conjunto de utilidades. Estos son, de hecho, comandos genuinos de código abierto compilados para la plataforma Windows.

    Instalación de Cygwin

    Por lo general, puede aceptar la opción predeterminada para cada solicitud. Doy consejos cuando hay que tomar decisiones. Puede seleccionar el suyo propio, pero he descubierto que estas selecciones funcionan mejor en mis entornos y en mi forma de trabajar.

    Abra un navegador en su sistema Windows y diríjalo a la Sitio web de Cygwin. Selecciona el Instale Cygwin ejecutando configuración-x86_64.exe enlace para descargar el archivo ejecutable del instalador. Ejecute el archivo ejecutable para iniciar la instalación y haga clic en la pantalla.

    En la pantalla, seleccione el tipo de instalación que desea. Por mi parte, siempre selecciono el predeterminado, es decir.

    Haz click para continuar.

    Seleccione la ubicación donde desea que se instale el directorio de Cygwin y todos sus archivos binarios y de soporte. El valor predeterminado es C:cygwin64, pero lo cambio a C:cygwin para hacer el futuro un poco más feliz para mí. También autorizo ​​a todos los usuarios a tener acceso a Cygwin.

    Haz click para continuar.

    Ingrese el directorio donde desea que Cygwin descargue sus archivos. Todavía uso C: Temp. Si selecciona un directorio que no existe, el instalador le pedirá que lo cree.

    Haz click para continuar.

    Seleccione su tipo de conexión a Internet. Si tiene algún tipo de proxy, ingrese la configuración aquí. La mía es una conexión directa. Si no lo sabe, pruébelo de inmediato. Si eso no funciona, verifique la configuración de su navegador para la configuración del proxy.

    Haz click para continuar.

    Elija un sitio de descarga en esta pantalla. Seleccione uno de la lista o agregue el suyo propio. Siempre elijo mirrors.xmission.com sin ninguna razón lógica: lo he usado durante mucho tiempo y funciona. Supongo que una de las selecciones funcionará.

    Haz click para continuar.

    Selección de paquetes

    Finalmente, se encuentra en la pantalla de selección de paquetes. Si no selecciona nada y continúa con una instalación predeterminada, obtiene un complemento completo de comandos * nix en el C:cygwinbin directorio telefónico. Hay demasiados para enumerarlos, pero esta es una lista de comandos estándar.

    Le sugiero que revise las diferentes categorías y haga selecciones basadas en lo que está usando en sus sistemas Linux. Por lo general, selecciono OpenSSH, Bash, Bash-completion, Python, Tk / Tcl y algunas otras aplicaciones aleatorias. Una vez que haya hecho sus selecciones, haga clic para continuar.

    Revise y confirme sus selecciones. Las dependencias se cumplirán para sus selecciones, así que no se preocupe. Haga clic para comenzar a instalar los paquetes seleccionados.

    La instalación puede demorar desde unos minutos hasta casi una hora, según sus selecciones y la velocidad de Internet.

    La última pantalla le informa que la instalación está completa y le pide que cree íconos útiles. Todavía creo los iconos. Haga clic para completar el proceso de instalación.

    Configuración de la variable de entorno PATH

    Para obtener los mejores resultados, debe agregar el directorio C:cygwinbin a su variable de entorno PATH. Para configurar la RUTA del sistema para incluir su directorio bin Cygwin, busque "entorno" y seleccione la opción Panel de control, cuando aparezca. Seleccione en la pantalla.

    En la pantalla, seleccione en el panel y haga clic. Haga clic en Nuevo. Entrar C:cygwinbin en el campo y haga clic cuando termine. Haga clic en las otras pantallas para guardar la entrada y cerrar la ventana.

    La configuración de esta variable de entorno del sistema le permite ejecutar un comando de Cygwin sin proporcionar la ruta completa al ejecutable. También es útil para scripts.

    Notas del guión

    Ahora que tiene Cygwin instalado y los archivos binarios están en la ruta de su sistema, probablemente se esté preguntando cómo funciona esto. Para invocar a Bash, abra una ventana de CMD y escriba bash <ENTER>. Ahora se encuentra en un shell Bash que funciona igual que su Linux. Pruebe algunos comandos como clear, ls, ls -la, pwd, etc

    Algunas diferencias pueden resultar frustrantes para los nuevos usuarios si no las conoce. En Bash, notará que sus unidades, C: y D:, han subido como /cygdrive/c y /cygdrive/d, por ejemplo. Por lo tanto, la C:Temp el directorio es /cygdrive/c/temp en Cygwin Bash.

    Directorios conocidos como /, /usr/bin, y /usr/lib existir bajo C:cygwin con el C:cygwin directorio como /. Si no entiende este diseño, abra un CMD ventana y CD en el C:cygwin directorio y mire el directorio en ambos CMD y en Bash.

    Primero, la lista de CMD.

    DIR C:cygwin
    
    Volume in drive C has no label.
     Volume Serial Number is ACBE-2D0D
    
     Directory of C:cygwin
    
    10/15/2020  06:58 AM    <DIR>          .
    10/15/2020  06:58 AM    <DIR>          ..
    10/15/2020  06:57 AM    <DIR>          bin
    10/15/2020  06:58 AM            53,342 Cygwin-Terminal.ico
    10/15/2020  06:57 AM                88 Cygwin.bat
    10/15/2020  06:58 AM           157,097 Cygwin.ico
    10/15/2020  06:57 AM    <DIR>          dev
    10/15/2020  06:57 AM    <DIR>          etc
    10/15/2020  06:56 AM    <DIR>          home
    10/15/2020  06:57 AM    <DIR>          lib
    10/15/2020  06:57 AM    <DIR>          sbin
    10/15/2020  06:57 AM    <DIR>          tmp
    10/15/2020  06:57 AM    <DIR>          usr
    10/15/2020  06:57 AM    <DIR>          var
                   3 File(s)        210,527 bytes
                  11 Dir(s)  31,950,209,024 bytes free

    Y, la lista de Bash.

    ls /
    
    Cygwin-Terminal.ico		Cygwin.ico	cygdrive	etc	lib	sbin	usr
    Cygwin.bat			bin 		dev		home  proc 	tmp	var

    Así que puede ver a partir de estas anomalías que Bash en Windows no es 100% equivalente a * nix Bash. Algunas secuencias de comandos se traducirán directamente, mientras que otras deberán tener una ventana. Es decir, personalizado para tener en cuenta las diferencias de ruta, las diferencias de montaje y algunas diferencias de ubicación de archivos. Un aspecto realmente interesante de hibridar su entorno de Windows es que también puede usar los comandos de la línea de comandos de Windows. Puede integrarlos fácilmente en sus scripts. No olvide proporcionar la ruta completa del ejecutable en formato Cygwin (/cygdrive/c/windows/system32/blah.exe).

    Envoltura

    Cygwin es un gran conjunto de herramientas multiplataforma, especialmente para aquellos de ustedes que tienen que trabajar en un entorno heterogéneo como la mayoría de nosotros. No puedo contar el número de veces que he escrito ls, u otro comando de Linux, en una ventana de CMD solo para que falle. Cygwin le brinda la opción extendida de escribir un script una vez y poder usarlo en cualquier lugar, con ajustes menores. Imagina las posibilidades. Ahora agregue Ansible a la mezcla e imagine las posibilidades nuevamente. Para mejorar aún más su felicidad, todos los ejecutables en C: cygwin bin que tienen una extensión de archivo .exe también se pueden ejecutar en una ventana de CMD sin que usted esté en Bash. ¿Interesante? Ya me lo imaginaba.

    Subir