bash on Ubuntu (openSUSE, Fedora) On Windows
Álvaro José Agámez Licha
Medellín, Colombia - 2017-05-17
Agenda
- Historia
- Bash on Ubuntu (WSL, LXSS, File Systems)
- Instalación
- 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:
- Ejecutar utilidades comunes de línea de comandos como grep, sed, awk, etc.
- Usar el sistema de archivos y la jerarquía compatibles con Linux y acceder al almacenamiento fijo de Windows montado en /mnt/...
- 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.
- Instalar herramientas adicionales de Linux utilizando apt.
- Invocar aplicaciones de Windows desde dentro de Bash
- 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:
- Servicio de gestión de sesión en modo usuario que gestiona el ciclo de vida de la instancia de Linux
- Los proveedores de Pico Drivers (lxss.sys, lxcore.sys) que emulan un kernel de Linux traduciendo Linux syscalls
- 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.
- Proporcionar un entorno que admita la total fidelidad de los sistemas de archivos Linux
- 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
- Open Settings -> Update and Security -> For developers
- Select the Developer Mode radio button
Habilitar la característica de Windows Subsystem for Linux
- Desde el menú de Inicio, busque "Turn Windows features on or off" (escriba "Turn")
- 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