jueves, 15 de mayo de 2008

El kernel de Linux

En realidad Linux (GNU/Linux según Stallman, si te estás refiriendo a una distribución Linux completa) tan sólo es el kernel del sistema operativo. El kernel es el corazón del sistema, maneja el acceso al disco duro, los mecanismos de seguridad, la red y casi todo. Más te vale que sea seguro o la has fastidiado.

Además de esto, hay problemas como el fallo F00F del Pentium, y problemas inherentes al protocolo TCP-IP, que el kernel de Linux ha podido eliminar. Las versiones del kernel van etiquetadas como X.Y.Z, siendo Z los números de revisiones menores, Y define si el kernel es una prueba (números impares) o de producción (número par), y X define si se trata de una revisión mayor (hasta ahora hemos tenido la 0, la 1 y la 2). Yo recomendaría encarecidamente ejecutar el kernel 2.2.x, puesto que a Julio de 1999 este es el 2.2.10. Las series del kernel 2.2.x tienen importantes mejoras sobre las series 2.0.x. Utilizar kernels 2.2.x también te permite tener acceso a nuevas características tales como ipchains (en lugar de ipfwadm) así como otras características de seguridad avanzadas. La serie 2.0.x ha quedado retirada oficialmente desde Junio de 1999.

Para saber cuál es la versión más reciente del kernel, simplemente haz un finger a @linux.kernel.org:

[seifried@mail kernel-patches]$ finger @linux.kernel.org[linux.kernel.org]

The latest stable version of the Linux kernel is: 2.2.12

The latest beta version of the Linux kernel is: 2.3.20

The latest prepatch (alpha) version *appears* to be: none



Actualización y Compilación del Kernel

La actualización del kernel consiste en conseguir un kernel y unos módulos nuevos, editando /etc/lilo.conf, volviendo a ejecutar lilo para escribir el nuevo MBR. El kernel se suele colocar en /boot, y los módulos van en /lib/modules/kernel.numero.version/.

Conseguir un kernel y módulos nuevos se puede hacer de dos formas diferentes, descargándo el paquete apropiado del kernel e instalándolo, o descargando el código fuente de ftp://ftp.kernel.org/∞ (por favor, utiliza un mirror), y compilándolo.

Compilar un kernel va todo seguido:

cd /usr/src

Debería de haber un symlink (enlace simbólico) llamado "linux" apuntando al directorio que contiene el kernel actual, bórralo si está ahí, si no está, no hay problema. Quizás quieras hacer un "mv" del directorio de linux a /usr/src/linux-kernel.version.number y crear un enlace apuntando a /usr/src/linux

Desempaqueta el código fuente utilizando tar y gzip según sea apropiado, de modo que ahora tienes un /usr/src/linux con aproximadamente 50 megabytes de código fuente dentro. El siguiente paso es crear una configuración del kernel de linux (/usr/src/linux.config), lo cual se puede conseguir mediante "make config", "make menuconfig" o "make xconfig", mi método preferido es "make menuconfig" (para lo cual necesitarás ncurses y ls librerías de desarrollo de ncurses). Este es discutiblemente el paso más difícil, hay cientos de opciones, que se pueden categorizar en dos áreas principales: soporte de hardware y soporte de servicios. En cuanto al soporte de hardware, haz una lista del hardware sobre el que se ejecutará el kernel (por ejemplo, P166, controladora Adaptec 2940 SCSI, tarjeta de red NE2000, etc.) y activa las opciones apropiadas. En cuanto al soporte de servicios, necesitarás imaginarte qué sistema de ficheros (fat, ext2, minix, etc) estás planeando utilizar, lo mismo en cuanto a la red (cortafuegos, etc.).

Una vez que hayas configurado el kernel, necesitas compilarlo, el siguiente comando crea las dependencias, asegurando que las librerías y demás se vayan construyendo en el órden apropiado, luego se limpia cualquier información de compilaciones anteriores, posteriormente se construye el kernel, los módulos y se instalan los módulos.

make dep (crea las dependencias)

make clean (elimina basura anterior)

make bzImage (make zImage casca si el kernel es demasiado grande, y los kernels 2.2.x tienden a ser bastante grandes)

make modules (crea todos los módulos que hayas especificado)

make modules_install (instala los módulos en /lib/modules/numero.version.kernel

Luego tienes que copiar /usr/src/linux/arch/i386/boot/bzImage (zImage) a /boot/vmlinuz-numero.version.kernel. Después edita /etc/lilo.conf, añadiendo una nueva entrada para el nuevo kernel y configurarlo como la imagen por defecto es la forma más segura (utilizando el comando default=x, si no arrancará el primer kernel de la lista), si falla puedes reiniciar y volver a la versión anterior del kernel que estaba funcionando.

boot=/dev/hda

map=/boot/map

install=/boot/boot.b

prompt

timeout=50

default=linux

image=/boot/vmlinuz-2.2.9

label=linux

root=/dev/hda1

read-only

image=/boot/vmlinuz-2.2.5

label=linuxviejo

root=/dev/hda1

read-only

Una vez que termines de editar /etc/lilo.conf tienes que ejecutar /sbin/lilo para sobreescribir el MBR (Master Boot Record, el sector de arranque). Cuando se ejecuta lilo, mostrará una salida similar a:

Added linux *

Added linuxviejo

Sacará una lista de las imágenes que estén cargadas en el MBR e indicará con un * cuál es la imagen por defecto (lo normal es que por defecto cargue la primera imagen de la lista, a menos que se le especifique otra usando la directiva default ).



Versiones del Kernel

Actualmente la serie estable del kernel es la 2.2.x, y las series de desarrollo son las 2.3.x. Las series de desarrollo 2.1.x no son recomendadas, tienen muchos problemas e inconsistencias. La serie 2.0.x del kernel, aunque vieja y falta de algunas características, es relativamente sólida, pero por desgracia, la actualización de la 2.0.x a la 2.2.x es un paso bastante grande, recomendaría precaución. Hay que actualizar algunos paquetes de software, librerías, ppp, modutils y otras (viene descrito en los documentos del kernel / dependencias rpm, etc.). Puedes conservar el kernel antiguo, añadir una entrada en lilo.conf como "linuxviejo" o algo parecido, así podrás recuperarte con facilidad en caso de que el 2.2.x no funcionase como fuera de esperar. No pienses que la serie 2.2.x está libre de errores, a la 2.2.9 se le encontrarán fallos y quedará obsoleta, al igual que cualquier software del mundo.

No hay comentarios: