Construir un Kernel Personalizado
Este documento proporciona instrucciones para usuarios avanzados que desean reconstruir el kernel desde alguna fuente.
Cuando compila o ejecuta un kernel personalizado, no se debe esperar soporte del equipo de kernel de Fedora. |
Algunas razones comunes para compilar un kernel personalizado son:
-
Aplicar parches para pruebas que se generaron o se obtuvieron de otra fuente
-
Para reconfigurar un kernel existente
-
Para obtener más información sobre el kernel y el desarrollo del kernel
Obtener las Dependencias
La manera más fácil de instalar todas las dependencias compiladas para el kernel es usar el archivo de especificaciones del kernel Fedora:
sudo dnf install fedpkg
fedpkg clone -a kernel
cd kernel
sudo dnf builddep kernel.spec
Si usted desea usar make xconfig
, necesitará algunos paquetes adicionales:
sudo dnf install qt3-devel libXi-devel gcc-c++
Arranque Seguro
Asegúrese de agregar el usuario que realiza la compilación a /etc/pesign/users
y ejecute el script de autorización del usuario:
sudo /usr/libexec/pesign/pesign-authorize
Cree una nueva Machine Owner Key (Clave de Propietario de la Máquina) (MOK) para importar a UEFI:
openssl req -new -x509 -newkey rsa:2048 -keyout "key.pem" \
-outform DER -out "cert.der" -nodes -days 36500 \
-subj "/CN=<your name>/"
Importe el nuevo certificado a su base de datos UEFI:
Se le pedirá que autorice la importación en el próximo arranque. |
mokutil --import "cert.der"
Cree un archivo de clave PKCS #12:
openssl pkcs12 -export -out key.p12 -inkey key.pem -in cert.der
Usted puede después importar el certificado y la clave a la base de datos nss:
certutil -A -i cert.der -n "<MOK certificate nickname>" -d /etc/pki/pesign/ -t "Pu,Pu,Pu"
pk12util -i key.p12 -d /etc/pki/pesign
Una vez que el certificado y la clave están importados en su base de datos nss, usted puede compilar el kernel con la clave seleccionada añadiendo %define pe_signing_cert <MOK certificate nickname>
al archivo kernel.spec o llamando a rpmbuild directamente con la bandera --define "pe_signing_cert <MOK certificate nickname>"
.
Mientras el bugzilla bug #1651020 esté abierto usted podría necesitar editar la línea que empieza con %pesign en el archivo de especificaciones del kernel y sustituirla con pesign -c %{pe_signing_cert} --certdir /etc/pki/pesign/ -s -i $KernelImage -o vmlinuz.signed .
|
Está también recomendado que instale ccache
, que puede ayudar a acelerar las reconstrucciones:
sudo dnf install ccache
Compilar un Kernel desde el dist-git de Fedora
Primero, se requiere verificar desde Fedora kernel dist-git:
git clone https://src.fedoraproject.org/rpms/kernel.git
El kernel, como cualquier otro paquete Fedora, tiene una rama por cada versión Fedora. rawhide
corresponde a Rawhide y cada versión Fedora tiene una rama llamada f<version>
.
-
Por ejemplo, para construir un kernel Fedora 28, usted necesitaría primero cambiar a la rama con:
git switch f28
-
Para evitar conflictos con los kernels existentes, puede establecer un buildid personalizado cambiando
# define buildid .local
a%define buildid .<your_custom_id_here>
enkernel.spec
. -
Haga cualquier cambio o personalización que necesite:
-
Las opciones de configuración de kernel se pueden anular modificando el archivo
kernel-local
. -
Los parches existentes pueden ser añadidos a
linux-kernel-test.patch
, se recogerán automáticamente durante la reconstrucción. -
Los parches también se pueden mantener en archivos separados y añadidos a
kernel.spec
conPatch2: foo.patch
,Patch3: bar.patch
, etc. Se deben agregar líneasApplyOptionalPatch foo.patch
,ApplyOptionalPatch bar.patch
para aplicar los parches durante el proceso de construcción. -
Haga sus propias modificaciones en la fuente del kernel, recupere las fuentes del kernel de su rama dist-git real con
fedpkg sources
, después haga sus cambios deseados en la fuente del kernel y genere un parche, por ejemplo, condiff -rupN kernel_src_folder kernel_src_folder_patched > mypatch.patch
. El parche se puede añadir entonces alinux-kernel-test.patch
o al archivo de especificaciones.
-
-
Construya los RPMs:
fedpkg local
-
Instale el nuevo kernel:
sudo dnf install --nogpgcheck ./x86_64/kernel-$version.rpm
Construyendo un kernel vanilla upstream
Algunas veces un desarrollador de Fedora le puede pedir que intente compilar e instalar un kernel upstream (posiblemente con un parche añadido) para probarlo. Si hay varias iteraciones, puede ser más rápido para usted hacer esto que para el desarrollador cambiar varios RPMs.
Se está realizando un esfuerzo para empaquetar los kernels vanilla. Vea si esto se ajusta a sus necesidades primero |
Obtener las Fuentes
Clone el árbol del kernel desde kernel.org. Si usted no sabe que árbol necesita, debería obtener el árbol de Linus:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
También puede que desee el árbol estable (versiones 4.y.z), que se pueden añadir con:
git remote add -f stable git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
Configurar el kernel
Si el desarrollador le ha apuntado un archivo de configuración específico para utilizar, guárdelo en el directorio linux con el nombre de archivo .config
De lo contrario, deberá elegir un archivo de configuración para empezar. El kernel Linux tiene miles de opciones de configuración, por lo que no querrá empezar desde cero a menos que sepa lo que está haciendo.
Arrancar desde una configuración de kernel instalada
Si desea modificar la configuración de un kernel que ya tiene instalado, usted puede empezar con su configuración que está almacenada en /boot/. Por ejemplo, para arrancar con la configuración del kernel corriendo en este momento:
cp /boot/config-`uname -r`* .config
Arrancar desde dist-git
Si desea usar la configuración para un kernel que no tiene instalado, puede obtener la configuración desde el repositorio dist-git de Fedora. Por ejemplo, para arrancar con la última configuración Rawhide:
cd <dist-git directory>
git checkout rawhide
./generate_all_configs.sh # Ensure the latest configuration files are generated
cp kernel-<arch>.config <linux kernel directory>.config
Las versiones de depuración de los archivos de configuración están en kernel-<arch>-debug.config
si usted quisiera compilar un kernel con las opciones de depuración habilitadas.
Cambiar la configuración
Hay varias maneras de cambiar la configuración. Puede ejecutar make help
y mirar en las Configuration targets
la lista completa, pero make menuconfig
es un buen sitio para empezar. Puede también solo editar el archivo .config
directamente.
Una opción de configuración que puede que desee establecer es CONFIG_MODULE_COMPRESS, que comprime los módulos (con gzip de forma predeterminada) cuando los instala. Sin este ajuste, los módulos pueden ser muy grandes. |
Construir el kernel
Una vez que usted ha configurado el kernel, está listo para construirlo. Antes de hacerlo, querrá cambiar la EXTRAVERSION
en el Makefile
por algo que reconocerá más tarde. Por ejemplo, si lee EXTRAVERSION = -rc5
cámbielo a EXTRAVERSION = -rc5-dave
:
$EDITOR Makefile
Ahora está preparado para construir el kernel:
make oldconfig
make bzImage
make modules
Instalar el kernel
Instalar el kernel es tan sencillo como:
sudo make modules_install
sudo make install
Compilar
Si le han pedido que pruebe varias cosas, el procedimiento cuando ya haya construido el árbol una vez es prácticamente el mismo. Se recomienda ejecutar make clean
entre construcciones. Esto dejará .config
en sitio, de modo que puede saltar el paso de arriba e ir directamente a la parte de make bzImage
de los pasos de arriba. Ya que instalamos ccache
en el primer paso, las construcciones siguientes deben ir un poco más rápido puesto que el compilador tocará archivos que no han cambiado desde la última vez que se construyeron.
Limpiar
Una vez que ha probado el kernel y ha vuelto a arrancar desde uno de sus kernels instalados desde un RPM, puede limpiar los archivos que el procedimiento anterior instaló.
Cuando ejecute los siguientes comandos, ¡compruebe que tiene la versión correcta del kernel! |
Como cambió EXTRAVERSION
en el Makefile
para añadir una 'tag', todos los archivos que instaló tendrán esto como parte del nombre de archivo. Así que debería ser capaz de usar comodines para borrarlos con seguridad utilizando comandos similares a los de abajo (solo reemplace 'dave' con cualquier etiqueta que usted haya elegido):
rm -f /boot/config-*dave* /boot/initramfs-*dave* /boot/vmlinuz-*dave* /boot/System.map-*dave*
rm -rf /lib/modules/*dave*
Finalmente, necesitará eliminar el kernel como una opción de su cargador de arranque. Asumiendo que su sistema está ejecutando grub2, esto se puede hacer eliminando las entradas de la especificación del cargador de arranque y reconstruyendo la configuración grub:
rm -f /boot/loader/entries/*dave*
grub2-mkconfig -o /boot/grub2/grub.cfg
Want to help? Learn how to contribute to Fedora Docs ›