Todo sobre el kernel

Fuente: https://rootsudo.wordpress.com/2016/03/20/todo-sobre-el-kernel-en-gentoo/

Esta entrada pretende ser un resumen de todo lo más importante sobre el kernel en Gentoo.
Se trata de tener una guía accesible en un sólo lugar cuando se nos haya olvidado algo sobre la abundante documentación sobre el núcleo (y otros núcleos alternativos) que hay en el Handbook oficial de Gentoo.

Empecemos:
¿Cómo se llama el paquete del kernel oficial en Gentoo?

gentoo-sources

nombre completo: sys-kernel/gentoo-sources


Ver qué versión del kernel se está corriendo:

uname -rm


¿Dónde están los ebuilds disponibles de los kernels del árbol de Portage?

/usr/portage/sys-kernel/.

y las versiones disponibles del kernel oficial:

/usr/portage/sys-kernel/gentoo-sources/


¿Cómo saber qué versiones tengo disponibles para instalar con Portage desde consola?

equery m gentoo-sources

Esto nos dará todo un listado de las versiones que hay así como para qué arquitecturas están disponibles.

Podría hacer lo mismo para otros tipos de kernels, como los “vanilla”, por ejemplo:

equery m vanilla-sources


Instalar la última versión estable disponible oficial del kernel:

primero actualizamos el árbol de Portage:

sudo emerge --sync

y luego:

sudo emerge -a gentoo-sources

Esto siempre instalará la última versión estable del kernel oficial, si deseamos que por defecto se instale siempre la última versión de la rama testing (más moderna) hay que añadir a nuestro archivo

/etc/portage/package.accept_keywords

las líneas:

# KERNEL LINUX TESTING
sys-kernel/gentoo-sources ~amd64


¿Cómo instalar un kernel concreto más antiguo en Portage?

miramos los kernels disponibles:

equery m gentoo-sources

e instalamos el que queramos de la siguiente manera:

sudo emerge -a =sys-kernel/gentoo-sources-3.10.100

en este caso instalamos la versión 100 de la rama del kernel 3.10 (LTS). Obsérvese que para que funcione hay que poner un signo igual (=) antes del nombre y ruta del kernel, pues si no, Portage no nos dejará.


Todo gentucito sabe que Portage no “instala” realmente el kernel, sino que se limita a descargar sus fuentes para permitirnos instalarlo de facto a nosotros. Digamos que Portage “emerge” un kernel, pero luego hay que configurarlo, compilarlo, instalarlo e integrarlo en el gestor de arranque (normalmente grub2).

Algunas cosas sobre esto:

¿Dónde están las fuentes de los kernels disponibles emergidos por Portage?

en

/usr/src/

están ahí, cada uno en su directorio con su número de versión.

Además hay un enlace simbólico llamado “linux” (/urs/src/linux/) que enlaza normalmente al último kernel compilado e instalado:

podemos ver desde línea de comandos las fuentes de kernel disponibles así:

eselect kernel list

lo cual nos lista los kernels disponibles. Observemos que uno de ellos al final tiene un asterisco (*) lo que indica a cual apunta el enlace simbólico /usr/src/linux/

Este enlace simbólico es importante, pues al instalar un nuevo kernel emergido con Portage, debemos hacerlo apuntar al nuevo kernel que nos interese configurar, compilar e instalar. Se hace así:

sudo eselect kernel set 2

(suponiendo que sea al kernel número 2 el que vamos a instalar). Lo cual cambia la ruta del enlace simbólico /urs/src/linux/ al nuevo (y por lo tanto también el asterisco ante un “eselect kernel list”.


¿Cómo se instala un nuevo kernel?

su
cd /usr/src/linux/
make menuconfig
make
make modules_install
make install

(sudo emerge -a genkernel)
(genkernel –install initramfs)

estos dos pasos entre paréntesis no son necesarios si no queremos/necesitamos “initramfs”

grub-mkconfig -o /boot/grub/grub.cfg
exit
sudo reboot

Lógicamente esta parte es más complicada y por eso se explicó en su propia entrada:

Construcción y compilación manual del kernel en Gentoo (make menuconfig)


¿Dónde se guarda el fichero de configuración del kernel que hemos compilado?

siempre se encuentra en /usr/src/linux/.config (y en el directorio de cada kernel específico)

y normalmente también en /boot/config-4.4.5-gentoo (en este ejemplo el de mi versión 4.4.5)

Si al configurar el kernel hemos habilitado:

File systems —>
Pseudo filesystems —>
<*> /proc file system support

también podremos encontrar la configuración del kernel en:

/proc/config.gz

En los últimos tiempos, cuando actualizas a un nuevo kernel, Gentoo suele recuperar la configuración del anterior, con lo que no hay que activar cada vez todos los módulos de tarjeta gráfica, wifi, etc. Esto sólo será necesario si hay alguna nueva funcionalidad del kernel o se quiere cambiar algún parámetro de configuración.


¿Cómo eliminar kernels antiguos?

Se puede hacer con –depclean y con eclean-kernel, pero yo prefiero hacerlo de una manera manual, pues es más seguro.

Imaginemos que queremos eliminar un kernel antiguo que tenemos instalado, por ejemplo el linux-4.3.5-gentoo

Lo primero lo “sumergimos” :slightly_smiling_face: de Portage, así:

sudo emerge -Ca sys-kernel/gentoo-sources-4.3.5

de esta manera ya no está instalado “a efectos de Portage” pero hay que eliminarlo manualmente del sistema:

Primero eliminamos sus fuentes así:

sudo rm -r /usr/src/linux-4.3.5-gentoo

Segundo, eliminamos sus módulos del directorio pertinente, así:

sudo rm -r /lib/modules/4.3.5-gentoo

Tercero, eliminamos todos los archivos de esa versión del kernel en nuestro directorio /boot/ así:

sudo rm /boot/vmlinuz-4.3.5-gentoo
sudo rm /boot/System.map-4.3.5-gentoo
sudo rm /boot/config-4.3.5-gentoo

y finalmente, no nos olvidemos de actualizar grub2 para borrar la entrada del kernel eliminado:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Y ya podemos rebootear tras la limpieza.


Y un pequeño truco/consejo para terminar.

Para que no se esté actualizando el kernel en cada actualización del sistema, pues a mí me gusta hacer todos los lunes un:

sudo emerge --sync && sudo emerge -uaDN --with-bdeps=y world

con lo que tengo cada semana el sistema actualizado, se puede fijar una versión del kernel para que no se actualice hasta la siguiente que tú desees. Yo tengo la costumbre de sólo actualizar de una versión que termine en 5 hasta la siguiente que termine en 5. Por ejemplo, ahora tengo la 4.4.5 y no actualizaré hasta la 4.5.5 (así me garantizo cinco subversiones y correcciones de errores en cada nueva versión del kernel. Para esto, lo que hago es enmascarar el kernel en el directorio package.mask, por lo que creo un archivo de texto dentro:

/etc/portage/package.mask/gentoo-sources

y le agrego lo siguiente:

# NO ACTUALIZAR EL KERNEL HASTA:
<sys-kernel/gentoo-sources-4.5.5

como veis lo que he hecho es decirle a Portage que toda versión menor de la 4.5.5 está enmascarada, y por lo tanto no puede actualizarla. Así, me puedo olvidar del kernel hasta que se actualice a esa versión. Cuando esto ocurra, editaré este fichero cambiando sólo 4.5.5 por 4.6.5, o si es el caso por 5.0.5. o la que yo desee. Y ya está.

Chulo, ¿verdad?


Pues espero que esta sea una guía para tener delante cuando se necesite consultar las cosas básicas sobre el kernel en Gentoo.