06 febrero 2016

El kernel o núcleo de Linux, concepto fácil, instalación y marcha atrás.

Esta entrada viene provocada por la sugerencia realizada por José Luis. En ella se refería a las acciones que realizamos con nuestro sistema y acaban provocando lo contrario de lo esperado: un desastre.

Nadie o muy pocos nos hemos librado de esta situación.

La actualización del kernel es una de ellas. En algunas páginas la llegada de una nueva versión del kernel se anuncia como el fin de nuestros problemas y otras bondades y ventajas que no debemos dejar pasar. Confiados, seguimos las explicaciones y..., en la mayoría de los casos nos vemos con el CD de nuestra distribución en el ordenador comenzando una nueva instalación.

Breve y simple concepto del Kernel o núcleo.



La palabra núcleo ya nos lleva a pensar que nos encontramos ante una parte vital de nuestro sistema operativo. En algunas páginas de Internet lo definen como el corazón del sistema. Bien, la definición no será muy técnica pero es muy descriptiva, lo suficiente para empezar a pensar que con el "corazón" no se debe jugar o experimentar (sobre todo si está sano y funciona).

Todos nuestros programas de usuario (LibreOffice, Firefox, etcétera), se comunican con el kernel y el hardware también. El kernel gestiona la memoria, las entradas/salidas de los dispositivos, permite su reconocimiento, gestiona las interrupciones y una larga lista de tareas, de importantes tareas.

Cuando arrancamos nuestro ordenador y nos encontramos ante nuestro escritorio, el kernel está en la memoria de nuestro ordenador (residente), y se ejecuta en modo privilegiado. Esto no sucede con otros programas del S.O., ya que se cargan en la memoria solo cuando se necesitan.

Un error del kernel suele denominarse como kernel panic. En Linux puede aparecer esta pantalla maldita, si el kernel tiene fallos. En otros sistemas operativos suele aparecer una pantalla azul con el correspondiente mensaje. En ambos casos mal asunto.



Un poco de historia.

Me parece interesante, para ampliar nuestra conocimiento del SO, saber un poco más sobre este asunto. El primer kernel fue desarrollado por Linus Torvald por el año 1991. La primera versión tenía unas diez mil líneas de código de programación y la versión 2.6 (año 2010), más de trece millones.

A partir del anuncio de su proyecto se fueron uniendo a él miles de programadores, organizaciones, empresas etcétera. En resumen, el kernel o núcleo está en constante desarrollo y Linus Torvald sigue supervisando su desarrollo. Estas versiones de denominan vainilla. Las distintas versiones de este kernel aparecen en:


En el enlace podéis comprobar que las última versión estable es la 4.4.1

Sin embargo los encargados de dar soporte a las distribuciones (empresas, comunidades), pueden realizar modificaciones en el kernel para adaptarlo a las mismas.

En el siguiente enlace podemos ver las distintas versiones de kernel de Ubuntu.


Es lógico el desarrollo del kernel, el avance de los equipos sus dispositivos y hardware, obligan al avance del núcleo que ha de gestionarlos. De ahí la importancia que tiene la colaboración de los fabricantes con los desarrolladores. Afortunadamente compañías como IBM, Intel Corporation, Hewlett Packard, Oracle, Canonical, Red Hut colaboran en el desarrollo del kernel.

Para ir conociendo la evolución del kernel se numera de una manera específica.
Hasta la versión 2.6, se utilizaban tres grupos de números separados por un punto. En la actualidad se utilizan cuatro grupos: AA.BB.CC.DD


  • AA. El primer grupo indica la versión o serie del kernel.
  • BB. Indica la revisión. Antes de la versión 2.6 si el número era impar indicaba que se trataba de un versión de desarrollo, si era par una versión de productividad, estable y recomendada para su instalación. Este criterio ha sido abandonado a partir de la versión 2.6
  • CC. Estos números cambian cuando en la versión aparecen nuevas características (importantes) y drivers.
  • DD. Esta numeración cambia cuando se corrigen fallos de programación o de seguridad. Implica modificaciones menos importantes que las anteriores (CC).

