


                        -+-| DisidentS Hack Journal #3 |-+-







  ________________________________________________________________________
 |                                                                        |
 |  -+- Titulo_____: Compilacion del kernel de Linux [004.txt]            |
 |  -+- Autor______: wendell                                              |
 |  -+- E-Mail_____: <wendell@ifrance.com>                                |
 |  -+- Team_______: Disidents Espaa 2002 -  Los fuera de la ley         |
 |  -+- KB_________: 18.3                                                 |
 |  -+- Tema_______: Linux                                                | 
 |________________________________________________________________________|







.==========================================================================.
|===========~ INDICE ~======================================================
|===========================================================================
|=~ 1 - Introduccion                                                       |
|=~ 2 - Requisitos para compilar el kernel                                 |
|=~ 3 - Obtencion del fuente                                               |
|=~ 4 - Manos a la obra                                                    |
|=~ 5 - Arranque con el nuevo kernel                                       |
|=~ 6 - Parchear una version inferior del kernel para actualizarlo         |
|=~ 7 - Resumen                                                            |
|=~ 8-  Links                                                              |
|=~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~=.
======================================================~ INDICE ~============
==========================================================================



.==========================================================================.
|=======~ 1 INTRODUCCION ~==================================================
|===========================================================================

En GNU/Linux tenemos la posibilidad de poder compilar el  nucleo de  nuestro
sistema para poder adaptarlo a  nuestras necesidades, es el encargado de que
el software y el hardware de tu ordenador puedan trabajar conjuntamente, las
distribuciones  actuales de  Linux suelen  traer un  kernel precompilado que
incluye  las   configuraciones mas  comunes.  Algunos  se   preguntaran: 

esrealmente necesario actualizarme  al ultimo kernel  cada vez  que este ten
gauna nueva  version?

Bien,  las ultimas  versiones  del kernel  suelen  traercorreciones de progr-
amacion, nuevos  soportes  para distintas funciones etc.Si todas  estas nuev-
as  caracteristicas  que se  han aadido  no la vamos  autilizar,  pues real-
mente no necesitariamos compilar un kernel nuevo, aunque siempre es  bueno 
actualizarse  cuando el kernel que poseemos  ya  se  estaquedando un  poco 
desfasado. Al compilar un nuevo nucleo  definimos en  granmedida su comporta-
miento,podemos dar soporte a distintos tipo de filesystems, hardware, protoc-
olos de red, SCSI etc.
.==========================================================================.
|=======~ 2- REQUISITOS PARA COMPILAR EL KERNEL ============================
|===========================================================================
Para compilar  el nucleo es necesario tener previamente algunas herramientas
instaladas y configuradas, algunas son bastantes obvias, como el  compilador
gcc,el compilador de lenguaje C "entre otros" de GNU, el kernel esta escrito
en C en su mayoria, si no recuerdo mal, el  99% es C,  y 1% esamblador. Aqui
pongo un pequeo listado de las  herramientas necesarias para la compilacion

GCC
make
ncurses
ncurses-dev
bin86
libc6
libc6-dev
binutils.

Si os faltase alguno de estos requisitos deberiais buscarlos en
http://www.freshmeat.net ,  http://www.rpmfind.net o en http://www.google.com
.No hace falta decir que para compilar el kernel tenemos que estar como super
usuario (root).
.==========================================================================.
|=======~ 3- OBTENCION DEL FUENTE ==========================================
|===========================================================================

Para poder bajarnos el kernel de Linux  solo debemos ir a su pagina oficial:

http://www.kernel.org 

 aqui encontraremos un servidor de ficheros al que sepuede acceder mediante 
http, ftp y rsync, el camino mas corto es descargandodirectamente el fichero 
que sale al lado de:

The latest stable version of theLinux kernel is:  2.*.* . 

En la  realizacion de este  articulo,  la  ultimaversion es la 2.4.17, siem-
pre es una buena  idea leer un poco sobre los bugs del kernel que  nos quer-
emos  descargar y  decidir si  es recomendable  o nocompilarlo. Nosotros va-
mos a poner de ejemplo la version 2.4.17, asi que nosdirigimos hacia:

 http://www.kernel.org/pub/linux/kernel/v2.4/ 

