Instalar node.js y no morir en el intento


Node.js   lleva   ya unos  cuantos años  muy de moda aunque,  ciertamente   no es algo nuevo puesto que existen librerías como Twisted que hacen exactamente lo mismo, pero si es cierto que es la primera basada en JavaScript y que tiene un gran rendimiento.

Node.js es similar en su propósito a Twisted o Tornado de Python, Perl Object Environment de Perl, libevent o libev de C, EventMachine de Ruby, vibe.d de D y JEE de Java existe Apache MINA, Netty, Akka, Vert.x, Grizzly o Xsocket  pero ,al contrario que la mayoría del código JavaScript, no se ejecuta en un navegador, sino en el servidor.

Quizas su éxito se deba a que  Node.js puede ser combinado con una base de datos documental (por ejemplo, MongoDB o CouchDB) y JSON lo que permite desarrollar en un entorno de desarrollo JavaScript unificado. Con la adaptación de los patrones para desarrollo del lado del servidor tales como MVC y sus variantes MVP, MVVM, etc. Node.js facilita la reutilización de código del mismo modelo de interfaz entre el lado del cliente y el lado del servidor.

Node.js implementa algunas especificaciones de CommonJS.5​ Node.js incluye un entorno REPL para depuración interactiva.

Node.js es una librería y entorno de ejecución de E/S dirigida por eventos y por lo tanto asíncrona que se ejecuta sobre el intérprete de JavaScript creado por Google V8.

Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google.

Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web.

​ Fue creado por Ryan Dahl en 2009 y su evolución está apadrinada por la empresa Joyent, que además tiene contratado a Dahl en plantilla.3​ 4​

Node.js funciona con un modelo de evaluación de un único hilo de ejecución, usando entradas y salidas asíncronas las cuales pueden ejecutarse concurrentemente en un número de hasta cientos de miles sin incurrir en costos asociados al cambio de contexto.6​ Este diseño de compartir un único hilo de ejecución entre todas las solicitudes atiende a necesidades de aplicaciones altamente concurrentes, en el que toda operación que realice entradas y salidas debe tener una función callback. Un inconveniente de este enfoque de único hilo de ejecución es que Node.js requiere de módulos adicionales como cluster7​ para escalar la aplicación con el número de núcleos de procesamiento de la máquina en la que se ejecuta.

V8
V8 es el entorno de ejecución para JavaScript creado para Google Chrome. Es software libre desde 2008, está escrito en C++ y compila el código fuente JavaScript en código de máquina en lugar de interpretarlo en tiempo real.

Node.js contiene libuv para manejar eventos asíncronos. Libuv es una capa de abstracción de funcionalidades de redes y sistemas de archivo en sistemas Windows y sistemas basados en POSIX como Linux, Mac OS X y Unix.

El cuerpo de operaciones de base de Node.js está escrito en JavaScript con métodos de soporte escritos en C++.

Módulos
Node.js incorpora varios «módulos básicos» compilados en el propio binario, como por ejemplo el módulo de red, que proporciona una capa para programación de red asíncrona y otros módulos fundamentales, como por ejemplo Path, FileSystem, Buffer, Timers y el de propósito más general Stream. Es posible utilizar módulos desarrollados por terceros, ya sea como archivos «.node» precompilados, o como archivos en javascript plano. Los módulos Javascript se implementan siguiendo la especificación CommonJS para módulos,8​ utilizando una variable de exportación para dar a estos scripts acceso a funciones y variables implementadas por los módulos.9​

Los módulos de terceros pueden extender node.js o añadir un nivel de abstracción, implementando varias utilidades middleware para utilizar en aplicaciones web, como por ejemplo los frameworks connect y express. Pese a que los módulos pueden instalarse como archivos simples, normalmente se instalan utilizando el Node Package Manager (npm) que nos facilitará la compilación, instalación y actualización de módulos así como la gestión de las dependencias. Además, los módulos que no se instalen el directorio por defecto de módulos de Node necesitarán la utilización de una ruta relativa para poder encontrarlos. El wiki Node.js proporciona una lista de varios de los módulos de terceros disponibles.

Pero ¿por qué javascript del lado del servidor?

Aunque Javascript tradicionalmente ha sido relegado a realizar tareas menores en el navegador, es actualmente un lenguaje de programación totalmente, tan capaz como cualquier otro lenguaje tradicional como C++, Ruby o Java. Ademas Javascript tiene la ventaja de poseer un excelente modelo de eventos, ideal para la programación asíncrona. Javascript también es un lenguaje omnipresente, conocido por millones de desarrolladores. Esto reduce la curva de aprendizaje de Node,js, ya que la mayoría de los desarrolladores no tendrán que aprender un nuevo lenguaje para empezar a construir aplicaciones usando Node.js.

