viernes, 17 de enero de 2020

Actualizar Grub en Ubuntu

Hoy vengo a contar un problema que hemos tenido en una aula en la que los equipos tienen instalado Ubuntu 18.04.
De repente y sin venir a cuento dos equipos se han quedado colgados y al reiniciar el equipo han arrancado con una resolución muy baja, probablemente VGA (640x480). Lo cual hacía el equipo inmanejable.


Para averiguar que había pasado ejecutamos el comando dmesg, que permite ver todos los mensajes que el sistema produce en el arranque. Así pudimos comprobar que estaba arrancando una versión del kernel antigua.
Para comprobar con cual versión de kernel ha iniciado tu sistema ejecuta:
dmesg | grep vmlinuz
Nos salió la versión 5.3.0-26 , cuando la versión que tenemos es la 5.0.0-37.
Nota: Una forma mas sencilla es el comando uname -a

¿Por qué ha pasado esto?
Pues ni idea, misterios de los sistemas informáticos. No se han actualizado los equipos ni nada parecido. Seguiré observando el comportamiento de los mismos para averiguar qué ha ocurrido.


Actualización: Ya sé que ha pasado. Resulta que Ubuntu tiene las actualizaciones automáticas y eso incluye el kernel o núcleo. Es este núcleo el que revienta la configuración gráfica. También se carga el Virtualbox.

Ahora la cuestión es ¿cómo arreglarlo?

En principio vamos a arrancar el equipo con el núcleo correcto para lo cual basta con seleccionarlo en el menú de arranque. El problema es que Ubuntu lo oculta, le pone un tiempo de espera de 0 segundos y no puedes seleccionar nada.

