<!doctype linuxdoc system>
<article>
<title>SINTONIZANDO LINUX (C&Oacute;MO SACAR EL M&Aacute;XIMO PARTIDO DE TU M&Aacute;QUINA)
<Author>Ramón Gutiérrez Camus <tt><htmlurl url="mailto:rcamus@jet.es" name="rcamus@jet.es"></tt>
&nl; Maquetador Linuxdoc-SGML: Antonio Ismael Olea González, &nl;
<tt><htmlurl url="mailto:olea@poboxes.com" name="olea@poboxes.com"></tt>
<tt>2:345/108.9@fidonet.org</tt>

<date>V1.0, 22 de septiembre 1995

<abstract>

Fuertemente basado en un artículo de Clarence Smith publicado en la revista
Linux Journal de Noviembre'94. 

<bf/Nota/: Aunque se sugiere la lectura de
éste documento a cualquier usuario, resultará especialmente útil para
aquellos poseedores de un sistema con una versión del núcleo anterior a la
2.0. 

</abstract> 

<toc>

<sect>Introducción
<p>
    El <bf/UNIX/ en general - y <bf/Linux/ no es una excepción - intenta sacar  el
    máximo  partido  posible  del  hardware  instalado  en cada máquina.
    Lógicamente, cualquier  Sistema  Operativo  necesita  &dquot;conocer&dquot; esas
    características para  poder  usarlas  de  forma  óptima.   No  todos
    tenemos  el  mismo  tipo de disco, ni la misma clase de cd-rom, o la
    misma memoria instalada.  Al proceso que se realiza para informar al
    núcleo de nuestro <bf/UNIX/ de  esos  detalles se le conoce genéricamente
    como &dquot;tunning&dquot; o sintonía.


<sect>¿Qué es el núcleo?
<p>
    Ya habrás comprobado como varía el rendimiento de una máquina basada
    en  MS-DOS,   simplemente   con   alterar   algunos  parámetros  del
    CONFIG.SYS.   Pues  bien:  en  general,  los  <bf/UNIX/  no   tienen   un
    equivalente  al  CONFIG.SYS,  en  el que se le diga que &dquot;drivers&dquot; se
    deben cargar y para que dispositivos.

<p>    <bf/UNIX/ optimiza al máximo  sus  recursos  y  carga  todos  los  drivers
    - junto con muchas otras cosas - en lo que genéricamente se denomina
    &dquot;kernel&dquot; o &dquot;núcleo&dquot;.  Siguiendo  con  el  símil,  sería como si cada
    ordenador tuviera un IO.SYS y MSDOS.SYS recompilado para  cada  caso
    en   concreto   (salvando   las   distancias).    Ni  un  sólo  byte
    desperdiciado;  nada de reservar espacio  por  si acaso algún día te
    decides a instalar alguna cosa en especial.

<p>    
    Recompilar el núcleo - hacer un  &dquot;tuning&dquot; -  no es algo exclusivo de
    <bf/Linux/.  Cualquier <bf/UNIX/ necesita  recompilar  (más  bien  &dquot;Linkar&dquot;  o
    enlazar)  determinadas librerías para adaptarse a los cambios que se
    puedan hacer en el  equipo.   No solamente cambios hardware; también
    hay otros muchos par metros de configuración que podemos necesitar o
    no.  (número máximo de  procesos,  soporte  de  red...).   La  única
    diferencia  entre <bf/Linux/ y los dem s *IX es que, en el caso de <bf/Linux/,
    disponemos de todos los fuentes.  En los demás, simplemente  tenemos
    unas librerías y unos objetos preestablecidos por el fabricante.

<sect>¿Por qué recompilar el núcleo?
<p>
    Muchos  usuarios  recién  llegados  a  <bf/Linux/  piensan  que,  una vez
    instalado correctamente, la  instalación  en  sí  misma es perfecta.
    Pues  bien,  nadie  debe  asumir  que  el  Kernel   instalado   está
    perfectamente  adaptado  a cada situación.  De hecho lo más probable
    es que NO LO ESTÉ.

<p>
    En primer lugar, compilando  un  nuevo kernel sin piezas inecesarias
    puedes conseguir que tu <bf/Linux/ vaya considerablemente  más  rápido...
    mucho más rápido!.