Bucle de Eventos (Event Loop).

Además de la alta velocidad de ejecución de Javascript, la verdadera magia detrás de Node.js es el Bucle de Eventos (Event Loop). Para escalar grandes volúmenes de clientes, todas las operaciones intensivas I/O en Node.js se llevan a cabo de forma asíncrona. El enfoque tradicional para generar código asíncrono es engorroso y crea un espacio en memoria no trivial para un gran número de clientes(cada cliente genera un hilo, y el uso de memoria de cada uno se suma). Para evitar esta ineficiencia,así como la dificultad conocida de las aplicaciones basadas en hilos, (programming threaded applications), Node.js mantiene un event loop que gestiona todas las operaciones asíncronas.

Cuando una aplicación Node.js necesita realizar una operación de bloqueo (operaciones I/O como trabajo con archivos …etc) envía una tarea asíncrona al event loop, junto con un callback, y luego continúa.

Node.js se registra con el sistema operativo y cada vez que un cliente establece una conexión se ejecuta un callback. Dentro del entorno de ejecución de Node.js, cada conexión recibe una pequeña asignación de espacio de memoria dinámico, sin tener que generar un hilo de trabajo.10​ A diferencia de otros servidores dirigidos por eventos, el lazo de manejo de eventos de Node.js no es llamado explícitamente sino que se activa al final de cada ejecución de una función de callback. El lazo de manejo de eventos se termina cuando ya no quedan eventos por atender.

¿Qué usos reales se le da a nodejs?

Es una herramienta genial para todo tipo de cosas. Aplicaciones web, aplicaciones en línea de comandos, scripts para administración de sistemas, todo tipo de aplicaciones de red, etc.

Es rápido, muy rápido. Esto es importante por varias razones:

  1. El desarrollo es más rápido.
  2. La ejecución de tests de unidad se puede hacer más rápido.
  3. Las aplicaciones son más rápidas y por tanto la experiencia de usuario es mejor.
  4. Menor coste de infraestrucutra (Linkedin pasó de tener 15 servidores a 4).

También destaca su flexibilidad. En otros entornos hay un servidor “monolítico” (apache, tomcat, etc.) y tu aplicación se “despliega” en él, y tienes unas estructuras de directorios y ficheros de configuración muy concretos. En nodejs tú lanzas el servidor web, y si quieres puedes lanzar varios, y si quieres puedes lanzar a la vez un servidor ftp, y los lanzas desde el directorio que quieras…

Node.js es un ambiente de ejecución para JavaScript construido sobre el motor JavaScript V8 de Chrome. Lo anterior significa que el uso de JavaScript ya no queda restringido solamente al navegador web, sino que tambien es posible usar este popular lenguage de programación para desarrollar aplicaciones de todo tipo, desde servidores web hasta aplicaciones de escritorio.

Por otra parte, npm es el administrador de paquetes de Node.js y funciona de manera similar a pip en el entorno Python. Con él podemos instalar cualquier paquete Node.jsque lleguemos a necesitar para nuestros proyectos.

Métodos de instalación de Node.js

Para instalar Node.js podemos seguir dos caminos:

  • Instalar Node.js usando el instalador o los binarios oficiales. Este método es el más universal y funciona para usuarios de diferentes sistemas operativos y arquitecturas, entre ellos WindowsMac y Linux.
  • Instalar Node.js por medio de un gestor de paquetes. Este método es mas limitado y solamente funciona para usuarios de sistemas operativos tipo UNIX.

nodejs.PNG

node1.PNG

node2.PNG

node5.PNG

node4.PNG

node3.PNG

node6.PNG

node7.PNG

node10.PNG

Puede que al intentar instalar algún paquete  usando el instalador  npm  .

Por ejemplo, intentando reinstalar el paquete de firebase   con npm install firebase angularfire2 –save  le de un error parecido al siguiente:

PS C:\windows\system32> npm -v
2.5.1
PS C:\windows\system32> npm install bower -g
npm ERR! Windows_NT 6.3.9600
npm ERR! argv "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "i
nstall" "bower" "-g"
npm ERR! node v0.12.0
npm ERR! npm  v2.5.1
npm ERR! code ETIMEDOUT
npm ERR! errno ETIMEDOUT
npm ERR! syscall connect

