bash on Ubuntu (openSUSE, Fedora) On Windows

Álvaro José Agámez Licha

M​edellín, Colombia - 2017-05-17

Agenda

  1. Historia
  2. Bash on Ubuntu (WSL, LXSS, File Systems)
  3. Instalación
  4. Configuración para Frontend/Node.js

Historia

Desde la concepción de Microsoft Windows NT tuvo un diseño que permitió tener suministrar una interfaz programática a diferentes subsistemas sin que estos estuvieran ligados a una implementación en el kernel.

 

Inicialmente se soportaba POSIX, OS/2 y Win32  más tarde el soporte POSIX fue reemplazado por un Subsistema llamado Subsystem for Unix-based Applications (SUA).

 

Esta implementación de los subsistemas tuvo problemas de rendimiento y finalmente fue retirada.

Epic Fail Microsoft, Try Again

Bash on Ubuntu

Bash en Windows proporciona a los desarrolladores un entorno de Bash shell y Linux familiar en el que se puede ejecutar la mayoría de las herramientas de línea de comandos de Linux, directamente en Windows, INMODIFICADOS, sin necesidad de una máquina virtual Linux completa.

 

¿Recuerdas los Subsistemas de Windows NT?, bueno, volvieron, mejorados y esta vez para quedarse.

Windows Subsystem for Linux

Bash/WSL nos permite:

  1. Ejecutar utilidades comunes de línea de comandos  como grep, sed, awk, etc.
  2. Usar el sistema de archivos y la jerarquía compatibles con Linux y acceder al almacenamiento fijo de Windows montado en /mnt/...
  3. Ejecutar scripts Bash shell y aplicaciones de línea de comandos de Linux, por ejemplo: vim, emacs, tmux, Ruby, Python, C/C++, C# & F#, Rust, Go, sshd, MySQL, Apache, lighttpd.
  4. Instalar herramientas adicionales de Linux utilizando apt.
  5. Invocar aplicaciones de Windows desde dentro de Bash
  6. Invocar aplicaciones Linux desde Windows!

Windows Subsystem for Linux

LXSS/LXCORE

WSL es una colección de componentes que permite ejecutar binarios nativos ELF64 de Linux en Windows. Contiene tanto el modo de usuario como los componentes del modo kernel. Se compone principalmente de:

  1. Servicio de gestión de sesión en modo usuario que gestiona el ciclo de vida de la instancia de Linux
  2. Los proveedores de Pico Drivers (lxss.sys, lxcore.sys) que emulan un kernel de Linux traduciendo Linux syscalls
  3. Los Pico procesos que alojan el modo de usuario no modificado Linux (por ejemplo, /bin/bash)

 

Windows Subsystem for Linux

File System

El soporte del sistema de archivos en WSL fue diseñado para cumplir con dos objetivos.

  1. Proporcionar un entorno que admita la total fidelidad de los sistemas de archivos Linux
  2. Permitir la interoperabilidad con unidades y archivos en Windows

 

El Subsistema de Windows para Linux proporciona un soporte de sistema de archivos virtual similar al kernel real de Linux. Dos sistemas de archivos se utilizan para proporcionar acceso a los archivos en el sistema de usuarios: VolFs y DriveFs.

VoIFs

VolFs es un sistema de archivos que proporciona soporte completo para las características del sistema de archivos Linux, incluyendo:

  • Permisos de Linux que se pueden modificar a través de operaciones como chmod y chroot
  • Enlaces simbólicos a otros archivos
  • Nombres de archivos con caracteres que normalmente no son legales en los nombres de archivo de Windows
  • Sensibilidad de mayúsculas y minúsculas

 

Los directorios que contienen el sistema Linux, los archivos de aplicación (/etc, /bin, /usr, etc.) y los usuarios de la carpeta de inicio de Linux, usan VolFs.

La interoperabilidad entre aplicaciones y archivos de Windows en VolFs no es compatible.

DriveFs

DriveFs es el sistema de archivos utilizado para la interoperabilidad con Windows. Requiere que todos los nombres de archivos sean nombres de archivos de Windows legales, use seguridad de Windows y no admite todas las características de los sistemas de archivos de Linux. Los archivos distinguen entre mayúsculas y minúsculas y los usuarios no pueden crear archivos cuyos nombres difieren sólo por caso.