una vez que lapagina  este cargada nos daremos cuenta  de que aqui se encue-
ntran todos losnucleos 2 .4.* ,  aqui encontraremos  los distintos ficheros 
con distintasextensiones.

 linux-2.4.17.tar.bz2 --- 22.7 Mblinux-2.4.17.tar.gz ---- 28.4 Mb

Ahora  nos  tenemos que bajar  cualquiera de  los  ficheros, es mejor que os
bajeis el tar.bz2, puesto que ocupa  6 Megas menos . Los diferentes  numeros
del nucleo indican la version del kernel, el primero es el general 2.*.*, el
segundo segun sea par o impar  indica si  es estable o si  esta en desarollo
2.4.* , y  el  tercer  y  ultimo  numero indica  la revision  en  la que  se
encuentra, 2.4.17..
==========================================================================.

|=======~ 4- MANOS A LA OBRA ===============================================
|===========================================================================
Bien, una  vez  que se hayan  bajado  los 22.1 Mb  en nuestro disco    duro,
procederemos a descomprimirlo y a  destarearlo en /usr/src/ con el siguiente
comando:
---------------------------------------------------------------------------| 
En el caso de haber bajado: linux-2.4.17.tar.bz2 || 
# tar xyf linux-2.4.17.tar.bz2                   
|--------------------------------------------------------------------------| 
En el caso de haber bajado: linux-2.4.17.tar.gz  || 
# tar -xzvf linux-2.4.17.tar.bz2                 
|--------------------------------------------------------------------------|

Con esto se  habra creado una  carpeta nueva  llamada linux,  pues bien, nos
metemos dentro y estaremos situados en /usr/src/linux/. Ahora debemos elegir
el metodo por el cual vamos a  compilar el nuevo  kernel, en total  hay tres,
los tres son  igualmente validos y suele ser  cuestion de gusto cual manejar,
estos tres metodos son: make config,  make menuconfig y make  xconfig. Ahora
vamos a analizar estos tres metodos:

---------------1- make config-----------------------------------------------
Este en el  metodo mas  complejo que  podemos escoger, solo es  recomendable
para usuarios experimentados, ya que se basa todo en metodo texto, sin 
colores, ni menus, tambien hay que seguir un orden muy  estricto, y se hecha 
en falta ayudas en el proceso.

---------------2- make menuconfig-------------------------------------------
Este metodo es mucho mas recomendable que el anterior, no es en modo grafico,
pero se maneja de forma  similar desde el teclado, con la barra  espaciadora
marcamos y desmarcamos las opciones a compilar, y con los cursores nos movemos.
Tambien permite cargar opciones ya guardadas para retocarlas o hacer la misma 
compilacion. Dispone de menus de ayuda, cosa que no poseia make config.
----------------3- make xconfig----------------------------------------------
Este es el metodo mas recomendable para los usuarios novatos o inexpertos en
el tema de compilacion del kernel. Este metodo es 100% grafico solo  permite 
usar raton, igual que el anterior este permite cargar y guardar 
configuraciones, posee tambien menus de ayuda.
*****************************************************************************
Bien, una vez que tengais claro que opcion os gusta mas, solo debeis poner en
el terminal el make de esta misma, y seguidamente teneis que escoger las opc-
iones que quereis compilar.Una vez que hayais escogido todas esas opciones de
compilacion, pasamos a la compilacion en si.

1- En el terminal ejecutaremos:

make dep

Este comando crea las dependencias  necesarias para poder compilar el kernel
correctamente
2- Ahora ejecutamos

make clean

Esto borra lo posibles  binarios  existentes para  poder crear los nuevos de
forma limpia y ordenadada
3- Y por ultimo

make bzImage 

Este es el ultimo comando para compilar el kernel, una imagen se  creara en:
/usr/src/linux/arch/i386/boot/ , esta imagen se llama bzImage, que mas tarde
servira para poder arrancar el equipo con el nuevo kernel compilado, esto se
puede hacer de dos maneras:  la primera es editando el lilo y la  seguna  es
cear un disco de inicioBien, como podreis comprobar hemos tecleado estos tres 
comandos por separado, cuando uno terminaba pues ejecutabamos el siguiente, 
pues bien, esto se puede todo de golpe, y se hace con el siguiente comando:

make dep && make clean && make bzImage

La duracion de la  compilacion del nucleo puede variar mucho  dependiendo de
la velocidad de tu ordenador, puede tardar desde 10m, 20m, 40m ....Ahora solo 
queda instalar los modulos, que se realizan con el siguiente comando: 