npm ERR! network connect ETIMEDOUT
npm ERR! network This is most likely not a problem with npm itself
npm ERR! network and is related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'

npm ERR! Please include the following file with any support request:
npm ERR!     C:\windows\system32\npm-debug.log

Estos errores normalmente tienen su procedencia en el Proxy , por lo que deberemos configurar este para que interaccione con node,.js

Una vía para configurar el proxy  y  solucionar el problema es  con el comando siguiente:

npm config set proxy “http://servidorproxy%5xxxxx:yyyyyyy@tesa:8080/

xxxxxx: usuario que usamos para validarnos

yyyyy: pwd que usamos para validarnos

Actualizar java en Ubuntu


Para conseguir que un fichero .jar funcione en Ubuntu deben cumplirse dos requisitos

      1. Tener instalada la máquina virtual de java
      2. Definir el programa a utilizar para abrir los ficheros .jar

Comentar que existen dos versiones

      1. El JRE o Java Runtime Enviroment que no es más que el conjunto de aplicaciones y librerías necesarias para poder usar una aplicación Java (prácticamente la máquina virtual y algunas herramientas más)
      2. El JDK o Java Development Kit que está formado por el JRE mencionado en el punto anterior y todo lo necesario para poder desarrollar aplicaciones en este lenguaje de programación.

Si tiene instalado el JRE,bastara con hacer click con el botón derecho sobre un fichero .jar y seleccionar  en el formulario que nos aparece, escribir a continuación escribiremos

java -jar

Bueno ¿y  si no nos funciona?  

Pues en ocasiones si intentamos instalar el JRE  en Ubuntu   puede  ser casi  un verdadera  odisea pues es frecuente que  muestre un  error similar al siguiente:

introducir el código aquí sudo apt install oracle-java8-set-default
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
, pero algún
otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo         
se encuentra disponible desde alguna otra fuente
Sin embargo, los siguientes paquetes lo reemplazan:
oracle-java12-set-default oracle-java11-set-default-local

E: El paquete «oracle-java8-set-default» no tiene un candidato para la 
instalación

También si  intenta con el siguiente  comando nos da el mismo error

sudo apt install oracle-java8-installer

Puede   que muestre este mensaje :

 los siguientes paquetes lo reemplazan: oracle-java12-set-default oracle-java11-set-default-local

El problema es que si adicionamos  también el repositorio de webupd8 esos paquetes se encuentran en otro  repositorio .

sudo add-apt-repository ppa:webupd8team/java – 

Pero   aun así , si lo intentamos instalar  seguimos obteniendo el mismo error

Este es un log de ejemplo de lo que pueda usted también sufriendo intentando instalar el jdk por ejemplo para  crear aplicaciones en java con el Ide de Eclpise  o simplemente porque necesita  ejecutar un jar  desde Ubuntu Linux Mint o cualquier otra version de Linux: 




soloelectronicos@ubuntusoloelectronicos:~$ sudo add-apt-repository ppa:webupd8team/java
[sudo] contraseña para soloelectronicos:
The Oracle JDK License has changed for releases starting April 16, 2019.

The new Oracle Technology Network License Agreement for Oracle Java SE is substantially different from prior Oracle JDK licenses. The new license permits certain uses, such as personal use and development use, at no cost -- but other uses authorized under prior Oracle JDK licenses may no longer be available. Please review the terms carefully before downloading and using this product. An FAQ is available here: https://www.oracle.com/technetwork/java/javase/overview/oracle-jdk-faqs.html

Oracle Java downloads now require logging in to an Oracle account to download Java updates, like the latest Oracle Java 8u211 / Java SE 8u212. Because of this I cannot update the PPA with the latest Java (and the old links were broken by Oracle).

For this reason, THIS PPA IS DISCONTINUED.

For Oracle Java 11, see a different PPA -> https://www.linuxuprising.com/2019/06/new-oracle-java-11-installer-for-ubuntu.html

That same PPA also has Oracle Java 13 -> https://www.linuxuprising.com/2019/09/install-oracle-java-13-on-ubuntu-linux.html

and Oracle Java 14 ->
https://www.linuxuprising.com/2020/03/how-to-install-oracle-java-14-jdk14-on.html

Old description:

Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK8). There are no actual Java files in this PPA.

Important -> Why Oracle Java 7 And 6 Installers No Longer Work: http://www.webupd8.org/2017/06/why-oracle-java-7-and-6-installers-no.html

Update: Oracle Java 9 has reached end of life: http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html

