Jesús Leganés Combarro "piranna"

piranna@gmail.com

Madrid, Marzo de 2016

¿Quien soy?

¿Que es NodeOS?

¿Que tiene de especial?

 

Diseño minimalista

 
  • Solo un kernel Linux y Node.js, sin capas intermedias ni bloatware
  • Menor uso de RAM y CPU
  • Ideal para servidores cloud y sistemas embebidos
  • Altamente customizable

Seguro

  • Javascript = maquina virtual = aislamiento del sistema
  • Permisos de archivos (demasiado) restrictivos
    • Usuarios aislados entre si
      • su propio sistema de archivos raiz virtual
    • Descentralizado, no hay usuarios privilegiados
      • root solo se usa para administrar el arranque
    • Todos los componentes y programas son instalados por cada usuario
  • El usuario tiene la sensación de poder controlar todo el sistema... sin ser verdad ;-)

Bastante popular :-P

¿A quien va dirigido?

Cloud computing

  • Menos recursos = mas instancias
  • Fácil administración
    • Todo controlado por npm...
    • ...incluido el proceso de construcción :-)
  • Sistemas solo con las aplicaciones necesarias
    • sin shell de usuario
    • lo que Docker quiere ser pero no puede ;-)

Educación y homebrew

  • Todo el código es accesible
    • Unicos binarios son kernel, nodeos-init y Node.js
    • Inacesibles por los usuarios
  • Fácil de aprender, entender y programar
  • Altamente personalizable y "hackeable"
    • Si lo "rompes", solo afecta a tu usuario

NodeOS en 5 pasos

  1. Descarga el código desde GitHub
  2. Ejecuta
    npm install
  3. Coge palomitas y vete
    a ver una pelicula ;-)
  4. Ejecuta
    npm start
  5. Enjoy!!! :-)

Arquitectura de NodeOS

Capa 0: cross-toolchain

  • Basada en Cross Linux from Scratch
    • usando musl en vez de glibc
    • menos memoria y mas rendimiento
  • Totalmente automatizado
    • Descarga, parchea y compila automaticamente los fuentes de Linux, GCC y musl
    • Definir la plataforma de destino y listo (por defecto la actual)
  • Integrado como paquete npm
    • usable por otros modulos

Capa 1: barebones

Capa 1: barebones

  • Linux 4.5
    • Compilado estáticamente (sin módulos)
    • Configuración por defecto para cada plataforma
    • Eliminados componentes superfluos
      • Sistemas de archivos (¿minix fs? ¿en serio?)
      • debug, profiling...
    • Añadidos FUSE, CUSE y OverlayFS
  • Node.js v4.4.0 LTS

Capa 1: barebones

  • nodeos-init
    • proceso /init minimalista
    • "red de seguridad" ante procesos zombie
    • montar /dev (necesario para Node.js, increible...)
    • apagar el sistema limpiamente cuando no hay mas procesos ejecutandose
  • Arranca directamente a REPL
    • Los 80 nunca pasaran de moda ;-)

Capa 2: initramfs

Capa 2: initramfs

  • Prepara un entorno basico y monta la partición con los directorios de los usuario
  • Ejecuta los 'init' de los usuarios
  • /usr/bin/env... ¡hecho en Javascript!

Capa 3: rootfs

Capa 3: rootfs

  • Genera la partición de arranque (solo lectura) con el kernel de Linux y el initramfs
    • VFAT para Raspberry Pi (genfatfs)
    • ISO9660 para CD y USB (IsoHybrid)
  • Despues se combinara con la partición de usuarios para hacer un sistema persistente
    • pendrive USB
    • disco duro
  • En una futura versión se eliminara esta capa y se integrara con el sistema de generación global

Capa 4: usersfs

Capa 4: usersfs

  • Genera una partición de demo para los usuarios del sistema (lectura-escritura)
  • Permite persistencia de los datos en un USB
  • Facilmente sustituible por un sistema en red
    • Dropbox, Google Drive, Amazon AWS...

root

  • Opcional, solo usado para inicializar servicios
    • bin-getty: manejador de pseudo-terminales
    • ExclFS: acceso exclusivo a los dispositivos en /dev, un usuario cada vez
    • logon: gestión distribuida de los usuarios
      • datos de acceso en el directorio del usuario
      • acceso a cualquiera, protección a los archivos
      • se puede sustituir por un sistema externo como Facebook Connect, Google Account...
  • Único con acceso a los directorios de los demas
    • necesario para logon y administración del sistema
    • un gran poder implica una gran responsabilidad
    • solo accesible arrancando en modo administrador
    • deshabilita el resto de usuarios

nodeos

Futuro

  • Interfaz gráfica en HTML5
  • ¿Contenedores LXC para cada usuario?
    • puertos TCP
  • "Sabores": mainframe y workstation
  • ARM y MIPS

Pull-request welcome!!!

+ info

Made with Slides.com