PID_00174426 GNUFDL PID_00174426 El ncleo Linux ndice Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1. El ncleo del sistema GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2. Personalizacin o actualizacin del ncleo. . . . . . . . . . . . . . . . . . . 15 3. Proceso de conguracin y compilacin . . . . . . . . . . . . . . . . . . . . . . 18 3.1. Compilacin antigua de la rama 2.4.x del ncleo . . . . . . . . . . . . . 20 3.2. Migracin de 2.4 a la rama 2.6.x del ncleo. . . . . . . . . . . . . . . . . . . 25 3.3. Compilacin de la rama 2.6.x del ncleo . . . . . . . . . . . . . . . . . . . . . 27 3.4. Compilacin del ncleo en Debian (Debian Way) . . . . . . . . . . . . . 30 4. Aplicacin de parches al ncleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5. Mdulos del ncleo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.1. DKMS: mdulos recompilados dinmicamente . . . . . . . . . . . . . . . 41 6. Virtualizacin en el ncleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.1. KVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 7. Futuro del ncleo y alternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 8. Taller de conguracin del ncleo a las necesidades del usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 8.1. Conguracin del ncleo en Debian. . . . . . . . . . . . . . . . . . . . . . . . . . 58 8.2. Conguracin del ncleo en Fedora/Red Hat . . . . . . . . . . . . . . . . . 61 8.3. Conguracin de un ncleo genrico . . . . . . . . . . . . . . . . . . . . . . . . . 63 Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Actividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 GNUFDL PID_00174426 5 El ncleo Linux Introduccin El ncleo (en ingls kernel) del sistema GNU/Linux (al que habitualmente de- nominaremos Linux) [Vasb], es el corazn del sistema: se encarga de arrancar- lo y, una vez este es ya utilizable por las aplicaciones y los usuarios, se encarga de gestionar los recursos de la mquina, en forma de gestin de la memoria, del sistema de cheros, de las operaciones de entrada/salida y de los procesos y su intercomunicacin. Origen de Linux El ncleo Linux se remonta al ao 1991, cuando Linus Torvalds lo puso a disposicin de la comunidad. Es de los pocos sistemas operativos, que siendo ampliamente usados, se dispone de su cdigo fuente. Su origen se remonta al ao 1991, cuando en agosto, un estudiante nlands llamado Linus Torvalds anunci en una lista de noticias, que haba creado su propio ncleo de sistema operativo, funcionando conjuntamente con softwa- re GNU, y lo ofreca a la comunidad de desarrolladores para que lo probara y sugiriera mejoras para hacerlo ms utilizable. Este es el origen del ncleo del sistema operativo que ms tarde se llamara GNU/Linux. Una de las particularidades de Linux es que, siguiendo la losofa de software libre, se nos ofrece el cdigo fuente del ncleo del propio sistema operativo (del kernel), de manera que es una herramienta perfecta para la educacin, en temas de anlisis y diseo de sistemas operativos. La otra ventaja principal es que, disponiendo de los archivos fuente, podemos recompilarlos, para adaptarlos mejor a nuestro sistema, y como veremos en el mdulo Sintonizacin, optimizacin y alta disponibilidad, congurarlos para dar un mejor rendimiento al sistema. En este mdulo veremos cmo manejar este proceso de preparacin de un n- cleo para nuestro sistema: cmo, partiendo de los archivos fuente, podemos obtener una nueva versin del ncleo adaptada a nuestro sistema. Veremos c- mo se desarrolla la conguracin, la posterior compilacin y la realizacin de pruebas con el nuevo ncleo obtenido. Adems, veremos cmo el ncleo ha ido aadiendo toda una serie de carac- tersticas a lo largo de su evolucin, que lo han convertido en competitivo frente a otros sistemas. En especial, observaremos algunas caractersticas de la virtualizacin que nos ofrecen con soporte desde el ncleo. GNUFDL PID_00174426 6 El ncleo Linux Objetivos En los materiales didcticos de este mdulo encontraris los contenidos y las herramientas procedimentales para conseguir los objetivos siguientes: 1. Conocer el funcionamiento del ncleo (en ingls, kernel) y de los procesos de conguracin asociados. 2. Poder congurar el ncleo del sistema en las distribuciones ms habituales. 3. Entender el uso de los mdulos del ncleo y decidir su integracin (o no) dentro de la parte esttica del ncleo. 4. Conocer las tcnicas de virtualizacin y, en particular, de las incluidas en el ncleo. 5. Saber adaptar el ncleo a las necesidades particulares del usuario. GNUFDL PID_00174426 7 El ncleo Linux 1. El ncleo del sistema GNU/Linux . El ncleo o kernel es la parte bsica de cualquier sistema operativo [Tan87], y sobre l descansa el cdigo de los servicios fundamentales para controlar el sistema completo. Bsicamente, su estructura puede separarse en una serie de componentes, o mdulos de gestin orientados a: Gestin de procesos: qu tareas se van a ejecutar y en qu orden y con qu prioridad. Un aspecto importante es la planicacin de la CPU: c- mo se optimiza el tiempo de la CPU para ejecutar las tareas con el mayor rendimiento o interactividad posible con los usuarios? Intercomunicacin de procesos y sincronizacin: cmo se comunican tareas entre s, con qu diferentes mecanismos y cmo pueden sincroni- zarse grupos de tareas? Gestin de entrada/salida (E/S): control de perifricos y gestin de recur- sos asociados. Gestin de memoria: optimizacin del uso de la memoria, sistema de pa- ginacin y memoria virtual. Gestin de cheros: cmo el sistema controla y organiza los cheros pre- sentes en el sistema, y accede a los mismos. Figura 1. Funciones bsicas de un ncleo respecto a las aplicaciones y comandos ejecutados GNUFDL PID_00174426 8 El ncleo Linux En los sistemas privativos, el ncleo, o kernel, est perfectamente oculto bajo las capas del software del sistema operativo, y el usuario nal no tiene una perspectiva clara de qu es ese ncleo ni tiene tampoco ninguna posibilidad de cambiarlo u optimizarlo, si no es por el uso de esotricos editores de registros internos, o programas especializados de terceros (normalmente de alto coste). Adems, el ncleo suele ser nico, es el que proporciona el fabricante, el cual se reserva el derecho de introducir las modicaciones que quiera y cuando quiera, as como tratar los errores que aparezcan en plazos no estipulados, mediante actualizaciones que nos ofrece como parches de errores (o grupos de ellos denominados comnmente service packs). Uno de los principales problemas de esta aproximacin es precisamente la disponibilidad de estos parches: disponer de las actualizaciones de los erro- res a su debido tiempo y, si se trata de problemas de seguridad, todava con ms razn, ya que hasta que no estn corregidos no podemos garantizar la seguridad del sistema para problemas ya conocidos. Muchas organizaciones, grandes empresas, gobiernos, instituciones cientcas y militares no pueden depender de los caprichos de un fabricante para solucionar los problemas de sus aplicaciones crticas. En este caso, el ncleo Linux ofrece una solucin de cdigo abierto, con los consecuentes permisos de modicacin, correccin, posibilidad de generacin de nuevas versiones y actualizaciones de forma rpida, por parte de cualquiera que quiera y tenga los conocimientos adecuados para realizarlo. Esto permite a los usuarios crticos controlar mejor sus aplicaciones y el propio sistema, y poder montar sistemas con el propio sistema operativo a la carta, personali- zado al gusto de cada uno. Tambin permite disponer, a su vez, de un sistema operativo con cdigo abierto, desarrollado por una comunidad de programa- dores coordinados mediante Internet y accesible ya sea para educacin, por disponer del cdigo fuente y abundante documentacin, o para la produc- cin nal de los sistemas GNU/Linux adaptados a necesidades individuales o de un determinado colectivo. Al disponer del cdigo fuente, se pueden aplicar mejoras y soluciones de forma inmediata, a diferencia del software privativo, donde debemos esperar a las actualizaciones del fabricante. Podemos, adems, personalizar el ncleo tanto como necesitemos, requisito esencial, por ejemplo, en aplicaciones de alto rendimiento, crticas en el tiempo o en soluciones con sistemas empotrados (como dispositivos mviles). MINIX El ncleo tiene sus orgenes en el sistema MINIX, desarrollado por Andrew Tanenbaum, como un clon de UNIX para PC. A continuacin repasamos un poco la historia del ncleo [Kera, Kerb]. El n- cleo Linux lo comenz a desarrollar un estudiante nlands llamado Linus Torvalds, en 1991, con la intencin de realizar una versin parecida a MINIX [Tan87] (versin para PC de UNIX [Bac86]) para el procesador 386 de Intel. La primera versin publicada ocialmente fue la de Linux 1.0 en marzo de 1994, en la cual se inclua slo la ejecucin para la arquitectura i386 y soportaba GNUFDL PID_00174426 9 El ncleo Linux mquinas de un solo procesador. Linux 1.2 fue publicado en marzo de 1995 y fue la primera versin en dar cobertura a diferentes arquitecturas, como Alp- ha, Sparc y Mips. Linux 2.0, en junio de 1996, aadi ms arquitecturas y fue la primera versin en incorporar soporte multiprocesador (SMP) [Tum]. En Li- nux 2.2, de enero de 1999, se incrementaron las prestaciones de soporte SMP de manera signicativa, y se aadieron controladores para gran cantidad de hardware. En la 2.4, en enero del 2001, se mejor el soporte SMP, se incor- poraron nuevas arquitecturas y se integraron controladores para dispositivos USB, PC Card (PCMCIA de los porttiles), parte de PnP (plug and play), soporte de RAID y volmenes, etc. En la rama 2.6 del ncleo (diciembre de 2003), se mejor sensiblemente el soporte SMP, se introdujo una mejor respuesta del sistema de planicacin de CPU, el uso de hilos (threads) en el ncleo, me- jor soporte de arquitecturas de 64 bits, soporte de virtualizacin y una mejor adaptacin a dispositivos mviles. Respecto al proceso de desarrollo, desde su creacin por Linus Torvalds en 1991 (versin 0.01), el ncleo lo ha seguido manteniendo l mismo, pero a medida que su trabajo se lo permita y a medida que el ncleo maduraba (y creca), se ha visto obligado a mantener las diferentes versiones estables del ncleo gracias a diferentes colaboradores, mientras que Linus continua (en la medida de lo posible) desarrollando y recopilando aportaciones para la ltima versin de desarrollo del ncleo. Los colaboradores principales en estas versiones han sido [Lkm]: 2.0 David Weinehall. 2.2 Alan Cox (tambin desarrolla y publica parches para la mayora de versiones). 2.4 Marcelo Tosatti. 2.5 Linus Torvalds. 2.6 Greg Kroah-Hartman (versiones estables) / Linus Torvalds, AndrewMor- ton (releases de desarrollo). Complejidad del ncleo El ncleo hoy en da ha alcanzado unos grados de madurez y complejidad signicativos Para ver un poco la complejidad del ncleo de Linux, veamos una tabla con un poco de su historia resumida en las diferentes versiones y en el tamao respec- tivo del cdigo fuente. En la tabla solo se indican las versiones de produccin; el tamao esta especicado en miles de lneas del cdigo de los paquetes fuen- tes del ncleo: Versin Fecha de publicacin Lneas de cdigo (en miles) 0.01 09-1991 10 1.0 03-1994 176 1.2 03-1995 311 2.0 06-1996 649 2.2 01-1999 1800 2.4 01-2001 3378 2.6 12-2003 5930 GNUFDL PID_00174426 10 El ncleo Linux Como podemos comprobar, hemos pasado de unas diez mil lneas a seis mi- llones en las primeras versiones de la rama 2.6; las ltimas versiones de esta rama se mueven entre los diez a quince millones de lneas. En estos momentos el desarrollo contina en la rama 2.6.x del ncleo, la l- tima versin estable, que incluyen la mayora de distribuciones como versin principal (algunas todava incluyen algunas 2.4.x, pero 2.6.x suele ser la op- cin por defecto en la instalacin). Aunque ahora la rama principal sea la 2.6.x, cierto conocimiento de las an- teriores versiones es imprescindible, ya que con facilidad podemos encontrar mquinas con distribuciones antiguas que no se hayan actualizado, que es po- sible que debamos mantener o realizar un proceso de migracin a versiones ms actuales. En la rama del 2.6, durante su desarrollo se aceleraron de forma signicati- va los trabajos del ncleo, ya que tanto Linus Torvalds como Andrew Mor- ton (que mantienen varias de las ramas de Linux 2.6 en desarrollo) se incor- poraron (durante 2003) al Open Source Developement Laboratory (OSDL), un consorcio de empresas cuyo n es promocionar el uso de Open Source y GNU/Linux en la empresa (en el consorcio se encuentran, entre otras muchas empresas con intereses en GNU/Linux: HP, IBM, Sun, Intel, Fujitsu, Hitachi, Toshiba, Red Hat, Suse, Transmeta, etc.). En esos momentos se dio una situa- cin interesante, ya que el consorcio OSDL hizo de patrocinador de los traba- jos, tanto para el mantenedor de la versin estable del ncleo (Andrew) como para el de la de desarrollo (Linus), trabajando a tiempo completo en las versio- nes y en los temas relacionados. Linus se mantiene independiente, trabajando en el ncleo, mientras Andrew se fue a trabajar a Google, donde continuaba a tiempo completo sus desarrollos, realizando parches con diferentes y nue- vas aportaciones al ncleo, en la que se conoce como rama de desarrollo -mm. Despues de cierto tiempo, OSDL se reconvirti en la fundacin The Linux Foundation. Enlace de inters Linux Foundation: http://www.linuxfoundation. org Hay que tener en cuenta que con las versiones actuales del ncleo se ha al- canzado ya un alto grado de desarrollo y madurez, lo que har que cada vez se ample ms el tiempo entre la publicacin de las versiones estables, no as de las revisiones parciales o de desarrollo, aspecto en el que los mantenedores esperan una nueva versin cada 2 o 3 meses. Adems, otro factor a considerar es el tamao y el nmero de personas que estn trabajando en el desarrollo actual. En un principio haba unas pocas personas que tenan un conocimiento global del ncleo entero, mientras que hoy en da tenemos un importante nmero de personas que lo desarrollan (se cree que cerca de varios miles) con diferentes contribuciones, aunque el grupo duro se estima en unas pocas docenas de desarrolladores. GNUFDL PID_00174426 11 El ncleo Linux Tambin cabe tener en cuenta que la mayora de desarrolladores (de los miles) solo tienen unos conocimientos parciales del ncleo y, ni todos trabajan si- multneamente, ni su aportacin es igual de relevante (algunas aportaciones solo corrigen errores sencillos). En el otro extremo, son unas pocas personas (como los mantenedores) las que disponen de un conocimiento total del n- cleo. Esto supone que se puedan alargar los desarrollos y que se tengan que depurar las aportaciones, para comprobar que no entren en conicto entre ellas, o que se deba escoger entre posibles alternativas de prestaciones. Respecto a la numeracin de las versiones del ncleo de Linux [Ker, Ces06], cabe tener en cuenta los aspectos siguientes: 1) Hasta la rama del ncleo 2.6.x, las versiones del ncleo Linux se regan por una divisin en dos series: una era la denominada experimental (con nume- racin impar en la segunda cifra, como 1.3.xx, 2.1.x o 2.5.x) y la otra era la de produccin (serie par, como 1.2.xx, 2.0.xx, 2.2.x, 2.4.x y ms). La serie experi- mental eran versiones que se movan rpidamente y se utilizaban para probar nuevas prestaciones, algoritmos, controladores de dispositivo, etc. Por la pro- pia naturaleza de los ncleos experimentales, podan tener comportamientos impredecibles, como prdidas de datos, bloqueos aleatorios de la mquina, etc. Por lo tanto, no estaban destinadas a utilizarse en mquinas para la pro- duccin, a no ser que se quisiese probar una caracterstica determinada (con los consecuentes peligros). Los ncleos de produccin (serie par) o estables eran los ncleos con un con- junto de prestaciones bien denido, con un nmero bajo de errores conocidos y controladores de dispositivos probados. Se publicaban con menos frecuencia que los experimentales y existan variedad de versiones, unas de ms o menos calidad que otras. Las distribuciones GNU/Linux se suelen basar en una de- terminada versin del ncleo estable, no necesariamente el ltimo ncleo de produccin publicado. 2) En la numeracin actual del ncleo Linux (utilizada en la rama 2.6.x), se siguen conservando algunos aspectos bsicos: la versin viene indicada por unos nmeros X.Y.Z, donde normalmente X es la versin principal, que re- presenta los cambios importantes del ncleo; Y es la versin secundaria, y habitualmente implica mejoras en las prestaciones del ncleo: Y es par en los ncleos estables e impar en los desarrollos o pruebas; Z es la versin de cons- truccin, que indica el nmero de la revisin de X.Y, en cuanto a parches o correcciones hechas. Los distribuidores no suelen incluir la ltima versin del ncleo, sino la que ellos hayan probado con ms frecuencia y puedan vericar que es estable para el software y componentes que ellos incluyen. Partiendo de este esquema de numeracin clsico (que se sigui durante las ramas 2.4.x hasta los inicios de la 2.6), hubo algunas modicaciones para adaptarse al hecho de que el ncleo (rama 2.6.x) se vuelve ms estable (jando X.Y a 2.6) y cada vez las GNUFDL PID_00174426 12 El ncleo Linux revisiones son menores (por signicar un salto de versin de los primeros n- meros), pero el desarrollo continuo y frentico sigue. En los ltimos esquemas se llega a introducir cuartos nmeros, para especi- car Z cambios menores, o diferentes posibilidades de la revisin (con diferen- tes parches aadidos que corrigen fallos). La versin as denida con cuatro nmeros es la que se considera estable (stable). Tambin se usan otros esque- mas para las diversas versiones de prueba (normalmente no recomendables para entornos de produccin), como sujos -rc (release candidate), -mm que son ncleos experimentales con gran introduccin de parches que suponen nuevas prestaciones adicionales como pruebas de diferentes tcnicas novedo- sas, o los -git que son una especie de foto diaria del desarrollo del ncleo. Estos esquemas de numeracin estn en constante cambio para adaptarse a la forma de trabajar de la comunidad del ncleo y a sus necesidades para acelerar el desarrollo. Enlace de inters Repositorio de ncleos Linux: http://www.kernel.org 3) Para obtener el ltimo ncleo publicado (que normalmente se denomina vanilla o pristine), hay que acudir al archivo de ncleos Linux (disponible en http://www.kernel.org) o al mirror local (en Espaa http://www.es.kernel.org). Tambin podrn encontrarse aqu algunos parches al ncleo original, que co- rrigen errores detectados a posteriori de la publicacin del ncleo. Algunas de las caractersticas tcnicas [Ces06, Kan] del ncleo Linux que po- dramos destacar son: Ncleo de tipo monoltico: bsicamente es un gran programa creado co- mo una unidad, pero conceptualmente dividido en varios componentes lgicos. Tiene soporte para carga y descarga de porciones del ncleo bajo demanda; estas porciones se llaman mdulos y suelen ser caractersticas del ncleo o controladores de dispositivo. Hilos de ncleo: Para el funcionamiento interno se utilizan varios hilos (threads en ingls) de ejecucin internos al ncleo, que pueden estar aso- ciados a un programa de usuario o bien a una funcionalidad interna del ncleo. En Linux no se haca un uso intensivo de este concepto en origen, pero ha pasado a ser un concepto fundamental para el rendimiento, en especial debido a la aparicin de las CPU multicore. En las diferentes revi- siones de la rama 2.6.x se ofreci un mejor soporte, y gran parte del ncleo se ejecuta usando diversos hilos de ejecucin. Soporte de aplicaciones multihilo: soporte de aplicaciones de usuario de tipo multihilo (multithread), ya que muchos paradigmas de computacin de tipo cliente/servidor necesitan servidores capaces de atender mltiples peticiones simultneas dedicando un hilo de ejecucin a cada peticin o grupo de ellas. Linux tiene una biblioteca propia de hilos que puede usarse GNUFDL PID_00174426 13 El ncleo Linux para las aplicaciones multihilo, con las mejoras que se introdujeron en el ncleo, que tambin han permitido un mejor uso para implementar bibliotecas de hilos para el desarrollo de aplicaciones. El ncleo es de tipo no apropiativo (nonpreemptive): esto implica que den- tro del ncleo no pueden pararse llamadas a sistema (en modo supervisor) mientras se est resolviendo la tarea de sistema, y cuando sta acaba, se prosigue la ejecucin de la tarea anterior. Por lo tanto, el ncleo dentro de una llamada no puede ser interrumpido para atender a otra tarea. Normal- mente, los ncleos apropiativos estn asociados a sistemas que trabajan en tiempo real, donde debe permitirse lo anterior para tratar eventos crticos. Hay algunas versiones especiales del ncleo de Linux para tiempo real (ra- mas -rt, de realtime), que permiten esto por medio de la introduccin de unos puntos jos donde las tareas del ncleo pueden interrumpirse entre si. Tambin se ha mejorado especialmente este concepto en la rama 2.6.x del ncleo, que en algunos casos permite interrumpir algunas tareas del ncleo, reasumibles, para tratar otras, prosiguiendo posteriormente su eje- cucin. Este concepto de ncleo apropiativo tambin puede ser til para mejorar tareas interactivas, ya que si se producen llamadas costosas al sis- tema, pueden provocar retardos en las aplicaciones interactivas. Soporte para multiprocesador, tanto lo que se denomina multiprocesamien- to simtrico (SMP) como multicore. Este concepto suele englobar mquinas que van desde el caso simple de 2 hasta 64 CPU colocadas en diferentes z- calos fsicos de la mquina. Este tema se ha puesto de especial actualidad con las arquitecturas de tipo multicore, que permiten de 2 a 8 o ms ncleos de CPU en un mismo zcalo fsico, en mquinas accesibles a los usuarios domsticos. Linux puede usar mltiples procesadores, donde cada proce- sador puede manejar una o ms tareas. Pero originalmente haba algunas partes del ncleo que disminuan el rendimiento, ya que estn pensadas para una nica CPU y obligan a parar el sistema entero en determinados bloqueos. SMP es una de las tcnicas ms estudiadas en la comunidad del ncleo de Linux, y se han obtenido mejoras importantes en la rama 2.6. Del rendimiento SMP depende en gran medida la adopcin de Linux en los sistemas empresariales, en la faceta de sistema operativo para servidores. Sistemas de cheros: el ncleo tiene una buena arquitectura de los sistemas de cheros, ya que el trabajo interno se basa en una abstraccin de un sis- tema virtual (VFS, virtual le system), que puede ser adaptada fcilmente a cualquier sistema real. Como resultado, Linux es quizs el sistema operati- vo que ms sistemas de cheros soporta, desde su propio ext2 inicial, hasta msdos, vfat, ntfs, sistemas con journal como ext3, ext4, ReiserFS, JFS(IBM), XFS(Silicon), NTFS, iso9660 (CD), udf, etc. y se van aadiendo ms en las diferentes revisiones del ncleo. Otras caractersticas menos tcnicas (un poco de marketing) que podramos destacar: GNUFDL PID_00174426 14 El ncleo Linux 1) Linux es gratuito: junto con el software GNU, y el incluido en cualquier distribucin, podemos tener un sistema tipo UNIX completo prcticamen- te por el coste del hardware; y por la parte de los costes de la distribucin GNU/Linux, podemos obtenerla prcticamente gratis. Pero no est de ms pa- gar por una distribucin completa, con los manuales y apoyo tcnico, a un coste menor comparado con lo que se paga por algunos sistemas privativos, o contribuir con la compra al desarrollo de las distribuciones que ms nos gusten o nos sean prcticas. 2) Linux es personalizable: la licencia GPL nos permite leer y modicar el c- digo fuente del ncleo (siempre que tengamos los conocimientos adecuados). 3) Linux se ejecuta en hardware antiguo bastante limitado; es posible, por ejemplo, crear un servidor de red con un 386 con 4 MB de RAM (hay distribu- ciones especializadas en bajos recursos). 4) Linux es un sistema de altas prestaciones: el objetivo principal en Linux es la eciencia y se intenta aprovechar al mximo el hardware disponible. 5) Alta calidad: los sistemas GNU/Linux son muy estables, con una baja pro- porcin de fallos, y reducen el tiempo dedicado a mantener los sistemas. 6) El ncleo es bastante reducido y compacto: es posible colocarlo, junto con algunos programas fundamentales en un solo disco de 1,44 MB (existen varias distribuciones de un solo disquete con programas bsicos). 7) Linux es compatible con una gran parte de los sistemas operativos, puede leer cheros de prcticamente cualquier sistema de cheros y puede comuni- carse por red para ofrecer y recibir servicios de cualquiera de estos sistemas. Adems, tambin con ciertas bibliotecas puede ejecutar programas de otros sistemas (como MS-DOS, Windows, BSD, Xenix, etc.) en la arquitectura x86 o bien virtualizar mquinas completas. 8) Linux dispone de un amplsimo soporte: no hay ningn otro sistema que tenga la rapidez y cantidad de parches y actualizaciones que Linux, ni en los sistemas privativos. Para un problema determinado, hay innidad de listas de correo y foros que en pocas horas pueden permitir solucionar cualquier problema. El nico problema est en los controladores de hardware recien- te, que muchos fabricantes todava se resisten a proporcionar, si no es para sistemas privativos. Pero esto est cambiando poco a poco, y varios de los fa- bricantes ms importantes de sectores como tarjetas de vdeo (NVIDIA, ATI) e impresoras (Epson, HP) comienzan ya a proporcionar los controladores para sus dispositivos, bien sean de cdigo abierto, o binarios usables por el ncleo. GNUFDL PID_00174426 15 El ncleo Linux 2. Personalizacin o actualizacin del ncleo . Como usuarios o administradores de sistemas GNU/Linux, debemos tener en cuenta las posibilidades que nos ofrece el ncleo para adaptarlo a nuestras necesidades y equipos. Normalmente, construimos nuestros sistemas GNU/Linux a partir de la ins- talacin en nuestros equipos de alguna de las distribuciones de GNU/Linux, ya sean comerciales como Red Hat, Mandriva o Suse, o comunitarias como Debian y Fedora. Estas distribuciones aportan, en el momento de la instalacin, una serie de ncleos Linux binarios ya precongurados y compilados, y normalmente te- nemos que elegir qu ncleo del conjunto de los disponibles se adapta mejor a nuestro hardware. Hay ncleos genricos para una arquitectura, para un modelo de procesador o bien orientados disponer de una serie de recursos de memoria, otros que ofrecen una mezcla de controladores de dispositivos [Ar05], posibilidades de virtualizacin, etc. Otra opcin de instalacin suele ser la versin del ncleo. Normalmente las distribuciones usan una versin para instalacin que consideran lo sucien- temente estable y probada como para que no cause problemas a los usuarios. Por ejemplo, a da de hoy muchas distribuciones vienen con una versin de la rama 2.6.x del ncleo por defecto, que se consideraba la versin ms estable del momento en que sali la distribucin. En algunos casos en el momento de la instalacin puede ofrecerse la posibilidad de usar como alternativa ver- siones ms modernas, con mejor soporte para dispositivos ms modernos (de ltima generacin), pero quizs no tan probadas. Personalizacin del ncleo La posibilidad de actualizar y personalizar el ncleo a medida ofrece una buena adaptacin a cualquier sistema, lo que permite as una optimizacin y sintonizacin del ncleo al sistema destino. Los distribuidores suelen, adems, modicar el ncleo para mejorar el com- portamiento de su distribucin o corregir errores que han detectado en el n- cleo en el momento de las pruebas. Otra tcnica bastante comn en las distri- buciones comerciales es deshabilitar prestaciones problemticas, que pueden causar fallos o que necesitan una conguracin especica de la mquina, o bien una determinada prestacin no se considera lo sucientemente estable para incluirla activada. Esto nos lleva a considerar que, por muy bien que un distribuidor haga el trabajo de adaptar el ncleo a su distribucin, siempre nos podemos encon- trar con una serie de problemas u objetivos que no podemos realizar con la situacin actual: GNUFDL PID_00174426 16 El ncleo Linux El ncleo no est actualizado a la ltima versin estable disponible; no se dispone de soporte para algunos dispositivos modernos. El ncleo estndar no dispone de soporte para los dispositivos que tene- mos, porque no han sido habilitados. Los controladores que nos ofrece un fabricante necesitan una nueva ver- sin del ncleo o modicaciones. A la inversa, el ncleo es demasiado moderno, tenemos hardware antiguo que ya no tiene soporte en los ltimos ncleos. El ncleo, tal como est, no obtiene las mximas prestaciones de nuestros dispositivos. Algunas aplicaciones que queremos usar requieren soporte de un ncleo nuevo o de algunas de sus prestaciones. Queremos estar a la ltima, nos arriesgamos, instalando ltimas versiones del ncleo Linux. Nos gusta investigar o probar los nuevos avances del ncleo o bien quere- mos tocar o modicar el ncleo. Queremos programar un controlador para un dispositivo no soportado. Etc. Por estos y otros motivos podemos no estar contentos con el ncleo que tene- mos. Se nos plantean entonces dos posibilidades: actualizar el ncleo binario de la distribucin o bien personalizarlo a partir de los paquetes fuente. Vamos a ver algunas cuestiones relacionadas con las diferentes opciones y qu suponen: 1) Actualizacin del ncleo de la distribucin. El distribuidor normalmen- te publica tambin las actualizaciones que van surgiendo del ncleo. Cuando la comunidad Linux crea una nueva versin del ncleo, cada distribuidor la une a su distribucin y hace las pruebas pertinentes. Despus del periodo de prueba, se identican posibles errores, los corrige y produce la actualizacin del ncleo pertinente respecto a la que ofreca en los CD de la distribucin. Los usuarios pueden descargar la nueva revisin de la distribucin del sitio web, o bien actualizarla mediante algn sistema automtico de paquetes va repositorio de paquetes. Normalmente, se verica qu versin tiene el sistema, se descarga el ncleo nuevo y se hacen los cambios necesarios para que la si- guiente vez el sistema funcione con el nuevo ncleo, y se mantiene la versin antigua por si hay problemas. GNUFDL PID_00174426 17 El ncleo Linux . Este tipo de actualizacin nos simplica mucho el proceso, pero no tie- ne porqu solucionar nuestros problemas, ya que puede ser que nuestro hardware no est todava soportado o la caracterstica a probar del n- cleo no est todava en la versin que tenemos de la distribucin; cabe recordar que no tiene porqu usar la ltima versin disponible (por ejemplo en kernel.org), sino aquella que el distribuidor considere esta- ble para su distribucin. Si nuestro hardware tampoco viene habilitado por defecto en la nueva ver- sin, estamos en la misma situacin. O sencillamente, si queremos la ltima versin, este proceso no nos sirve. La personalizacin del ncleo es un proceso que se describe con detalle en los apartados siguientes. 2) Personalizacin del ncleo. En este caso, iremos a los paquetes fuente del ncleo y adaptaremos a mano el hardware o las caractersticas deseadas. Pasaremos por un proceso de conguracin y compilacin de los paquetes fuente del ncleo para, nalmente, crear un ncleo binario que instalaremos en el sistema, y tenerlo, as, disponible en el siguiente arranque del sistema. Tambin aqu podemos encontrarnos con dos opciones ms: o bien por de- fecto obtenemos la versin ocial del ncleo (kernel.org) o bien podemos acudir a los paquetes fuente proporcionados por la propia distribucin. Hay que tener en cuenta que distribuciones como Debian y Fedora hacen un tra- bajo importante de adecuacin del ncleo y de correccin de errores del que afectan a su distribucin, con lo cual podemos, en algunos casos, disponer de correcciones adicionales al cdigo original del ncleo. Otra vez ms los pa- quetes fuente ofrecidos por la distribucin no tienen porqu corresponder a la ltima versin estable publicada. . Este sistema nos permite la mxima abilidad y control, pero a un cos- te de administracin alto, ya que debemos disponer de conocimientos amplios de los dispositivos y de las caractersticas que estamos escogien- do (qu signican y qu implicaciones pueden tener), as como de las consecuencias que puedan tener las decisiones que tomemos. GNUFDL PID_00174426 18 El ncleo Linux 3. Proceso de conguracin y compilacin . Obtencin de un ncleo personalizado El proceso de obtencin de un nuevo ncleo personalizado pasa por obtener los paquetes fuente, adaptar la conguracin, compilar e instalar el ncleo obtenido en el sistema. La personalizacin del ncleo [Vasb] es un proceso costoso, necesita amplios conocimientos del proceso a realizar y, adems, es una de las tareas crticas, de la cual depende la estabilidad del sistema, por la propia naturaleza del ncleo, puesto que es su elemento central. Cualquier error de procedimiento puede comportar la inestabilidad o la prdi- da del sistema. Por lo tanto, no est de ms realizar cualquier tarea de copia de seguridad de los datos de usuarios, datos de conguraciones que hayamos per- sonalizado o, si disponemos de dispositivos adecuados, una copia de seguridad completa del sistema. Tambin es recomendable disponer de algn disquete de arranque (o distribucin LiveCD con herramientas de rescate) que nos sirva de ayuda por si surgen problemas, o bien un disquete/CD/archivo de rescate (rescue disk) que la mayora de distribuciones permiten crear desde los CD de la distribucin (o directamente proporcionan alguno como CD de rescate pa- ra la distribucin). Actualmente muchos de los LiveCD de las distribuciones ya proporcionan herramientas de rescate sucientes para estas tareas, aunque tambin existen algunas distribuciones especializadas para ello. Sin nimo de exagerar, casi nunca aparecen problemas si se siguen los pasos adecuadamente, se tiene conciencia de los pasos realizados y se toman algu- nas precauciones. Evidentemente, ante sistemas en produccin, siempre es importante tomar las medidas de precaucin y hacer las copias de seguridad necesarias. Vamos a ver el proceso necesario para instalar y congurar un ncleo Linux. En los subapartados siguientes, examinamos: 1) El caso de las versiones antiguas 2.4.x. 2) Algunas consideraciones sobre la migracin a las 2.6.x partiendo de 2.4.x 3) Detalles especcos de las versiones 2.6.x. 4) Un caso particular para la distribucin Debian, que dispone de un sistema propio (Debian way) de compilacin ms exible. Enlace de inters Para Fedora recomendamos consultar el siguiente enlace: http://fedoraproject.org/wiki /Building_a_custom_kernel. Respecto las versiones 2.4.x, mantenemos en este mdulo la explicacin por razones histricas, ya que las distribuciones actuales prcticamente ya no las ofrecen, pero debemos considerar que en ms de una ocasin nos veremos obligados a migrar un determinado sistema a nuevas versiones, o bien a man- GNUFDL PID_00174426 19 El ncleo Linux tenerlo en las antiguas, debido a incompatibilidades o existencia de hardware antiguo no soportado. Los conceptos generales del proceso de compilacin y conguracin se ex- plicarn en el primer subapartado (2.4.x), ya que la mayora de ellos son ge- nricos, y observaremos posteriormente las diferencias respecto de las nuevas versiones. Aun as, cada subapartado puede examinarse de manera autosu- ciente. Tambin hay que aadir que, con las ltimas distribuciones, cada vez es ms casual la necesidad de reconstruir o recompilar el propio ncleo, debido, entre otras consideraciones, a que: Antiguamente la mayora de los controladores estaban integrados en el n- cleo y haba que recompilarlo por completo si queramos incluir o excluir un controlador determinado. Hoy en da, como veremos en el apartado 5, pueden recompilarse los controladores o mdulos concretos, no el ncleo en si mismo. Para sintonizar el ncleo, antiguamente haba que recompilarlo. En mu- chos casos (no todos) puede realizarse la sintonizacin de algunos elemen- tos del ncleo mediante el acceso al sistema de cheros /proc o /sys. En algunos casos de distribuciones comerciales (versiones empresariales pa- ra las que se paga soporte), los ncleos y el sistema completo estn soporta- dos por el equipo de la distribucin, y a veces pueden perderse las licencias de soporte o las garantas por realizar cambios de este estilo. Por otro lado, las distribuciones tienen una velocidad bastante rpida en cuanto a integrar parches y nuevos ncleos a medida que se generan. Por contra, una personalizacin del ncleo, mediante recompilacin, nos pue- de permitir: Escoger qu partes incluir o excluir del ncleo, dando un soporte concreto a una plataforma o un hardware muy concreto. Esto es imprescindible si estamos, por ejemplo, en situaciones de hardware empotrado (embedded). Sintonizar, de esta ltima manera, el consumo de memoria u otros recursos para adaptarse mejor a recursos limitados (CPU, memoria, disco, etc.). Versiones concretas de las distribuciones implican usar ciertas versiones especcas del ncleo. En muchos casos no podemos obtener nuevas ac- tualizaciones del ncleo si no actualizamos la distribucin concreta com- pletamente. GNUFDL PID_00174426 20 El ncleo Linux Probar versiones de ncleo todava no disponibles en las distribuciones. Aunque hay cierta rapidez de integracin de los nuevos ncleos, se puede tardar semanas o meses en disponer de los nuevos ncleos va distribucin. Por otra parte, algunas distribuciones son muy conservadoras en cuanto a la versin de ncleo utilizada, y hay que esperar varias versiones completas de la distribucin (un periodo largo de tiempo) para llegar a una versin concreta de ncleo. Probar versiones beta, o parches de ncleo, con el objetivo de integrarlo rpidamente en algn sistema con problemas concretos, o bien sencilla- mente por cuestiones de evaluacin de las nuevas posibilidades o de un mejor rendimiento. Participar directamente en el desarrollo del ncleo, estudiando posibles mejoras del cdigo actual, proponiendo y probando propuestas concretas. Es tpico de algunos componentes, as como estudiar diferentes estrategias de planicacin de CPU, de gestin de memoria, mejorar parmetros del ncleo o colocar alguna prestacin nueva a algn sistema de cheros. En los siguientes subapartados veremos las diferentes posibilidades en cuanto a la conguracin y recompilacin de las diferentes ramas de desarrollo del ncleo Linux. 3.1. Compilacin antigua de la rama 2.4.x del ncleo Las instrucciones son especcas para la arquitectura x86 de Intel, mediante usuario root (aunque la mayor parte del proceso puede hacerse como usuario normal y, de hecho, es aconsejable por seguridad): 1) Obtener el ncleo. Por ejemplo, podemos acudir a http://www.kernel.org (o a su servidor ftp) y descargar la versin vanilla que queramos probar. Hay mirrors para diferentes pases; podemos, por ejemplo, acudir a la siguiente web: http://www.es.kernel.org. Por otro lado, en la mayora de las distribucio- nes de GNU/Linux, como Fedora/Red Hat o Debian, tambin se ofrece como paquete el cdigo fuente del ncleo (normalmente con algunas modicacio- nes incluidas); si se trata de la versin del ncleo que necesitamos, quizs sea preferible usar estas (mediante los paquetes kernel-source, linux-source, o similares). Si queremos los ltimos ncleo, quizs no estn disponibles en la distribucin y tendremos que acudir a kernel.org. 2) Desempaquetar el ncleo. Los paquetes fuente del ncleo solan colocarse y desempaquetarse sobre el directorio /usr/src, aunque se recomienda utili- zar algn directorio aparte para no mezclarlos con cheros fuente que pueda traer la distribucin. Por ejemplo, si los paquetes fuente venan en un chero comprimido de tipo bzip2: bzip2 -dc linux-2.4.0.tar.bz2 | tar xvf - GNUFDL PID_00174426 21 El ncleo Linux Si los paquetes fuente venan en un chero gz, reemplazamos bzip2 por gzip. Al descomprimir los paquetes fuente se habr generado un directorio llamado linux-version-kernel, donde entraremos para establecer la conguracin del ncleo. Herramientas de conguracin y compilacin Antes de comenzar los pasos previos a la compilacin, debemos asegurarnos de disponer de las herramientas correctas, en especial del compilador gcc, make y otras utilidades gnu complementarias en el proceso. Un ejemplo son las modutils, que disponen las diferentes utilidades para el uso y gestin de los mdulos de ncleo dinmicos. Asimismo, para las diferentes opciones de conguracin hay que tener en cuenta una serie de prerrequisitos en forma de bibliotecas asociadas a la interfaz de conguracin usada (por ejemplo las ncurses para la interfaz menucong). Se recomienda, en general, consultar la documentacin del ncleo (ya sea va paquete o en el directorio raz de las fuentes del ncleo) para conocer qu prerrequisitos, as como versiones de estos, son necesarios para el proceso. Se recomienda examinar los cheros README en el directorio raz, y el Documentation/Changes, o el ndice de documentacin del ncleo en Documentation/00-INDEX. Si hemos realizado anteriores compilaciones en el mismo directorio, deberemos garanti- zar que el directorio utilizado est limpio de compilaciones anteriores; podemos limpiar- lo con make mrproper (realizado desde el directorio raz de las fuentes). 3) Conguracin del ncleo. Para el proceso de conguracin del ncleo [Vasb], tenemos varios mtodos alternativos, que nos presentan interfaces di- ferentes para ajustar los mltiples parmetros del ncleo (que suelen almace- narse en un chero de conguracin, normalmente .config en el directorio raz de las fuentes). Las diferentes alternativas son: make config: desde la lnea de comandos se nos pregunta por cada op- cin y se nos pide conrmacin (y/n), si deseamos o no la opcin, o se nos piden los valores necesarios. Es la conguracin larga, en la que se nos pi- den muchas respuestas, podemos tener que responder a casi un centenar de preguntas (o ms dependiendo de la versin). make oldconfig: sirve por si queremos reutilizar una conguracin ya usada (normalmente almacenada en un chero .cong, en el directorio raz de las fuentes); hay que tener en cuenta que solo es vlida si estamos compilando la misma versin del ncleo, ya que diferentes versiones del ncleo pueden variar en sus opciones. make menu config: conguracin basada en mens textuales, bastante cmoda; podemos habilitar o inhabilitar lo que queramos y es ms rpida que el make config. make xconfig: la ms cmoda, basada en dilogos grcos en X Window (gura 2). Es necesario tener instaladas las bibliotecas de tcl/tk, ya que esta conguracin est programada en este lenguaje. La conguracin se basa en cuadros de dilogo, botones y casillas de activacin. Es bastante rpida y dispone de ayuda con comentarios de muchas de las opciones. Pero hay un defecto: puede ser que algunas de las opciones no aparezcan (depende de que el programa de conguracin est actualizado, y a veces no lo es- GNUFDL PID_00174426 22 El ncleo Linux t). En este ltimo caso, el make config (o el menuconfig) es el nico que garantiza disponer de todas las opciones elegibles; en los otros tipos de conguracin depende de que se hayan podido adaptar a tiempo los programas a las nuevas opciones cuando se libera el ncleo. Aunque en general se intentan mantener de forma equivalente. Figura 2. Conguracin del ncleo 2.4.x desde la interfaz grca en X Window Una vez se haya hecho el proceso de conguracin, hay que guardar el chero .config, ya que la conguracin consume un tiempo importante. Adems, puede ser de utilidad disponer de la conguracin realizada (.config) si est planeado hacerla en varias mquinas parecidas o idnticas. Los mdulos es tratan en el apartado 5. Otro tema importante en las opciones de conguracin es que en muchos casos se nos va a preguntar si una determinada caracterstica la queremos in- tegrada en el ncleo o como mdulo. sta es una decisin ms o menos im- portante, ya que el rendimiento del ncleo (y, por lo tanto, del sistema entero) en algunos casos puede depender de nuestra eleccin. El ncleo de Linux ha comenzado a ser de gran tamao, tanto por compleji- dad como por los controladores de dispositivo [Ar05] que incluye. Si lo inte- grsemos todo, se podra crear un chero del ncleo bastante grande y ocupar mucha memoria, lo que ralentizara algunos aspectos de funcionamiento. Los mdulos del ncleo [Hen] son un mtodo que permite separar parte del ncleo en pequeos trozos, que se cargarn dinmicamente bajo demanda cuando, por carga explcita o por uso de la caracterstica, sean necesarios. La eleccin ms normal es integrar dentro del ncleo lo que se considere b- sico para el funcionamiento o crtico en rendimiento, y dejar como mdulos aquellas partes o controladores de los que se vaya a hacer un uso espordico o que se necesite conservar por si se producen futuras ampliaciones del equipo. Un caso claro son los controladores de dispositivo: si estamos actualizando la mquina, puede ser que a la hora de crear el ncleo no conozcamos con seguridad qu hardware va a tener: por ejemplo, qu tarjeta de red, pero GNUFDL PID_00174426 23 El ncleo Linux s que sabemos que estar conectada a red; en este caso el soporte de red estar integrado en el ncleo, pero por lo que respecta a los controlado- res de las tarjetas, podremos seleccionar unos cuantos (o todos) y ponerlos como mdulos. As, cuando tengamos la tarjeta podremos cargar el mdu- lo necesario, o si despus tenemos que cambiar una tarjeta por otra, solo tendremos que cambiar el mdulo que se va a cargar. Si hubiese solo un controlador integrado en el ncleo y cambiamos la tarjeta, esto obligara a recongurar y recompilar el ncleo con el controlador de la tarjeta nueva. Otro caso que suele aparecer (aunque no es muy comn) es cuando necesi- tamos dos dispositivos que son incompatibles entre si, o est funcionando uno o el otro (esto podra pasar, por ejemplo, con impresoras con cable paralelo y hardware que se conecta al puerto paralelo). Por lo tanto, en este caso tenemos que colocar como mdulos los controladores y cargar o descargar el que sea necesario. Otro ejemplo podran formarlo los sistemas de cheros (lesystems). Nor- malmente esperaremos que nuestro sistema tenga acceso a algunos de ellos, por ejemplo ext2, ext3 o ext4 (propios de Linux), vfat (de los Windows 95/98/ME) y los daremos de alta en la conguracin del ncleo. Si en otro momento tuviramos que leer otro tipo no esperado, por ejemplo datos guardados en un disco o particin de sistema NTFS de Windows NT/XP, no podramos: el ncleo no sabra o no tendra soporte para hacerlo. Si te- nemos previsto que en algn momento (pero no habitualmente) se tenga que acceder a estos sistemas, podemos dejar los dems sistemas de cheros como mdulos. 4) Compilacin del ncleo. Mediante make comenzaremos la compilacin, primero hay que generar las posibles dependencias entre el cdigo y luego el tipo de imagen de ncleo que se quiere (en este caso una imagen comprimida, que suele ser la normal): make dep make bzImage Cuando este proceso acabe, tendremos la parte integrada del ncleo y nos faltarn las partes que hayamos puesto como mdulos: make modules Hasta este momento hemos hecho la conguracin y compilacin del ncleo. Esta parte poda hacerse desde un usuario normal o bien el root, pero ahora necesitaremos forzosamente usuario root, porque pasaremos a la parte de la instalacin. 5) Instalacin. Comenzamos instalando los mdulos: make modules_install GNUFDL PID_00174426 24 El ncleo Linux y la instalacin del nuevo ncleo (desde /usr/src/linux-version, siendo xx la versin usada): cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.xx cp System.map /boot/System.map-2.4.xx El archivo bzImage es el ncleo recin compilado, que se coloca en el direc- torio /boot. Normalmente el ncleo antiguo se encontrar en el mismo di- rectorio boot con el nombre vmlinuz o bien vmlinuz-versin-anterior y vmlinuz como un enlace simblico al ncleo antiguo. Una vez tengamos nuestro ncleo, es mejor conservar el antiguo, por si se producen fallos o un mal funcionamiento del nuevo y as poder recuperar el viejo. El chero System.map es un chero que contiene los smbolos disponibles en el ncleo y es necesario para el proceso de arranque del ncleo, tambin se coloca en el mismo directorio. 6) Conguracin del arranque. El siguiente paso es decirle al sistema con que ncleo tiene que arrancar. Este paso depende del sistema de arranque de Linux, y del bootloader usado: Desde arranque con LiLo [Skoa], ya sea en el Master Boot Record (MBR) o desde particin propia, hay que aadir al chero de conguracin (en /etc/lilo.conf), por ejemplo, las lneas: image = /boot/vmlinuz-2.4.0 label = 2.4.0 donde image es el ncleo que se va arrancar y label ser el nombre con el que aparecer la opcin en el arranque. Podemos aadir estas lneas o modicar las que hubiera del ncleo antiguo. Se recomienda aadirlas y dejar el ncleo antiguo, para poder recuperar el ncleo antiguo si apare- cen problemas. En el chero /etc/lilo.conf puede haber una o ms conguraciones de arranque tanto de Linux como de otros sistemas (como Windows); cada arranque se identica por su lnea image y el label que aparece en el men de arranque. Hay una lnea default=label donde se indica el label por defecto que se arrancar. Tambin podemos aadir- le a las lneas anteriores un root=/dev/... para indicar la particin de disco donde est el sistema de archivos principal (el /). Recordar que los discos tienen dispositivos como /dev/hda (primer disco IDE) /dev/hdb (segundo IDE), y la particin se indicara como root=/dev/hda2 si el / de nuestro Linux estuviese en la segunda particin del primer disco ide. Adems, con append= podemos aadir parmetros al arranque del ncleo. Despus de cambiar la conguracin del LiLo hay que escribirla fsicamen- te en el disco (se modica el sector de arranque) para que est disponible en el siguiente arranque: /sbin/lilo -v A continuacin reiniciamos y arrancamos con el nuevo ncleo. GNUFDL PID_00174426 25 El ncleo Linux Si tuvisemos problemas, podemos recuperar el antiguo ncleo, escogien- do la opcin del viejo ncleo, y luego retocar el lilo.conf para volver a la antigua conguracin o estudiar el problema y recongurar y recompilar el ncleo de nuevo. Lectura recomendada Sobre Grub podis consultar Grub bootloader y Grub Manual accesibles desde la web del proyecto GNU: http://www.gnu.org Arranque con Grub: La gestin en este caso es bastante simple, cabe aa- dir una nueva conguracin formada por el ncleo nuevo y aadirla co- mo una opcin ms al chero de conguracin del Grub, y rearrancar pro- cediendo de forma parecida a la del LiLo, pero recordando que en Grub basta con editar el chero y rearrancar. Tambin es mejor dejar la antigua conguracin para poder recuperarse de posibles errores o problemas con el ncleo recin compilado. 3.2. Migracin de 2.4 a la rama 2.6.x del ncleo En el caso de tener que actualizar versiones de distribuciones antiguas, o bien realizar el cambio de generacin del ncleo mediante los paquetes fuente, ha- br que tener en cuenta una serie de consideraciones, debido a las novedades introducidas en la rama 2.6.x del ncleo. Presentamos a continuacin algunos puntos concretos que cabe observar: Algunos de los mdulos del ncleo han cambiado de nombre, y algunos han podido desaparecer; hay que comprobar la situacin de los mdu- los dinmicos que se cargan (por ejemplo, examinar /etc/modules y/o /etc/modules.conf), y editarlos para reejar los cambios. Se han aadido nuevas opciones para la conguracin inicial del ncleo: como make gconfig, una interfaz basada en gtk (Gnome). Habr que ob- servar, como prerrequisito en este caso, las bibliotecas de Gnome. La op- cin de make xconfig se ha implementado ahora con las bibliotecas de qt (KDE). Se incrementan las versiones mnimas necesarias de varias utilidades nece- sarias para el proceso de compilacin (consultar Documentation/Changes en los paquetes fuente del ncleo). En especial la versin del compilador gcc mnima. Ha cambiado el paquete por defecto para las utilidades de m- dulos, que pasa a ser module-init-tools (en lugar de modutils usado en las 2.4.x). Este paquete es un prerrequisito para la compilacin de n- cleos 2.6.x, ya que el cargador de mdulos dinmicos est basado en esta nueva versin. El sistema devfs queda obsoleto en favor de udev, el sistema que controla el arranque (conexin) en caliente (hotplug) de dispositivos (y su recono- cimiento inicial, de hecho simulando un arranque en caliente al iniciar el GNUFDL PID_00174426 26 El ncleo Linux sistema) y crea dinmicamente las entradas en el directorio /dev, solo para los dispositivos que estn actualmente presentes. En Debian a partir de ciertas versiones del 2.6.x, para las imgenes bina- rias de ncleo, headers de desarrolllo y el cdigo fuente del ncleo, los nombres de paquetes cambian de kernel-images/source/headers a linux-image/source/headers. En algunos casos, los dispositivos de tecnologas nuevas (como SATA) pue- den haber pasado de /dev/hdX a /dev/sdX. En tales casos habr que edi- tar las conguraciones de /etc/fstab y el bootloader (LiLo o Grub) para reejar los cambios. Pueden existir algunos problemas con dispositivos de entrada/salida con- cretos. El cambio de nombres de mdulos de ncleo ha afectado entre otros a los dispositivos de ratn, lo que puede afectar asimismo a la ejecucin de X-Window, a la vericacin de qu modelos son necesarios y cargar los mdulos correctos (por ejemplo el psmouse). Por otra parte, en el ncleo se integran los controladores de sonido Alsa. Si disponemos de los anti- guos OSS, habr que eliminarlos de la carga de mdulos, ya que Alsa ya se encarga de la emulacin de estos ltimos. Respecto a las arquitecturas que soporta el ncleo, hay que tener en cuenta que con los 2.6.x, en las diferentes revisiones, se han ido incrementando las arquitecturas soportadas, lo que nos permitir disponer de imgenes bi- narias del ncleo en las distribuciones (o las opciones de compilacin del ncleo) ms adecuadas para el soporte de nuestros procesadores. En con- creto, podemos encontrarnos con arquitecturas como i386 (para Intel y AMD), que soporta la compatibilidad de Intel en 32 bits para toda la fami- lia de procesadores (en algunas distribuciones se usa 486 como arquitectura general); en algunas distribuciones se integran versiones diferenciadas para i686 (Intel a partir de Pentium Pro en adelante), para k7 (AMD Athlon en adelante) y las especcas de 64 bits, para AMD de 64 bits (x86_64) e Intel con extensiones em64t de 64 bits como en los Xeon y algunas familias de multicores. Por otra parte, tambin existe la arquitectura IA64 para los mo- delos de 64 bits Intel Itanium. En la mayora de los casos, las arquitecturas disponen de las capacidades SMP activadas en la imagen del ncleo (a no ser que la distribucin soporte versiones con SMP o sin, creadas indepen- dientemente; en este caso, suele aadirse el sujo -smp a la imagen binaria del ncleo que lo soporta). En Debian, para la generacin de imgenes initrd, a partir de ciertas ver- siones del ncleo ( 2.6.12) se consideran obsoletas las mkinitrd-tools, que son sustituidas por nuevas utilidades como initramfs-tools o co- mo yaird. Ambas permiten la construccin de la imagen initrd, siendo la primera la recomendada por Debian. GNUFDL PID_00174426 27 El ncleo Linux 3.3. Compilacin de la rama 2.6.x del ncleo En las versiones 2.6.x, teniendo en cuenta las consideraciones comentadas anteriormente, la compilacin se desarrolla de forma anloga a la expues- ta anteriormente. Una vez descargados de kernel.org o proporcionados por la distribucin, los paquetes fuente del ncleo 2.6.xx (donde xx es el nmero de revisin del ncleo estable), se procede a su extraccin en el directorio que se usar para la compilacin. Si el paquete obtenido es de tipo gzip (tar.gz): gzip -cd linux-2.6.xx.tar.gz | tar xvf - o si es de tipo bzip2 (tar.bz2): bzip2 -dc linux-2.6.xx.tar.bz2 | tar xvf - Es recomendable leer el chero README que est situado en el directorio raz de los paquetes fuente. Una vez extrados los archivos fuente en el directorio de compilacin, se com- prueban los paquetes del entorno de compilacin necesario. Normalmente es necesario instalar algunos paquetes como por ejemplo build-essentials, libncurses-dev, libqt3-dev, libgtk2-dev (los nombres dependen de la distribucin), que incorporan el entorno bsico de compilacin (gcc) y las ne- cesidades para la construccin de los mens posteriores de compilacin de los archivos fuente (make menuconfig o xconfig). El proceso de parchear el ncleo se trata en el apartado 4. En este punto, podra ser interesante parchear el ncleo, lo cual podramos realizar, debido a que tenemos un cdigo fuente adicional (en forma de par- che) que mejora algn problema conocido de la versin o bien porque que- remos proponer o probar un cambio de cdigo en el ncleo. Tambin podra darse el caso de que un fabricante de hardware ofreciese algn soporte o co- rreccin de fallos para un controlador de dispositivo, como un parche para una versin de ncleo concreta. Una vez dispongamos de los paquetes necesarios, procedemos al proceso de compilacin en el directorio utilizado para los paquetes fuente. Cabe recordar que todo el proceso puede realizarse como usuario normal, solo partes muy concretas, como la instalacin nal del ncleo o de mdulos dinmicos, es necesario hacerlas usando el usuario root. Tambin pueden surgir problemas de seguridad por realizar la compilacin en modo root, de fuentes de ncleo desconocidas o no ables. Al respecto, tanto los paquetes fuente de kernel.org como las proporcionados por las distribucio- nes suelen contener rmas (o repositorios rmados) que pueden usarse para GNUFDL PID_00174426 28 El ncleo Linux vericar la integridad de los cheros de fuentes. Hay que evitar, a toda costa, usar fuentes de ncleo o de mdulos proporcionados por emisores no ables. Pasamos a iniciar el proceso en el directorio de los fuentes, comenzando con la limpieza de anteriores compilaciones: # make mrproper Recordad que si disponemos de un .config previo, nos permitir no comenzar de cero la conguracin del ncleo. El siguiente paso es la conguracin de parmetros. El chero .config po- demos usarlo bien a partir compilaciones previas que hayamos realizado o bien partir de la conguracin del ncleo actual existente (recordad que con uname -r tenemos la versin de ncleo). Esta conguracin podemos obte- nerla, dependiendo de la distribucin, de /boot/config-version-kernel y podemos copiar este chero como .config en el directorio raz de los pa- quetes fuente del ncleo. As partimos de una serie de opciones de ncleo ya preparadas, en las que solo tendremos que realizar los cambios deseados o mi- rar las nuevas opciones no presentes en el ncleo antiguo. Si estamos en el directorio de los paquetes fuente, entonces un: cp /boot/config-uname -r ./.config nos dejar estas opciones del ncleo actual preparadas. Tambin podramos usar un chero de conguracin de otras compilaciones de ncleo previas que hayamos realizado. Si no proponemos ningn chero de conguracin previo, entonces partimos de unas opciones por defecto en las que deberemos mirar y comprobar todas las opciones del ncleo. La conguracin la realizamos a travs de la opcin escogida de make, pasando por (entre otras) opciones: make config: interfaz plana de texto. make menuconfig: interfaz basada en menus textuales. make xconfig: interfaz grca basada en toolkit Qt de KDE. make gconfig: interfaz grca basada en toolkit Gtk de Gnome. make oldconfig: se basa en el chero .config previo y pregunta tex- tualmente por las opciones nuevas que no estaban previamente en la con- guracin antigua (de .config). Por ejemplo, escogemos la interfaz textual (gura 3): # make menuconfig A continuacin procedemos a la construccin de la imagen binaria del ncleo, con simplemente: # make GNUFDL PID_00174426 29 El ncleo Linux Figura 3. Conguracin del ncleo (make menuconfig) desde interfaz textual Cabe mencionar que para estos ncleo genricos (habitualmente denomina- dos vanilla o pristine), tambin existen algunos atajos ms rpidos para la cons- truccin nal del ncleo (saltando la mayora de los pasos siguientes); por ejemplo, en Debian es posible sustituir el actual make por make deb-pkg, que nos obtendr paquetes binarios DEB instalables en el sistema y actualiza- ra bootloaders y los cheros necesarios. En cualquier caso, siempre tenemos la alternativa de realizar los siguientes pasos: 1) Construccin de los mdulos (aquellos especicados como tales): # make modules 2) instalacin de los mdulos creados (en /lib/modules/version-kernel): # make modules_install 3) copia de la imagen a su posicin nal, suponiendo i386 como arquitectura (hay que vigilar este punto, porque hay detalles en los nombres y directorios que cambian en funcin de la distribucin GNU/Linux): # cp arch/i386/boot/bzimage /boot/vmlinuz-2.6.xx.img *Vanse los comentarios posteriores en este apartado y en el apartado 5. 4) y nalmente, si es necesaria, creacin de la imagen de disco RAM initrd, con las utilidades necesarias segn la versin de la distribucin*, y ajuste de las entradas en el bootloader LiLo o Grub segn sea el que utilicemos en nuestra distribucin. Los ltimos pasos (vmlinuz, system.map y initrd) de movimiento de ar- chivos a /boot pueden realizarse tambin normalmente con el proceso (en root): # make install GNUFDL PID_00174426 30 El ncleo Linux Pero hay que tener en cuenta que esta opcin realiza todo el proceso y ac- tualizar los bootloaders quitando antiguas conguraciones o modicndolas. Pueden alterarse tambin los enlaces por defecto en el directorio /boot. Antes de utilizar esta opcin automtica, sera recomendable un proceso de copia de seguridad de la conguracin del bootloader (LiLo en /etc/lilo.conf o Grub en /etc/grub/menu.lst) y posibles enlaces de /boot a la hora de pensar en las conguraciones pasadas que queremos guardar. Respecto a la creacin del initrd, en Fedora/Red Hat este se crear automti- camente con la opcin make install. En Debian deberemos, o bien usar las tcnicas del siguiente apartado, o bien crearlo explicitamente con mkinitrd (versiones de ncleo 2.6.12) o, posteriormente, con mkinitramfs o una uti- lidad denominada update-initramfs, especicando la versin del ncleo (se asume que este se llama vmlinuz-version dentro del directorio /boot): # update-initramfs -c -k version Una vez disponemos de los cheros correctos en /boot y del bootloader actua- lizado, ya podemos proceder al rearranque con shutdown -r now, escoger nuestro ncleo y, si todo ha ido bien, podremos comprobar con uname -r que disponemos de la nueva versin del ncleo. Tambin es particularmente interesante examinar algunos registros, como /var/log/messages y el co- mando dmesg, para examinar el registro de salida de mensajes producidos por el nuevo ncleo en el arranque y detectar si ha aparecido algn problema de funcionalidad o con algn dispositivo concreto. 3.4. Compilacin del ncleo en Debian (Debian Way) Enlace de inters Para Fedora recomendamos consultar el siguiente enlace: http://fedoraproject.org/wiki /Building_a_custom_kernel. En Debian, adems de los mtodos comentados en los subapartados previos, hay que aadir la conguracin por el mtodo denominado Debian Way. Es un mtodo que nos permite construir el ncleo de una forma exible y rpida, adaptada a la distribucin. Para el proceso necesitaremos una serie de utilidades (hay que instalar los paquetes o similares): kernel-package, ncurses-dev, fakeroot, wget y bzip2. Enlace de inters Puede verse el proceso Debian Way de forma detallada en: http://kernel- handbook.alioth.debian.org/ Podemos observar el mtodo [Debk] desde dos perspectivas: reconstruir un ncleo equivalente al proporcionado por la distribucin como ncleo base (cambiando opciones) o bien crear un ncleo con una numeracin de versin- revisin personalizada. Respecto a los paquetes de fuentes del ncleo, Debian proporciona los paque- tes fuente usados en su distribucin, que pueden llegar a ser bastante diferen- GNUFDL PID_00174426 31 El ncleo Linux tes de los de la versin vanilla o pristine obtenida de kernel.org. Ello es debido a que en Debian producen mltiples revisiones con diversos parches que van aadiendo, muchos de ellos a partir de fallos que se detectan a posteriori en las siguientes versiones vanilla del ncleo. En las versiones estables de Debian, la distribucin suele escoger una revisin xx de la rama 2.6, de manera que el ncleo 2.6.xx suele quedarse (general- mente) en esta numeracin para la versin de Debian estable y, as, cuando se actualiza con revisiones menores la distribucin, solo se actualizan parches en revisiones menores del ncleo (sin cambiar el nmero principal). Cuando Debian produce la siguiente versin estable se salta a una nueva versin del ncleo. Durante la duracin de una versin estable de la distribucin, Debian suele producir diferentes modicaciones (patchlevels) o revisiones del ncleo que se escogi. Debian ha cambiado varias veces la gestin de sus paquetes asociados a los paquetes fuente del ncleo. A partir de la versin 2.6.12 es habitual encontrar en el repositorio Debian una versin linux-source-versin que contiene la versin de los fuentes del ncleo con los ltimos parches aplicados (vase el apartatdo 4). Esta versin del paquete de los paquetes fuente del ncleo es la que usaremos para crear un ncleo personalizado. A partir de la versin mencionada (2.6.12) se incluy en los respositorios sour- ce de Debian un nuevo paquete denominado simplemente linux-2.6 que in- cluye los paquetes fuente y utilidades preparadas para generar el ncleo en la mencionada Debian Way. Este paquete fuente es usado para crear los paquetes binarios de la distribucin asociados al ncleo y tambin es el indicado para usar en caso de querer aplicar parches al ncleo actual de la distribucin, o por si queremos probar modicaciones del ncleo a nivel de cdigo. Examinemos primero esta opcin y despus, al nal del subapartado, comen- taremos la personalizacin. Para la compilacin del ncleo actual procedemos usando el segundo paquete: # apt-get source linux-2.6 En este caso nos descargar y descomprimir los paquetes fuente dejndolos en un rbol de directorios a partir del directorio linux-2.6-version. Obtenemos despus algunas herramientas que necesitaremos: # apt-get install build-essential fakeroot # apt-get build-dep linux-2.6 GNUFDL PID_00174426 32 El ncleo Linux Estas lneas bsicamente nos instalan el entorno de compilacin para el n- cleo (de hecho los paquetes del compilador gcc necesarios y herramientas pro- pias de la Debian Way) y por ltimo se comprueban las dependencias de los fuentes por si son necesarios paquetes fuente extra de desarrollo. Para la construccin del binario para la arquitectura, segn la conguracin preestablecida del paquete (semejante a la incluida en los paquetes ociales del ncleo linux-image en Debian): $ cd linux-2.6-version $ fakeroot debian/rules binary Con esto dispondremos de los paquetes binarios de ncleo (cheros * .deb) disponibles para la instalacin (va dpkg). Existen algunos procedimientos extra para la creacin de ncleo en base a di- ferentes niveles de parche (patch) proporcionados por la distribucin, y posibi- lidades de generar diferentes conguraciones nales (puede verse la referencia de la nota para complementar estos aspectos). Pasamos ahora a la otra opcin que habamos comentado al inicio, a los aspec- tos de personalizacin, cuando queremos cambiar ciertas opciones del ncleo y crear una versin personal del mismo. En este caso, ms habitual, cuando deseamos un ncleo personalizado, debe- remos realizar un proceso semejante a travs de un paso de personalizacin tpico (por ejemplo, mediante make menuconfig). Los pasos son, en primer lugar, la obtencin y preparacin del directorio (aqu obtenemos los paquetes de la distribucin, pero es equivalente obteniendo los paquetes fuente desde kernel.org): # apt-get install linux-source-2.6.xx $ tar -xvjf /usr/src/linux-source-2.6.xx.tar.bz2 $ cd linux-source-2.6.xx donde obtenemos los paquetes fuente y los descomprimimos (la instalacin del paquete deja el archivo de fuentes en /usr/src). A continuacin realizamos la conguracin de parmetros. Como siempre po- demos basarnos en cheros .config que hayamos utilizado anteriormente, para partir de una conguracin conocida (para la personalizacin, tambin puede usarse cualquiera de los otros mtodos, xconfig, gconfig, etc.): $ make menuconfig GNUFDL PID_00174426 33 El ncleo Linux A continuacin, la construccin nal del ncleo: $ make clean $ make KDEB_PKGVERSION=custom.1.0 deb-pkg donde creamos un identicador para el ncleo construido (custom.1.0) que se aadir al nombre del paquete binario del ncleo, posteriormente visible en el arranque con el comando uname. As, el proceso nalizar con la obtencin del paquete asociado a la imagen del ncleo, que podremos nalmente instalar: # dpkg -i ../linux-image-2.6.xx_custom.1.0_i386.deb Enlace de inters No ser habitualmente necesario, pero si se necesita alguna reconguracin del initrd generado, se recomienda leer el siguiente enlace donde se comentan mltiples herramientas Debian disponibles: http://kernel- handbook.alioth.debian.org /ch-initramfs.html. Esto nos descomprimir e instalar el ncleo y generar una imagen initrd adicional si fuera necesario. Adems, nos congura el bootloader con el nuevo ncleo por defecto (hay que vigilar con este paso, vale la pena haber obtenido antes una copia de seguridad del bootloader, para no perder ninguna congu- racin estable). Ahora directamente con un shutdown -r now podemos probar el arranque con el nuevo ncleo. Aadimos, tambin en este nal de este subapartado, otra peculiaridad a tener en cuenta en Debian, que es la existencia de utilidades para aadir mdulos dinmicos de ncleo proporcionados por terceros. En particular la utilidad module-assistant permite automatizar todo este proceso a partir de los pa- quetes fuente del mdulo. Necesitamos disponer de los headers del ncleo instalado (disponible en el paquete linux-headers-version) o bien de los paquetes fuente que utili- zamos en su compilacin. A partir de aqu module-assistant puede utilizar- se interactivamente y seleccionar entre una amplia lista de mdulos registra- dos previamente en la aplicacin, y puede encargarse de descargar el mdulo, compilarlo e instalarlo en el ncleo existente. Tambin, en la utilizacin desde la lnea de comandos, podemos simplemente especicar (m-a es equivalente a module-assistant): # m-a prepare # m-a auto-install nombre_modulo GNUFDL PID_00174426 34 El ncleo Linux Lo cual prepara el sistema para posibles dependencias, descarga fuentes del mdulo, compila y, si no hay problemas, instala para el presente ncleo. De la lista interactiva de module-assistant podemos observar el nombre del mdulo. GNUFDL PID_00174426 35 El ncleo Linux 4. Aplicacin de parches al ncleo . En algunos casos tambin puede ser habitual la aplicacin de parches (patches) al ncleo [Lkm]. . Un chero de parche (patch le) respecto al ncleo de Linux es un - chero de texto ASCII que contiene las diferencias entre el cdigo fuente original y el nuevo cdigo, con informacin adicional de nombres de - chero y lneas de cdigo. El programa patch (ver man patch) sirve para aplicarlo al rbol del cdigo fuente del ncleo (normalmente, depen- diendo de la distribucin, en /usr/src/linux). Los parches suelen necesitarse cuando un hardware especial necesita alguna modicacin en el ncleo, o se han detectado algunos errores (bugs) posterio- res a alguna distribucin concreta de una versin del ncleo, o bien quiere aadirse una nueva prestacin sin generar una versin de ncleo nueva. Para corregir el problema (o aadir la nueva prestacin), se suele distribuir un par- che en lugar de un nuevo ncleo completo. Cuando ya existen varios de estos parches, se unen con diversas mejoras del ncleo anterior para formar una nueva versin del mismo. En todo caso, si tenemos hardware problemtico o el error afecta a la funcionalidad o a la estabilidad del sistema y no podemos esperar a la siguiente versin del ncleo, ser necesario aplicar el/los parche(s). El parche se suele distribuir en un chero comprimido tipo bz2 (bunzip2, aun- que tambin puede encontrarse en gzip con extensin .gz), como por ejemplo podra ser: patchxxxx-2.6.xx-pversion.bz2 donde xxxx suele ser algn mensaje sobre el tipo o nalidad del parche. 2.6.xx sera la versin del ncleo al cual se le va a aplicar el parche, y pversion hara referencia a la versin del parche, del que tambin pueden existir va- rias. Hay que tener en cuenta que estamos hablando de aplicar parches a los paquetes fuente del ncleo (normalmente instalados, como vimos, en /usr/src/linux o directorio similar del usuario usado en la compilacin del ncleo). GNUFDL PID_00174426 36 El ncleo Linux Una vez dispongamos del parche, tendremos que aplicarlo. Veremos el proce- so a seguir en algn chero Readme que acompaa al parche, pero general- mente el proceso sigue los pasos (una vez comprobados los requisitos previos) de descomprimir el parche en el directorio de los cheros fuente y aplicarlo sobre las fuentes del ncleo, como por ejemplo: cd /usr/src/linux (o /usr/src/linux-2.6.xx o la versin que sea). bunzip2 patch-xxxxx-2.6.xx-version.bz2 patch -p1 < patch-xxxxx-2.6.xx-version Tambin puede aplicarse previamente con la opcin patch -p1 -dry-run que solo procede a realizar un primer test, para asegurarnos previamente que no haya alguna condicin de error cuando se sustituya el cdigo. Si no hay error, volvemos a aplicar entonces sin la opcin de test. Posteriormente, una vez aplicado el parche, tendremos que recompilar el n- cleo para volverlo a generar. Los parches pueden obtenerse de diferentes lugares. Lo ms normal es encon- trarlos en el sitio de almacn de los ncleos vanilla (http://www.kernel.org), que tiene un archivo completo de los mismos. Determinadas comunidades Linux (o usuarios individuales) tambin suelen ofrecer algunas correcciones, pero es mejor buscar en los sitios estndar para asegurar un mnimo de con- anza en estos parches y evitar problemas de seguridad con posibles parches piratas. Otra va es el fabricante de hardware que puede ofrecer ciertas mo- dicaciones del ncleo (o de controladores en forma de mdulos dinmicos de ncleo) para que funcionen mejor sus dispositivos (un ejemplo conocido es NVIDIA y sus controladores Linux propietarios para sus tarjetas grcas). Ncleo actualizado En sistemas que se quieran tener actualizados, por razones de test o de necesidad de las ltimas prestaciones, siempre se puede acudir a http://www.kernel.org y obtener el ncleo ms moderno publicado. Por ltimo, sealaremos que muchas distribuciones de GNU/Linux (Fedo- ra/Red Hat, Mandriva) ya ofrecen ncleos parcheados por ellos mismos y sis- temas para actualizarlos (algunos incluso de forma automtica, como en el caso de Fedora/Red Hat y Debian). Normalmente, en sistemas de produccin es ms recomendable seguir las actualizaciones del fabricante, aunque ste no ofrecer necesariamente el ltimo ncleo publicado, sino el que crea ms estable para su distribucin, con el inconveniente de perder prestaciones de ltima generacin o alguna novedad en las tcnicas incluidas en el ncleo. Un ejemplo, en el caso de distribucin de parches, podra ser el caso de la distribucin Debian para los paquetes fuente de ncleo proporcionados por la distribucin. Debian produce revisiones del ncleo aplicando diferentes se- ries de parches sobre los fuentes originales, as su ncleo ofrecido en reposi- torios no es el original, sino el resultado de aplicar una serie de parches. Un ejemplo de proceso, para obtener un ncleo con diferentes parches aplica- GNUFDL PID_00174426 37 El ncleo Linux dos, podra ser el siguiente (donde xx es la revisin de la rama 2.6 usada por Debian): # apt-get install linux-source-2.6.xx Para desempaquetar el ncleo (lo encontraremos en /usr/src/): # apt-get install linux-patch-debian-2.6.xx # cd linux-source-2.6.xx # /usr/src/kernel-patches/all/2.6.xx/apply/debian 2.6.xx-1 Esta ltima parte nos instala el conjunto de parches que Debian ha generado para la versin fuente del ncleo usado y, en el ultimo comando, nos permite volver a una revisin Debian concreta del ncleo (lo que se suele denominar un patchlevel de los fuentes del ncleo). As, por ejemplo, si la revisin del n- cleo es 2.6.xx-2, el comando anterior volvera (proceso denominado rollback) los fuentes del ncleo a la anterior versin patchlevel 2.6.xx-1. As podemos escoger una versin del ncleo segn el subconjunto de parches aplicados. Ksplice Ksplice es una tecnologa muy til para servidores empresariales en produccin. Podis consultar su web: http://www.ksplice.com Por ltimo, cabe comentar la incorporacin de una tecnologa reciente al uso de parches en Linux, Ksplice, que permite a un sistema Linux aadir parches al ncleo sin necesidad de parar y rearrancar el sistema. Bsicamente, Ksplice determina a partir de los paquetes fuente cules son los cambios introducidos por un parche o una serie de ellos, y comprueba en memoria cmo afectan a la imagen del ncleo en memoria que se encuentra ejecutndose. Se intenta en- tonces parar la ejecucin en el momento en que no existan dependencias de tareas que necesiten las partes del ncleo a parchear. Entonces se procede a cambiar, en el cdigo objeto del ncleo, las funciones afectadas, apuntando a las nuevas funciones con el parche aplicado y modicando datos y estruc- turas de memoria que tengan que reejar los cambios. Actualmente es un producto comercial, pero algunas distribuciones de comunidad ya lo estn incluyendo debido al soporte gratuito que se ofrece para algunas. En los ca- sos de produccin en empresas, con servidores en los que es importante no disminuir el tiempo de servicio, puede ser una tecnologa crtica para usar, al- tamente recomendable tanto para disminuir el tiempo de prdida de servicio como para minimizar incidentes de seguridad que afecten al ncleo. Bsicamente ofrecen un servicio denominado Ksplice Uptrack que es una espe- cie de actualizador de parches para el ncleo en ejecucin. La gente de Ksplice sigue el desarrollo de los parches fuente del ncleo, los prepara en forma de paquetes que puedan incorporarse a un ncleo en ejecucin y los hace dispo- nibles en este servicio uptrack. Una herramienta grca gestiona estos paquetes y los hace disponibles para la actualizacin durante la ejecucin. GNUFDL PID_00174426 38 El ncleo Linux 5. Mdulos del ncleo . Flexibilidad del sistema Los mdulos aportan una exibilidad importante al sistema, permitiendo que se adapte a situaciones dinamicas. El ncleo es capaz de cargar dinmicamente porciones de cdigo (mdulos) bajo demanda [Hen], para complementar su funcionalidad (se dispone de esta posibilidad desde la versin 1.2 del ncleo). Por ejemplo, los mdulos pueden aadir soporte para un sistema de cheros o para dispositivos de hardware especcos. Cuando la funcionalidad proporcionada por el mdulo no es ne- cesaria, el mdulo puede ser descargado y as liberar memoria. Normalmente bajo demanda, el ncleo identica una caracterstica no pre- sente en el ncleo en ese momento, contacta con un hilo (thread) del ncleo denominado kmod (en las versiones del ncleo 2.0.x el daemon era llamado kerneld) y este ejecuta un comando modprobe para intentar cargar el m- dulo asociado a partir de una cadena con el nombre de mdulo o bien de un identicador genrico. Esta informacin en forma de alias entre el nombre y el identicador se consulta en el chero /etc/modules.conf. A continuacin se busca en /lib/modules/version-kernel/modules.dep para saber si hay dependencias con otros mdulos. Finalmente, con el coman- do insmod se carga el mdulo desde /lib/modules/version_kernel/ (el directorio estndar para los mdulos), la version-kernel es la versin del ncleo actual y se utiliza el comando uname -r para determinarla. Por tanto, los mdulos en forma binaria estn relacionados con una versin concreta del ncleo, y suelen colocarse en /lib/modules/version-kernel. Los mdu- los se reconocen como archivos dentro de la estructura de este directorio, con .ko como extensin de archivo. En general, el administrador debe conocer cmo se cargan los mdulos en el sistema. La mayor parte de veces por el proceso anterior, los mdulos de la ma- yora del hardware y necesidades concretas son detectados automticamente en arranque o por demanda de uso y cargados en el momento correspondien- te. En muchos casos no deberemos realizar ningn proceso como adminis- tradores. Pero en algunos casos, habr que preparar alguna sintonizacin del proceso o de los parmetros de los mdulos, o en algunos casos aadir nuevos mdulos ya en forma binaria o por compilacin a partir de los fuentes. Si hay que realizar alguna compilacin de mdulos a partir de sus fuentes, se tiene que disponer de los paquetes fuente y/o headers de la versin del ncleo al cual est destinado. GNUFDL PID_00174426 39 El ncleo Linux Hay unas cuantas utilidades que nos permiten trabajar con mdulos (solan aparecer en un paquete de software llamado modutils, que se reemplaz por module-init-tools para la gestin de mdulos de la rama 2.6.x): lsmod: Podemos ver los mdulos cargados en el ncleo (la informacin se obtiene del pseudochero /proc/modules). Se listan los nombres, las dependencias con otros (entre corchetes, [ ]), el tamao del mdulo en bytes y el contador de uso del mdulo; esto permite descargarlo si la cuenta es cero. Ejemplo Algunos mdulos en un Debian: Module Size Used by Tainted: P agpgart 37344 3 (autoclean) apm 10024 1 (autoclean) parport_pc 23304 1 (autoclean) lp 6816 0 (autoclean) parport 25992 1 (autoclean) [parport_pc lp] snd 30884 0 af_packet 13448 1 (autoclean) nvidia 1539872 10 es1371 27116 1 soundcore 3972 4 [snd es1371] ac97_codec 10964 0 [es1371] gameport 1676 0 [es1371] 3c59x 26960 1 modprobe: Intenta la carga a mano de un mdulo y de sus dependencias. insmod: Carga un mdulo determinado. depmod: Analiza dependencias entre mdulos y crea un chero de depen- dencias. rmmod: Saca un mdulo del ncleo. depmod: Usado para generar el chero de dependencias de los mdulos, que se encuentra en /lib/modules/version-kernel/modules.dep y que incluye las dependencias de todos los mdulos del sistema. Si se insta- lan nuevos mdulos de ncleo, es interesante ejecutar manualmente este comando para actualizar las dependencias. Tambin se suelen generar au- tomticamente al arrancar el sistema. Se pueden usar otros comandos para depuracin o anlisis de los mdulos, como modinfo, que lista informaciones asociadas al mdulo (como licen- cias, descripcin, uso y dependencias), o cheros /proc/kallsyms, que nos permiten examinar los smbolos exportados por los mdulos. Ya sea por el mismo ncleo o por el usuario manualmente con insmod, nor- malmente para la carga se especicar el nombre del mdulo y, opcionalmen- te, determinados parmetros; por ejemplo, en el caso de dispositivos suele ser habitual especicar las direcciones de los puertos de E/S o bien los recursos de IRQ o DMA. Por ejemplo: insmod soundx io=0x320 irq=5 GNUFDL PID_00174426 40 El ncleo Linux La carga general de mdulos, en funcin del momento y la forma, puede ha- cerse manualmente, como hemos comentado, mediante initrd/initramfs o por medio de udev. En el caso de initrd/initramfs, cuando el sistema arranca, se necesitan inmediatamente algunos mdulos, para acceder al dispositivo y al sistema de cheros raz del sistema, por ejemplo controladores especcos de disco o ti- pos de sistemas de cheros. Estos mdulos, necesarios se cargan mediante un sistema de cheros especial en RAM denominado initrd/initramfs. De- pendiendo de la distribucin GNU/Linux se utilizan estos trminos de forma indiferente, aunque en algunos casos se han producido cambios a lo largo de la vida de la distribucin. Por convencin, suele denominarse a este elemento como lesystem RAM inicial, y se le reere comunmente como initramfs. El sistema inicial de cheros en RAM, initramfs, es cargado por el bootloa- der en la especicacin de la entrada correspondiente a la carga del ncleo correspondiente (por ejemplo en la lnea/opcin initrd de la entrada corres- pondiente de Grub). En la mayora de distribuciones, ya sea con el ncleo distribuido originalmen- te o bien con nuestra conguracin del ncleo, suele crearse un initramfs inicial. En todo caso, si dependiendo de la distribucin no se produce (pue- de no ser necesario), entonces podemos crearlo y sintonizarlo manualmen- te. El comando mkinitramfs permite crearlo a partir de sus opciones ge- nricas, que no suelen cambiarse y que se pueden congurar en el archivo /etc/initramfs-tools/initramfs.conf y, especcamente, los mdulos que se cargarn en inicio automticamente, que podemos encontrarlos en /etc/initramfs-tools/modules. Un mkinitramfs -o new_initrd_file nos permitir crearlo, y normal- mente podemos proceder a copiarlo en el directorio /boot para hacerlo accesi- ble al bootloader usado. Por ejemplo, mediante un cambio en Grub de su che- ro de conguracin /boot/grub/menu.lst, modicando la lnea de initrd oportuna. En cualquier caso, siempre es interesante establecer en el bootloader una conguracin alternativa de text durante estas pruebas, para poder reini- ciar y probar la nueva conguracin, pero de la misma manera mantener la conguracin estable antigua. Durante el proceso de arranque, adems del initramfs necesario para el arranque inicial, se producir tambin la carga del resto de mdulos por detec- cin automtica. Si no se carga algn mdulo deseado siempre puede forzarse su carga al incluir su nombre implcitamente en el chero de conguracin /etc/modules. Tambin puede darse o desearse el caso contrario: evitar la carga de un mdulo que puede detectarse errneamente o para el que existe ms de una alternativa posible. En este caso se utilizan tcnicas de listas negras de mdulos (tpica- mente la lista negra se guarda en /etc/modprobe.d/blacklist.conf). GNUFDL PID_00174426 41 El ncleo Linux 5.1. DKMS: mdulos recompilados dinmicamente Respecto a los mdulos dinmicos, un problema clsico ha sido la recompi- lacin de estos frente a nuevas versiones del ncleo. Los mdulos dinmicos de terceros, no incluidos a priori en el ncleo, necesitan de cdigo fuente para compilarse, proporcionado por la comunidad o por el fabricante del hardware del dispositivo. Durante la compilacin, normalmente es necesario disponer de los paquetes de desarrollo del ncleo, de los paquetes del cdigo fuente del ncleo y de sus headers para desarrollo, con la misma numeracin que el ncleo usado ac- tualmente, para el que se quiere compilar el mdulo. Este hecho obliga a una recompilacin constante con el cambio de versiones del ncleo del sistema, en especial ahora que las distribuciones distribuyen revisiones del ncleo con un menor tiempo, ya sea para solventar potenciales problemas de seguridad o para corregir errores detectados. Algunas distribuciones, para minimizar esta problemtica, distribuyen un en- torno denominado DKMS, que permite facilitar la recompilacin automtica de un mdulo con los cambios de versin del ncleo. Esto normalmente se produce en arranque al detectar un numero de ncleo: todos los mdulos de terceros registrados por el sistema DKMS se recompilan a partir de los archi- vos fuente de los mdulos y de los archivos fuente o headers del ncleo nuevo. De esta manera el proceso total es transparente al usuario. Una vez realizado este proceso, el sistema o el usuario mediante comandos de manipulacin de mdulos (como modprobe), pueden utilizar directamente el nuevo mdulo. Algunas distribuciones ofrecen solo el paquete base (dkms) del sistema, en algunas se proporcionan paquetes dkms preparados para mdulos concretos, o incluso el fabricante puede ofrecer su mdulo con soporte dkms. El proceso habitualmente pasa por los siguientes pasos: 1) Obtener los archivos fuente del mdulo (un paquete o un archivo TGZ suele ser lo ms normal). 2) Instalar los paquetes necesarios para el proceso: dkms, kernel-source, kernel-headers (los nombres dependen de la distribucin, y en el caso de los paquetes fuente del ncleo, hay que tener en cuenta que sean las versio- nes asociados a la versin del ncleo actual para la que se quiere instalar el mdulo). 3) Activar el servicio DKMS en arranque. Habitualmente el servicio es deno- minado dkms_autoinstaller 4) Crear un directorio en /usr/src para los paquetes fuente del mdulo y colocarlos all. GNUFDL PID_00174426 42 El ncleo Linux 5) Crear un chero dkms.conf en el directorio anterior, que le especica co- mo construir (compilar) e instalar el mdulo. 6) Aadir el servicio a la base de datos DKMS, compilarlo e instalar, normal- mente con unos comandos: dkms add -m nombre-modulo -v numero-version-modulo dkms build -m nombre-modulo -v numero-version-modulo dkms install -m nombre-modulo -v numero-version-modulo Respecto al chero dkms.conf mencionado, podra ser como sigue (donde nombre-modulo es el nombre del mdulo y version, el cdigo numrico de su versin): # # /usr/src/nombre-modulo/dkms.conf # PACKAGE_NAME="nombre-modulo" PACKAGE_VERSION="version" CLEAN="make clean" MAKE[0]="make module" BUILD_MODULE_NAME[0]="nombre-modulo" DEST_MODULE_LOCATION[0]="/kernel/drivers/video" AUTOINSTALL="yes" # End Of File En este caso tenemos ubicados los paquetes fuente del mdulo en un directo- rio /usr/src/nombre-modulo donde ponemos este chero dkms.conf. La opcin MAKE da los pasos para compilar y construir el mdulo, previamente limpiados con CLEAN. BUILD_MODULE_NAME establece el nombre del mdu- lo construido (cuidado en este punto porque depende del sistema de com- pilacin y puede coincidir con el nombre del mdulo general o no, algunos paquetes fuente permiten construir varios controladores/mdulos diferentes, con diferente denominacin). DEST_MODULE_LOCATION dene donde se instalara el mdulo nal en el rbol asociado al ncleo, en este caso suponemos que es un controlador de vdeo, (recordad que la raz est en /lib/modules/version-kernel, lo que se co- loca aqu es a partir de esta raz). AUTOINSTALL permite que se reconstruya automticamente el mdulo durante cambios del ncleo actual. En los casos de CLEAN, MAKE, BUILD_MODULE_NAME y DEST_MODULE_LOCATION GNUFDL PID_00174426 43 El ncleo Linux se recomienda consultar el chero de explicacin (normalmente un README o INSTALL) que acompaa a los paquetes fuentes de los mdulos, ya que pueden ser necesarios comandos adicionales, o tener que modicarlos para que se compile y se instale correctamente el mdulo. GNUFDL PID_00174426 44 El ncleo Linux 6. Virtualizacin en el ncleo . Una de las reas en expansin, en la administracin de IT, es la virtualizacin de sistemas. GNU/Linux ha ido con el tiempo incorporando diferentes posi- bilidades provenientes tanto de soluciones comerciales, como de diferentes proyectos de cdigo abierto. La virtualizacin de sistemas es un recurso bsico actual en las empresas y organizaciones para mejorar su administracin de sistemas, disminuir costes y aprovechar los recursos de hardware de manera ms eciente. En general, en el pasado si necesitbamos varias instancias de uno (o ms) sistemas operativos, tenamos que adquirir un servidor para cada instancia a implantar. La corriente actual es comprar servidores mucho ms potentes y utilizar virtualizacin en estos servidores para implantar los diferentes siste- mas en desarrollo o produccin. Normalmente, en virtualizacin disponemos de un sistema operativo insta- lado (que habitualmente se denomina sistema host) y una serie de mquinas virtuales sobre este sistema (denominados sistemas guest). Aunque tambin hay soluciones que sustituyen al sistema operativo host por una capa denomi- nada hypervisor. La virtualizacin como solucin nos permite optimizar el uso de nuestros ser- vidores o bien, por ejemplo en el caso de escritorio, disponer de mquinas de test de otros sistemas operativos conviviendo en la misma mquina simult- neamente. En el caso de GNU/Linux disponemos de mltiples soluciones que permiten tanto un caso como el otro. Tambin podemos disponer tanto de GNU/Linux como sistema host que aloja mquinas virtuales, como utilizarlo como mquina virtual sobre otro sistema diferente o bien sobre otro sistema host tambin GNU/Linux. Un esquema, este ltimo, particularmente til en el caso de administracin porque nos permitir, por ejemplo, examinar y eje- cutar diferentes distribuciones GNU/Linux sobre un mismo sistema host base. Existen muchas soluciones de virtualizacin, pero por mencionar algunas de las ms populares en sistemas GNU/Linux, disponemos (ordenamos de ms a menos en relacin directa con el ncleo): KVM Xen OpenVZ GNUFDL PID_00174426 45 El ncleo Linux VirtualBox VMware Enlace de inters Podis visitar la web de VMware en: http://www.vmware.com VMware es uno de los lderes comerciales en soluciones de virtualizacin, y dispone de productos de virtualizacin para escritorio (VMware Workstation), mientras que para servidor dispone de un producto VMware Server que est disponible para Linux para descarga gratuita. El caso de servidor permite ges- tionar varias mquinas virtuales con un interfaz de gestin simple. Otra lnea de producto VMware ESX implementa necesidades mayores para centros de datos (data centers), con gestin elaborada de mquinas, tolerancia a fallos, migraciones y otras necesidades explcitas para centros de datos. Sun/Oracle VirtualBox ofrece virtualizacin orientada a escritorio, que nos permite una opcin bastante sencilla para probar mquinas con diferentes sistemas operativos. Dispone de versin de cdigo libre utilizable en gran n- mero de distribuciones GNU/Linux. OpenVZ es una solucin de virtualizacin que utiliza el concepto de contene- dor de mquina virtual. As el host arranca con un ncleo comn a las mqui- nas virtuales (existen paquetes de imgenes de ncleo con soporte OpenVZ integrado en las distribuciones, como por ejemplo en Debian), que permite arrancar mquinas con el ncleo en comn pero cada una dentro de un en- torno aislado del resto. OpenVZ solo permite mquinas virtuales guest Linux (debido al ncleo compartido). Xen usa el concepto de hypervisor, utilizando un tipo de virtualizacin deno- minada paravirtualizacin, en la que se elimina el concepto de host-guest y se delega a la capa de hypervisor la gestin de los recursos fsicos de la mqui- na, de manera que permita el mximo acceso a los recursos de hardware por parte de las mquinas virtuales. En estos casos se necesitan ncleos sintoni- zados que puedan beneciarse de las posibilidades de la paravirtualizacin. En el caso de GNU/Linux en la mayora de distribuciones se ofrecen ncleos optimizados para Xen (vase el caso de Debian, para el que existen imgenes binarias para xen de los ncleos). En general, la paravirtualizacin y la capa de hypervisor para acceder al hardware aprovechan las facilidades de las CPU actuales, con recursos de hardware dedicados a facilitar la virtualizacin. Si se dispone de las caractersticas se pueden usar sistemas como Xen, sino, puede utilizarse un sistema ms clsico de host-guest como por ejemplo VirtualBox. En general, para ver si la CPU dispone de soporte de virtualizacin, hay que examinar sus datos en /proc/cpuinfo, en concreto el ag VMX, para proce- sadores Intel, que puede verse en la seccin flags: $ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel GNUFDL PID_00174426 46 El ncleo Linux cpu family : 6 model : 23 model name : Intel(R) Xeon(R) CPU E5405 @ 2.00GHz stepping : 10 cpu MHz : 1994.999 cache size : 6144 KB physical id : 0 siblings : 4 core id : 0 cpu cores : 4 apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx tm2 ssse3 cx16 xtpr sse4_1 lahf_lm bogomips : 3989.99 clflush size : 64 cache_alignment : 64 address sizes : 38 bits physical, 48 bits virtual power management: 6.1. KVM Enlace de inters Podis acceder a la web de KVM en: http://www.linux-kvm.org Finalmente, la solucin en que nos centraremos en este subapartado, KVM, est presente desde el ncleo 2.6.20, como solucin incluida para la virtuali- zacin de sistemas. Es una solucin parecida a Xen, pero con diferencias en cuanto a la implementacin. Xen es un producto complejo, con diferentes capas y, en especial, su diseo de capa hipervisora. Por contra, KVM se imple- menta como un mdulo del ncleo existente, que se complementa con otras soluciones. Es la opcin por defecto para virtualizacin en distribuciones co- mo Debian y Fedora. Normalmente una solucin de virtualizacin basada en KVM se compone de una mezcla de: El mdulo de ncleo kvm.ko, que proporciona la infraestructura base de virtualizacin, y adems un mdulo adicional segn el modelo de proce- sador kvm-intel.ko o kvm-amd.ko. Estos mdulos debern cargarse ma- nualmente (modprobe) o habilitarlos durante el arranque para disponer de soporte de virtualizacin KVM. GNUFDL PID_00174426 47 El ncleo Linux Qemu, un simulador cruzado de arquitecturas de CPU, que nos permite simular una CPU virtual sobre otra de igual o diferente arquitectura real. KVM utiliza una versin modicada de Qemu para la gestin y creacin de las mquinas guest (este paquete suele aparecer como qemu-kvm en las distribuciones). La biblioteca libvirt, que es una API que permite una gestin de la vir- tualizacin independiente del sistema de virtualizacin usado (sea Xen, KVM u otros). Utilidades basadas en libvirt para la creacin de las VMguest y su mante- nimiento, como virt-manager una interfaz grca de gestin de mqui- nas virtuales (gura 4), virt-install, una utilidad de lnea para la ges- tin de mquinas virtuales, o virtsh, un shell basado en comandos de gestin de las mquinas virtuales. Estas utilidades suelen necesitar un ser- vicio de sistema, denominado libvirtd. Tenemos que asegurarnos de po- ner en marcha el servicio (/etc/init.d/libvirtd start) o bien de car- garlo al inicio. Figura 4. Virt-manager durante la instalacin de una mquina virtual A continuacin veremos los procesos bsicos asociados a la utilizacin de KVM y describiremos algunas de las fases de la instalacin de KVM y la puesta en marcha de algunas mquinas virtuales. Soporte de virtualizacin Hay que tener cuidado con el hecho de que muchas de las mquinas actuales permiten desactivar/activar en BIOS el soporte de virtualizacin; comprobemos primero que no est desactivado. Para comenzar debemos examinar si disponemos de soporte de harwdare en la CPU: como hemos comentado buscamos el ag vmx en /proc/cpuinfo (para procesadores Intel) o el ag svm para procesadores AMD. Por ejemplo, con (sustituir vmx por svm en AMD): grep vmx /proc/cpuinfo GNUFDL PID_00174426 48 El ncleo Linux obtendremos como resultado la lnea de ags (si existe el ag vmx, si no, nin- gn resultado). Tambin podemos obtener varias lneas en CPU multicore y/o Intel con hyperthreading, donde obtenemos una lnea de ags por cada elemen- to de cmputo (CPU con HT o mltiples ncleos con/sin HT). Una vez determinado el correcto soporte de virtualizacin, procedemos a ins- talar los paquetes asociados a KVM; estos ya dependern de la distribucin, pero en general, el mismo kvm ya obtendr la mayora de paquetes requeri- dos como dependencias. En general, los paquetes recomendados a instalar (va apt o yum) son kvm, qemu-kvm, libvirt. Dependiendo de la distribucin pueden cambiar algunos nombres de paquetes, y en especial con el nombre virt existen varios paquetes de utilidades de generacin y monitorizacin de mquinas virtuales tanto de KVM como de Xen. Si se permite a los usuarios del sistema el uso de mquinas virtuales, hay que aadir los nombres de usuario a grupos especcos (va comandos adduser o usermod), normalmente a los grupos kvm o libvirt (dependiendo de la distribucin, Fedora o Debian, y versin de KVM). Enlace de inters La gestin de red es uno de los temas complejos en virtualizacin, en el caso de KVM se recomienda examinar: http://www.linux- kvm.org/page/Networking. El siguiente paso (opcional) es facilitar el uso de red a las mquinas virtuales. Por defecto KVM utiliza NAT, dando direcciones IP privadas de tipo 10.0.2.x, y accediendo mediante la red de la mquina host. En otro caso, si queremos una conguracin diferente (por ejemplo que permita acceso externo a las mqui- nas virtuales) tendremos que permitir hacer de bridge a la red actual; en este ca- so es necesario instalar el paquete bridge-utils y congurar un dispositivo especial de red denominado br0, en Debian en la conguracin de red presen- te en /etc/network/interface y en Fedora puede crearse un chero asocia- do al dispositivo como /etc/sysconfig/network-scripts/ifcfg-br0. Por ejemplo, en Debian podra colocarse un ejemplo de conguracin como: auto lo iface lo inet loopback auto br0 iface br0 inet static address 192.168.0.100 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off GNUFDL PID_00174426 49 El ncleo Linux Esta conguracin permite que se cree un dispositivo br0 para reemplazar a eth0. As las tarjetas de red virtuales redirigirn el trco asignadas a este dispositivo. bridge_ports especica cul ser el dispositivo fsico real que se utilizar. Como comentamos, esta parte de conguracin de red es opcional, y solo tiene sentido si queremos acceder desde el exterior a nuestras mquinas vir- tuales. Por el contrario, en un entorno de virtualizacin de escritorio puede ser suciente con el modo NAT por defecto, ya que las mquinas dispondrn de salida de red a travs de la red del host. A partir de estas conguraciones, ya estaremos capacitados para crear las im- genes de las mquinas virtuales. Hay diferentes conjuntos de comandos para realizarlo, bien usando kvm directamente (comando kvm), utilidades asocia- das a qemu para creacin de estas imgenes (qemu-img) o utilidades asociadas a libvirt (virt-install). El proceso pasa por crear la imagen de disco (o es- pacio de disco) asociado a la mquina guest como un chero y despus realizar la instalacin del sistema operativo en ese chero (imagen de disco), bien des- de el CD/DVD de instalacin del sistema operativo o bien tambin desde una imagen * .iso del CD/DVD. Por ejemplo, supongamos una instalacin de un guest determinado (por ejem- plo disponemos de unos CD/DVD de la distribucin Debian). Creamos el espacio de disco para la mquina virtual (en este caso 8 GB): # dd if=/dev/zero of=~/debianVM.img bs=1M count=8192 Mediante el comando dd creamos as un chero de salida de 8192 bloques de 1 MB, es decir, 8 GB, que nos formar la unidad de disco para nuestra mquina virtual (tambin existe un comando alternativo para crear imgenes, qemu-img, vase pgina man). Lo siguiente es obtener el medio de instalacin del sistema operativo a insta- lar, bien proporcionado como CD/DVD y, por tanto, accesible en el dispositi- vo /dev/cdrom (o equivalente si tenemos ms unidades de CD/DVD) o, por contra, a partir de una imagen iso del soporte. En cualquier caso, este ltimo siempre lo podemos obtener a partir de los discos con: dd if=/dev/cdrom of=debian-install.iso que nos genera as la imagen del CD/DVD. Ahora que disponemos de la imagen binaria y el medio de instalacin del sistema operativo, podemos proceder a instalar, con diferentes utilidades. En GNUFDL PID_00174426 50 El ncleo Linux general suele utilizarse virt-install como comando para crear la VM, pero tambin existe la posibilidad de usar el mencionado qemu-kvm directamente como opcin ms simple, que suele aparecer (dependiendo de la distribucin) como comando denominado qemu-kvm, qemu-system-x86_64 o simple- mente como kvm: kvm -m 512 -cdrom debian-install.iso -boot d -hda debianVM.img En este caso creara una mquina virtual bsica de 512 MB de memoria prin- cipal usando nuestro disco de 8 GB creado previamente y arrancando la m- quina a partir de nuestra imagen iso del medio de instalacin del sistema operativo. Se puede sustituir el chero iso por /dev/cdrom si usamos los discos de instalacin. La otra posible alternativa de creacin se realiza mediante la utilidad de lnea de comandos virt-install, mucho ms completa, pero con la dicultad de tener que especicar muchos ms parmetros. Por ejemplo, podramos indicar la creacin de la mquina anterior mediante: virt-install --connect qemu:///system -n debian5 -r 512 \ --vcpus=2 -f debianVM.img -s 8 -c debianinstall.iso --vnc \ --noautoconsole --os-type linux --os-variant debianLenny que entre otros parmetros, coloca el mtodo de conexin a la mquina vir- tual, el nombre de la VM debian5, dene 512 MB de memoria, hace disponi- bles 2 ncleos de la mquina fsica, utiliza el disco virtual debianVM, de 8 GB (-s permite que si no existe, lo cree previamente con ese tamao de GB), uti- liza la iso como medio de instalacin y permitir conexiones grcas con vnc con la mquina virtual. Adems denimos que el sistema que va a ins- talarse es Linux, en especial una versin de Debian. Los parmetros de ti- po y variante del sistema operativo son altamente dependientes de la ver- sin de virt-install, de manera que vale la pena consultar su pgina man (man virt-install) y la lista de sistemas operativos compatibles con la ver- sin KVM del ncleo y el conjunto de utilidades qemu y libvirt. Enlace de inters La lista de compatibilidad de KVM puede encontrarse en: http://www.linux- kvm.org/page /Guest_Support_Status En este punto solo hemos creado la mquina, pero no estamos conectados a ella, y hemos realizado una conguracin muy bsica de sus parmetros. Con otras utilidades, por ejemplo las basadas en libvirt, como la interfaz grca virt-manager, podemos personalizar ms la VM creada, por ejemplo aadiendo o quitando hardware virtual al sistema. Podemos conectar despus con la mquina recin creada mediante: virt-viewer -c qemu:///system nombreVM GNUFDL PID_00174426 51 El ncleo Linux si est en el mismo sistema, o si estamos en una mquina remota con: virt-viewer -c qemu+ssh://ip/system nombreVM o usando directamente la interfaz virt-manager (gura 5). Figura 5. Virt-manager conectado a la mquina virtual durante el proceso de instalacin, observando los recursos usados por la mquina virtual Esto nos permite conectar grcamente con la mquina virtual creada y, por ejemplo, continuar con la instalacin del sistema operativo (se habr iniciado con el arranque anterior con virt-install o kvm). Una vez instalado el sistema, ya podemos usar cualquier sistema, ya sea grco (virt-manager) o de lnea de comandos (virtsh) para gestionar las mquinas guest virtuales y poder arrancar y pararlas. Por ejemplo, con virtsh: virtsh --connect qemu:///system conectamos con el shell de comandos, comandos como list nos dan las m- quinas activas, list -all, todas las mquinas disponibles, y otros como start, shutdown, destroy, suspend o resume nos dan diferentes posibi- lidades de gestin de cada mquina virtual. GNUFDL PID_00174426 52 El ncleo Linux Figura 6. Virt-manager conectado a la mquina virtual recin instalada GNUFDL PID_00174426 53 El ncleo Linux 7. Futuro del ncleo y alternativas . Los avances en el ncleo de Linux en determinados momentos fueron muy rpidos, pero actualmente, ya con una situacin bastante estable con los n- cleos de la rama 2.6.x, cada vez pasa ms tiempo entre las versiones que van apareciendo. En cierta manera esto es bastante positivo: permite tener tiempo para corregir errores cometidos, ver aquellas ideas que no funcionaron bien y probar nuevas ideas, que, si resultan, se incluyen. El ncleo, en evolucin El ncleo contina evolucionando, incorporando las ltimas novedades en soporte de hardware y mejoras en las prestaciones. Comentaremos en este apartado algunas de las ideas de los ltimos ncleos y algunas que estn previstas, para dar indicaciones de lo que ser el futuro prximo en el desarrollo del ncleo. En la antigua rama 2.4.x del ncleo [Ces06] se realizaron algunas aportacio- nes en: Cumplimiento de los estndares IEEE POSIX, lo que permite que muchos de los programas existentes de UNIX pueden recompilarse y ejecutarse en Linux. Mejor soporte de dispositivos: PnP, USB, puerto paralelo, SCSI, etc. Soporte para nuevos sistemas de cheros, como UDF (CD-ROM reescribi- bles como un disco). Otros sistemas con journal, como los Reiser de IBM o el ext3, que permiten tener un registro (journal) de las modicaciones de los sistemas de cheros, y as poder recuperarse de errores o tratamientos incorrectos de los cheros. Soporte de memoria hasta 4 GB. En su da surgieron algunos problemas (con ncleos 1.2.x) que no soportaban ms de 128 MB de memoria (una cantidad que en aquel tiempo era mucha memoria). Se mejor la interfaz /proc. Se trata de un pseudosistema de cheros (el directorio /proc) que no existe realmente en disco, sino que es simple- mente una forma de acceder a datos del ncleo y del hardware de una manera organizada. Soporte del sonido en el ncleo: se aadieron parcialmente los controla- dores Alsa que antes se conguraban por separado. Se incluy soporte preliminar para el RAID software y el gestor de volme- nes dinmicos LVM1. GNUFDL PID_00174426 54 El ncleo Linux En la serie actual, la rama del ncleo 2.6.x [Ces06, Pra03], se dispuso de im- portantes avances respecto a la anterior (con las diferentes revisiones .x de la rama 2.6): Mejores prestaciones en SMP, importante para sistemas multiprocesadores muy utilizados en entornos empresariales y cientcos. Mejoras en el planicador de CPU (scheduler). En particular, se introducen avances para mejorar el uso de tareas interactivas de usuario, imprescindi- bles para mejorar el uso de Linux en un ambiente de escritorio. Mejoras en el soporte multithread para las aplicaciones de usuario. Se in- corporan nuevos modelos de hilos NGPT (IBM) y NPTL (Red Hat) (con el tiempo se consolid nalmente la NPTL). Soporte para USB 2.0 y, posteriormente, para USB 3.0. Controladores Alsa de sonido incorporados en el ncleo. Nuevas arquitecturas de CPU de 64 bits, se soportan AMD x86_64 (tambin conocida como amd64) y PowerPC 64 y IA64 (arquitectura de los Intel Itanium). Sistemas de cheros con journal: JFS, JFS2 (IBM) y XFS (Silicon Graphics). Mejoras con journal en los sistemas de cheros propios, ext3 y ext4, con mejoras del tamao mximo de los archivos y de rendimiento general. Mejoras de prestaciones en E/S y nuevos modelos de controladores uni- cados. Mejoras en implementacin de TCP/IP y el sistema NFSv4 (comparticin de sistema de cheros por red con otros sistemas). Mejoras signicativas para ncleo apropiativo: permite que internamen- te el ncleo gestione varias tareas que se pueden interrumpir entre ellas, imprescindible para implementar ecazmente sistemas de tiempo real y tambin para aumentar el rendimiento de tareas interactivas. Suspensin del sistema y restauracin despus de reiniciar (por ncleo). UML, User Mode Linux, una especie de mquina virtual de Linux sobre Linux que permite ver un Linux (en modo usuario) ejecutndose sobre una mquina virtual. Esto es ideal para la propia depuracin, ya que se puede desarrollar y probar una versin de Linux sobre otro sistema, y es til tanto para el propio desarrollo del ncleo como para un anlisis de seguridad del mismo. En versiones posteriores este concepto evolucion hacia el mdulo KVM. GNUFDL PID_00174426 55 El ncleo Linux Tcnicas de virtualizacin incluidas en el ncleo: en las distribuciones se han ido incorporando diferentes tcnicas de virtualizacin, que necesitan extensiones en el ncleo. Cabe destacar, por ejemplo, ncleos modicados para Xen, Virtual Server (Vserver), OpenVZ o el propio mdulo KVM. Nueva versin del soporte de volmenes LVM2. Nuevo pseudosistema de cheros /sys, destinado a incluir la informacin del sistema, y dispositivos que se irn migrando desde el sistema /proc, de- jando este ltimo con informacin relacionada con los procesos y su desa- rrollo en ejecucin, as como la informacin dinmica del propio ncleo. Mdulo FUSE para implementar sistemas de cheros en espacio de usuario (en especial usado para el caso de NTFS). Para conocer los cambios de las versiones ms recientes de Linux, pueden exa- minarse los cheros ChangeLog que acompaan a cada versin del ncleo, o consultar un registro histrico que se mantiene en Kernelnewbies.org, en espe- cial http://kernelnewbies.org/LinuxChanges, que mantiene los cambios de la ltima versin y pueden consultarse los del resto de versiones (misma direc- cin con /Linux26Changes). En el futuro se tiene pensado mejorar los aspectos siguientes: Incremento de la tecnologa de virtualizacin en el ncleo, para soportar diferentes conguraciones de sistemas operativos y diferentes tecnologas de virtualizacin, as como un mejor soporte del hardware para virtualiza- cin incluido en los procesadores que surjan en las nuevas arquitecturas. Estn bastante soportadas x86 y x86_64, con KVM, por ejemplo, pero otras no lo estn o solamente parcialmente. El soporte de SMP (mquinas multiprocesador), de CPU de 64 bits (Xeon, nuevos multicore de Intel y Opteron de AMD), el soporte de CPU multicore y la escalabilidad de aplicaciones multihilo en estas CPU. La mejora de sistemas de cheros para clusterizacin y grandes sistemas distribuidos. Por el contrario, la mejora en ncleos ms optimizados para dispositivos mviles (PDA, smartphones, tablets, etc.). Enlace de inters Para saber ms sobre POSIX podis visitar la siguiente web: http://www.unix.org/ Mejora en el cumplimiento de los estndar POSIX. Mejora de la planicacin de la CPU. Aunque en la serie inicial de la ra- ma 2.6.x se hicieron muchos avances en este aspecto, todava hay un bajo rendimiento en algunas situaciones. En particular en el uso de aplicacio- GNUFDL PID_00174426 56 El ncleo Linux nes interactivas de escritorio se estn estudiando diferentes alternativas, para mejorar este y otros aspectos relacionas con el escritorio y el uso del rendimiento grco. Enlace de inters Para saber ms sobre el proyecto GNU podis visitar la siguiente pgina web: http://www.gnu.org/gnu/ thegnuproject.html Tambin, aunque se aparta de los sistemas Linux, la Free Software Founda- tion (FSF) y su proyecto GNU siguen trabajando en su proyecto de acabar un sistema operativo completo. Cabe recordar que el proyecto GNU tena como principal objetivo conseguir un clon UNIX de software libre, y las utilidades GNU solo son el software de sistema necesario. A partir de 1991, cuando Linus consigue conjuntar su ncleo con algunas utilidades GNU, se dio un primer paso que ha acabado en los sistemas GNU/Linux actuales. Pero el proyecto GNU sigue trabajando en su idea de terminar el sistema completo. En este momento disponen ya de un ncleo en el que pueden correr sus utilidades GNU. A este ncleo se le denomina Hurd; y a un sistema construido con l se le conoce como GNU/Hurd. Ya existen algunas distribuciones de prueba, en concreto, una Debian GNU/Hurd. Enlace de inters Podis leer las opiniones de Richard Stallman sobre GNU y Linux en: http://www.gnu.org/gnu /linux-and-gnu.html Hurd fue pensado como el ncleo para el sistema GNU hacia 1990, cuando comenz su desarrollo, ya que entonces la mayor parte del software GNU es- taba desarrollado y solo faltaba el ncleo. Fue en 1991 cuando Linus combin GNU con su ncleo Linux y cre as el inicio de los sistemas GNU/Linux. Pero Hurd sigue desarrollndose. Las ideas de desarrollo en Hurd son ms comple- jas, ya que Linux podra considerarse un diseo conservador, que parta de ideas ya conocidas e implantadas. En concreto, Hurd estaba pensada como una coleccin de servidores imple- mentados sobre un microncleo Mach [Vah96], que es un diseo de ncleo tipo microncleo (a diferencia de Linux, que es de tipo monoltico) desarro- llado por la Universidad Carnegie Mellon y posteriormente por la Universidad de Utah. La idea bsica era modelar las funcionalidades del ncleo de UNIX como servidores que se implementaran sobre un ncleo bsico Mach. El desa- rrollo de Hurd se retras mientras se estaba acabando el diseo de Mach, y este se public nalmente como software libre, que permitira usarlo para desarro- llar Hurd. En este punto debemos comentar la importancia de Mach, ya que muchos sistemas operativos se han basado en ideas extradas de l, el ms destacado de los cuales es el MacOS X de Apple. El desarrollo de Hurd se retras ms por la complejidad interna, ya que exis- tan varios servidores con diferentes tareas de tipo multithread (de ejecucin de mltiples hilos) y la depuracin era extremadamente difcil. Pero hoy en da se dispone de algunas versiones de test, as como de versiones de prueba de distribucin GNU/Hurd producidas por Debian. Con todo, el proyecto en si no es especialmente optimista de cara a obtener sistemas en produccin, debido tanto a la complejidad como a la falta de soporte para dispositivos. Puede que en un futuro no tan lejano pueda haber avances y coexistencia de sistemas GNU/Linux con GNU/Hurd, o incluso que sea sustituido el ncleo GNUFDL PID_00174426 57 El ncleo Linux Linux por el Hurd, si se hicieran avances importantes en su desarrollo. Esto sera una solucin si en algn momento Linux se estanca (ya que su diseo monoltico puede causar problemas si se hace mucho ms grande). En cual- quier caso, tanto unos sistemas como otros tienen un prometedor futuro por delante. El tiempo dir hacia dnde se inclina la balanza. GNUFDL PID_00174426 58 El ncleo Linux 8. Taller de conguracin del ncleo a las necesidades del usuario . En este apartado vamos a ver un pequeo taller interactivo para el proceso de actualizacin y conguracin del ncleo en el par de distribuciones utilizadas: Debian y Fedora. Una primera cosa imprescindible, antes de comenzar, es conocer la versin actual que tenemos del ncleo, mediante uname -r, para poder determinar cul es la versin siguiente que queremos actualizar o personalizar. Y otra, es la de disponer de medios para arrancar nuestro sistema en caso de fallos: el conjunto de CD de la instalacin, el disquete (o CD) de rescate (actualmen- te suele utilizarse el primer CD de la distribucin) o alguna distribucin en LiveCD que nos permita acceder al sistema de cheros de la mquina, para rehacer conguraciones que hayan causado problemas. Adems, deberamos hacer copia de seguridad de nuestros datos o conguraciones importantes. Veremos las siguientes posibilidades: 1) Actualizacin del ncleo de la distribucin. Caso automtico de Debian. 2) Actualizacin automtica en Fedora. 3) Personalizacin de un ncleo genrico (tanto Debian como Fedora). En es- te ltimo caso los pasos son bsicamente los mismos que los que se presentan en el apartado de conguracin, pero haremos algunos comentarios adicio- nales. 8.1. Conguracin del ncleo en Debian En el caso de la distribucin Debian, la instalacin puede hacerse tambin de forma automtica, mediante el sistema de paquetes de APT. Puede hacer- se tanto desde lnea de comandos como con gestores APT grcos (synaptic, gnome-apt, etc.). Vamos a realizar la instalacin por lnea de comandos con apt-get, supo- niendo que el acceso a los paquetes fuente apt (sobre todo a los Debian origi- nales) est bien congurado en el chero de /etc/apt/sources.list. Vea- mos los pasos: 1) Actualizar la lista de paquetes: # apt-get update GNUFDL PID_00174426 59 El ncleo Linux 2) Listar paquetes asociados a imgenes del ncleo: # apt-cache search linux-image 3) Elegir una versin adecuada a nuestra arquitectura (genrica, 386/486/686 para Intel, k6 o k7 para amd o, en particular para 64 bits, versiones amd64 pa- ra intel y amd o ia64 para Intel Itanium). El cdigo de la versin indica la versin del ncleo, la revisin de Debian del ncleo y la arquitectura. Por ejemplo, 2.6.xx-4-k7 es un ncleo para AMD Athlon, revisin Debian 4 del ncleo 2.6.xx. 4) Comprobar, para la versin elegida, que existan los mdulos accesorios ex- tras (con el mismo nmero de versin). Con apt-cache buscamos si existen otros mdulos dinmicos que puedan ser interesantes para nuestro hardwa- re, segn la versin del ncleo a instalar. Recordad que, como vimos en la Debian Way, tambin existe la utilidad module-assistant, que nos permi- te automatizar este proceso despus de la compilacin del ncleo. En el caso en que los mdulos necesarios no fueran soportados, esto nos podra impe- dir actualizar el ncleo si consideramos que el funcionamiento del hardware problemtico es vital para el sistema. 5) Buscar, si queremos disponer tambin del cdigo fuente del ncleo, los linux-source-version (solo el 2.6.xx, es decir, los nmeros principales) y los linux-headers correspondientes, por si ms tarde queremos hacer un ncleo personalizado (en este caso, el ncleo genrico correspondiente par- cheado por Debian). 6) Instalar lo que hayamos decidido. Si queremos compilar desde los paquetes fuente o simplemente disponer del cdigo: # apt-get install linux-image-version # apt-get install xxxx-modules-version (si fueran necesarios algunos mdulos) y # apt-get install linux-source-version-generica # apt-get install linux-headers-version 7) Instalar el nuevo ncleo, por ejemplo en el bootloader LiLo (deberemos comprobar el bootloader usado, ya que las ltimas versiones de Debian usan Grub por defecto). Normalmente este paso se hace automticamente, pero no estara de ms realizar alguna copia de seguridad previa de la conguracin del bootloader (ya sea /etc/lilo.conf o /boot/grub/menu.lst). Si se nos pregunta si tenemos el initrd activado, habr que vericar el - chero de LiLo (/etc/lilo.conf) e incluir la nueva lnea en la conguracin LiLo de la imagen nueva: initrd = /initrd.img-version (o /boot/initrd.img-version) GNUFDL PID_00174426 60 El ncleo Linux Una vez hecha esta conguracin, tendramos que tener un LiLo parecido al siguiente listado (fragmento del chero), suponiendo que initrd.img y vmlinuz sean enlaces a la posicin de los cheros del nuevo ncleo: default = Linux image = /vmlinuz label = Linux initrd = /initrd.img # restricted # alias = 1 image = /vmlinuz.old label = LinuxOLD initrd = /initrd.img.old # restricted # alias = 2 Tenemos la primera imagen por defecto, la otra es el ncleo antiguo. As, des- de el men LiLo podremos pedir una u otra o, simplemente cambiando el default, recuperar la antigua. Siempre que realicemos cambios en el archivo /etc/lilo.conf no debemos olvidarnos de reescribirlos en el sector corres- pondiente con el comando /sbin/lilo o /sbin/lilo -v. En el caso de Grub, que suele ser la opcin normal en las distribuciones, se habra creado una nueva entrada (hay que tener presente realizar la copia de seguridad previa, porque podemos haber perdido alguna entrada anterior de- pendiendo del funcionamiento o conguracin de Grub; por ejemplo, puede limitarse el nmero mximo de entradas): title Debian GNU/Linux, kernel 2.6.32-5-amd64 root (hd0,0) kernel /boot/vmlinuz-2.6.32-5-amd64 \ root=UUID=4df6e0cd-1156-444e-bdfd-9a9392fc3f7e ro initrd /boot/initrd.img-2.6.32-5-amd64 donde apareceran los cheros binarios del ncleo y initrd. Con la etique- ta root en el ncleo aparece el identicador de la particin raz del siste- ma donde est instalado el ncleo, identicador que es comn a todas las entradas de ncleos del mismo sistema. Antes se utilizaba un esquema con root=/dev/hda0 o /dev/sda0, pero este esquema ya no es til, porque la deteccin de los discos puede cambiar el orden de estos en el sistema; as, se preere etiquetar las particiones. Estas etiquetas pueden obtenerse mediante el comando e2label /dev/particion o tambin con el comando dumpe2fs /dev/particion | grep UUID o, si la particin se encuentra montada en el sistema, consultando /etc/fstab. GNUFDL PID_00174426 61 El ncleo Linux 8.2. Conguracin del ncleo en Fedora/Red Hat La actualizacin del ncleo en la distribucin Fedora/Red Hat es totalmente automtica por medio de su servicio de gestin de paquetes (yum en lnea de comandos, por ejemplo), o bien mediante los programas grcos que incluye la distribucin, dependiendo de su versin, para la actualizacin (Package- Kit en Fedora o pup en Red Hat empresarial o equivalentes como CentOS). Normalmente, las encontraremos en la barra de tareas o en el men de herra- mientas de sistema de Fedora/Red Hat. Este programa de actualizacin bsicamente verica los paquetes de la dis- tribucin actual frente a una base de datos de Fedora/Red Hat, y ofrece la posibilidad de descargar los paquetes actualizados, entre ellos los del ncleo. Este servicio, en el caso de Red Hat empresarial, funciona por una cuenta de servicio y Red Hat lo ofrece por pago. Con este tipo de utilidades la actualiza- cin del ncleo es automtica. Hay que comprobar las utilidades disponibles en los mens Herramientas/Administracin, ya que las herramientas grcas disponibles en una distribucin son altamente dependientes de su versin, puesto que son actualizadas con frecuencia. Por ejemplo, en la gura 7, observamos que una vez puesto en ejecucin nos ha detectado una nueva versin del ncleo disponible y podemos seleccionar- la para que nos la descargue. Figura 7. Herramienta de Fedora que muestra la actualizacin del ncleo disponible En Fedora podemos utilizar las herramientas grcas equivalentes o usar di- rectamente yum, si conocemos la disponibilidad de nuevos ncleos: # yum install kernel kernel-source GNUFDL PID_00174426 62 El ncleo Linux Una vez descargada, se proceder a su instalacin, normalmente tambin de forma automtica, ya dispongamos de Grub o LiLo como gestores de arran- que. En el caso de Grub, suele ser automtico y deja un par de entradas en el men, una para la versin ms nueva y otra para la antigua. Por ejemplo, en esta conguracin de Grub (el chero est en /boot/grub/grub.conf o bien /boot/grub/ menu.lst), tenemos dos ncleos diferentes, con sus res- pectivos nmeros de versin: #fichero grub.conf default = 1 timeout = 10 splashimage = (hd0,1)/boot/grub/splash.xpm.gz title Linux (2.6.30-2945) root (hd0,1) kernel /boot/vmlinuz-2.6.30-2945 ro root = UUID=4df6e0cd-1156-444e-bdfd-9a9392fc345f initrd /boot/initrd-2.6.30-18.9.img title LinuxOLD (2.6.30-2933) root (hd0,1) kernel /boot/vmlinuz-2.4.30-2933 ro root = UUID=4df6e0cd-1156-444e-bdfd-9a9392fc345f initrd /boot/initrd-2.4.30-2933.img Cada conguracin incluye un ttulo, que aparecer en el arranque; el root, o particin del disco desde donde arrancar; el directorio donde se encuentra el chero correspondiente al ncleo y el chero initrd correspondiente. *Por defecto se usa Grub. En el caso de que dispongamos de LiLo* como gestor en la Fedora/Red Hat, el sistema tambin lo actualiza (chero /etc/lilo.conf), pero luego habr que reescribir el arranque con el comando /sbin/lilo -v manualmente. Cabe sealar, asimismo, que con la instalacin anterior tenamos posibilida- des de descargar los paquetes fuente del ncleo; stos, una vez instalados, es- tn en /usr/src/linux-version, y pueden congurarse y compilarse por el procedimiento habitual, como si fuese un ncleo genrico. Hay que men- cionar que la empresa Red Hat lleva a cabo un gran trabajo de parches y co- rrecciones para el ncleo (usado despus en Fedora), y que sus ncleos son modicaciones al estndar genrico con bastantes aadidos, por lo cual pue- de ser mejor utilizar los fuentes propios de Red Hat, a no ser que queramos un ncleo ms nuevo o experimental que el que nos proporcionan. GNUFDL PID_00174426 63 El ncleo Linux 8.3. Conguracin de un ncleo genrico Vamos a ver el caso general de instalacin de un ncleo a partir de sus fuen- tes. Supongamos que tenemos unas fuentes ya instaladas en /usr/src (o el prejo correspondiente). Normalmente, tendremos un directorio linux, linux-version o sencilla- mente el nmero versin; este ser el rbol de los paquetes fuente del ncleo. Estos pueden provenir de la misma distribucin (o puede ser que los haya- mos bajado en una actualizacin previa) y en primer lugar ser interesante comprobar si son los ltimas disponibles, como ya hemos hecho antes con Fedora o Debian. Por otro lado, si queremos tener las ltimas y genricas ver- siones, podemos ir a kernel.org y bajar la ltima versin disponible (mejor la estable que las experimentales, a no ser que estemos interesados en el desarro- llo del ncleo). Descargamos el archivo y descomprimimos en /usr/src (u otro elegido, quiz mejor) los paquetes fuente del ncleo. Tambin podramos buscar si existen parches para el ncleo y aplicarlos (segn hemos visto en el apartado 4). Sera conveniente releer el apartado 3. A continuacin comentaremos los pasos que habr que realizar. El procedi- miento que se indica en esta parte del taller es genrico, pero puede dar algn problema dependiendo de la distribucin usada. Se recomienda seguir en lo posible el subapartado 3.3 donde se comenta el caso de conguracin de un ncleo vanilla de la rama 2.6.xx o bien los comentarios en el caso Debian, en el subapartado 3.4, o la referencia [Fedk] para el caso Fedora. Con las consideraciones comentadas podemos seguir tambin el proceso si- guiente: 1) Limpiar el directorio de pruebas anteriores (si es el caso): make mrproper 2) Congurar el ncleo con, por ejemplo, make menuconfig (o xconfig, gura 8, gconfig o oldconfig). Lo vimos en el subapartado 3.3. 3) Dependencias y limpieza de compilaciones anteriores: make dep 4) Compilacin y creacin de la imagen del ncleo: make bzImage. Tam- bin sera posible zImage si la imagen fuera ms pequea, pero es ms nor- mal bzImage, que optimiza el proceso de carga y la compresin para ncleos ms grandes. En algn hardware muy antiguo puede no funcionar, a causa del tamao nal del ncleo, y ser necesario usar zImage. El proceso puede durar desde algunas decenas de minutos a una hora en hardware moderno o varias horas en hardware muy antiguo. Cuando naliza, la imagen se halla en: GNUFDL PID_00174426 64 El ncleo Linux /usr/src/directorio-fuentes/arch/i386/boot (en el caso de arquitec- tura Intel de 32 bits). Figura 8. Conguracin (xcong) del ncleo por mens grcos 5) Ahora compilamos los mdulos con make modules. Hasta este momento no hemos modicado nada en nuestro sistema. Ahora tendremos que proce- der a la instalacin. 6) En el caso de los mdulos, si probamos alguna versin antigua del ncleo (rama 2.2 o primeras de la 2.4), hay que tener cuidado, ya que en alguna se sobrescriban los antiguos (en las ltimas versiones 2.4.x o la rama actual 2.6.x ya no es as). Pero hay tambin que tener cuidado si estamos compilando una versin que es la misma (exacta numeracin) que la que tenemos (los mdulos se sobres- cribirn); en este caso es mejor realizar una copia de seguridad de los mdulos: cd /lib/modules tar -cvzf old_modules.tgz versionkernel-antigua/ As, tenemos una versin en .tgz que podramos recuperar despus en caso de problemas. Y, nalmente, instalamos los mdulos con: make modules install 7) Ahora podemos pasar a la instalacin del ncleo, por ejemplo con: # cd /usr/src/directorio-Fuentes/arch/i386/boot # cp bzImage /boot/vmlinuz-versionkernel # cp System.map /boot/System.map-versionkernel # ln -s /boot/vmlinuz-versionkernel /boot/vmlinuz # ln -s /boot/System.map-versionkernel /boot/System.map GNUFDL PID_00174426 65 El ncleo Linux As colocamos el chero de smbolos del ncleo (System.map) y la imagen del ncleo. Cabe recordar que puede ser necesaria tambin una imagen de initrd. 8) Ya solo nos queda poner la conguracin necesaria en el chero de con- guracin del gestor de arranque, ya sea LiLo (/etc/lilo.conf) o Grub (/boot/grub/menu.lst) segn las conguraciones que ya vimos con Fedora o Debian. Y recordad, en el caso de LiLo, que habr que volver a actualizar la conguracin con /sbin/lilo o /sbin/lilo -v. 9) Reiniciar la mquina y observar los resultados (si todo ha ido bien). GNUFDL PID_00174426 66 El ncleo Linux Resumen En este mdulo hemos examinado diferentes caractersticas del ncleo (en ingls, kernel) de Linux en su rama principal 2.6. Asimismo, hemos comen- tado algunos de sus procesos de actualizacin, conguracin y sintonizacin para el sistema, tiles tanto para la optimizacin de su uso de memoria co- mo para las prestaciones en una arquitectura dada, as como la adaptacin al hardware de destino. Tambin hemos examinado las posibilidades que ofrecen los mdulos din- micos como mecanismo de extensin del ncleo y ampliacin del hardware soportado. La inclusin en el ncleo de tcnicas de virtualizacin nos permite, a partir del ncleo y ciertas utilidades, construir un entorno de virtualizacin potente y exible para generar diferentes combinaciones de mquinas virtuales que residen en un sistema host GNU/Linux. GNUFDL PID_00174426 67 El ncleo Linux Actividades 1. Determinad la versin actual del ncleo Linux incorporada en vuestra distribucin. Com- probad las actualizaciones disponibles de forma automtica, ya sea en Debian (apt) o en Fedora/Red Hat (va yum o una herramienta grca de actualizacin). 2. Efectuad una actualizacin automtica de vuestra distribucin. Comprobad posibles de- pendencias con otros mdulos utilizados y con el bootloader (LiLo o Grub) utilizado. Depen- diendo del sistema puede ser recomendable una copia de seguridad de los datos importantes del sistema (cuentas de usuarios y cheros de conguracin modicados), o bien realizar el proceso en otro sistema del que se disponga para pruebas. 3. Para vuestra rama del ncleo, determinad la ltima versin disponible (consultad la pgi- na web http://www.kernel.org) y realizad una instalacin manual con los pasos examinados en el mdulo. La instalacin nal puede dejarse como opcional, o bien poner una entrada dentro del bootloader para las pruebas del nuevo ncleo. Observad tambin, dependiendo del sistema, la posibilidad de realizar una copia de seguridad previa, en especial de las congu- raciones estables de los bootloaders. 4. En el caso de la distribucin Debian, adems de los pasos manuales, existe, como vimos, una forma especial (recomendada) de instalar el ncleo a partir de sus fuentes mediante el paquete kernel-package. Proceded con los pasos necesarios para crear una versin perso- nalizada de un ncleo vanilla. 5. Elaborad una mquina virtual basada en KVM, que tenga como guest otra distribucin GNU/Linux diferente a la del sistema host, a partir de su instalacin va cdrom o va imagen ISO de la distribucin. Bibliografa [Ar05] Corbet, J.; Rubini, A.; Kroah-Hartman, G. (2005). Linux Device Drivers (3. a ed.). OReilly. [Arc] Arcomano, R.. Kernel Analysis-HOWTO. The Linux Documentation Project. [Bac86] Bach, M. J. (1986). The Design of the UNIX Operating System. Prentice Hall. [Ces06] Cesati, M.; Bovet, D. (2006). Understanding the Linux Kernel (3. a ed.). OReilly. [Debk] Debian Kernel Handbook Project. Debian Linux Kernel Handbook. <http://kernel-handbook.alioth.debian.org> [Fedk] Fedora Project. Building a custom kernel. <http://fedoraproject.org/wiki/Building_a_custom_kernel> [Gor] Gortmaker, P. (2003). The Linux BootPrompt HOWTO. The Linux Documentation Project. [Gru] GNU. Grub bootloader. <http://www.gnu.org/software/grub/> [Grub] GNU. Grub Manual. <http://www.gnu.org/software/grub/manual/> [Hen] Henderson, B. Linux Loadable Kernel Module HOWTO. The Linux Documentation Project. [Kan] Kanis, I.. Multiboot with GRUB Mini-HOWTO. The Linux Documentation Project. [Ker] Rusty Russell. Unreliable Guide To Hacking The Linux Kernel. <http://www.kernel.org/doc/htmldocs/kernel-hacking.html> [Kera] Kernelnewbies.org. Kernel Newbies. <http://www.kernelnewbies.org> [Kerb] Kernel.org. Linux Kernel Archives. <http://www.kernel.org> [Lkm] Lkm. Linux Kernel Mailing List. <http://www.tux.org/lkml> GNUFDL PID_00174426 68 El ncleo Linux [Mur] Murphy, G. L. Kernel Book Project. <http://kernelbook.sourceforge.net> [OSDa] OSDL. Open Source Developement Laboratories. (Ahora The Linux Foundation) <http://www.linuxfoundation.org> [Pra03] Pranevich, J. (2003). The Wonderful World of Linux 2.6. <http://www.kniggit.net/wwol26.html> [Pro] GNU Project. Grub Manual. <http://www.gnu.org/software/grub/manual/> [Skoa] Skoric, M. LILO mini-HOWTO. The Linux Documentation Project. [Tan87] Tanenbaum, A. (1987). Sistemas operativos: Diseo e Implementacin. Prentice Hall. [Tum] Tumenbayar, E. (2002). Linux SMP HOWTO. The Linux Documentation Project. [Vah96] Vahalia, U. (1996). UNIX Internals: The New Frontiers. Prentice Hall. [Vasb] Vasudevan, A. The Linux Kernel HOWTO. The Linux Documentation Project. [Zan] Zanelli, R.. Win95 + WinNT + Linux multiboot using LILOmini-HOWTO. The Linux Documentation Project. Otras fuentes de referencia e informacin [Kerb] Sitio que proporciona un repositorio de las diversas versiones del ncleo Linux y sus parches. [Kera] [lkm] Sitios web que recogen una parte de la comunidad del ncleo de Linux. Dis- pone de varios recursos de documentacin y listas de correo de la evolucin del ncleo, su estabilidad y las nuevas prestaciones que se desarrollan. [Debk] Es un manual imprescindible sobre los procesos de compilacin del ncleo en la distribucin Debian. Suele actualizarse con los cambios producidos en la distribucin. [Fedk] aporta una referencia similar para el caso Fedora. [Ces06] Libro sobre el ncleo de Linux 2.4, que detalla los diferentes componentes y su implementacin y diseo. Existe una primera edicin sobre el ncleo 2.2 y una nueva actua- lizacin al ncleo 2.6. [Pra03] Artculo que describe algunas de las principales novedades de la rama 2.6 del ncleo Linux. [Ker] [Mur] Proyectos de documentacin del ncleo, incompletos pero con material til. [Bac86] [Vah96] [Tan87] Algunos textos sobre los conceptos, diseo e implementacin de los ncleos de diferentes versiones UNIX. [Skoa][Zan01][Kan][Pro] Recursos para tener ms informacin sobre los cargadores LiLo y Grub. [Gru][Grub] Sitios ociales de Grub2 y el anterior original Grub (ahora conocido como Grub Legacy).
"El Desarrollo de La Comprensión Del Lenguaje Escrito en Estudiantes Con Hipoacusia" Autor - Jaime Felipe Palma Sierra Tutora - Msc. Karla Carrera Salinas Guayaquil-Ecuador 2021