The PPA supports Ubuntu 18.10, 18.04, 16.04, 14.04 and 12.04.

More info (and Ubuntu installation instructions):
- http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html

Debian installation instructions:
- Oracle Java 8: http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html
Más información: https://launchpad.net/~webupd8team/+archive/ubuntu/java
Pulse [ENTRAR] para continuar o Ctrl+C para cancelar la adición.

Obj:1 http://ppa.launchpad.net/thopiekar/cura/ubuntu bionic InRelease
Des:2 http://ppa.launchpad.net/webupd8team/java/ubuntu bionic InRelease [15,4 kB]
Obj:3 http://es.archive.ubuntu.com/ubuntu bionic InRelease
Des:4 http://security.ubuntu.com/ubuntu bionic-security InRelease [88,7 kB]
Obj:5 https://repo.skype.com/deb stable InRelease
Des:6 http://es.archive.ubuntu.com/ubuntu bionic-updates InRelease [88,7 kB]
Des:7 http://es.archive.ubuntu.com/ubuntu bionic-backports InRelease [74,6 kB]
Des:8 http://security.ubuntu.com/ubuntu bionic-security/main amd64 DEP-11 Metadata [38,7 kB]
Des:9 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 DEP-11 Metadata [42,1 kB]
Des:10 http://es.archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [669 kB]
Des:11 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 DEP-11 Metadata [2.464 B]
Des:12 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [915 kB]
Des:13 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 DEP-11 Metadata [301 kB]
Des:14 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe i386 Packages [1.014 kB]
Des:15 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1.065 kB]
Des:16 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 DEP-11 Metadata [273 kB]
Des:17 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe DEP-11 64x64 Icons [458 kB]
Des:18 http://es.archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 DEP-11 Metadata [2.468 B]
Des:19 http://es.archive.ubuntu.com/ubuntu bionic-backports/universe amd64 DEP-11 Metadata [7.968 B]
Descargados 5.057 kB en 4s (1.376 kB/s)
Leyendo lista de paquetes... Hecho
soloelectronicos@ubuntusoloelectronicos:~$ sudo apt update
Obj:1 http://ppa.launchpad.net/thopiekar/cura/ubuntu bionic InRelease
Obj:2 http://es.archive.ubuntu.com/ubuntu bionic InRelease
Des:3 http://security.ubuntu.com/ubuntu bionic-security InRelease [88,7 kB]
Obj:4 http://ppa.launchpad.net/webupd8team/java/ubuntu bionic InRelease
Des:5 http://es.archive.ubuntu.com/ubuntu bionic-updates InRelease [88,7 kB]
Obj:6 https://repo.skype.com/deb stable InRelease
Des:7 http://es.archive.ubuntu.com/ubuntu bionic-backports InRelease [74,6 kB]
Des:8 http://security.ubuntu.com/ubuntu bionic-security/main amd64 DEP-11 Metadata [38,6 kB]
Des:9 http://es.archive.ubuntu.com/ubuntu bionic-updates/main amd64 DEP-11 Metadata [301 kB]
Des:10 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 DEP-11 Metadata [42,1 kB]
Des:11 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 DEP-11 Metadata [2.464 B]
Des:12 http://es.archive.ubuntu.com/ubuntu bionic-updates/universe amd64 DEP-11 Metadata [273 kB]
Des:13 http://es.archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 DEP-11 Metadata [2.468 B]
Des:14 http://es.archive.ubuntu.com/ubuntu bionic-backports/universe amd64 DEP-11 Metadata [7.968 B]
Descargados 920 kB en 3s (307 kB/s)
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se pueden actualizar 12 paquetes. Ejecute «apt list --upgradable» para verlos.
soloelectronicos@ubuntusoloelectronicos:~$ sudo apt install oracle-java8-installer
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
El paquete oracle-java8-installer no está disponible, pero algún otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
encuentra disponible desde alguna otra fuente

E: El paquete «oracle-java8-installer» no tiene un candidato para la instalación