<p>
    Es segundo lugar, es posible que tengas dispositivos para los que no
    está capacitado el Kernel que se haya instalado &dquot;por defecto&dquot;.  Date
    cuenta  de  lo construyeron para que funcionara en miles de máquinas
    consideradas estándar.  Ese CD-ROM especial, esa tarjeta de sonido,
    una tarjeta de red local,  ese  SCSI  tan  maravilloso que sólo tú y
    otros cientos de Linusers tienen, no estar  contemplado  en  lo  que
    los   &dquot;constructores&dquot;  de  tu  instalación  decidieron  poner  como
    estándar.


<sect>Vale, ¿y cómo?
<p>
    Haciendo  pruebas  no  vas  a  perder nada.  Que no te asuste lo más
    mínimo, aunque no tengas  ningún  conocimiento  previo  de <bf/UNIX/ o de
    &dquot;C&dquot;.  Insisto: Sólo tienes que ser un poco coherente con lo  que  el
    sistema te pregunte.

<p>
    Por supuesto necesitarás tener los  fuentes  del  kernel  instalados
    (estarán   en   <tt>/usr/src/linux</tt>).    Y  lógicamente  necesitas  tener
    instalado el compilador de &dquot;C&dquot; (gcc).

<p>
    Por otra parte  son  necesarios  unos  8  Mb  de  memoria para poder
    compilarlo por lo que, si  sólo  tienes  4  Mb  de  RAM  instalados,
    necesitarás   usar  memoria  virtual.   En  este  caso  consulta  la
    documentación (<bf/FAQ/) sobre como  añadir  memoria  virtual a tu linux.
    (las ordenes swapon, mkswap etc.)


<sect>Configurando el kernel
<p>
    En esta ocasión, y sin que sirva de precedente, haz el &dquot;login:&dquot; como
    &dquot;root&dquot;  y  vete al directorio <tt>/usr/src/linux</tt>.  No es imprescindible,
    pero te evitará algunos  problemas.   A  continuación viene la tarea
    más delicada: Seleccionar qué opciones quieres incluir/excluir en el
    kernel que se va a generar para tí.  Eso se hace mediante  la  orden
    <tt>make config</tt>.  Es decir, teclea:
<tscreen><code>
                    # cd /usr/src/linux
                    # make config
</code></tscreen>
<p>                   
    Empieza  la  tarea:  El  ordenador  te va a hacer una larga serie de
    preguntas de las que se contestan con  un simple Sí o No (Y/N).  Con
    la ayuda  del  <bf/Linux  Journal/  de  noviembre  (prácticamente  voy  a
    traducirlo) intentaré aclararte algunas de las más dudosas:

<descrip>
    <tag/   Kernel Math emulation: CONFIG_MATH_EMULATION ?/

        Si tienes un  486  o  si  tienes coprocesador matemático deberás
        contestar <em/N/ (No).  Si no  tienes  un  coprocesador  matemático
        deberás contestar <em/Y/ (yes).  El motivo es muy simple: Pongas lo
        que  pongas <bf/Linux/ usará el coprocesador si está disponible, pero
        sí contestas &dquot;Y&dquot; incluirás toda la emulación de coma flotante en
        el núcleo con el consiguiente derroche  de memoria.


   <tag/   XT harddisk support: CONFIG_BLK_DEV_XD ?/

        En la mayoría de los casos la respuesta  adecuada  es  <em/N/.   Se
        refiere  al tipo de controladora.  Las controladoras de disco XT
        de 8 bits son muy raras en los actuales 386 y superiores.



    <tag/   TCP/IP Networking: CONFIG_INET ?/

        De momento contesta <em/N/ salvo  que tengas la inmediata intención
        de conectarte en alguna red local, o  quieras  acceder  a  otras
        redes  mediante  SLIP  o  PPP.  Siempre tendrás la posiblidad de
        preparar  un  nuevo  núcleo  para  trabajar  en  red.   En  caso
        contrario el deroche de recursos y de memoria es tremendo.


    <tag/   System V IPC: CONFIG_SYSVIPC ?/

        Inter  Process  Comunication:  Consume  muy  poca  memoria.   Tú
        decides.  Si  vas  a  utilizar  el  DOSEMU  - pseudo-emulador de
        MS-DOS para <bf/Linux/ - es imprescindible.


    <tag/   Use -m486 flag for 486-specific optimization: CONFIG_M486/

        Si  tienes un i386 contesta <em/N/.  Si pones una <em/Y/ tu 386 no irá
        más lento, pero gastará  memoria  inecesariamente.  Si tienes un
        486 contesta <em/Y/ y conseguirás que vaya un poquito más rápido.


    <tag/   Standard minix fs support: CONFIG_MINIX_FS/

        Minix era  el  fs  (File  System)  original  de  <bf/Linux/.   En  la
        actualidad  está  muy  superado  por  otros tipos de sistemas de
        ficheros  y  sólo  se   mantiene  para  asegurar  compatibilidad
        descendente.   Contesta  <em/N/.   Los  disquetes  que usaste en la
        instalación  utilizan  este  sistema  de  archivos.   Si quieres
        acceder a ellos deberás poner <em/Y/.
        

   <tag/   Extended fs support: CONFIG_EXT_FS/

        Lo mismo que minix fs. Contesta <em/N/.


    <tag/   Second extended fs support: CONFIG_EXT2_FS/

        El ext2 File System  es  el  mejor  de  todos  los  sistemas  de
        archivos gobernados por <bf/Linux/.  Está basado en el &dquot;Extended&dquot; (el
        anterior)  y es el más popular y el que mejor soporte tiene.  La
        respuesta deberá ser <em/Y/.


    <tag/   xiafs Filesystem support: CONFIG_XIA_FS/

        Otro buen sistema pero mucho menos popular.  La respuesta deberá
        ser <em/N/.


   <tag/   msdos fs support: CONFIG_MSDOS_FS/

        Este sistema  te  permitirá  acceder  de  forma  transparente al
        sistema de archivos tipo FAT de tu MS-DOS.  (a tu C: de toda  la
        vida).   Pon  una <em/Y/ si  quieres acceder a los ficheros de tus
        particiones ms-dos desde <bf/Linux/.


    <tag/   /proc filesystem support: CONFIG_PROC_FS/

        El /proc no toca tu  disco.   Es una representación en memoria y
        en forma de directorio /proc de los procesos, RAM, etc.   Podrás
        verlos  mediante  un  simple  ls  y  cancelarlos  con  un  <tt/rm/.
        Bastantes   utilidades   lo   usan.   Muchas  más  ventajas  que
        inconvenientes.  Contesta <em/Y/.


    <tag/   NFS filesystem support: CONFIG_NFS_FS/

        Sólo lo  necesitarás  si  estas  conectado  en  una  red TCP/IP.
        Normalmente deberás contestar <em/N/.
        

    <tag/   Kernel profiling support: CONFIG_PROFILE/

        Solo  para  &dquot;Linux's  gurus&dquot;.   Como  dice  el <bf/Linux Journal/, si
        necesitas leer ésto, contesta <em/N/.


    <tag/   Selection (cut and paste for virtual consoles)' :/

        Esta  opción  permitirá  que  hagas  &dquot;cut  &amp;  paste&dquot;  entre  las
        diferentes consolas virtuales  del  <bf/Linux/.   Por ejemplo, podrás
        marcar con el ratón un párrafo en una consola - cut - y copiarlo
        en mitad de tu editor de textos en otra - paste -.  Todo ello en
        modo texto; esto no tiene nada que ver con X-Window.  De momento
        pon <em/N/.  Ya tendrás tiempo de recompilar si lo juzgas oportuno.
        Recientemente se ha creado  un  programa  denominado  <tt/gpm/  que
        realiza las mismas funciones cut-paste que &dquot;selection&dquot;.

    <tag/   Sonido/
     <descrip>
    <tag/   Full driver?  NO/

        Contesta <em/N/.  Si tienes una única  tarjeta  de  sonido  deberá
        configurar  el  kernel  para  manejar  tu  única tarjeta.  NO te
        interesa  tener  TODOS  los  drivers  para  TODAS  las tarjetas.


    <tag/  Disable? NO/

        Dile <em/N/ y vete  contestando aquellas preguntas relacionadas con
        tu tarjeta en particular.

</descrip>
</descrip>