Instalación

Prerequisito: Su PC debe estar ejecutando (como mínimo) una versión de 64 bits de Windows 10 Anniversary Update. Se recomienda la actualización de Creators Update.

Para encontrar la arquitectura de la CPU de su PC y el número de versión/build de Windows, debemos abrir Settings>System>About. Busque los campos OS y de tipo de sistema.

Habilitar Developer Mode

 

  1. Open Settings -> Update and Security -> For developers
  2. Select the Developer Mode radio button

Habilitar la característica de Windows Subsystem for Linux

 

  1. Desde el menú de Inicio, busque "Turn Windows features on or off" (escriba "Turn")
  2. Seleccione Windows Subsystem for Linux (beta)

Después de habilitar Windows Subsystem para Linux, reinica tu computadora cuando se te indique. Es muy importante hacer esto, ya que algunas características de WSL solo se habilitan durante el inicio de Windows.

 

Ejecutar bash en una línea de comandos de Windows:

Crear un usuario LINUX

 

La primera vez que instale Bash en Windows, se le pedirá que cree un nombre de usuario y una contraseña de LINUX.

Verificar nuestra instalación

 

Si queremos verificar la versión del kernel de Linux que estamos ejecutando, podemos usar el comando lsb_release -a

Configuración para Frontend/Node.js

Con la habilidad de poder ejecutar los mismos binarios con los que contamos en Ubuntu (y próximamente openSUSE y Fedora), podemos armar un completo entorno de desarrollo que hasta ahora para los usuarios de windows solo podía lograrse mediante la virtualización (o el uso de containers con sus consabidos problemas). Eso es cosa del pasado.

tmux: Para aquellos que no están familiarizados con Tmux, es una herramienta de línea de comandos que le permite dividir una ventana de terminal en varios paneles. Este multiplexor de terminal permite al usuario cambiar entre diferentes paneles y renderizar la salida en cada panel.

 

sudo apt-get install tmux

 

Git: Bueno, que decir sobre Git, es el sistema de control de versiones de código fuente por excelencia.

 

 sudo apt-get install git

zsh: Es un potente intérprete de comandos para sistemas operativos de tipo Unix.

 

sudo apt-get install zsh

 

Para hacer zsh en Windows su shell por defecto hay que editar el archivo ~/.bashrc y agregar el inicio de este lo siguiente:

# if running in terminal...
if test -t 1; then
    # ...start zsh
    exec zsh
fi

(Oh-My-) zsh: Un framework guiado por la comunidad (con más de 1.000 colaboradores) para administrar su configuración de zsh. Incluye 200 plugins adicionales (rails, git, OSX, hub, capistrano, brew, ant, php, python, etc).

sh -c "$(curl -fsSL 
https://raw.githubusercontent.com/robbyrussell/oh-my-
zsh/master/tools/install.sh)"

Para configurar Oh-My-zsh debemos editar el archivo: ~/.zshrc

nvm: Node Version Manager - Simple script bash para gestionar múltiples versiones activas de node.js.

# usando cURL
curl -o- https://raw.githubusercontent.com/
creationix/nvm/v0.33.2/install.sh | bash

# o usando Wget

wget -qO- https://raw.githubusercontent.com/
creationix/nvm/v0.33.2/install.sh | bash
nvm install node
nvm use node

Ahora podemos instalar Node.js

​Si nvm no funciona, y estás usando zsh, puede ser que el script de instalación no agregó la configuración al archive de configuración de zsh; para hacer esto abrimos el archivos de configuración y agregamos lo siguiente al final del mismo.

 

Yo uso VIM para esto, así que el commando que ejecuto es el siguiente: vim ~/.zshrc

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

VIM: Es una versión mejorada del editor de texto vi, presente en todos los sistemas UNIX.

 

sudo apt-get install vim

VIM: Emacs es un editor de texto con una gran cantidad de funciones, muy popular entre programadores y usuarios técnicos.

 

sudo apt-get install emacs

Listos para Codificar

OK, muy bonito todo, pero no me gustó

# desinstalación completa
lxrun /uninstall /y /full

# por si te arrepientes o dañas la 
# instalación
lxrun /install

Bash On Ubuntu On Windows

By Alvaro Agamez

Bash On Ubuntu On Windows

  • 911