Kernel (Español)
Arch Linux provee varios métodos para compilar el kernel. Usar Arch Build System es el recomendado.
Oficialmente compatibles
- Estable — La versión vanilla del kernel y los módulos, con pocas modificaciones aplicadas.
- Hardened — Un kernel de Linux enfocado en seguridad, aplica parches para mitigar la explotación en el kernel o en el espacio del usuario. También activa mas características de seguridad en comparación con linux, entre otros: namespaces, audit y SELinux.
- Larga duración — Kernel de Linux y módulos con soporte de larga duración (LTS).
- Kernel ZEN — Es el resultado de un esfuerzo colaborativo de varios hackers para hacer el mejor kernel para el uso en sistemas de uso diario.
Usando Arch Build System
Siempre, se han propuesto varios métodos para construir fácilmente un kernel personalizado partiendo del de Arch. En la wiki se pueden encontrar varios ejemplos. Todos ellos son bastante buenos, pero sufren algunos inconvenientes que hacen que no estén oficialmente respaldados por los desarrolladores.
Contrariamente, el método descrito en este articulo es mas sólido y seguro, y se construye usando el paquete oficial del linux.
Consiguiendo los ingredientes
Se va a usar makepkg, siga las recomendaciones allí descritas en primer lugar. Por ejemplo, no se puede ejecutar makepkg como root/sudo. Cree un directorio build
el directorio raiz de su usuario.
$ cd ~/ $ mkdir build $ cd build/
Instale el paquete asp y el grupo de paquetes base-devel.
Se necesita un kernel limpio para poder hacer la personalización. Descargue los archivos del kernel desde ABS en su directorio build, ejecute:
$ asp checkout linux
Después obtenga cualquier otro archivo que considere necesario (v.g. archivos personalizados, parches, configuraciones, etc.) desde sus respectivas fuentes.
Modificando el PKGBUILD
Modifica el PKGBUILD del paquete oficial del linux.
Cambiando pkgname
Las primeras lineas se pareceran a estas:
PKGBUILD
# $Id: PKGBUILD 130991 2011-07-09 12:23:51Z thomas $ # Maintainer: Tobias Powalowski <tpowa@archlinux.org> # Maintainer: Thomas Baechler <thomas@archlinux.org> pkgbase=linux pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel # pkgname=linux-custom # Build kernel with a different name _kernelname=${pkgname#linux} ...
Como ves, hay un comentario para construir un kernel con diferente nombre (# Build kernel with a different name), todo lo que debemos hacer es descomentar esa linea, cambie el sufijo '-custom' por el nombre que quieras, y comentar la linea anterior ( osea el primer pkgname):
PKGBUILD build()
... #pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel pkgname=linux-test # Build kernel with a different name ...
Ahora, todas las variables de tu paquete serán cambiadas de acuerdo al nuevo nombre. Por ejemplo, luego de instalar el paquete, los módulos seran alojados en /lib/modules/<kernel_release>-test/
.
Modificando build()
Probablemente necesites un archivo ".config" personalizado para tu kernel. Podes descomentar una de las posibilidades mostradas en la función build()
del PKGBUILD, por ejemplo:
PKGBUILD
... # load configuration # Configure the kernel. Replace the line below with one of your choice. #make menuconfig # CLI menu for configuration make nconfig # new CLI menu for configuration #make xconfig # X-based configuration #make oldconfig # using old config from previous kernel version # ... or manually edit .config ...
Si ya tenias un archivo de configuración para el kernel. Te sugiero descomentar una de las herramientas de configuración interactiva, como nconfig, y cargar tu configuración desde allí. Eso evitará problemas con el nombre del kernel.
Cambiando la función package_kernel26()
Debemos escribir una función personalizada para decirle al sistema como instalar el paquete. Esto es muy simple de hacer, solo debemos cambiarle el nombre a la función package_kernel26() por el de package_kernel26-test(),(test, recordemos es el nombre del kernel personalizado) y adaptar las instrucciones a tus necesidades. Si no quieres cambiar nada, la función debería quedar así:
PKGBUILD package_kernel26-test()
... package_linux-test() { pkgdesc="The Linux Kernel and modules" ... }
Compilación
Ahora se puede compilar el kernel, con el comando usual makepkg
Si usaste un programa interactivo para configurar los parámetros del kernel (como menuconfig), deberás estar allí durante la compilación.
$ makepkg -s
El parámetro -s
descargara cualquier dependencia adicional que no se encuentre en su sistema.
- La fuente del kernel contiene firmas PGP, y makepkg intentara verificarlas. Vea verificación de firmas para mas información.
- El kernel necesita un tiempo para compilar, una hora no es inusual.
- Compilar simultáneamente puede reducir los tiempos de compilación significativamente en sistemas con múltiples núcleos.
Instalación
Luego de makepkg
, podes revisar el archivo linux.install
. Veras que algunas variables han cambiado. Ahora, solo debemos instalar con pacman:
#pacman -U <paquete_del_kernel>
Boot Loader
Las carpetas y archivos de nuestro kernel personalizado han sido creadas, ej. /boot/kernel26-test-img
. Para testear el kernel, debemos actualizar el bootloader (/boot/grub/menu.lst
para GRUB (Español)) y agregar las nuevas entradas ('default' y 'fallback') para nuestro kernel. De esta manera, podes tener ambos kernels el ya instalado y el de personalizado en paralelo.
Drivers propietarios de Nvidia
Revisar Instalacion alternativa: kernel personalizado.
Usando AUR
En el AUR hay algunos paquetes de los kernels mas conocidos. Podes instalarlos como están, o usarlos como base para tu kernel personalizado.
Tradicional
Este método requiere la descargar manual del tarball y construir el kernel en el directorio home como usuario normal. Una vez configurado, se explican dos métodos de compilación/instalación, el método manual o mediante makepkg (Español)/pacman.
Más información en Compilación tradicional.
Revisa también
- Kernels
- O'Reilly - El kernel de linux en una cascara de nuez (ebook gratuito)