Toca editar el archivo de configuración del gestor de arranque (Grub2) desde la terminal (pulsando Ctrl+Alt+T).
Para ello ejecutamos:
sudo nano /etc/default/grub
después editamos el archivo y modificamos esta línea, las demás las dejamos como están.
(Nota: en rojo las modificaciones)
GRUB_TIMEOUT=8 
#GRUB_TIMEOUT_STYLE=hidden
Hemos puesto 8 segundos y comentado (#) la línea que ocultaba el menú. Guardamos y salimos de nano (Ctrl+o y Ctl+x)
Ahora hay que actualizar el gestor de arranque, para ello ejecutamos:
sudo update-grub2
Y reiniciamos el equipo
Ahora al arrancar vemos un menú similar a este:

Iniciar Ubuntu 5.0.0-26
Opciones Avanzadas
Memtest
...

Si seleccionas Opciones Avanzadas verás otro sub menú con todos los kernels que tengas instalados. 
- Opciones Avanzadas
   - Ubuntu 5.0.0-26
   - Ubuntu 5.0.0-26 safe
   - Ubuntu 5.0.0-37
   - Ubuntu 5.0.0-37 safe...
Elegimos el Ubuntu 5.0.0-37 (en nuestro caso).
Y el equipo inicia normalmente, con la configuración correcta tal y como estaba antes de estropearse.

Ya estaría solucionado


Pero si lo que queremos es que arranque por defecto el kernel correcto hay que volver a configurar el gestor de arranque y elegir la opción Ubuntu 5.0.0-37 como opción por defecto.
El problema reside en como poner una opción del sub menú, para ello vemos la sintaxis del GRUB_DEFAULT
En nuestro caso tenemos este menú:

Iniciar Ubuntu 5.0.0-26
Opciones Avanzadas
   - Ubuntu 5.0.0-26
   - Ubuntu 5.0.0-26 safe
   - Ubuntu 5.0.0-37
   - Ubuntu 5.0.0-37 safe
   ...
Memtest
...
hay que elegir la opción Opciones Avanzadas (que es la opción 1, empiezan en 0) y después la opción Ubuntu 5.0.0-37 (que es la opción 2 del sub menú)
Así tendemos que poner esta línea en el archivo  /etc/default/grub :
GRUB_DEFAULT="1>2"
Todo con los comandos anteriores:
sudo nano /etc/default/grub
y
sudo update-grub2

Y ahora al reiniciar el equipo automáticamente arrancará la opción con el kernel correcto.

Si queréis poneros en contacto conmigo @mosqueteroweb


miércoles, 8 de enero de 2020

Instalar docker en Linux Mint

He necesitado instalar docker para un proyecto y me he encontrado algunas dificultades para resolver dicha tarea.
Al final os pongo la manera en la que lo he resuelto en un Linux Mint 19.2
Os descargáis el script de esta página: Install docker LM 19
Para ello le dais al botón Download zip


Lo descomprimís en la carpeta de descarga (botón derecho extraer aquí).
En una terminal dentro de la carpeta descomprimida le dais permisos de ejecución al archivo install-docker.sh
chmod u+x install-docker.sh
Y lo ejecutáis
./install-docker.sh
¡Ojo! Al parecer ha cambiado el paquete de instalación pero no me ha funcionado el script tal cual y ahora hay que ejecutar:
sudo apt install docker.io
Nota: este último comando se puede incorporar al script, que quedaría así: scriptmodificado.
Ahora vamos a probar si funciona, en esa misma terminal ejecuta:
sudo docker run hello-world
y si vemos algo como esto


Ya podemos usar docker en nuestro Linux Mint 19.


Para contactar conmigo @mosqueteroweb

lunes, 6 de enero de 2020

Usar Chrome como cliente SSH

Una de las tareas más habituales que realizan los administradores de sistemas es conectarse por SSH a máquinas remotas para así poder gestionarlas.
Para esta tarea os voy a contar que sólo necesitáis un navegador web, en este caso os hablo de Chrome que para eso lo tenemos en nuestros Chromebooks.

miércoles, 18 de diciembre de 2019

Importar un feed externo a Blogger

En este artículo os voy a comentar cómo podemos publicar un artículo o post automáticamente cada vez que se actualice un feed externo a Blogger.
Por ejemplo, cada vez que publico un podcast se genera automáticamente un artículo con las notas del programa.
No hay ninguna opción en Blogger que haga esto, el gadget de importar feed RSS sólo pone enlaces a la publicación original.
Para conseguir esto es necesario recurrir a un servicio externo de automatizaciones como IFTTT


Os podéis registrar en IFTTT con vuestra cuenta de Google o de Facebook.

Después buscáis algún Applet que os haga las automatizaciones que queréis y, tras conectarlo, no tendréis que preocuparos más.
Os comento cómo hago yo la publicación automática de mis podcast en mi web hecha con Blogger.
Busqué applets con la palabra Blogger y elegí RSS to Blogger (hay varios que se llaman así, en su día yo elegí el de eguidesservice)

Para configurarlo, sólo hay que pulsar en Settings del applet



En mi caso puse la dirección URL de mi feed del podcast, aquí podéis poner cualquier feed aunque no sea tuyo 😜, y luego le puse una etiqueta (como se ve en la imagen "podcast") para la categorización automática en Blogger.
En la imagen podéis comprobar cómo funciona, esos son mis últimos podcasts y esas entradas han sido generadas automáticamente por IFTTT:



Una vez conectado esto estará funcionando por los siglos de los siglos, o mientras no se caigan IFTTT o desaparezca el applet.

Para contactar conmigo @mosqueteroweb en Telegram y Twitter

domingo, 15 de diciembre de 2019

Apps nativas o no

Siguiendo con la serie de artículos sobre el desarrollo de aplicaciones móviles, este versará sobre las apps Nativas y sus alternativas.



¿Qué es una app nativa?
Se entiende que una aplicación es nativa si fue desarrollada en alguno de los lenguajes específicos de la plataforma.
Si quiero desarrollar de forma nativa en iOS (Apple), debo programar en Objective-C o en Swift. Sin embargo si quiero aplicaciones nativas en Android (Google) debo programarlas en Java o en Kotlin.

El desarrollo nativo tiene varias ventajas:

  • Aprovechar todas las funcionalidades del dispositivo, y acceso a todos los recursos de hardware como todos los sensores y dispositivos que incorporan los móviles o tabletas. Cualquier utilidad que tenga el dispositivo podrá aprovecharse desde el momento que se implemente en los dispositivos ya que las plataformas dispondrán de las librerías para que los programadores puedan usarlas.
  • Al ejecutarse directamente sobre el dispositivo tienen mejores velocidades de ejecución.
  • Las actualizaciones del sistema operativo están disponibles desde su lanzamiento.


Pero también tiene algunos inconvenientes:

  • El principal es que si quieres tener tu app en ambas plataformas hay que mantener dos códigos fuentes diferentes, uno para cada sistema. Esto suele implicar que las apps tienen una interfaz diferente y a veces no pueden tener la misma funcionalidad ya que algún sistema puede no tenerla implementada.
  • Y otro inconveniente, para mi, sería tener que aprender varios lenguajes; que por un lado es lo que busco, aprender algún lenguaje pero por otro que sean varios igual es demasiado ambicioso.


En mi disposición actual desarrollaría sólo para una de la plataformas de forma nativa. La cuestión es para cuál.
Hacerlo sólo para iOS y dado mi desconocimiento del sistema operativo y de sus lenguajes creo que sería demasiado esfuerzo.
Además no sé si puedo. Desconozco si es necesario tener un ordenador con sistema Operativo MacOS; hasta donde yo sé si quieres programar de forma nativa en iOS hay que usar Xcode y esté sólo está para MacOS. Aunque ahora las podría probar en el ipad pro que acabo de adquirir.
Queda descartada esta opción, no quiero comprar un ordenador para ver si me gusta desarrollar apps móviles.
Hacerlo sólo Android, es la mejor alternativa que tengo. Las herramientas de desarrollo para programar apps para Android son multiplataforma, así que por ahí no hay problema, nada de comprar un ordenador nuevo ni de cambiar mi Linux. Aquí el principal problema es muy personal, no me gusta Java. Sí lo sé es una estupidez subjetiva pero es así. Así que también queda descartada está opción.

Por lo que queda descartado el desarrollo nativo.

Alternativas

Existen dos posibles alternativas para desarrollar apps para móviles de forma no nativa: las webapps y las app híbridas. Con ambas podemos desarrollar una sola app y ejecutarla tanto en Android como en iOS.

Webapps

Son Aplicaciones web que utilizan HTML5, CSS y Javascript con un diseño responsive (que se adapta al tamaño del dispositivo que la visualiza).

Ventajas

  • Se ejecutan en cualquier plataforma que tenga un navegador web.
  • Facilidad de desarrollo.
  • HTML5 , CSS y Javascript son lenguajes que ya conozco y con el que se pueden desarrollar apps muy interesantes.
  • Desarrollo de una aplicación y su pruebas y despliegues son únicos.


Inconvenientes

  • No se pueden utilizar todas las funcionalidades del dispositivo hasta que no se implementan el el estándar de HTML, por ejemplo sí podemos usar el GPS pero no el acelerómetro.
  • No aprendería lenguaje nuevo aunque sí mucho sobre diseño y posicionamiento de apps.
Esta opción es tentadora, es la que menos esfuerzo me exige.

Apps híbridas

Las aplicaciones híbridas intentan juntar la funcionalidad de las apps nativas con la sencillez de las webapps. Suelen ser frameworks que facilitan la programación de la aplicación y luego se compila para cada plataforma.

Ventajas

  • Con un único código fuente desarrollo para varias plataformas.
  • Se puede acceder a los recursos hardware que con las webapps no se podía.
  • El desarrollo de una aplicación y sus pruebas son únicas pero los despliegues son múltiples, uno por cada plataforma.


Inconvenientes

  • El principal inconveniente es que el rendimiento de estas aplicaciones está lejos del rendimiento de una app nativa. 
  • Además el desarrollo no es tan sencillo como con una webapp, el uso del framework puede tener una curva de aprendizaje pronunciada.


Difícil decisión.
Finalmente descarto las webapps porque mi objetivo es aprender algunas nuevas tecnologías.

Así que decisión tomada, me toca aprender a programar apps para móviles híbridas.


No tendría todas las posibilidades de una app nativa pero con aprender un lenguaje sería suficiente para todas las tiendas de apps. Tengo que buscar una solución que permita compilar aplicaciones multiplataforma. La cantidad de opciones para elegir Framework multiplataforma es abrumadora.

En el próximo artículo analizaré qué Framework se adapta mejor a mis necesidades.

Recuerda que estos artículos son una visión única e intransferible, no pretendo recomendar nada a nadie.
Para ponerte en contacto conmigo @mosqueteroweb en Twitter y Telegram.