Podemos ver, acompañando a esta numeración, letras como rc son las siglas de release candidate, versión candidata. Esto supone que esta versión aún se encuentra en desarrollo y por tanto no es estable (no se recomienda su instalación).

Conviene tener clara esta codificación, he visto blogs donde se habla de la instalación de un kernel y proponen la versión "3.12-rc6". Lo que invita a realizar la instalación de un kernel no estable y por tanto una posible fuente de problemas. Al menos, tratándose de una actualización, podrían proponer una versión estable y no una release candidate.

La versión, desde su inicio hasta hoy, ha cambiado 4 veces. En 1994 (versión 1.0), 1966 (versión 2.0), 2011 (versión 3.0) y en 2015 (versión 4.0).

Algunas de las novedades de la versión 4.X son:

  • Permite las actualizaciones del kernel sin tener que reiniciar el ordenador.
  • Se mejora el soporte a las nuevas CPU Intel Skylake
  • Se añade soporte a los System on Chip de Intel Quark
  • Drivers Topen-source para AMD Radeon con soporte de DisplayPort Audio
  • Retirada de los controladores para sistemas de ficheros EXT3 apostando por la versión EXT4
  • Mejoras para el soporte y funcionamiento de los discos duros de estado sólido (SSD)

Estas son algunas de las características (evidentemente faltan más), que incorpora la nueva versión del kernel.

Cambio del Kernel

Al instalar nuestra distribución por primera vez, instalamos una versión de kernel que se irá actualizando por parte del desarrollador. Para los usuarios de Ubuntu y de Linux Mint estas actualizaciones vendrán de la mano de Canonical.

Linux Mint dispone de un sistema de actualizaciones de software que las numera de 1 a 5. Las comprendidas entre 1 a 3 se consideran sin riesgos, sin embargo las actualizaciones del kernel se numera con el 5, la cifra que indica el riesgo más alto.

Una actualización de kernel puede suponer para unos usuarios la solución a sus problemas, para otros el comienzo de una pesadilla. Una mala instalación puede ser uno de los principales riesgos. Problemas con los drivers privativos es uno de los problemas más frecuentes, incluso problemas con cierto hardware mas antiguo.

Un usuario debe conciliar la estabilidad con el rendimiento. Mi consejo, que sigo a rajatabla, es apostar por la estabilidad. Puede suceder y sucede que un usuario actualice su kernel y no vea ni sienta ninguna mejora en su equipo ni en sus programas.

Un kernel puede optimizar algunos procesos, pero no hace milagro. El hardware de un ordenador impone sus limitaciones: el procesador, la cantidad de memoria, la velocidad del disco duro, el tipo de USB y otras cuestiones influyen en el rendimiento del equipo y poco puede hacer un kernel. Si alguien piensa que un kernel puede convertir nuestro viejo ordenador en un Intel 7 con 8 Mb de memoria, puede ir quitándoselo de la cabeza. Es mejor darse una vuelta por una tienda de informática.

Resumiendo, si el equipo funciona bien, sin sobresaltos, de acuerdo con su arquitectura, no tiene sentido modificar el kernel.

Creo conveniente recordar que una actualización del kernel no es una actualización de la distribución. Una distribución contiene un núcleo, programas del sistema operativo, drivers y programas de usuario, es algo más amplio que el núcleo.

Kernel low latency, (baja latencia), también rt (real time)

La latencia es el retraso que se produce en recibir, procesar y ejecutar un conjunto de instrucciones. Esto tiene que ver, fundamentalmente, con el flujo de datos de entrada y salida de los periféricos y componentes internos.
Para usuarios que utilicen su ordenador para la creación de música: grabación, conexión de instrumentos, micrófonos etcétera. Un núcleo de baja latencia es una solución óptima y aconsejable. Estos kernel para funcionar de manera óptima requieren de más recursos (procesador/memoria fundamentalmente), pero para este tipo de usuarios merece la pena.

