1 ADMINISTRACIÓN DE SISTEMAS OPERATIVOS CURSO 2007/2008 PRÁCTICA 4 – Recompilación del núcleo de Linux Nombre 1 Nº Mat. 1 Nombre 2 Nº Mat. 2 1. OBJETIVOS • Familiarizarse con el proceso de recompilación del código del núcleo de Linux. Para ello, se realizará una recompilación del núcleo para añadir una característica no soportada inicialmente. 2. INTRODUCCIÓN En esta práctica se va a explicar el proceso de construcción de un nuevo núcleo de Linux. La recompilación del núcleo a menudo se hace para introducir soporte para nuevas características o para construir un núcleo más pequeño. Este último objetivo se consigue ajustando los servicios del núcleo a las necesidades de la instalación concreta. Siempre que queramos recompilar el núcleo, debemos conseguir previamente el paquete que contiene los ficheros fuente del mismo. Este paquete puede conseguirse en la página oficial del núcleo (www.kernel.org). Además, para poder utilizar el comando de configuración del núcleo “make menuconfig” en la compilación, necesitamos otro paquete que se llama ncurses-dev. Para la práctica no hay problema, ya que ambos paquetes se han cargado previamente. 3. ENUNCIADO A continuación se guía el proceso de preparación, recompilación y arranque del nuevo núcleo, y se pide responder a las preguntas formuladas: 1) Vamos a obtener información sobre la versión del núcleo actualmente en funcionamiento. Para ello, ejecuta el comando “uname -a” y muestra a continuación la información que aparece por pantalla antes de la fecha. Antes de recompilar vamos a fijarnos en los ficheros existentes en el directorio /boot relacionados con el núcleo actual. Para ello, ejecuta el comando “ls –ltr /boot”. Omitiendo detalles sobre la versión específica, verás los siguientes ficheros: vmlinuz-2.6 -- Ejecutable del núcleo initrd.img-2.6 -- Disco RAM con parte del núcleo System.map-2.6 -- Tabla de símbolos del núcleo config-2.6 -- Fichero con información de configuración del núcleo 2 Es importante que el trabajo restante se realice bajo el usuario root, ya que no se puede cambiar el núcleo bajo un usuario normal. Vamos a situarnos en el directorio donde están los ficheros fuente del núcleo actual: #cd /usr/src En este directorio tenemos los ficheros fuente originales, contenidos en el fichero denominado linux-2.6.24.3.tar.bz2. Para extraer los ficheros fuente del núcleo ejecutamos: #tar xjvf linux*.tar.bz2 donde la opción “j” del comando tar sirve para descomprimir el archivo con el comando bunzip2. Los ficheros extraídos por el comando tar se despliegan automáticamente en un directorio llamado: /usr/src/linux-2.6.24.3 Vamos a crear un enlace /usr/src/linux a dicho directorio mediante el comando “ln –s /usr/src/linux-2.6.24.3 /usr/src/linux”. Asegúrate de que sigues en el directorio /usr/src y mira su contenido mediante el comando “ls –l”. Cada vez que queramos situarnos en el directorio que contiene los fuentes, bastará con ejecutar el comando “cd /usr/src/linux”. Ahora comenzaremos el proceso de recompilación. Para acortar el tiempo de compilación del núcleo, partiremos de un fichero de configuración del núcleo con un conjunto mínimo de características activas. La única característica adicional que tendréis que introducir es el soporte para sistemas de ficheros Minix. Llama al profesor del laboratorio para asegurar que tienes el fichero de configuración de partida. Para recompilar el núcleo, ejecutaremos la siguiente secuencia de comandos: ; Para indicar las nuevas opciones de compilación, se ; ejecuta el siguiente comando #make menuconfig ; Para incluir los sistemas de ficheros de tipo Minix ; deberá seleccionarse la sección “File Systems” y, ; dentro de ésta, la subsección “Minix fs support” ; Una vez terminada la configuración, procederemos a la ; construcción del nuevo núcleo ; compilar nuevo núcleo #make ; instalar módulos #make modules_install install 3 El núcleo recién generado estará en el fichero: /boot/vmlinuz-2.6.24.3 2) Indica si se ha generado correctamente, fijándote en la fecha y hora de modificación de dicho fichero. 3) Mira el contenido del directorio /lib/modules con el comando “ls –ltr” e indica qué directorio se ha generado en el proceso de compilación. Si la fecha y hora del fichero vmlinuz y del directorio creado en /lib/modules no corresponden a las de esta sesión, la compilación del núcleo no ha ido bien. En ese caso, deberías repetir con más cuidado la secuencia de comandos anteriores. 4) Ejecuta el comando “ls –ltr /boot” e indica el nombre de los ficheros generados por el proceso de compilación (excluyendo los enlaces). Todavía nos falta informar al cargador de arranque, GRUB, de cómo arrancar el núcleo recién compilado. Además, por si hubiera algún problema con la versión que hemos compilado, queremos que se pueda seguir arrancando la versión original del sistema. El fichero de configuración de GRUB es “/boot/grub/menu.lst”. Para modificarlo, utilizaremos algún editor y crearemos un duplicado del conjunto de líneas que arrancaban la versión original del núcleo. Dado que en la versión compilada no existe el fichero initrd.img, eliminaremos las líneas correspondientes. El conjunto de líneas añadidas es el siguiente: title Debian GNU/Linux, kernel 2.6.24 root (hd0,1) kernel /boot/vmlinuz-2.6.24.3 root=/dev/sda2 ro savedefault boot title Debian GNU/Linux, kernel 2.6.24 (recovery mode) root (hd0,1) kernel /boot/vmlinuz-2.6.24.3 root=/dev/sda2 ro single savedefault boot Para que GRUB lea los cambios realizados y los aplique al arrancar ejecutaremos el comando: #grub-install hd0 Con este comando se actualizarán las opciones de GRUB en el MBR (Master Boot Record). Para probar si el núcleo ha sido compilado con éxito, sólo nos falta arrancar el ordenador y ver si funciona. LLAMA AL PROFESOR DEL LABORATORIO antes de arrancarlo. 4 5) Ejecuta el comando “uname -a” y muestra a continuación la información que aparece por pantalla antes de la fecha. 6) Ejecuta los comandos: # mount /dev/fd0 /mnt –t minix # ls /mnt e indica qué fichero/s ves en el disquete.