Necesito Construir un Núcleo Personalizado

Existen dos formas de contruir un núcleo personalizado para CentOS. Una es construir un núcleo con opciones personalizadas a partir del rpm fuente y la otra contruir un núcleo esencial de la versión más reciente de CentOS.

Este tutorial cubrirá la reconstrucción de los rpm fuentes de CentOS con sus propias opciones o modificaciones.

Si usted desea construir un núcleo más reciente, vea http://howtoforge.com/kernel_compilation_centos. Este sitio no está aprobado como un método de construcción, sin embargo, como este construye el SRPM como root, es inseguro y básicamente defectuoso. Vea, más correctamente, construyendo con un usuario diferente a root.

Upload new attachment "stop.png"

Atención

Estas acciones son solo para su uso personal. Los núcleos personalizados no están mantenidos, debido a que el equipo de desarrollo no tiene control sobre el entorno de construcción, opciones seleccionadas, etc. Si usted decide construir su propio núcleo usted será responsable de continuar su mantenimiento para actualizaciones de seguridad, nuevas entregas, el segundo arribo de $DEITY y cualquier otro posibile esceario para el cual se advierta una actualización.

1. Preparando la construcción

Para construir un núcleo, usted va ha necesitar varios paquetes:

yum groupinstall "Development Tools"

Con ello tiene la capacidad de destruir, pero también asegurará que tenga todos los paquetes requeridos para construir.

yum install qt-devel

Necesario solo si usted desea usar make xconfig en lugar de make menuconfig.

Como un usuario ordinario, no root, cree un árbol de directorio en ~/rpmbuild:

[user@host]$ cd
[user@host]$ mkdir -p rpmbuild/{SRPMS,RPMS,SPECS,BUILD,SOURCES}
[user@host]$ echo "%_topdir %(echo $HOME)/rpmbuild" > .rpmmacros

Instale el rpm fuente

rpm -i rpm -i http://mirror.centos.org/centos/4/updates/SRPMS/kernel-2.6.9-67.0.1.EL.src.rpm  (CentOS-4)
rpm -i http://mirror.centos.org/centos/5/updates/SRPMS/kernel-2.6.18-53.1.4.el5.src.rpm    (CentOS-5)

Ahora que el rpm fuente está instalado, necesitamos preprar el paquete para su construcción. Para ello, haga lo siguiente:

[user@host]$ cd ~/rpmbuild/SPECS
[user@host SPECS]$ rpmbuild -bp --target=`uname -m` kernel-2.6.spec

El valor uname -m fija --target a la arquitectura de su núcleo actual. Esto es generalmente aceptado y la mayoría de las personas tendrá i686 o x86_64.

2. Configurando su núcleo

Ahora que tenemos la raiz de construcción ajustada, es hora de comenzar a modificar el núcleo para acomodarlo a sus necesidades. Primero necesitamos poner la configuración actual en su lugar. Para hacer esto copie la configuración apropiada desde el directorio SOURCE de la raiz de construción a el directorio de construcción. Vea los ejemplos abajo (reemplace 2.6.18 con 2.6.9 para CentOS-4):

[user@host]$ cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.i686
[user@host]$ cp ~/rpmbuild/SOURCES/kernel-2.6.18-i686.config .config
- OR -
[user@host]$ cp /boot/config-2.6.18-53.1.4.el5 .config

Existen varios ficheros de configuración a seleccionar desde el directorio SOURCE (además puede ver el directorio configs/ donde hay ficheros de configuración para su arquitectura ($ARCH) actual). Asegúrese de usar los apropiados para usted y coincidan con el valor de arquitectura usado arriba en el comando uname -m.

Ahora ejecute make oldconfig (usted puede saltarse este comando si usted copió .config del directorio configs/ pero no del directorio SOURCE). Usted está listo para ejecutar make menuconfig o make xconfig y hacer cualquier otro cambio que considere necesario.

Upload new attachment "important.png"

Importante

Si usted está instalando todo el fuente del núcleo para construir un módulo para el núcleo, usted puede detenerse en este paso. Por favor, refierase a cómo construir módulos para el núcleo.

Si aquí usted le pone un parche al fuente del núcleo, necesita asegurarse de generar el parche, o mantener el parche que está usando porque nososotros no vamos a construir el núcleo aquí. Nosotros estamos generando un nuevo paquete fuente y configuraciones para generar un nuevo rpm del núcleo. Para aquellos de ustedes que están diciendo pero yo puedo ejecutar make rpm! usted ciertamente puede, pero esto no generará el initd, así que usted puede tener acontecimientos al inicio y tendrá que modificiar grub para manipular la imagen. Creanos, esta forma es un poco más trabajosa pero es la forma apropiada.

Upload new attachment "note.png"

Nota