<sect>Creando dependencias
<p>
    Llegado a este punto  ya  habrás  creado  un pequeño fichero con los
    datos de tu sistema.  En función de las opciones que hayas  escogido
    harán  falta  unos  fuentes  u  otros.  Ahora tienes que dejar claro
    cuales son las dependencias  entre  eso fuentes (#includes, #defines
    etc...  Todo ese trabajo se reduce a teclear:
<tscreen><code>
                            #  make depend
</code></tscreen>

<sect>Compilando el núcleo
<p>
    Una vez creadas las dependencias,  deberás compilar el kernel.  Para
    ello bastará con que teclees:

<tscreen><code>
                            #  make zImage
</code></tscreen>

<p>
    Dependiendo de la máquina/RAM que tengas puede tardar desde unos 15&dquot;
    en 486 rápido o en un Pentium hasta varias horas en un lento 386SX.

<p>
        Cuando ese &dquot;make&dquot; haya terminado, habrá creado un fichero
    llamado /vmlinuz perfectamente adaptado a tus necesidades.  No
    obstante el proceso de instalación todavía no ha terminado.  Si
    apagas el ordenador (haciendo un shutdown) y lo vuelves a
    encender, comprobarás como tu sistema sigue siendo exactamente
    el mismo.  Para poder usarlo hace falta instalar ese núcleo en
    tu sistema, o en un disquete si prefieres probarlo antes.

<sect>Instalando el nuevo núcleo
<p>
    Llegamos a la parte más crítica  del tunning.  Se trata de sustituir
    el viejo kernel por el nuevo recién creado.

<p>
    Lo más habitual es instalar el kernel en  el  propio  disco  duro  y
    servirnos del LILO (Linux Loader) para arrancar con él.  El LILO nos
    permite,  además,  arrancar  cualquier otro sistema operativo, lease
    MS-DOS,  OS/2,  etc.   y  también pasarle parámetros al
    núcleo en el momento del  encendido.  Sin embargo también es posible
    arrancar con el nuevo kernel desde un  disquete  creado  al  efecto.
    Intentaré detallarte las dos posibilidades.

<sect1>Instalación en disco duro mediante <bf/LILO/.
<p>
    Ventajas: Arranque rapidísimo. Eficaz al 100%.

<p>
    Inconvenientes:  Generalmente  hay  que  tocar  el  <bf/MBR/ (master boot
    record).

<p>
    El MBR  es  un  miniprogramilla  que  selecciona  en  el momento del
    arranque la partición desde  cual  poner  en  marcha  el  sistema.
    Normalmente tu MBR estará  apuntado hacia tu &dquot;C:&dquot;.

<p>
    Es  una  parte  realmente  delicada, por lo que deberás tratarla con
    sumo cuidado.  En cualquier caso el MS-DOS puede volver a ponerte la
    original mediante la orden <tt>FDISK /MBR</tt>,  por lo que no correrás más
    riesgos que los extrictamente necesarios  cuando  se  manipula  este
    tipo  de  información.   Insisto:  siempre  puedes  dar marcha atrás
    mediante la orden del msdos <tt>FDISK /MBR</tt>.

<p>
    Con la ayuda de  un  programa  <bf/Linux/  denominado <bf/LILO/ (LInux LOader)
    podrás modificar esa MBR para, por ejemplo, escoger entre  poner  en
    marcha  el  MS-DOS  o  cualquier  otra  versión  de <bf/Linux/ que tengas
    instala en el momento del encendido.

<p>
    El fichero de configuración de lilo se denomina <tt>/etc/lilo.conf</tt>.  con
    la  distribución  <bf/Slackware/  viene una &dquot;ayuda&dquot; denominada <tt/liloconfig/
    que,  guiándote  por  menús,  te  permitir   crear  ese  fichero tan
    especial.

<p>
    Para activar el lilo podrás ejecutar la orden:

<tscreen><code>

     # make zlilo

</code></tscreen>

    En el directorio <tt>/usr/src/linux</tt>.

<sect>Resumen
<p>
    Crea el fichero de configuración del <tt/lilo/ (léete su documentación) y
    configura, crea dependencias y activa el nuevo kernel  en  el  <bf/lilo/.
    Traducido a unix queda como sigue:

<tscreen><verb>

                       #  cd /usr/src/linux
                       #  make config
                       #  make depend
                       #  make zlilo

</verb></tscreen>
</article>
