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-upgradeHay 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-coreAntes de probar cualquier método, es mejor guardar una lista de los paquetes instalados:
$ sudo apt list --installed | cut -d '/' -f 1 > /root/packages.16En 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
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.
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-ltsLo 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 autoremoveSi obtienes errores al eliminar paquetes porque has guardado algunos, debes mantenerlos:
$ sudo apt-mark showhold chromium-browser $ sudo apt-mark unhold chromium-browserTienes 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-ltsLlevará 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
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 mainTambié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-bootSi tienes instalado Xorg también debe instalar:
$ sudo apt-get install --reinstall xserver-xorg-video-fbturboAhora 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
Ahora necesitas instalar el kernel 3.16:
$ sudo apt-get install linux-odroid-c2En 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.
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.
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