Para los núcleos CentOS-5, usted necesita adicionar una línea en el tope del fichero .config antes de que copie de regreseo a el directorio SOURCE que contiene la Plataforma del Hardware (uname -i) para la cual usted está construyendo el núcleo. Esta es i386 para arquitecturas i[3,4,5,6]86 y x86_64 para la arquitectura x86_64. Esto necesita ser marcado con un # y ser la primera línea del fichero .config.

Solo para CentOS 5, adicione esto como la primera línea del fichero .config

# i386

o

# x86_64

Una vez que ha terminado de realizar los cambios que consideró necesarios y haya salvado su configuración modificada, es hora de construir un paquete nuevo. Primero necesitamos copiar su configuración modificada de regreso a su lugar. Esto es básicamente lo contrario del comando de copia que anteriormente ejecutamos.

[user@host]$ cp .config ~/rpmbuild/SOURCES/kernel2.6.18-i686.config

Si usted ha adicionado un parche al núcleo, cópielos también al directorio SOURCE.

En estos momentos es hora de modificar el ficero spec del núcleo para aceptar los cambios que usted ha realizado.

[user@host]$ cd ~/rpmbuild/SPECS
[user@host]$ vim kernel-2.6.spec

En el fichero spec del núcleo 2.6 (kernel-2.6.spec), usted verá la línea de entrega, la cual usted debe alterar para evitar conflictos con el núcleo instalado. Cambie la línea de forma similiar a la que mostramos abajo:

%define buildid

por algo semejante a:

%define buildid .your_identifier

Si usted tiene parches para aplicar, usted necesita hacerlo aquí también en el fichero spec. Para adicionar su parche, desplácese a los alrededores de la línea 1315, la cual debe estar cerca del final de las declaraciones de parches y adicione el suyo, comenzando mas o menos por el 40000 de forma tal que sus parches no estén en peligro de entrar en conflicto con el espacio de parche de RHEL/CentOS.

Patch40000: my-custom-kernel.patch

Si usted está adicionando un parche, todavía nos queda una parte por hacer. Desplácese hacia abajo, cerca de la línea 3258 y adicione aquí la línea que aplica su parche. Si usted usa -p1 o -p0 como la opción de parche durante su modificación del fuente, úsela aquí también. Todo lo que usted necesita adicionar es el número del parche que usted declaró anteriormente y rpm lo aplicacará automáticamente por usted.

%patch40000 -p1

Upload new attachment "note.png"

Nota

Para los núcleos de CentOS-5 existe una plantilla genérica de sección que sobrescribirá los cambios en el fichero de configuración. Esto es una función del provedor y esta sección del fichero spec tiene que ser eliminada o marcada antes que usted pueda reconstruir un núcleo de CentOS modificado. El código en cuestión está al inicio del la sección %prep en el fichero spec.

Elimine o marque este código para construir núcleos modificados para CentOS-5.

#if a rhel kernel, apply the rhel config options
%if 0%{?rhel}
  for i in %{all_arch_configs}
  do
    mv $i $i.tmp
    $RPM_SOURCE_DIR/merge.pl $RPM_SOURCE_DIR/config-rhel-generic $i.tmp > $i
    rm $i.tmp
  done
  #CONFIG_FB_MATROX is disabled for rhel generic but needed for ppc64 rhel
  for i in $RPM_SOURCE_DIR/kernel-%{kversion}-ppc64.config
  do
    mv $i $i.tmp
    $RPM_SOURCE_DIR/merge.pl $RPM_SOURCE_DIR/config-rhel-ppc64-generic $i.tmp > $i
    rm $i.tmp
  done
%endif
#if a olpc kernel, apply the olpc config options
%if 0%{?olpc}
  for i in %{all_arch_configs}
  do
    mv $i $i.tmp
    $RPM_SOURCE_DIR/merge.pl $RPM_SOURCE_DIR/config-olpc-generic $i.tmp > $i
    rm $i.tmp
  done
%endif

3. Construyendo su nuevo núcleo

En este punto ya casi hemos terminado y usted está a unos pocos pasos de su propio núcleo personalizado. Ahora necesitamos poner la construcción en movimiento.

[user@host SPECS]$ rpmbuild -ba --target=`uname -m` kernel-2.6.spec

Ahora recuéstese y espere que su construcción finalice. Cuando su construcción finalice, usted tendrá un conjunto de rpms con el núcleo personalizado esperando por usted en ~/rpmbuild/RPMS/<arch>.

Asegúrese de instalar estos rpms usando yum localinstall, o rpm -ivh kernel-*.rpm.

Upload new attachment "stop.png"

Atención

Bajo ningua circunstancia instale los rpms de su núcleo con rpm -Uvh, pues esto actualizará y sobrescribirá la instalación del núcleo actual. Si usted tiene un problema con su versión, usted no será capaz de regresar a tras.

es/HowTos/Custom Kernel (last edited 2008-01-07 19:55:45 by AlainRegueraDelgado)