make modules && make modules_install ,

Este comando instala los modulos en /lib/modules/version_kernel

.==========================================================================.
|=======~ 5- ARRANQUE CON EL NUEVO KERNEL ~=================================
|===========================================================================
Hay dos formas de poder usar linux con el nuevo kernel, una de ellas es edi-
tando el lilo, y la otra es creando un disko de arranque, para los despista-
dos que no sepan lo que es el lilo, pues sencillamente es un gestor de arra-
nque muy  versatil  que permite  iniciar un sistema  operativo  (SO) cargan-
do el sector de arranque de una particin del disco duro.

-------------------------*** arrancar con lilo ***-------------------------
Bien primero veamo como arrancar usando el lilo, lo primero que  debemos de
hacer es  copiar la imagen del kernel nuevo en  /boot , esto se hace con el 
siguiente comando:

cp /usr/src/linux/arch/i386/boot/bzImage /boot 

Seguidamente no dirigimos /boot y cambiamos el nombre del bzImage por:
vmlinuz-2.4.17 , el cambio de  nombre se  realiza de esta manera  siguiente

mv bzImage vmlinuz-2.4.17

Ahora debemos copiar tambien el System.map que se encuentra en 
/usr/src/linuxa /boot , esto lo hacemos con este comando: 

cp /usr/src/linux/System.map /boot/

Si te pregunta si deseas sobreescribir le  dices que si, antes de hacer este 
ultimo comando seria recomendable copiar el antiguo el System.map en cualqu-
ier directorio por razones de preaucatividad. Bien ya tenemos la imagen del
kernel2.4.17 y la System.map en /boot, ahora abrimos el archivo de configur-
acion del lilo, este se encuentra en: /etc/lilo.conf , una vez abierto  deb-
emos editarlo para aadir una nueva entrada para el nuevo kernel, normalmen-
te con solo aadir las siguientes lineas ya valdria:

image=/boot/vmlinuz-2.4.17        label=linux_2.4.17        root=/dev/hde6        
-----------------------------------------------------------------------------
read-only--------------------------------------------------------------------

*nota: como podeis comprobar /dev/hde6 es la particion donde esta 
|| instalado linux en mi maquina, si no sabeis en que particion esta|| 
||instalada la vuestra, solo debeis poner en el terminal: df , y en || 
||la linea en el cual salga el directorio raiz / es la particion en || 
||la que esta vuestro linux, si la vuestra no es hde6 pues la       || 
||deberiais cambiar por la que salga.En mi caso es                  ||
                                                                    || 
Filesystem            Size  Used Avail Use% Mounted on              || 
/dev/hde6             4.7G  1.1G  3.4G  24%  /                    
|---------------------------------------------------------------------
Ahora deberiamos guardar el  lilo.conf con la nueva entrada, y en el terminal
pondriamos:

lilo

Y como resultado nos tendria que dar algo como esto:

Added linux *Added linux_2.4.17Si tuviesemos mas sistemas  operativos, pues 
saldran Added y el nombre de SO.

Bien, ahora reiniciamos el sistema, y cuando nos saldriese el lilo deberiamos
ver una  entrada con el  siguiente nombre:  linux_2.4.17 , pues le damos para 
arrancar y todo deberia salir bien, si quieres que el nuevo kernel sea el que
se inicie por defecto solo debes sustituir la linea: default=* por 

default=linux_2.4.17 

Y volveriamos a poner lilo en el terminal --------------------------------
*** arrancar con un diskete ***--------------------------------
lo primero es que  debemos de tener es un diskete  formateado, para formatear
un disekete en Linux se hace con de este el siguiente comando:

fdformat /dev/fd0 

Despues nos vamos a: /usr/src/linux/ y ejecutamos el siguiente comando:

mkbootdisk 

Ahora sigues estos sencillos pasos, lo configuras y reinicias booteando desde
el diskete.
||---------------------------------------------------------------|| 
||*nota: para comprobar si estas en el kernel 2.4.17 solo debes  ||
|| ejecutar este comando: uname -r , os deberia salir: 2.4.17 ,  || 
||con uname -a obtendras mas informacion sobre el sistema       
|-----------------------------------------------------------------
.==========================================================================.
|=======~ 6- PARCHEAR UNA VERSION INFERIOR DEL KERNEL PARA ACTUALIZARLO ====
|===========================================================================
El parche  para el  kernel de Linux es un  archivo que contiene  informacion 
sobre las lineas de codigo que han  cambiado desde la penultima  version del 
nucleo, por ejemplo, si tienes la version del kernel 2.4.16 y quieres 
actualizarte a la 2.4.17 pues solo deberias bajarte el parche: 
patch-2.4.17.bz2 ,