Ubuntu Studio, Tango Studio, Dream Studio, ArtistX, AVinux, MusiX y otras distribuciones están orientadas a la edición de gráficos, sonido y vídeo, utilizan un kernel de baja latencia. En Internet podéis encontrar distribuciones dedicadas exclusivamente a la producción multimedia y la mayoría utilizan kernel lowlatency (otras veces  los denominan rt, de real time).

Así, si sois usuarios de ofimática, un kernel de baja latencia no tiene mucho sentido.

Formas de actualizar el kernel

Básicamente podemos hablar de dos métodos para realizar la instalación de un nuevo kernel:

  • La compilación del kernel
  • Método dpkg (será el explicado)
La compilación.
Es un proceso laborioso y que requiere bastantes conocimientos de informática de sistemas. Con este proceso podemos adaptar el núcleo exactamente o lo más exactamente posible a nuestras necesidades y nuestro ordenador.
El proceso requiere la descarga de las fuentes del kernel, tener instalado en nuestro ordenador los programas y librerías necesarias (ncurses), para compilar y realizar el proceso de compilación.
Dentro de este proceso podemos utilizar un método guiado a través de menús en el terminal y existe un método gráfico. Ambos métodos persiguen ayudar al administrador a configurar todas y cada una de las posibilidades de configuración. 
Para cada parámetro configurable del kernel hay 3 opciones:
  • Compilarlo incluido en el kernel. Suele ser la opción más recomendable para aquellas funcionalidades que siempre se están utilizando. No obstante cuantas más opciones se compilen dentro del kernel, más lento irá. Por ello debemos tenemos la siguiente opción.
  • Compilarlo como módulo. Para aquellas funciones que sólo se necesitan en determinadas ocasiones. Por ejemplo el soporte para impresoras.
  • No compilarlo. Excluimos ciertas funcionalidades del sistema operativo. Por ejemplo si el ordenador sólo dispone de controladora IDE no parece muy útil compilar el soporte para dispositivos SCSI. Si tu ordenador es de escritorio, sobra el soporte para la administración de energía.
Este tipo de instalación, puede dejar el kernel como un guante, pero debemos de conocer las características del ordenador con mucho detalle y tener más que unas nociones básicas sobre el sistema operativo.
Por ello, dada la especialidad de este método, no voy a explicar más ni poner ningún ejemplo. Si lo hiciera sólo serviría para aquellos que tienen un ordenador exactamente igual al mío, lo que no tiene mucho sentido.
El siguiente método tiene más sentido aunque sea de carácter más general, pero también resulta menos complicada (nada complicado) y viene de la mano del soporte de nuestra distribución, en nuestro caso Ubuntu, ya que Linux Mint también se soporta sobre esta versión.

Instalar nuevo kernel
Cuestiones previas
Conviene, antes de comenzar, tener la libreta de administrador y el lápiz a mano ya que conviene realizar ciertas anotaciones. Se que también podemos fotografiar las ventanas, pero mi experiencia dice que esos archivos acaban pronto en la papelera, así que lo mejor es utilizar nuestra libreta de administrador.

En primer lugar vamos a ver cuantos kernel tenemos en nuestro equipo. Para ello abriremos nuestro terminal y ejecutaremos:
dpkg --get-selection | grep linux-image

Con la ejecución de esta instrucción obtendremos la lista de kernel de nuestro sistema operativo, algo parecido a esto:


Podemos ver que hay varias versiones instaladas y una desinstalada, concretamente la versión 3.16.0.33-generic.

Al desinstalar una versión liberamos espacio en el disco. No obstante conviene advertir, lo veréis en muchas páginas que tratan sobre este tema, que debemos tener al menos dos versiones anteriores a la instalada. Puede ocurrir que nuestra nueva versión no funcione correctamente y debamos volver a la anterior. De ahí lo conveniente de guardar, al menos, dos versiones anteriores.

Ahora vamos a comprobar que versión de kernel tenemos en nuestro sistema, para ello ejecutamos en el terminal el siguiente comando:

uname -r