soloelectronicos@ubuntusoloelectronicos:~$ apt list --upgradable
Listando... Hecho
binutils/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.3 amd64 [actualizable desde: 2.30-21ubuntu1~18.04.2]
binutils-common/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.3 amd64 [actualizable desde: 2.30-21ubuntu1~18.04.2]
binutils-x86-64-linux-gnu/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.3 amd64 [actualizable desde: 2.30-21ubuntu1~18.04.2]
gnome-software/bionic-updates 3.28.1-0ubuntu4.18.04.15 amd64 [actualizable desde: 3.28.1-0ubuntu4.18.04.14]
gnome-software-common/bionic-updates,bionic-updates 3.28.1-0ubuntu4.18.04.15 all [actualizable desde: 3.28.1-0ubuntu4.18.04.14]
libbinutils/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.3 amd64 [actualizable desde: 2.30-21ubuntu1~18.04.2]
libjson-glib-1.0-0/bionic-updates 1.4.2-3ubuntu0.18.04.1 amd64 [actualizable desde: 1.4.2-3]
libjson-glib-1.0-common/bionic-updates,bionic-updates 1.4.2-3ubuntu0.18.04.1 all [actualizable desde: 1.4.2-3]
libnautilus-extension1a/bionic-updates 1:3.26.4-0~ubuntu18.04.5 amd64 [actualizable desde: 1:3.26.3-0ubuntu4]
python3-update-manager/bionic-updates,bionic-updates 1:18.04.11.12 all [actualizable desde: 1:18.04.11.10]
update-manager/bionic-updates,bionic-updates 1:18.04.11.12 all [actualizable desde: 1:18.04.11.10]
update-manager-core/bionic-updates,bionic-updates 1:18.04.11.12 all [actualizable desde: 1:18.04.11.10]
soloelectronicos@ubuntusoloelectronicos:~$ java --version
openjdk 11.0.7 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-2ubuntu218.04)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-2ubuntu218.04, mixed mode, sharing)
soloelectronicos@ubuntusoloelectronicos:~$ sudo apt install oracle-java8-installer
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
El paquete oracle-java8-installer no está disponible, pero algún otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
encuentra disponible desde alguna otra fuente

E: El paquete «oracle-java8-installer» no tiene un candidato para la instalación
soloelectronicos@ubuntusoloelectronicos:~$ sudo apt install default-jre
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
default-jre ya está en su versión más reciente (2:1.11-68ubuntu1~18.04.1).
El paquete indicado a continuación se instaló de forma automática y ya no es necesario.
libllvm6.0
Utilice «sudo apt autoremove» para eliminarlo.
0 actualizados, 0 nuevos se instalarán, 0 para eliminar y 12 no actualizados.
soloelectronicos@ubuntusoloelectronicos:~$
soloelectronicos@ubuntusoloelectronicos:~$ sudo apt install oracle-java8-installer
[sudo] contraseña para soloelectronicos:
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
El paquete oracle-java8-installer no está disponible, pero algún otro paquete hace referencia
a él. Esto puede significar que el paquete falta, está obsoleto o sólo se
encuentra disponible desde alguna otra fuente

E: El paquete «oracle-java8-installer» no tiene un candidato para la instalación

 

RESOLUCION

Pues el problema es que el repo webupd8team lo han descontinuado desde hace ya tiempo; teniendo el mismo inconveniente en Mint 19.1 queriendo instalar la JDK 1.8.0_31, y  la solución que he encontrado es netamente manual pero muy sencilla :

Lo primero es descargar la JDK desde el sitio web de Oracle    donde nos van a pedir las credenciales  para acceder ( es gratuito)

Después, desde  una ventana  de terminal  ejecute los siguientes comandos (tenga cuidado pues los comandos varian en la version de JDK!):

  1. Descomprimir al directorio /usr/lib/jvm:

sudo tar -zxf ~/Descargas/jdk-8u202-linux-x64.tar.gz -C /usr/lib/jvm

  1. Actualizar el comando java:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_202/bin/java 100

  1. Actualizar el comando javac:

sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_202/bin/javac 100

  1. Establecer la JDK de Oracle como default:

sudo update-alternatives --config java

Y seleccione la opción correspondiente a la JDK 8( en el ejemplo  seleccione 3):

 

soloelectronicos@ubuntusoloelectronicos:~/Descargas$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_202/bin/java 100
soloelectronicos@ubuntusoloelectronicos:~/Descargas$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_202/bin/javac 100
soloelectronicos@ubuntusoloelectronicos:~/Descargas$ sudo update-alternatives --config java
Existen 2 opciones para la alternativa java (que provee /usr/bin/java).

Selección Ruta Prioridad Estado
------------------------------------------------------------
* 0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 modo automático
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 modo manual
2 /usr/lib/jvm/jdk1.8.0_202/bin/java 100 modo manual

Pulse <Intro> para mantener el valor por omisión [*] o pulse un número de selección: 2
update-alternatives: utilizando /usr/lib/jvm/jdk1.8.0_202/bin/java para proveer /usr/bin/java (java) en modo manual