que solo ocupa 388 kb en vez de los 22.7 Mb del nucleo nuevo, esto supone un 
ahorro considerable de tiempo para usuarios que no  disponemos de conexiones
rapidas. Supongamos que tienes el kernel 2.4.14, y quieres disponer de la Ve
rsion 2.4.17 sin tener que bajarte el nucleo entero, pues entonces tendrias 
que bajarte los parches patch-2.4.15.bz2, patch-2.4.16.bz2 ,patch-2.4.17.bz2. 

Con estos dosejemplos creo que todo ha quedado mas claro, ahora pasemos a la
accion.Una vez que este bajado el parche lo copias a /usr/src con el siguie-
nte comando:

cp patch-XX.YY.ZZ.gz /usr/src/ 

Ahora descomprimes el fichero con:

bunzip patch-XX.YY.ZZ.bz2

Aplica el parche con:

patch -s -p0 < patch-XX.YY.ZZ

A continuacion entras en /usr/src/linux y ejecutas

make clean
make xconfig
make dep
make bzImage

Ahora te toca leer desde: | arranque con el nuevo kernel | , que esta un poco
mas arriba.

.==========================================================================.
|=======~ 7- RESUMEN =======================================================
|===========================================================================
Bueno, ya tenemos nuestro nuevo kernel totalmente preparado para su uso, a 
continucacion pongo un resumen general1- descargar el kernel2- descomprimirlo 
y a destarearlo en /usr/src/3- realizar cualquiera de los 3 make: 

make config , make menuconfig ,   make xconfig4 

al terminar de elegir las opciones ponemos en el terminal:

make dep && make clean && make bzImage5
copiar bzImage y System.map en /boot6 editar el lilo o crear un disko de arr-
anque para usar el nuevo   kernel.

|==========================================================================.
|=======~ 8- LINKS =========================================================
|===========================================================================
En estos links podreis encontrar documentacion y noticias varias sobreel mu-
ndo que rodea a este sistema operativo.
http://www.barrapunto.com
http://www.linuxfocus.org
http://www.insflug.org
http://www.linuxparatodos.com
http://lucas.hispalinux.es 
http://www.linuxdoc.org
http://www.linuxsecurity.com
http://www.slashdot.org
http://www.linux-es.com
http://www.linux.org
http://www.userfriendly.org
http://www.linuxtoday.com


||-------------------------------------------------------------------------||
|| Se otorga el permiso de distribuir este documento completo en cualquier || 
||medio sin anumo de lucro, si se hace de forma literal,citando al autor   || 
||y su direccion de correo electronico, y nombrar el nombre y numero de    || 
||la ezine Disidents                                                       ||
---------------------------------------------------------------------------
 33                                                                      33 
33     |dd|                                                               33 
33     |dd|                                                               33 
33     |dd|                                   |--|                        33 
33     |dd|      --------    -------------    |ii| ---   ----   --------- 33
33   -/dd/     -|eeeeeeeee| |zzzzzzzzzzzzz|   |--| |nn   |nn| -|eeeeeeeee|33    
33  -ddd/---- -|ee|     |ee|------ /zzzz/     ---- |nn   |nn| -|ee|   |ee|33 
33 -ddd|- ||||-|eeeeeeeeeee|      /zzzz/      |ii| |n|\n |nn|-|eeeeeeeeee|33 
33-ddd|-  -----|ee|              /zzzz/------ |ii| |n| \n|nn|-|ee|        33
33-ddd|-      --|eeeeeee|--     /zzzzzzzzzzz| |ii| |n|  \nnn|--|eeeeeee|--33 
33-ddd|-       ---------        ------------  |ii| |n|  --- --------------33 
33  -----------------------------33---------------------------------------33 
 ----------------------------------3---------------------------------------                                                                            
---------------------------------33----------------------------------------
-----------------------------------3---------------------------------------
---------------------------------33----------------------------------------
---------------------------------------------------------------------------