Nos dará como resultado la versión instalada y operativa actualmente en nuestro sistema.

Seguramente todos conocéis si la arquitectura de vuestro ordenador es de 23 o 64 bits. Para salir de dudas ejecutamos en nuestro terminal:

uname -m

Probablemente os devuelva: x86_64, lo que indica que la arquitectura de vuestro sistema es de 64 bits.

Bien, ya conocemos las versiones de kernel de nuestro equipo, la que está operativa y que arquitectura debemos elegir. De la manera que más os guste, tomamos nota de ello.

Desinstalando drivers propietarios

Muchos de vosotros dispondréis de drivers privativos, normalmente los usuarios de tarjetas gráficas los tienen instalados. Elegir los Nouveau, una vez instalado el kernel y comprobado su funcionamiento, instalaremos de nuevo los drivers propietarios, para el nuevo kernel instalado. En caso contrario pueden no ser reconocidos y provocar un problema.

Seleccionando el kernel

Para ello nos vamos a la la dirección:


Allí tenemos el repositorio de los kernel de Ubuntu. En esa lista además del número de versión de kernel al final aparece la última versión existente para las distintas versiones de distribución. Podremos ver, por ejemplo:

  • v.3.17.1-utopic/
  • v4.0-vivid/
  • v4.4-wily
Recordemos que no conviene instalar aquellas versiones que contenga cr en la numeración ya que se trata de una versión en desarrollo. También veréis que en el kernel 3.16.X.X puede aparecer ckt las siglas de Canonical Kernel Team.

En su día el equipo del kernel de Ubuntu anunció el deseo de proporcionar apoyo estable a la versión 3.16 hasta abril de 2016. De ahí que esas versiones tengan estas siglas.

Ya que de actualizar se trata voy a realizar la actualización al kernel v4.4-wily/, que aparece como última versión estable, aquí tenemos la ventana:


Hacemos clic sobre la carpeta y tendremos esta nueva ventana:


Si prestamos atención al inicio del nombre de estos paquetes .deb, veremos que hay dos tipos:

  • linux-headers-xxxxxxxx.deb
  • linux-image-xxxxxxxx.deb
Si además prestamos atención al final de sus nombres veremos:
  • linux-headers-xxxxxx_amd64.deb
  • linux-headers-xxxxxx_i386.deb
  • linux-headers-xxxxxx_armhf.deb
 Y también un paquete común a todas las instalaciones denominado:

  • linux-headers-xxxxxxx_all.deb
Estas denominaciones nos permitirán elegir el kernel correcto para nuestra arquitectura:

  • amd64: Ordenadores cuyos procesadores son del tipo Intel (DualCore/Quad Core), o AMD (Athlon, Sempron, etc).
  • i386: Ordenadores con procesadores del tipo Intel o AMD de 32 bits.
Estos  dos son los más habituales. Recordad que si disponéis de una arquitectura x86_64 y habéis instalado (por la razón con sea una distribución de 32 bits), debéis instalar un kernel i386.

  • ppc: Para ordenadores cuyos procesadores son del tipo PowerPC, osea los antiguos ordenadores de la marca Apple. Esta versión no se instalará en las nuevas máquinas de este fabricante basadas en procesadores Intel.
  • arm: Esta familia de procesadores se utiliza, normalmente, en sistemas embebidos, generalmente en dispositivos multimedia: routers, lectores DVD, DivX y Blue-ray domésticos, en GPS o en smartphones y tabletas.
Dado que mi ordenador soporta la arquitectura amd64, deberé de descargar los siguientes paquetes:

  • linux-headers-4.4.0-040400-generic_4.4.0-040400.201601101930_amd64.deb
  • linux-headers-4.4.0-040400_4.4.0-040400.201601101930_all.deb
  • linux-image-4.4.0-040400-generic_4.4.0-040400.201601101930_amd64.deb
 Al tratarse de paquetes .deb, al hacer clic sobre estos enlaces el sistema nos ofrecerá dos opciones, instalarlos en el Centro de software o descargarlos. Elegimos en todos los caso la opción de descargar.

