Estrictamente hablando, para compilar el kernel no se necesita ser root ya que se puede realizar desde el directorio de un usuario, siempre y cuando se disponga de suficiente espacio en disco y de las herramientas de compilación instaladas. En este instructivo se utiliza la cuenta del root para efectos prácticos.
Obtenga una copia del código fuentes del kernel de http://www.kernel.org o de alguno de los servidores alternos listados en http://www.kernel.org/pub/mirrors/ . Para el ejemplo, para el kernel versión 2.2.18 el archivo a obtener es ya sea linux-2.2.18.tar.bz2 (empaquetado con tar y comprimido con bzip2) o linux-2.2.18.tgz (empaquetado con tar y comprimido con gzip). Los archivos comprimidos con bzip2 normalmente son de menor tamaño.
Antes de proceder a su descompresión, verifique que disponga de 70 o más MBytes libres en el disco duro, por ejemplo con el comando df:
[root@linux]# df
Importante | |
---|---|
Normalmente el directorio donde se descomprimen los fuentes del kernel es /usr/src. Los archivos fuentes del kernel crean una estructura de directorios a partir de /usr/src/linux, lo que puede resultar inconveniente si
|
Luego de seleccionar el directorio de trabajo proceda a descomprimir de la siguiente forma:
Si decidió trabajar con el archivo linux-2.2.18.tar.bz2, desempaquete y descomprima utilizando mediante:
[root@linux]# bzcat linux-2.2.18.tar.bz2| tar -xvf -
Alternativamente puede ejecutar:
[root]# tar --use-compress-program bunzip2 -xvf linux-2.2.18.tar.bz2
Si optó por usar el archivo linux-2.2.18.tgz, el comando a utilizar es:
[root]# tar -zxvf linux-2.2.18.tgz
La definición de la configuración del nuevo kernel es el punto crucial de la compilación. Una buena configuración se alcanza sólamente:
Si tiene a la mano todos los datos del hardware que el kernel va a soportar: puertos, discos duros, tarjetas, etc.
Si define qué características ofrecidas van a ser soportadas por el nuevo kernel, ya sea directamente dentro del núcleo o como módulos.
Las alternativas para configurar el nuevo kernel corresponden a los comandos:
make config,
make menuconfig, o
make xconfig
El comando make config ofrece un interfaz primitivo basado en modo texto, sin ayuda ni menús. Los comandos make menuconfig y make xconfig conducen a mejores interfaces de usuario, con menús y quizá lo más importante, con una ayuda contextual que facilita en gran medida la configuración.
Para el ejemplo se utiliza make menuconfig, porque ofrece un interfaz amigable al usuario al igual que make xconfig, pero resulta más práctica si no se dispone o no se quiere utilizar X Windows. Antes de proceder a ejecutar este comando, cámbiese al directorio apropiado:
[root]# cd linux
Ahora si ejecute:
[root]# make menuconfig
Las diferentes opciones disponibles a partir del menú inicial se presentan en forma ampliada en la siguiente figura:
Un ejemplo de uno de los submenús expandido (Processor type and features) se aprecia enseguida:
En esta pantalla se puede apreciar por ejemplo que en forma predeterminada se ha desactivado la emulación matemática (Math emulation) y que si se desea habilitar ésta quedaría incluida necesariamente dentro del kernel y no como un módulo (como lo indican los parentesis rectangulares de esa opción), contrario a las opciones que están acompañadas por paréntesis angulares (<>), que pueden compilarse o no como módulos si se desea.
Continuando con el ejemplo, si se ingresa al sub-menú Processor Family, se aprecian las siguientes opciones:
+------------------------- Processor family -------------------------+ | Use the arrow keys to navigate this window or press the hotkey of | | the item you wish to select followed by the <SPACE BAR>. Press | | <?> for additional information about this option. | +--------------------------------------------------------------------+ | | ( ) 386 | | | | ( ) 486/Cx486 | | | | ( ) 586/K5/5x86/6x86 | | | | ( ) Pentium/K6/TSC | | | | (X) PPro/6x86MX | | +--------------------------------------------------------------------+ | <Select> < Help > | +--------------------------------------------------------------------+
En definitiva el procedimiento a seguir es entonces:
Con la ayuda de las teclas de movimiento del cursor y la tecla [Enter] recorra todas y cada una de las opciones de los submenús disponibles a partir del menú principal,
Con la ayuda de la barra espaciadora defina si habilita o no el soporte para una u otra característica, y si lo hace en forma integrada al kernel o en forma modular si desea y es posible.
Al oprimir la barra espaciadora una o varias veces según se necesite, es posible que visualice:
Un nuevo sub-menú.
Un asterisco (en ocasiones acompañado de sub-opciones), indicando que se va a compilar integrado al kernel.
La letra M (en ocasiones acompañada de sub-opciones), indicando que se va a compilar en forma modular.
La letra X, similar al asterisco, pero sólo para opciones de selección múltiple con única alternativa.
Un espacio en blanco, indicando que no se va a incluir dentro del kernel el soporte para un determinado item.
Cuando haya llevado a cabo por completo los puntos 1 y 2, desde el menú principal seleccione la opción exit y responda con Y (de Yes) para grabar la configuración resultante en el archivo .config, de lo contrario tendrá que volver a realizar todo el proceso otra vez.
La ayuda contextual de disponible con make menuconfig o con make xconfig es quizás lo suficientemente apropiada para facilitar el proceso de definición del archivo de configuración, no obstante aquí se presenta alguna ilustración adicional.
Esta opción viene desactivada en forma predeterminada, deshabilitando el uso de código experimental en el kernel.
Bajo esta sección es posible definir entre otros:
Tipo de procesador de su computador. Para optimizar el kernel para su procesador utilice la ayuda contextual para mayor ilustración.
Emulación del procesador matemático (útil con equipos 386 y similares que vienen sin él). Deshabilitada en forma predeterminada.
Soporte para sistemas con más de 1 procesador (SMP). Deshabilite este soporte si va a trabajar en un computador que solamente dispone de 1 procesador.
Importante | |
---|---|
Es posible que el kernel no arranque si usted selecciona un procesador incorrecto, por ejemplo si optimiza el kernel para un procesador Pentium y usted tiene un procesador 486. |
Para el ejemplo, el cambio principal realizado fue deshabilitar el soporte para SMP.
Si por alguna razón desea generar un kernel monolítico, sin módulos, desactive esta opción. Lo normal es por el contrario, no realizar ningún cambio, aceptando la opción predeterminada.
Esta sección incluye entre otros, soporte para:
Redes.
Bus PCI.
Puerto paralelo
Administración Avanzada de Energía (APM).
Para el ejemplo, el cambio principal realizado fue habilitar el soporte para el puerto paralelo y para APM, deshabilitados en forma predeterminada.
Habilite esta opción si desea que el kernel automáticamente configure algunos dispositivos periféricos.
Bajo esta sección se presenta soporte para:
Unidades de discos flexibles.
Soporte mejorado para dispositivos de almacenamiento estándar IDE y
Otros dispositivos de datos en modo bloques.
Si se dispone de un disco duro IDE, será necesario habilitar el soporte para el disco IDE apropiado.
Para el ejemplo, se aceptaron los valores predeterminados propuestos sin realizar ningún cambio.
Esta sección es de vital importancia para equipos que van a operar en red. Las opciones que en forma predeterminada vienen habilitadas son:
Packet socket
Unix domain socket
TCP/IP networking, e
IP: Allow large windows
Para el ejemplo, se habilitaron adicionalmente las opciones:
Network firewalls, para permitir que Linux actúe como un equipo "corta fuegos" con posibilidad de filtrar paquetes y protegerse de accesos no autorizados de Internet, e
IP firewalling, para poder acceder a equipos remotos (por ejemplo de Internet) utilizando enmascaramiento a través de un equipo "corta fuegos", de tal forma que los equipos de la red local no son visibles al mundo exterior, evitando la necesidad de direcciones IP válidas.
En la práctica, estas dos opciones permiten por ejemplo, poder utilizar en forma compartida para una red local una conexión a Internet a través de una sola línea telefónica, disponiendo de una seguridad básica.
Adicionalmente, entre otras están las opciones que permiten a Linux actuar como un enrutador o dar soporte a protocolos tales como IPX o Reverse ARP.
Esta opción, que permite dar soporte a correo de voz, fax y otros dispositivos multimedia que inteoperan con modems, viene deshabilitada en forma predeterminada.
En forma predeterminada esta opción viene habilitada, pero si usted no tiene o no desea usar un disco, unidad de cinta, unidad de CD-ROM o cualquier otra unidad tipo SCSI, desactívela.
Esta opción que hace referencia a la Intelligent Input/Output (I20) architecture, viene deshabilitada en forma predeterminada.
Entre las diferentes alternativas disponibles en esta sección se destacan:
Ethernet 10/100
PPP (point-to-point) support
Respecto a la primera opción, al seleccionarla aparece un listado de tarjetas de red disponibles, incluyendo entre otros, tarjetas 3COM, tarjetas EISA, VESA, PCI y controladores integrados en las tarjetas principales, y otras tarjetas ISA. Por otro lado, el soporte para protocolo PPP es necesario para permitir conexión a Internet por vía telefónica.
Para el ejemplo, se habilitó soporte integrado al kernel para la tarjeta de red disponible y también pero en forma modular para otras tarjetas de red de las cuales eventualmente se pueda disponer. En complemento, se habilitó el soporte para protocolo PPP, desactivado en forma predeterminada.
Esta sección permite soporte para transmisión de datos para radio aficionados. En forma predeterminada esta opción está deshabilitada.
Esta sección permite soporte para trabajar con protocolos IrDA™, relacionados con comunicaciones inalámbricas infrarojas, soportadas por la mayoría de computadores portátiles (laptops) y PDA's.
ISDN o RDSI como se conoce en Colombia, es un tipo especial de servicio telefónico completamente digital, disponible únicamente en las principales ciudades. Una línea RDSI permite una mejor conexión a Internet que a través de una línea telefónica convencional. Habilite esta opción si tiene interés y en su ciudad cuenta con proveedores de enlaces RDSI.
Habilite esta opción si usted tiene una unidad de CD-ROM que no sea ni IDE/ATAPI ni SCSI, es decir, si tiene una unidad de CD-ROM antigua que se conecta a la tarjeta de sonido.
Bajo esta sección se define el soporte para dispositivos de caracteres, entre otros:
Terminales
Puertos seriales
Ratones
Palancas de juegos (soporte deshabilitado por omisión)
Para el ejemplo, se aceptaron los valores predeterminados.
Habilite esta opción si su computador tiene puerto USB.
Esta sección determina el tipo de sistemas de archivos a utilizar. Entre las opciones habilitadas en forma predeterminada se destacan entre otros:
Para poder acceder a CDROM estándares.
Sistema de archivos virtual que proporciona información sobre el sistema operativo.
El sistema de archivos estándar de Linux
Para interactuar con otros equipos UNIX utilizando el protocolo NFS.
Adicionalmente a estos sistemas de archivos podría resultar interesante habilitar el soporte para:
Para poder colocar límites al uso del disco.
Para poder trabajar con sistemas de archivos de MS-DOS (MSDOS fs support) y de Windows 95 (VFAT fs support)
Para poder leer CDROM en ese formato
para poder montar sistemas de archivos de Windows for Workgroups (WfW), Windows 95/98, Windows NT y OS/2 Lan Manager. Si lo que se necesita es solamente acceder a un servidor Linux utilizando Samba no se necesita habilitar esta opción.
Finalmente, parece interesante también habilitar soporte para el Español como idioma nativo preferido al momento de montar sistemas de archivos, definiendo como predeterminado a NSL ISO 8859-1 (Latin 1).
Bajo esta sección se presentan dos opciones:
VGA text mode
Video mode seleccion support
La primera de ellas, habilitada en forma predeterminada, permite utilizar Linux en modo texto en una pantalla que cumpla con el estándar VGA genérico. La segunda opción, deshabilitada en forma predeterminada, permite aprovechar algunas altas resoluciones en modo texto que podría ofrecer el BIOS.
Habilite esta opción si su computador tiene una tarjeta de sonido. Consulte la ayuda disponible.
Esta opción, principalmente útil para hackers, permite tener cierto control sobre el sistema aún si el sistema se cae haciendo uso de la tecla de Peticiones del Sistema (SysRQ).
Como se mencionó, no se necesita ser root para compilar el kernel. En este ejemplo se muestran los comandos a nombre del root.
Para compilar el kernel ejecute primero:
[root]# make dep
O mejor, para poder observar de mejor forma la salida y eventuales errores, ejecute:
[root]# make dep 1> dep-salida.txt 2>dep-errores.txt
Ahora compile el kernel mediante:
[root]# make bzImage
o mejor, por ejemplo mediante:
[root]# make bzImage 1> bzImage-salida.txt 2>bzImage-errores.txt
Es necesario mencionar que make bzImage no es la única opción. Consulte la documentación disponible bajo el directorio linux/Documentation para obtener alguna información al respecto.
Al ejecutar bzImage se generan entre otros, el kernel linux/arch/i386/boot/bzImage y el archivo linux/System.map, para instalar posteriormente bajo el directorio /boot.
Si se habilitaron los módulos, ejecute:
[root]# make modules
o si prefiere:
[root]# make modules 1> modules-salida.txt 2>modules-errores.txt