Actualizando Ubuntu a la versión 18.04

Cuando Ubuntu 18.04 fue lanzado para ODROID-C2 en verano de 2018, Hardkernel señaló que desafortunadamente, debido a una serie de complicados problemas de dependencias, era imposible actualizar desde la versión 16.04 a la versión 18.04 (en ese momento). Esto significaba que los usuarios de la versión 16.04 se quedaban atascados sin una ruta de actualización, o se veían obligados a reinstalar y empezar de cero.

En mi caso, me encontraba ejecutando 3 ODROID-C2s "en producción" con la versión 16.04 que quería actualizar a la 18.04. Después de probar crossgrading en el N1 (https://bit.ly/2PpeHMA) miré la opción de actualizar desde la 16.04 a 18.04, lo cual debería ser un tema bastante simple. Así que empecé con el sistema más complicado que tenía en ejecución, un C2 con X11, Kodi, Chrome, mpd, Home Assistant, mosquitto, munin-node, MariaDB, una cámara web, una tarjeta de sonido externa, sensores conectados a GPIO y un montón de scripts personalizados. La actualización funciona si sigues los pasos que se detallan a continuación.

Procedimiento de actualización

Trabajar en cualquier entorno de producción puede ser peligroso, así que hice una copia de seguridad (dd o odroid-backup) y si no puedes permitirse tiempo de inactividad (yo no podría o mi resultado WAF caería en picado) ejecuta la actualización en un hardware diferente con una copia de tu sistema operativo

En primer lugar, debes asegurarte de que el sistema esté actualizado. Instala todas las actualizaciones que falten con:

$ sudo apt-get update
$ sudo -y apt-get dist-upgrade
Hay dos maneras de probar la actualización: a través de do-release-upgrade (que es la forma oficial, pero puede fallar) o a través de distrorejuve (que es un método chapucero, pero puede funcionar donde falle el primero). Si está ejecutando la imagen mínima, es posible que tengas que instalar el siguiente paquete para disponer del programa do-release-upgrade:
$ sudo apt-get install ubuntu-release-upgrader-core
Antes de probar cualquier método, es mejor guardar una lista de los paquetes instalados:
$ sudo apt list --installed | cut -d '/' -f 1 > /root/packages.16
En mi caso, probé el método do-release-upgrade en un C2 que ejecutaba la imagen mínima y el método distrorejuve en dos C2 que ejecutaban Xorg y tenían más paquetes instalados. En mi caso ambos métodos funcionaron.

do-release-upgrade

Es mejor iniciar do-release-upgrade desde un terminal tras un arranque limpio.

$ sudo do-release-upgrade
Figura 1 – Esquema general de la instalación

El sistema puede avisarte si has restringido los paquetes y te hará desinstalarlos o actualizarlos para continuar. A continuación, cogerá una lista de paquetes que se actualizarán y te preguntará si desea mantener tus cambios en los archivos de configuración personalizados. Por lo general, las respuestas por defecto no deberían presentar problemas. Si el proceso va bien, la actualización debería transcurrir sin incidentes. Cuando finalice la actualización, te indicará que debes reiniciar.

Figura 2 - Reinicio necesario

En este paso, no deberías reiniciar automáticamente, sino hacerlo desde un intérprete de comandos. Deberías echarle un vistazo "Chequeo previo al arranque" que se muestran más adelante antes de decidir reiniciar.

distrorejuve

Si el primer método te ha dado error o si te va la aventura, puedes probar distrorejuve.

$ sudo apt-get install git
$ git clone https://github.com/mad-ady/distrorejuve.git
$ cd distrorejuve
$ sudo ./distrorejuve.sh --to-latest-lts
Lo más probable es que distrorejuve te lance un aviso sobre: Un montón de paquetes relacionados con X11 que están instalados y que pueden causarte problemas y te sugerirá que los elimines. Puedes eliminarlos ya que los instalarás más adelante:
$ sudo apt-get -y remove x11-common brltty-x11… xterm xvt xzoom
$ sudo apt-get -y autoremove
Si obtienes errores al eliminar paquetes porque has guardado algunos, debes mantenerlos:
$ sudo apt-mark showhold chromium-browser
$ sudo apt-mark unhold chromium-browser
Tienes repositorios de terceros que deben desactivarse antes de que empieces con la actualización. Deberás comentar las líneas indicadas en /etc/apt/sources.list.d/*. Además, si estás utilizando la rama xenial-backports en sources.list, deberás comentarla también. Desafortunadamente, el script también fallará si tiene entradas deb-src en tu sources.list. Éstas también tienen que ser comentadas antes de empezar.

Una vez completados todos los requisitos, puedes iniciar la actualización:

$ sudo ./distrorejuve.sh --to-latest-lts
Llevará un tiempo, pero debería terminar sin problemas. Sin embargo, una vez que se haya completado el proceso, ten en cuenta que aún no has terminado. Aún tienes que volver a añadir los paquetes que faltan (recuerda que es posible que hayas desinstalado X11). Coge una lista de los paquetes instalados actualmente y compárala con la guardada anteriormente. Vamos a ignorar las librerías porque generalmente dependen de algo más.
$ sudo apt list --installed | cut -d '/' -f 1 > /root/packages.18
$ sudo diff -u /root/packages.16 /root/packages.18 | grep '^-' | cut -c 2- | grep -v '^lib' | tail -n +2 | xargs echo
Figura 3 - Paquetes que faltan

Aparecerá una lista con los paquetes que faltan (en su mayoría X11 y programas gráficos) que debes reinstalar manualmente. Ten en cuenta que no se podrán instalar todos los paquetes porque algunos pueden haber sido reemplazados por paquetes con versiones más recientes y otros habrán sido cesados (como gksu, systemd-shim). Así que la mejor manera de hacer esto es intentar seleccionar una línea de salida e instalarla (adaptar la línea hasta que se instale), luego pasar a la siguiente línea hasta que termines. También debes habilitar los backports en /etc/apt/sources.list, ya que fueron desactivados antes de la actualización:

# echo 'deb http://ports.ubuntu.com/ubuntu-ports/ bionic-backports \
main universe restricted universe' >> /etc/apt/sources.list
# apt-get update

Chequeo previo al arranque

Querrás asegurarte de que tu sistema se encuentre saneado antes de reiniciar, así que comprueba lo siguiente: Todavía tienes una imagen kernel/uInitrd y boot.ini en /media/boot Si deseas configurar la red a través de /etc/network/interfaces, asegúrate de que el paquete ifupdown todavía sigue instalado

Re-activar repositorios específicos de ODROID

Durante el proceso de actualización, los repositorios de terceros (como el repositorio de ODROID) se deshabilitaron y deben volver a habilitarse en este punto. Edita /etc/apt/sources.list.d/odroid.list, descomenta la correspondiente línea y reemplaza "xenial" por "bionic":

$ sudo vi /etc/apt/sources.list.d/odroid.list
$ cat /etc/apt/sources.list.d/odroid.list
deb http://deb.odroid.in/c2/ bionic main
También debes comprobar que /etc/apt/sources.list haya cambiado sus repositorios a bionic. Me sorprendió ver que no lo hizo después de usar el método do-release-upgrade. Realiza los cambios necesarios si encuentra repos sin cambios.

Ejecuta una actualización e instala los siguientes paquetes:

$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo apt-get install --reinstall mali-x11 aml-libs bootini u-boot
Si tienes instalado Xorg también debe instalar:
$ sudo apt-get install --reinstall xserver-xorg-video-fbturbo
Ahora puede actualizar el kernel del 3.14 al 3.16. Deberá eliminar los archivos cabecera y el kernel actualmente instalados (si están instalados). Al eliminarlo, se te indicará que es una operación peligrosa pudiendo dejar tu sistema inservible. Debe responder "No" en este punto para continuar con la eliminación.
$ sudo apt-get remove linux-image-c2 linux-headers-c2 linux-image-3.14.79-117 linux-headers-3.14.79-117
Figura 4. Solicitud de eliminación del kernel

Ahora necesitas instalar el kernel 3.16:

$ sudo apt-get install linux-odroid-c2
En este punto, vuelve a verificar que los archivos image/uInitrd/meson64_odroidc2.dtb/boot.ini están bien en /media/boot. Cualquier archivo que falte o esté trucado hará imposible el arranque.

Figura 5. Comprobando el estado de los archivos de arranque.

Ahora, cruza los dedos y reinicia tu nuevo sistema. Ten en cuenta que el comando de reinicio solo podrá apagar el sistema en lugar de reiniciarlo, así que es posible que tengas que desconectar el enchufe. Cuando se inicie el sistema, puedes ejecutar los siguientes comandos para realizar una pequeña limpieza:

$ sudo apt-get autoremove
$ sudo apt-get clean

Correcciones posteriores a la instalación

Una vez que el reinicio finaliza satisfactoriamente (de lo contrario, tendrás tu copia de seguridad, ¿verdad? ¡Sí!), aún te quedan algunas cosas que reparar.

man Descubrirás que man está inservible tras la actualización.

Figure 6. Reparando Man

Puedes solucionarlo gracias a @WildPenguin: https://forum.odroid.com/viewtopic.php?t=34044

$ sudo apt-get install apparmor-utils
$ sudo aa-disable /usr/bin/man
c2play Si estás utilizando c2play de @CrashOverride's (https://bit.ly/2vfQtLt) deberás recompilarlo en base a la rama bionic:
$ sudo apt install libasound2-dev libavformat-dev libass-dev libx11-dev
$ git clone -b bionic https://github.com/OtherCrashOverride/c2play
$ cd c2play
$ make c2play -j4
lirc lirc también ha pasado por muchos cambios entre las versiones de distro y no funcionará con la configuración anterior. Deberás seguir la guía wiki para 18.04 y así poder configurar lirc: https://bit.ly/2ZhZEIS, o migrar la configuración existente con los siguientes comandos:
$ sudo mv /etc/lirc/lircd.conf /etc/lirc/lircd.conf.d/ir-remotes.conf
$ sudo mv /etc/lirc/lircd.conf.dist /etc/lirc/lircd.conf
$ sudo vi /etc/lirc/lirc_options.conf
driver = default
device = /dev/lirc0
$ echo 'meson-ir' | sudo tee -a /etc/modules
$ sudo service lircd restart
pulseaudio produce silbidos sobre HDMI Esto debería haberse solucionado con un parche del kernel reciente, pero si observas este problema, consulta este hilo del foro donde encontraras una solución alternativa: https://forum.odroid.com/viewtopic.php?t=34116

LCD ODROID 3.5" está deshabilitada Después de reinstalar la salida de video por defecto del X11 irá a HDMI. Tendrás que seguir los pasos de instalación de la wiki, ya que hay algunos cambios desde la versión 16.04:  https://bit.ly/2GAlUXa.

Conclusión

En general, la actualización de Ubuntu 16.04 a 18.04 tuvo buen resultado en mis sistemas. Había varias cosas por ajustar y arreglar, pero la mayoría de las cosas iban bien. Te sugiero que lo pruebes y actualices tu sistema anterior si no has empezado con una imagen en blanco. Para cualquier problema y preguntas recurre al tema de soporte: https://forum.odroid.com/viewtopic.php?f=140&t=34251

Be the first to comment

Leave a Reply