Yo siempre dejo mis descargas en la carpeta Descargas, vosotros quizás tengáis preferencia por otras. En cualquier caso en la carpeta/directorio que habéis elegido tendremos los tres paquetes:


Abrimos un terminal en esta ventana (carpeta descargas en mi ejemplo). Y ejecutamos el siguiente comando para instalar los paquetes. Debemos asegurarnos de no tener otro/s paquete/s .deb, distintos a estos ya que realizaría la instalación de todos los paquetes .deb que encontrara en esta carpeta,

sudo dpkg -i *.deb

Comenzará la instalación de estos tres paquetes.

Una vez terminada, actualizaremos el grub con:

update-grub

O utilizando

update-grub2

Ahora sólo queda reiniciar nuestro sistema. Apagamos el equipo, preparamos un café, y encendemos nuestro ordenador.

El primer arranque puede ser un poco más lento que lo habitual, no es un tema para preocuparse, en los arranques posteriores no pasará.

Podéis borrar los paquetes que descargamos en la carpeta Descargas o en otra que hubieseis utilizado para ello.

Probar el equipo. Insisto que no vais a encontrar muchos "milagros", sobre todo aquellos que no tenían problemas con el ordenador. Por lo general, no vais a notar ninguna mejora espectacular en vuestro equipo.

Desinstalar el kernel actual


Puede que algunos tengáis problemas con la nueva versión de kernel. La solución será volver al kernel anterior o al que no daba problemas y desinstalar la nueva versión.

Para realizarlo de la manera más limpia posible, apagamos nuestro ordenador. La intención es arrancar en recovery mode. 

Apagamos el ordenador y al volver a encenderlo mantenemos pulsada (sostenemos) la tecla de mayúsculas (shift) hasta que aparezca la pantalla de Menú de arranque GRUB.
En este menú aparece una lista de opciones, con la tecla del cursor nos posicionamos sobre: Opciones avanzadas para Ubuntu y pulsamos la tecla Enter. Tendremos una nueva pantalla donde aparece una lista de los kernel que tenemos instalados.
En esta lista aparecen dos modos de arranque para cada kernel instalado, el que podíamos llamar arranque normal y el recovery mode. Seleccionar el modo normal (no el recovery mode).
Seleccionamos el anterior kernel instalado o aquel que funcionara sin problemas, pulsamos de nuevo Enter y el ordenador seguirá con el arranque.

Sin embargo con estas acciones no hemos rematado la vuelta al kernel anterior. Si apagamos y arrancamos de nuevo el ordenador, la nueva sesión cargará el kernel que hemos actualizado.

Bien, hemos iniciado la sesión con un kernel anterior. Vamos a desinstalar la última versión.
En el ejemplo anterior de instalación habíamos instalado la versión 4.4, por lo que instalamos los paquetes:
  • linux-headers-4.4.0-040400-generic_4.4.0-040400.201601101930_amd64.deb
  • linux-headers-4.4.0-040400_4.4.0-040400.201601101930_all.deb
  • linux-image-4.4.0-040400-generic_4.4.0-040400.201601101930_amd64.deb
 Para desinstalar utilizaremos el comando:
sudo apt-get remove --purge linux-headers-4.4* linux-image-4.4*

Terminado este proceso debemos actualizar el grub que hemos seleccionado en el arranque y que está presente en nuestra sesión:

sudo update-grub2

También podemos utilizar:

sudo ubdate-grub2
Con estas acciones hemos eliminado el último kernel instalado y vuelto a instalar una versión anterior.
Recordemos que siempre conviene disponer de, al menos, dos versiones de kernel anteriores a la que estamos utilizando por cuestiones de seguridad, ya que las actualizaciones pueden tener problemas con dispositivos de nuestro ordenador.
Espero que alguna de vuestras dudas que resuelta con esta entrada.
Como siempre quedo a vuestra disposición para cualquier cuestión.
Gracias por vuestra atención.
Saludos.


No hay comentarios:

Publicar un comentario