Linux: de Novato a Novato

Gerardo Travesedo Cabezuelo, traque@mx3.redestb.es

Agosto de 1999


Aquí encontrarás todas mis experiencias con Linux pasito a pasito, sin prisas y procurando no pasarme con los términos informáticos.

1. Cómo instalé Linux Debian 1.3.1

Partiendo de la distribución que viene en la revista Linux Actual nº 1 y guiándome por las instrucciones que vienen en la misma voy a intentar instalar el S.O. en mi ordenador.

En primer lugar, mi ordenador es un Pentium 200 MMX con 32 MB de memoria y dos Discos Duros:

El primero tiene 2 Gb y es donde tengo cargado el W95 (unidad C:)

El segundo tiene 4 Gb y está dividido en las unidades D: y E:

La idea es crearme una partición en la unidad D: en la cual tengo 1 Gb libre, e instalar en ella Linux.

Siguiendo las instrucciones de la revista y de algunos ficheros Txt que vienen en el CD efectúo los siguientes pasos:

1.1 Creación de la partición

Paso la utilidad Defrag de W95 para que me deje todo el espacio libre al final de la unidad D.

Preparo un disco de arranque de MS-DOS para lo cual hay que meter un diskette vacío en A:, y a continuación ejecutar el comando Sys a:

A continuación ejecuto chkdsk D: y Scandisk desde DOS.

Copio del CD de la revista los ficheros Restorrb.exe , Fips.Exe y Errors.Txt al diskette de arranque creado. También copio Keyb.com ya que si no posteriormente no me funcionan las teclas bien y no puedo teclear ':' .

Reviso los parámetros de la Bios y veo que no tengo que modificar nada.

Ahora apago el ordenador y vuelvo a arrancar con el diskette que me he creado anteriormente, para que funcionen las teclas normalmente hay que teclear keyb la o keyb sp (¡ojo!, al arrancar ':' es la eñe).

Ejecuto el programa FIPS que es el que crea particiones. Lo primero que me dice es que tengo que hacer un backup de todo mi sistema, ya que corro el peligro de borrarme toda la información de mis Hds. En un principio me echo atrás ya que no tengo sitio donde hacer el backup y me asusta un poco perder todos mis ficheros, esto me hace parar un par de días para pensármelo mejor... Al final... ¡me lanzo!.

Al ejecutar FIPS me sale:

Wich Device (1=0x80 / 2=0x81) - pregunta en cual de los dos HD voy a hacer la partición - Tecleo 2

me sale :

        Partition               1                       2
                Boot            NO                      NO
        Start:
                Head            1                       0
                Cyl             0                       261
                Sector          1                       1
        System                  06H                     05H
        End:
                Head            254                     254
                Cyl             260                     525
                Sector          63                      63
        Start Sector            63                      4192965
        Number of Sectors       4192902                 4257225
        MegaBites               2047                    2078

(esta es la configuración de mi segundo disco duro con sus dos particiones D y E)

Wich partition do you want to split (1/2) ? tecleo 1 (voy a partir la unidad D = 1)

Quieres hacer un backup de tus SECTores root y boot ? tecleo Y

Tienes un bootable floppy disck en A: ? lo meto y tecleo Y

Me da el mensaje : Writing file a:\rootboot.000 (con este fichero puedo restaurar la situación anterior a efectuar la partición, ver la documentación que viene con Fips).

Introduce cilindro de comienzo de la nueva partición (138-260) - meto Cylinder = 184, lo que me da una partición de 604 MB, tecleo intro.

Continue or reedit the partition table (C/R) ? - tecleo C

Do you want to proceed (y/n) - tecleo Y (y fin bye)

Ya está creada la partición, voy a comprobar si tengo algo roto:

1.2 Instalación de Linux Debian 1.3.1

Creación del disco RESCUE

Desde DOS, entro en el directorio del CD BO\DISKS-I3\1997-10-\RESC1440.bin, meto un diskette en A: y ejecuto RAWRITE2 -f resc1440.bin -d a:

Creación del disco DRIVER

Igual que con el Rescue pero con el fichero BO\DISKS-I3\1997-10-\Drv1440.bin. Me copio el fichero Base1_3.tgz en el Raiz de C: (Dos). Meto el diskette RESCUE y rearranco, después de una serie de mensajes me sale un menú :

           A). Teclado -Pongo SP 
             
           B). Particiones: 
             
                 1- delete de la partición que me había creado con FIPS 

                 2- N - crear nueva partición, me la creo de 572 MB, 
                        tipo Linux (83) dev/hdc3 

                 N - creo partición Swap tipo Linux Swap (82) de 32 Mb. dev/hdc4 
                   
           C)- Menú de inicialización activación partición Swap 

                 . tecleo OK 

                 . me sale: select the partition dev/hdc4 

                 . tecleo OK 

                 . tecleo Yes, Yes (verificar, seguro?) 
            
           D)- Inicializar la partición Linux : 

                 . /dev/hdc3 tecleo OK 

                 . scan verification, seguro ? tecleo Yes y Yes 

                 . tarda 5 minutos aproximadamente en verificar y al final 

                 se queda la pantalla negra, hay que darle Intro para que siga 
                  (585900 bloques, 146880 inodes, 1024 por block ...) 
             
           I)- Instalación del Kernel tecleo Ok 

               Seleccionar el medio de instalación : 
                
                  . /dev/fd0 First floppy drive tecleo Ok 

                  . insertar disckete tecleo Ok y return 

                  . insertar driver disk tecleo Ok y return 
             
           J) Instalación sistema básico: 

                  . elijo Hard-disck 

                  . partición en que reside = /dev/hda1 (C:) 

                  . selección del archivo base - elegirlo de una lista Ok 

                  . seleccionar directorio archivo base, me da /instmnt, tecleo Ok 

                    (parece que todo ha ido bien) 
             
           L) Configurar Device Driver Modules 

                  . no configuro nada 

                  . mas tarde, a los días de la instalación configuro el driver: 

                    Serial ports based on 8250,16450,16550 (de misc) 

                    (por cierto, cuando te pide un nombre no pongas nada) 
             
           N) Configurar la Red: 

                  . solo pongo el nombre host = traque 
             
           M) Configurar el Sistema Base (zona horaria, etc.) 

                  . elijo EUROPE/ ; me sale otra lista, 

                  . elijo Madrid ; hay que teclearlo como sale, 

                  . system clock set to GMT? tecleo N 

           Hacer Linux arrancable desde el HD, me da: 

                  . Error, actualmente es imposible arrancar desde el segundo HD. 

                  Por favor, arranca el sistema usando el disquete de arranque y 
                  configura Lilo manualmente. 
            
           Doy Alternativa1 (obtener disco de arranque) : meto disquete y saco 
           disco de arranque 
             
      Reinicializo el sistema. 
        
      Arranca desde el disco de arranque recién creado. 
        
        . pregunta password del root: 
        
        . te pide el nombre para un nuevo usuario - meto uno 
       
        . me pide la password - la pongo 
        
        . instalo Shadow passwords? 

                (sistema de seguridad con pass encriptadas) tecleo Yes 
        
        . se arranca Dselect 

1.3 Instalación de paquetes con DSELECT

Elegir el medio por el cual se va a instalar

1. Update. Modificar lista de paquetes disponibles

Salen los siguientes mensajes :

                - Uncompressing .......... done 

                - Information about 976 packages was updated 

                - Information about 31 packages was updated 

        

2. Select. Pregunta qué paquetes quieres en tu sistema

        
                - sale un help + seleccionar paquete , - des-seleccionar 
                  paquete, etc. etc. 

                - sale todos los paquetes seleccionados con + 

        la primera vez instalo todo y me da problemas, creo que me he quedado 
        sin espacio en el disco,

        la siguiente vez le pongo a todo - , pero me responde que hay paquetes 
        imprescindibles que tengo que seleccionar 

        la siguiente vez elijo : 

                . Todos los Required Packages (requeridos por el sistema) 

                . Todos los Important Packages (importantes) 

                . Standard Packages (standar de todas las distribuciones) 

                . todos los relacionados con C y C++ 

                . procmail 

                . lpr (imprimir) 

                . Opcionales y Extras: 

                        . sendmail y fetchmail (necesario para el correo) 

                        . ppp (necesario para conectarse a Internet) 

                        . magicfilter y Mpage (necesarios para imprimir) 

                        . mc (midnight commander, para ver directorios) 

                        . todos los paquetes de la SECTion X11 (son las X) 

                        . y todos los relacionados con los anteriores 

           (posteriormente ire incrementando poco a poco) 
        

2. Cómo instalé Linux Debian 2.0

La instalación es muy parecida a la que hice con Debian 1.3.1, pero aunque haya algunas cosas que se repitan, voy a dar la lista completa paso por paso.

Esta vez, para introducir alguna variación importante, la instalación la voy a hacer sobre mi primer disco duro, que tiene 2 Gb y esta completamente utilizado por Windows95.

Otra diferencia con la instalación anterior, es que esta vez voy a instalar desde el CD directamente, sin crearme los disquetes RESCUE ni DRIVER.

Las tareas a realizar en la instalación son las siguientes:

2.1 Particionado del HD

Preliminares

Antes de nada, conviene hacerse discos de arranque de Windows95, y backups de la unidad donde se va a crear la partición. (Yo no me he hecho ningún backup, pero lo aviso: si te equivocas puedes cepillarte el HD).

Crear un disco de arranque de DOS, para lo cual, desde el DOS, hay que meter un diskette vacío en A: y después dar el comando Sys a:.

En este disquete me copio los ficheros Restorrb.exe, Fips.exe y Errors.txt que me servirán posteriormente para crear la partición.

Rearranco el ordenador con este diskette para verificar el acceso a c: (dir c:) ... Funciona bien.

Defragmentación del HD

Para poder efectuar la partición necesito que todo el espacio libre se coloque al final del disco duro. Esto se puede conseguir ejecutando el programa de Windows95 defrag.

Paso defrag (que dura mas de media hora) desde Windows95, sin problemas.

Ahora rearranco el ordenador, metiendo el disquete de arranque de DOS.

Ejecuto Fips para hacer la partición. Lo primero que me pregunta es si quiero hacer un backup de los SECTores boot y root en el disquete A: Rootboot.00x.

Le digo que si, ya que es muy interesante tener este backup, porque si te equivocas al hacer la partición, luego puedes restaurar con el programa Restorrb.exe dejándolo como estaba.

Después me pregunta en cuál de los dos HD que tengo quiero hacer la partición:

Wich Drive (1=0x80 / 2=0x81)? -> contesto 1

Si solo tienes un HD, lógicamente, no te saldrá esta pregunta.

A continuación me enseña la tabla de particiones del HD seleccionado:

        Partition               1               
                Boot            yes     
        Start:
                Head            1       
                Cyl             0                       
                Sector          1               
        System                  06H             
        End:
                Head            127     
                Cyl             519     
                Sector          63      
        Start Sector            63              
        Number of Sectors       4193217         
        MegaBites               2047    
Esta es la única partición que hay en mi disco C: y esta totalmente ocupada por Windows95

Sin embargo, aquí empiezan los problemas. Lo primero es que al ir a hacer la partición me da el siguiente error:

Error Fips : hay información en el ultimo sector, no se puede hacer la partición

En las instrucciones de Fips dice que puede haber problemas de este tipo si usas Image o Mirror en W95, entonces tienes que buscar un fichero que se llame image.idx o mirorsav.fil y borrarlos, ya que estos ficheros se colocan en el ultimo sector del HD y como son ficheros ocultos, defrag no los mueve. No hay problema en borrarlos porque cuando se rearranca W95 se vuelven a generar.

Busco alguno de estos ficheros en mi sistema y encuentro el image.idx, automáticamente lo borro (incluso de la papelera) y vuelvo a empezar con Fips.

Ahora ya no me sale el error de antes, pero me ofrece los siguientes datos para hacer la partición :

        Enter start cylinder for new partition (519-519) 
        use the cursor keys to choose the cylinder -enter- to continue 

        Old partition           Cylinder        New partition
          2043 MB                 519              3,9 MB

¡¡¡ Solo tengo espacio libre para hacer una partición en el ultimo cilindro y de tan solo 3,9 Mb !!!

Cuando hice la partición en la instalación de la Debian 1.3.1 sobre el segundo HD no tuve ningún problema, sin embargo en esta ocasión por mas que lo intento no consigo espacio libre para hacerla.

Me informo en las news y parece ser que el problema puede estar en :

        . Windows95 usa el final del disco duro para poner la memoria virtual

        . Windows95 utiliza ficheros ocultos o del sistema que pueden estar al final 
          del HD y que defrag ignora

Al final, encuentro en http://neon.airtime.co.uk/users/hal9000/defrag.htm un documento titulado "Completely Defragment your Hard Disk Drive", con el que consigo por fin el espacio libre que necesito, los pasos a seguir son los siguientes :

Después de conseguir la defragmentación total, entramos mediante el acceso directo a Sistema y volvemos a activar la memoria virtual. Ya podemos borrar los tres enlaces que creamos.

Efectivamente, después de seguir estas instrucciones he conseguido el espacio libre que necesitaba.

Particionando

De nuevo vuelvo a ejecutar Fips y en esta ocasión si, me sale :

        Enter start cylinder for new partition (241-519) use the cursor keys to
        choose the cylinder -enter- to continue 

        Old partition           Cylinder        New Partition
          948,9 MB                 241            1098,6 MB

        Usando la flecha de la derecha lo dejo en : 

          1480,5 Mb                37,6            567,0 Mb

        Tecleo intro y me sale :

        Partition               1                       2
                Boot            yes                     NO
        Start:
                Head            1                       0
                Cyl             0                       376
                Sector          1                       1
        System                  06H                     06H
        End:
                Head            127                     127
                Cyl             375                     519
                Sector          63                      63
        Start Sector            63                      3032064
        Number of Sectors       3032001                 1161216
        MegaBites               1480                    567

        ( Dejo 1480 Mb para W95 y 567 para Linux 
                (mas otros 600 que tengo en el otro HD) )

Do you want to continue or reedit the partition table (c/r) ? -> tecleo c

Salen una serie de datos sobre el New boot sector

        Checking boot SECTor ..... ok 
        Ready to write new partition scheme to disck 

        Do you want to proceed (y/n) ? -> tecleo y 

        Repartitioning complete

Ya esta creada la nueva partición.

2.2 Instalación de Linux Debian 2.0

Comenzando

Siguiendo las instrucciones de la revista. Arranco Windows95 y me meto en el DOS.

Inserto el CD de instalación y tecleo F:Install/boot.bat.

El programa de instalación me introduce en un entorno gráfico en el que van saliendo unos menús que te ofrecen varias posibilidades y en los que tienes que ir seleccionando la mas adecuada con las flechas y el return.

Primero te pide: Select color or Monochrome display - elijo color y después next

Ahora me sale el "Installation Main Menu", para seleccionar el resto de las opciones.

Configurar el teclado: selecciono "es". Se hace de la siguiente forma :

Creacion de las particiones Linux y Swap

Selecciono "Partition a Hard-Disk" y me sale

Select Disk drive to partition. Me ofrece: /dev/hda y /dev/hdc 
        (las particiones linux de mis dos HDs)
Si solo tienes un HD seguramente no te saldrá esta opción.

Elijo /dev/hda que es el nombre de dispositivo que se asigna en linux al primer disco duro

        ( /dev/hda es el primer HD
          /dev/hdb es el Cdrom
          /dev/hdc es el segundo HD
           etc. )
Al dar intro me sale la pantalla del cfdisk que es el programa de manejo de particiones de linux (como el fdisk de W95)
        Name            Flags   Part type       Fs type                 Label   Size MB
        ---------       -----   ---------       --------------          -----   -------
        /dev/hda1       Boot    Primary         DOS FAT 16(big)         [ ]     1480,50
        /dev/hda2               Primary         DOS FAT 16(BIG)                  567,00
                                                Free space                        11,82
Aquí tenemos la partición /dev/hda1 que es la C: de W95 en argot Linux. Y la /dev/hda2 que es la que vamos a usar para nuestro Linux. El tipo es DOS porque Fips las crea siempre DOS.

Ahora, para poder asignar la partición a Linux y dividirla en un área de datos y otro de swap es necesario convertir esta partición en espacio libre porque si no cualquier operación que hagamos sobre ella nos dirá que la partición esta en uso.

Selecciono la partición /dev/hda2 y elijo la opción Delete con lo cual me queda de la siguiente forma :

        Name            Flags   Part type       Fs type                 Label   Size MB
        ---------       -----   ---------       --------------          -----   -------
        /dev/hda1       Boot    Primary         DOS FAT 16(big)         [ ]     1480,50
                                                Free space                       578,82
Ahora selecciono el Free space y elijo la opción New para crear las nuevas particiones.
        Me pide : (tipo de partición) 

                Primary (elijo esta) 
                Logical 
                Cancel

        Me sale:     Size (in Mb) : 578.82 . Modifico y pongo 542 

        Me pide : (ubicación de la nueva partición) 

                Beginning (elijo esta) 
                End 
                Cancel

        Ahora me sale la siguiente tabla :

        Name            Flags   Part type       Fs type                 Label   Size MB
        ---------       -----   ---------       --------------          -----   -------
        /dev/hda1       Boot    Primary         DOS FAT 16(big)         [ ]     1480,50
        /dev/hda2               Primary         Linux                            543,38
                                                Free space                        35,44
A esta partición le pongo Tipo 83 (Linux).

También le puse Boot, que esta muy mal puesto. Solo puede haber una partición bootable en el HD. Por esto tuve problemas ya que al arrancar me daba el error "tabla de partición errónea".

A continuación, y de la misma forma me creo la partición para swap :

Me sale la situación final de las particiones :

        Name            Flags   Part type       Fs type                 Label   Size MB
        ---------       -----   ---------       --------------          -----   -------
        /dev/hda1       Boot    Primary         DOS FAT 16(big)         [ ]     1480,50
        /dev/hda2               Primary         DOS FAT 16(BIG)                  543,38
        /dev/hda3               Primary         Linux swap                        35,44
Ahora le doy Write para que modifique la tabla de particiones con estos nuevos datos.
        Are you sure -> yes 
        Quit

Después de esto, me vuelve a salir el panel del Main Menu y ahora selecciono :

        Next: Initialize an activate swap partition (formatear la partición swap) 

        Me ofrece :     /dev/hda3 (elijo esta) 
                        /dev/hda4 (esta es la del otro HD, si no tienes no te saldrá) 

                scan for bad blocks ?   -> yes 
                are you sure ?          -> yes 

        Me sale :  Initializing swap partition ... 

        Al ratillo (20 segundos) me sale de nuevo el Main Menu

        Next: Initialize a Linux partition (formatear la partición Linux) 

        Select:            /dev/hda2  (elijo esta) 
                           /dev/hdc3  (igual que antes, seguramente esta no te saldrá) 

                scan for bad blocks ?    -> yes 
                are you sure ?           -> yes 

        Me sale :  Creating filesystem ...
 
                Linux ext2 filesystem format 
                139264 inodes, 556416 blocks 
                etc. etc. 
                ..... 
                checking for bad blocks :   nnnn / 556416 
                writing inode tables 
                writing superblocks and filesystem accounting information 
                (esto tarda unos 2 o 3 minutos) 

        Me sale :   Mount as the root filesystem /dev/hda2 ? -> contesto yes 

Algunas de estas opciones puede que no salgan en un sistema con un solo HD y un solo Linux. A mi me salen porque tengo en el segundo HD instaladas otras dos particiones (swap y linux), con la versión 1.3.1 de Debian.

Instalación del sistema

        Next: Install Operating System kernel and Modules 
              (instalar el núcleo del sistema operativo y los módulos) 

                Select Installation medium : elijo cdrom 
                Select CD interface : por mis características elijo /dev/hdb 
                Insert the cdrom : continue ; return 
                Select Debian path : por defecto sale /debian ; doy ok 
                Select Archive path (directory containing resc1440.bin) : 
                        selección List y return 
                Me saca una pantalla con el directorio en el que ha encontrado 
                el fichero en el CD 
                        /dev/hamm/hamm/disks-i386/2.0.10_1998-07-21 : tecleo return 
                después de varios mensajes diciendo lo que instala me saca otra vez 
                al Main Menu 

        Next: Configure Device Driver Modules (configuración de los módulos del núcleo) 

        Elijo: 

                En fs (filesystem access)  :     vfat 
                En misc                    :     lp (parallel printer ports)
                       serial (serial ports based on 8250,16450,16500) 
                En scsi                    :     sg (generic scsi for scanners, etc.)

        Next: Configure the network (configuración de redes) : 

                Choose the Host name (me ofrece debian) : lo cambio por traque.redestb1 
                que es el nombre de usuario en mi servidor de internet. No se porque 
                pero si no pongo este nombre, después el correo con sendmail no me 
                funciona ... 

                Network Connection (si vas a usar conexión ppp a un ISP, teclea no) : 
                tecleo No

        Next: Install the base-system (instalación del sistema base) : 

                select installation medium : otra vez elijo el cdrom -> /dev/hdb 
                  (todo igual que en instalación del kernel)

        Next: configure the base-system (configuración del sistema base) : 

                select timezones : 

                        . salen dos listas una a la izquierda (timezones) y otra a la 
                          derecha (directories) 
                        . de la izquierda no toco nada 
                        . de la derecha selecciono Europe 
                        . me salen otras 2 listas 
                        . de la izquierda elijo Madrid 
                        . me sale una leyenda y doy continue 
                        . me pregunta si quiero GMT -> contesto No

        Next: Make Linux bootable Directly From Hard Disk (Hacer linux arrancable 
                directamente desde HD): 

                Create Master Boot Record (MBR) -> tecleo No 
                (creo que si tecleo Si se me arranca por defecto Linux, con lo cual mi 
                 familia se llevaría un susto tremendo creyendo que se les ha perdido 
                 su W95) 

                Make Linux the default boot partition -> tecleo No

        Next: Make a Boot Floppy (hacer un disco de arranque) 

                place a blank flloppy -> continue

        Reboot the system : Yes 
Ya tengo instalado el sistema y se va a arrancar por primera vez.

Configuracion del sistema a nuestro gusto

Una vez que el sistema ha arrancado, lo primero que se necesita es un usuario administrador del sistema (root), el cual va a tener todos los privilegios para hacer y deshacer. También es muy conveniente tener un segundo usuario con los privilegios normales de cualquier usuario y que es con el que normalmente se debe trabajar.

        Me pide: Dar una password para el usuario root : se la doy 

        Quieres crear un segundo usuario ? : yes. Me pide varios datos y se los doy. 

        Shall I install shadow passwords (sistema de encriptación de claves) 
        -> respondo Si (es recomendable) 

        Shall I remove the pcmcia packages -> respondo Si 
        (son paquetes especiales para portátiles, por eso los borro) 

        Do you want to use PPP connection to install the system -> contesto Yes 

        Sale un programa de configuración de PPP (creo que es pppconfig) 

        Next: create a connection : 

                . configurar el servidor DNS : 

                        IP primary : nnn.nnn.nnn.n (Dns primaria, se puede ver en 
                        tu conexión W95) 
                        IP secundary : nnn.nnn.n.nnn (Dns secundaria) 
                        Provider name : redestb (el nombre de tu proveedor) 

                . crear conexión  : elegir el método de autenticación 

                        PAP -> elijo este 
                        CHAT
                        CHAP 

                . Enter password : meto la password de mi conexión a internet 

                . Manager User configuration : enter username ISP : nombre de mi 
                  usuario = traque.redestb1 

                . Manager Port configuration : enter port of your modem : 
                  el puerto al que esta conectado mi modem, es el /dev/TtyS1 (COM2) 

                . Default Route : enabled -> ok 

                . Ip numbers : noipdefault 

                . Set speed : 115200 

                . Modem initialization string -> ATZ 

                . Number to dial -> 055 

                . Tone or pulse -> ATDT (tone) 

                . Properties -> OK ; sale el menú con todo lo anterior 

                . elijo Finished 

                . write files -> OK 

                . Quit 

                Si quieres probar la conexión, responde yes a la pregunta siguiente,
 
                Do you want me to start a PPP conection now? . 
                Si no funciona, no te preocupes, ya la afinaras mas adelante.

        Choose one of several selections of packages to be installed. 

                Esto es nuevo en la version 2.0, es una alternativa a Dselect que te 
                da a elegir entre varios perfiles distintos y así no tienes que andar 
                instalando paquetes con Dselect. 
                Es una muy buena idea sobre todo para los mas novatos que se lían 
                bastante con Dselect y no saben que elegir. 

        Do you want to skip this step? -> tecleo N y me da a elegir entre los 
        siguientes perfiles : 
ADMIN

Administrator box : Administrador del sistema (305 MB)

BASIC

Standard system without developments tools : Sistema básico sin herramientas de desarrollo (25 MB)

DEVEL-COMP

Huge development environment (perl, phiton, c, etc.): Entorno de desarrollo completo (programadores) (404 MB)

DEVEL-STD

Standard C development environment : Entorno standard de desarrollo en un entorno C (programadores) (340 MB)

DIALUP

Home machine (graphics, sound, X window, etc) : Sistema personal amigable, con gráficos, sonido, etc (420 MB)

SERVER-COMP

Server (add, mailinglist, backup, news, samba, squid, etc.) : Entorno servidor de internet completo (50 MB)

SERVER-STD

Standard server (ftp, web, dns, nis, pop): Entorno servidor de internet standard (40 MB)

STANDARD

Compiler, printing, emacs and networking : Un entorno standard con lo básico (89 MB)

WORK-SCI

Scientific workstation (tex, math, plot, X ...): Workstation científica (500 MB)

WORK-STD

Standard workstation (tex, graphics, internet, X): Workstation standard (382 MB) tag/CUSTOM/ select the tasks you will perform with this system

Se pueden elegir uno o varios grupos de paquetes a la vez.

Si te saltas esta opción a continuación te saldrá el instalador de paquetes DSELECT.

Instalación de paquetes con Dselect

0. Access , elegir el método de acceso a los paquetes

De dónde va a coger los paquetes, de un CD, del HD, etc.

Como estamos cargando desde el CD de Linux actual num. 4, el método de acceso va a ser el CD.

Enter block device name : aquí lo que esta pidiendo es el nombre del dispositivo del CDROM en este caso. En linux los dispositivos tienen nombres de ficheros: /dev/.... -> yo le meto /dev/hdb

Ahora empieza a preguntar en qué directorios están los paquetes en el CD. El ya los sabe, así que le damos return hasta que nos vuelva al panel principal de Dselect.

1. Update list

Damos return para que se actualice la lista activa de paquetes.

2. Select

Aquí esta lo "complicado". Ojo, al teclear return, nos sale una pantalla de ayuda en ingles. Es conveniente leerla para saber como van las tecla sobre todo. Una vez leído hay que darle a la barra espaciadora para entrar en la pantalla que contiene los paquetes, si le das a otra tecla, te lías, sobre todo si le das al return.

Selecciono :

3. Actualización de Debian 1.3.1 a Debian 2.0

4. Proyecto para incorporar sonido a mi Debian

4.1 Antecedentes

Después de instalarme los programas de audio Xmixer y Xplaycd, observo que mi S.O. Linux Debian 1.3.1, que conseguí con la revista Linux Actual num 1, no tiene soporte de sonido :-((.

Leo el Howto-sonido del proyecto Lucas en el que señala como una de las primeras comprobaciones a realizar:

cat /dev/sndstat

al efectuar este comando me devuelve "No such device", que según el Howto significa que mi kernel no está compilado con soporte para sonido y me aconseja que lo recompile.

Posteo a las news de es.comp.os.linux para preguntar si alguien con Debian ha tenido el mismo problema y me pueden aconsejar qué hacer.

Me responden que, efectivamente: recompilar el núcleo con soporte para sonido. Hay que instalar las fuentes del kernel 2.0.30 con dselect y luego recompilar, aunque me advierten que mi tarjeta Pnp puede dar problemas.

Aprovechando que tengo que recompilar el núcleo, me voy a instalar ya de paso la versión 2.0.34 que viene con la revista PC Actual de Julio-Agosto-98.

4.2 Estudio del problema

El primer paso es recopilar información para guiarme en este proyecto :

Una vez estudiada toda esta información, se pueden extraer las siguientes conclusiones :

     La recompilación del kernel no ofrece ningún problema, ya que lo único
     que se genera es un fichero binario ejecutable. En mi caso, como arranco
     desde diskette si no me funcionara arrancaría desde el antiguo y ya
     está. Es cuestión de ir probando opciones en la configuración. 

     El controlador que viene con el kernel soporta, según la documentación,
     mi tarjeta Sound Blaster de 16 bits. 

     El problema estaría en que las tarjetas Pnp no están soportadas, pero al 
     parecer con una herramienta llamada "isapnp" o algo parecido, se podría
     resolver. 

Por tanto, la estrategia a seguir será la siguiente:

4.3 Compilación e instalación del kernel

Creación del archivo de configuración con xconfig

Lo primero es crear un fichero con las características que queremos que tenga nuestro nuevo Kernel, lo que vamos a hacer para generarlo es ejecutar el siguiente comando:

make xconfig

Ojo, hay que ejecutarlo estando posicionado en el directorio /usr/src/linux.

Solo se cargan como módulos (M) el soporte de puertos serie y el sonido. Originalmente se cargaba como módulo solo el driver del puerto serie, según se ve en el fichero /etc/modules (serial) que, al parecer es el que dice qué módulos se deben cargar. Siguiendo el consejo del post de Tendero, también incluyo el sonido (sound). Tampoco he tocado el fichero /etc/conf.modules.

De esto me he enterado después : si tienes una tarjeta Pnp el sonido hay que cargarlo como módulo obligatoriamente porque si no, se carga antes que el isapnp y no funciona.

Code maturity level options

        CONFIG_EXPERIMENTAL     
        Para versiones alpha    
        NO
Loadable module suport

        Enable loadable module suport (CONFIG_MODULES)
        Cargar módulos on-line
        YES

        Set versión information on all symbols for modules (CONFIG_MODVERSIONS)
        Verificar versiones de módulos al cargarlos
        YES

        Kernel daemon suport (CONFIG_KERNELD)
        Carga automática de módulos
        YES
General Setup

        Kernel math emulation (CONFIG_MATH_EMULATION)
        Simula coprocesador
        NO

        Networking suport (CONFIG_NET)
        Soporte de red
        YES

        Limit memory to low 16MB (CONFIG_MAX_16)
        Limite 16 MB de memoria
        NO

        PCI bios suport (CONFIG_PCI)
        Tarjetas con bus PCI
        YES

        System V IPC (CONFIG_SYSVIPC)
        Librerías IPC
        YES

        Kernel suport for a.out (CONFIG_BINFMT_AOUT)
        Soporte binarios a.out
        YES

        Kernel suport for ELF (CONFIG_BINFMT_ELF)
        Soporte binarios ELF
        YES

        Compile kernel as ELF (CONFIG_KERNEL_ELF)
        Sistemas con GCC ELF
        YES

        Procesor Type (CONFIG_M386)
        Tipo de procesador
        PENTIUM
Floppy, IDE, and other block devices

        Normal floppy disk support (CONFIG_BLK_DEV_FD)
        Unidad diskettera
        YES

        Enhaced IDE/MFM/RLL disck/cdrom/tape/floppy support (CONFIG_BLK_DEV_IDE)
        Soporte IDE
        YES

        Use old disk-only driver on primary interface (CONFIG_BLK_DEV_HD_IDE)
        NO

        Include IDE/ATAPI CDROM support (CONFIG_BLK_DEV_IDECD)
        Soporte CDROM IDE/ATAPI
        YES

        Include IDE/ATAPI TAPE support (CONFIG_BLK_DEV_IDETAPE)
        Soporte Cinta IDE/ATAPI
        NO

        Include IDE/ATAPI FLOPPY support (CONFIG_BLK_DEV_IDEFLOPPY)
        Soporte floppys IDE/ATAPI como Zip o Ls-120
        NO

        SCSI emulation support (CONFIG_BLK_DEV_IDESCSI)
        Emulación SCSI para dispositivos IDE/ATAPI
        NO

        Support removable IDE interfaces (PCMCIA) (CONFIG_BLK_DEV_IDE_PCMCIA)
        NO

        CMD640 bugfix support (CONFIG_BLK_DEV_CMD640)
        Resuelve un bug del chipset CMD640, utilizado en muchas placas madre
        YES

        CMD640 enhaced support (CONFIG_BLK_DEV_CMD640_ENHACED)
        NO

        RZ1000 bugfix support (CONFIG_BLK_DEV_RZ1000)
        Otro bug
        YES

        Interl 82371PIIX (Triton I/II) DMA support (CONFIG_BLK_DEV_TRITON)
        Soporte DMA para IDE interface chipset Triton
        YES

        Other IDE chipsets supports (CONFIG_IDE_CHIPSETS)
        Soporte para mas IDE's
        NO

        Loopback device support (CONFIG_BLK_DEV_LOOP)
        NO

        Múltiple devices drive support (CONFIG_BLK_DEV_MD)
        Varias particiones del HD en un bloque lógico
        NO

        Ramdisk support (CONFIG_BLK_RAM_DEV_RAM)
        Soporte para disco RAM
        NO

        XT hard-disk support (CONFIG_BLK_DEV_XD)
        NO
Networking options

        Network firewalls (CONFIG_FIREWALL)
        Configurar la maquina como firewall
        NO

        Network alliasing (CONFIG_NET_ALIAS)
        Múltiples direcciones IP
        NO

        TCP/IP networking (CONFIG_INET)
        Soporte Tcp/Ip
        YES

        IP forwarding gatewaying (CONFIG_IP_FORWARD)
        Configurar la maquina como router
        NO

        IP multicasting (CONFIG_IP_MULTICAST)
        NO

        IP syn cookies (CONFIG_SYN_COOKIES)
        Previene ataques Syn Floading
        NO

        IP accounting (CONFIG_IP_ACCT)
        Estadísticas IP
        NO

        IP optimize as router no host (CONFIG_IP_ROUTER)
        NO

        IP tunnelling (CONFIG_NET_IPIP)
        NO

        IP PC/TCP compatibility mode (CONFIG_INET_PCTCP)
        NO

        IP reverse ARP (CONFIG_INET_RARP)
        NO

        IP Dissable path MTU discovery (CONFIG_NO_PATH_MTU_DISCOVERY)
        NO

        IP drop source routed frames (CONFIG_IP_NOSR)
        Camino completo en paquetes IP
        YES

        IP Allow large windows (CONFIG_SKB_LARGE)
        YES

        The IPX protocol (CONFIG_IPX)
        Protocolo IPX de Novell
        NO

        Appletalk DDP (CONFIG_ATALK)
        Para Apple
        NO

        Amateur Radio AX25 L.2 (CONFIG_AX25)
        NO

        Kernel/user network link driver (CONFIG_NETLINK)
        NO
SCSI support

        SCSI support (CONFIG_SCSI)
        Soporte SCSI
        NO
Network device support

        Network device support (CONFIG_NETDEVICES)
        Soporte redes e Internet
        YES

        Dummy net drive support (CONFIG_DUMMY)
        YES

        EQL support (CONFIG_EQUALIZER)
        NO

        PLIP support (CONFIG_PLIP)
        Soporte Paralel Line Internet Protocol
        NO

        PPP support (CONFIG_PPP)
        Soporte Point to Point
        YES

        SLIP supporte (CONFIG_SLIP)
        Soporte serial line
        NO

        Radio network interfaces (CONFIG_NET_RADIO)
        NO

        Ethernet (10 or 100 Mbit) (CONFIG_NET_ETHERNET)
        Soporte red Ethernet
        NO

        Token Ring driver support (CONFIG_TR)
        NO

        FDDI driver support (CONFIG_FDDI)
        NO

        ARC NET support (CONFIG_ARCNET)
        NO
ISDN subsystem

        ISDN support (CONFIG_ISDN)
        NO
CDROM drivers

        Support non SCSI, IDE/ATAPI CD-ROM (CONFIG_CD_NO_IDESCSI)
        NO
Filesystems

        Quota support (CONFIG_QUOTA)
        Activar protecciones
        NO

        Minix fs support (CONFIG_MINIX_FS)
        Minix
        YES

        Extended fs support (CONFIG_EXT_FS)
        Ext
        NO

        Second Extended fs (CONFIG_EXT2_FS)
        Ext2
        YES

        Xiafs filesystem support (CONFIG_XIA_FS)
        Xiafs
        NO

        Native Language support (CONFIG_NLS)
        YES

        Iso 9660 Cd-Rom filesystem support (CONFIG_ISO9660_FS)
        Iso9660
        YES

        DOS FAT fs support (CONFIG_FAT_FS)
        Fat
        YES

        MSDOS fs support (CONFIG_MSDOS_FS)
        Msdos
        YES

        Umsdos (CONFIG_UMSDOS_FS)
        Umsdos
        YES

        VFAT (W95) fs support (CONFIG_VFAT_FS)
        Vfat
        YES

        Codepage NNN (CONFIG_NLS_CODEPAGE_NNN)
        NO

        Codepage 850 (CONFIG_NLS_CODEPAGE_850)
        Spain ...
        YES

        NLS-ISO-8859-1 (CONFIG_NLS_ISO8859_1)
        Spain ...
        YES

        NLS-ISO-8859-N (CONFIG_NLS_ISO8859-N)
        NO

        /proc fs support (CONFIG_PROC_FS)
        Proc
        YES

        NFS fs support (CONFIG_NFS_FS)
        Nfs
        YES

        Root filesystem on NFS (CONFIG_ROOT_NFS)
        NO

        SMB fs support (CONFIG_SMB_FS)
        NO

        OS2 HPFS fs support (CONFIG_HPFS_FS)
        NO

        System V fs support (CONFIG_SYSV_FS)
        NO

        UFS fs support (CONFIG_UFS_FS)
        NO
Character Devices

        Standard/generic serial support (CONFIG_SERIAL)
        Puertos serie
        M

        Digiboard PC/Xx support (CONFIG_DIGI)
        NO

        Cyclades ass mux suport (CONFIG_CYCLADES)
        NO

        Stallion multiport support (CONFIG_STALDRV)
        NO

        Sdl Ris Com8 card support (CONFIG_RISCOM8)
        NO

        Paralell printer support (CONFIG_PRINTER)
        YES

        Specialix IO8 card support (CONFIG_SPECIALIX)
        NO

        Mousse support (not serial mice) (CONFIG_MOUSE)
        Ratones a puerto COM (Ps2,etc)
        NO

        Support for user misc device modules (CONFIG_UMISC)
        NO

        QIC 02 tape support (CONFIG_QIC02_TAPE)
        NO

        Ftape support (CONFIG_FTAPE)
        NO

        Advanced power management BIOS support (CONFIG_APM)
        NO

        Watchdog timer support (CONFIG_WATCHDOG)
        NO

        Enhaced Real Time support (CONFIG_RTC)
        YES
Sound

        Solo se listan las opciones elegidas

        Sound card support (CONFIG_SOUND)
        M

        Sound Blaster support (CONFIG_SB)
        YES

        /dev/dsp and /dev/audio support (CONFIG_AUDIO)
        YES

        MIDI interface support (CONFIG_MIDI)
        YES

        FM synteticer support (CONFIG_YM38)
        YES

        I/O Base        
        220

        IRQ     
        Por defecto salía 7      
        5

        DMA 8 bits
        1

        DMA 16 bits
        5

        MPU I/O Base
        Por defecto salía 0
        300

        Audio DMA Buffer size
        65536
Kernel hacking

        Kernel profiling support
        CONFIG_PROFILE
        Para pruebas

Generación del kernel con soporte de sonido

SECUENCIA DE COMANDOS (siempre en /usr/src/linux) :

Make dep

Establece las dependencias entre los módulos seleccionados

Make clean

Limpia los restos de anteriores compilaciones, importante ya que make solo compila los archivos no construidos

Make zdisk

Generar la imagen del kernel en /usr/src/linux/arch/i386/boot/zimage y deja además una copia en diskette (yo arranco con diskette).

En un primer intento me da el error: AS86 not found (no lo había instalado). Instalo el paquete bin86 con dselect. Vuelvo a ejecutar el comando y funciona sin problemas.

Make modules

Compila los módulos seleccionados como cargables en ejecución y los deja en el árbol de directorios de las fuentes.

Make modules_install

Copia los módulos creados y sus dependencias a /lib/modules/2.0.34 que es donde los busca la herramienta que efectúa la carga.

Una vez efectuados estos pasos, a continuación, modifico el fichero /etc/modules incorporando la palabra sound debajo de serial, tal y como sugiere Tendero en su post.

Es la hora de comprobar si todo ha ido correctamente, para ello, inserto el diskette con el nuevo kernel y rearranco el sistema.

En un principio todo parece haber ido bien, sin embargo, sigo sin sonido ...

4.4 Resolución del problema de las tarjetas de sonido Pnp

Para verificar si tengo sonido, he insertado un cd de música en el cd-rom y después he ejecutado xplaycd. Al principio me ha dado que tengo que ser root para poder montar el cd-rom, después me he puesto como root y he vuelto a hacer la misma operación, todo ha funcionado bien excepto que ... no se oía nada.

Hago /sbin/lsmod para saber los módulos cargados como residentes en el kernel y me sale solo "serial".

Hago /sbin/depmod -a , y después /sbin/modprobe sound, para cargar manualmente el módulo, y ahora, al hacer /sbin/lsmod sí me sale "sound".

Ahora sigo las instrucciones del Howto-sonido:

     Ejecuto el comando ls -l /dev/sndstat y me sale correcto 

     El comando cat /dev/sndstat sale muy parecido excepto que 
     audio devices, synth devices, midi devices y mixers, salen vacíos.

Visto que no termina de ir bien la cosa, yo creo que el problema puede estar en que actualmente Linux no soporta muy bien las tarjetas Pnp, pero al parecer hay un paquete de programas que pueden solucionar el tema (isapnptools).

Estudiemos el tema del isapnp:

     tengo instalados los siguientes ficheros : 

          /sbin/isapnp 

          /etc/isapnp.conf 

          /etc/init.d/isapnp 

          /usr/doc/isapnptools/INSTALL , Readme_DEBIAN 

     Hay que generar el fichero /etc/isapnp.conf tal y como se explica en
     /usr/doc/isapnptools/INSTALL, es decir, utilizando el comando 

          pnpdump > etc/isapnp.conf 

          este comando me ha generado un fichero isapnp.conf en el que se
          detectan dos tarjetas Pnp (?): 

               SLI4161 - SYM 53C416 - Device support I/O range check register 

               CTL0070 - Creative ViBRA16C PnP - Logical device CTL0001 - Audio 

               --------------------------------- Logical device CTL0070 - Game 

     Ahora me leo las instrucciones (man isapnp.conf) para depurar el
     fichero. 

     Dejo solo lo referente a Audio y Game : 

               (READPORT 0x0203) 

               (ISOLATE) 

               (IDENTIFY *) 
                 
               (CONFIGURE CTL0070/-1 (LD 0 

               # ANSI string -- >Audio< -- 

               (INT 0 (IRQ 5 (MODE +E))) 

               (DMA 0 (CHANNEL 1)) 

               (DMA 1 (CHANNEL 5)) 

               (IO 0 (BASE 0x0220)) 

               (IO 1 (BASE 0x0330)) 

               (IO 2 (BASE 0x0388)) 

               (ACT Y) 

               )) 

               (CONFIGURE CTL0070/-1 (LD 1 

               # ANSI string -- <Game>-- 

               )) 

               (WAITFORKEY) 

Siguiendo las instrucciones ejecuto como root isapnp /etc/isapnp.config.

No me da error alguno. Ahora cat /dev/sndstat me sale correcto.

Ahora hay que meter isapnp en el arranque (/etc/init.d/boot), tal como se explica
en /usr/doc/isapnptools/Readme.Debian. (!!!! ya lo tenia !!!!).

Por último ... rearranco linux ... meto el cd de Los Ronaldos ... ejecuto xplaycd ... y ...

!!!!!!!! FUNCIONA !!!!!!!!!!!!!

Parece que por fin he conseguido que funcione todo, no ha sido tan difícil como pensaba, pero teniendo en cuenta que soy bastante novato y además solo un aficionado, no está mal. Por cierto, los midi todavía no me funcionan.

*****************************************************************************

DOCUMENTOS

Post de Tendero

Subject: Como he configurado mi Awe64 ... y funciona !!!
From: TENDERO@argen.net
Date: 1998/07/07
Newsgroups: es.comp.os.linux

hay va la forma en que he configurado mi Awe64 en Debian 1.3.1

0) instalar el driver (paquete awedrv-0.3.3c, sección sound)

1) configurar el núcleo. Como el driver hay que cargarlo en forma de modulo,es necesario configurar el kernel con soporte para estos. En la opcion de sonido tengo:

        [M] Sound card support
        [*] Sound blaster (SB, SBpro, SB16, clones) support
        [*] MPU-401 support (NOT for SB)
        [*] /dev/dsp and /dev/audio support
        [*] MIDI interface support
        [*] FM synthesizer (YM3812/OPL-3) support
        (220) I/O base for SB Check from manual of the card
        (5) Sound Blaster IRQ Check from manual of the card
        (1) Sound Blaster DMA 0, 1 or 3
        (5) Sound Blaster 16 bit DMA (_REQUIRED_for SB16, Jazz16, SMW)
        (0) MPU401 I/O base of SB16, Jazz16 and ES1688 Check from manual of
        (-1) SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Use -1 with SB16
        (330) I/O base for MPU401 Check from manual of the card
        (9) MPU401 IRQ Check from manual of the card
        (65536) Audio DMA buffer size 4096, 16384, 32768 or 65536
        [*] Additional low level drivers
        [*] AWE32 synth
Como el sonido esta cargado como modulo, compilo el kernel una sola vez, y cuando tengo que modificar algo del audio, solo hago make_modules y make modules_install, sin necesidad de recompilar ni instalar el núcleo.

El archivo /etc/conf.modules no lo he tocado y simplemente he insertado

sound

en el archivo /etc/modules.

2) Además, como mi tarjeta de PnP, he tenido que utilizar las isapnp, creando el archivo de configuración

Mi tarjeta de sonido

Recompilacion del kernel

5. Cómo configuré la impresora

TEORIA

Para que el sistema de impresión funcione se necesita que esté arrancado un demonio (daemon, programa residente) que es el que se encarga de ordenar los trabajos en la cola, imprimirlos en el momento oportuno, etc, etc.

Este demonio es 'lpd' y se instala automáticamente en la distribución Debian.1.3.1., no es necesario configurarlo y se arranca cuando te conectas.

Lo que si hay que configurar es la impresora, esta configuración que se efectúa por medio de un programa de utilidad, reside en un fichero de texto llamado /etc/printcap, el mío contiene las siguientes líneas:

     lp|HP690|hp690C|HP Deskjet 690C:\ 

     :lp=/dev/lp1:sd=/var/spool/lpd/hp690C:\ 

     :sh:pw#80:pl#66:px#1440:mx#0:\ 

     :if=/usr/sbin/dj550c-filter:\ 

     :af=/var/log/lp-acct:lf=/var/log/lp-errs: 

Como la mayoría de las impresoras vienen configuradas para DOS y en Linux el salto de carro es distinto que en DOS, para poder imprimir correctamente necesitamos un 'filtro' para ello debemos instalar el programa magicfilter que será llamado por lpd cada vez que vayamos a imprimir, utilizando el filtro que aparece en el parámetro :if, este filtro lo configuramos por medio del programa magicfilterconfig.

Por ultimo, el programa 'lpr' es con el que imprimimos los documentos.

PRACTICA

Resumiendo, necesitamos:

6. Cómo conectar con la Internet

6.1 Conexion Internet Debian 1.3.1 (a mano)

Hay que hacerlo como root.

El kernel debe soportar PPP, para saberlo, si ejecutas el comando "dmesg | more" te tienen que salir, entre otros, unos mensajes parecidos a estos:

        ... 

        Swansea University Computer Society NET3.035 for Linux 2.0 
        NET3: Unix domain sockets 0.13 for Linux NET3.035. 
        Swansea University Computer Society TCP/IP for NET3.034 
        IP Protocols: ICMP, UDP, TCP 
        ... 

        PPP: version 2.2.0 (dynamic channel allocation) 
        PPP Dynamic channel allocation code copyright 1995 Caldera, Inc. 
        PPP line discipline registered. 
        PPP BSD Compression module registered 
        ...

En el directorio /etc hay que tener estos dos archivos (o crearlos con 'touch archivo'):

        # ls -l /etc/ppp.* 

        -rw-r-----   1 root     dip           296 Apr 10 11:47 /etc/ppp.chatscript 
        -rw-r-----   1 root     dip            82 Apr 10 11:37 /etc/ppp.options_out 
Y en /etc/ppp/ estos otros (como mínimo):
        # ls -l /etc/ppp 
        
        -rw-r-----   1 root     dip            82 Apr 10 11:42 options 
        -rw-------   1 root     root           32 Apr 10 11:21 pap-secrets 
        
Ahora seguiremos los siguientes pasos
  1. Asignamos al grupo de usuarios 'dip' estos archivos (si es necesario):
            # chgrp dip /etc/ppp.chatscript /etc/ppp.options_out 
            # chgrp dip /etc/ppp/options 
    
  2. Editamos 'ppp.chatscript':
            =====inicio===== 
            TIMEOUT 5 
            ABORT        'DELAYED' 
            ABORT        '\nBUSY\r' 
            ABORT        '\nNO ANSWER\r' 
            ABORT        '\nNO CARRIER\r' 
            ABORT        '\nRING\r\n\r\nRING\r' 
            ABORT        '\nNO DIALTONE\r' 
            ABORT        '\nERROR\r' 
            ''           '\rATH0' 
            'OK-+++\dATH0-OK''ATZM0L0' 
            TIMEOUT 60 
            OK           'AT&Q6%C0' 
            OK           'ATM0'      -- si no quieres escuchar los ruidos 
            OK           'ATW1DT055' 
            CONNECT 
    
    =====fin===== 
    
    yo he necesitado la línea -- OK          'AT&Q6%C0' -- para 
    desactivar la corrección de errores y la compresión de datos en mi 
    módem 'Boca Research MV.34SAI' a 28.8 Kbps. Prueba sin ella. 
    
    Si desde tu línea telefónica todavía no tienes cobertura 
    para marcar por tonos, cambiar -- OK           'ATW1DT055' -- 
    por -- OK           'ATW1DT055' -- (W1 para que muestre con 
    plog a que velocidad se establece la conexión). 
    
  3. Editamos /etc/ppp.options_out
            =====inicio===== 
            defaultroute 
            /dev/ttyS2 modem 
            crtscts 115200 
            :192.168.0.2 
            noipdefault 
            user LCA013138@lacaixaweb 
            ipcp-accept-remote 
            mru 576 
            mtu 576 
            =====fin===== 
    
    con "/dev/ttyS2" le indico el COM3, donde yo tengo mi modem 
    (ttyS0: COM1, ttyS1: COM2). 
    
    ":192.168.0.2" e "ipcp-accept-remote" son para solucionar algunos 
    problemas durante el establecimiento de la conexión. 
    
    mru y mtu para mejorar la velocidad de transmisión de paquetes. 
    
  4. IMPORTANTE: hacemos copia de /etc/ppp/options viejo y después lo sobreescribimos con
    /etc/ppp/options_out
            # cp /etc/ppp/options /etc/ppp/options.original 
    
            # cp /etc/ppp.options_out /etc/ppp/options 
    
              Este paso no está muy correcto. Hay duplicidad de 
              información. Pero no da problemas. 
    
  5. Editamos el fichero /etc/resolv.conf:
            =====inicio===== 
            nameserver 194.224.52.4              # DNS primaria 
            nameserver  www.xxx.yyy.zzz          # DNS secundaria, si la tienes 
            =====fin=====
    
  6. Hacemos copia de 'pap-secrets':
            # cp /etc/ppp/pap-secrets /etc/ppp/pap-secrets.original 
    
  7. Editamos /etc/ppp/pap-secrets:
            =====inicio===== 
            LCA013138@lacaixaweb * xxxxxxxxxx 
            =====fin===== 
    

Ahora el sistema debería estar listo para conectar:

        # pon

        deberías sentir como el modem llama y 'negocia' (esos sonidos...) 
        si la conexión tiene éxito, con 'plog' deberías ver algo 
        así: 

        # plog 

        Apr 10 11:51:27 Anarres chat[479]: expect (CONNECT) 
        Apr 10 11:51:27 Anarres chat[479]: ^M 
        Apr 10 11:51:44 Anarres chat[479]: ATDT055^M^M 
        Apr 10 11:51:44 Anarres pppd[478]: Serial connection established. 
        Apr 10 11:51:44 Anarres chat[479]: CONNECT -- got it 
        Apr 10 11:51:45 Anarres pppd[478]: Using interface ppp0 
        Apr 10 11:51:45 Anarres pppd[478]: Connect: ppp0 -- /dev/ttyS2 
                Apr 10 11:51:50 Anarres pppd[478]: Remote message: 
        Apr 10 11:51:50 Anarres pppd[478]: local  IP address 195.53.207.241 
        Apr 10 11:51:50 Anarres pppd[478]: remote IP address 172.16.1.36 
si no funciona te saldrá algo así:
        # plog 

        Apr  5 15:38:11 Anarres chat[5904]: ^M 
        Apr  5 15:38:34 Anarres chat[5904]: ATDT055^M^M 
        Apr  5 15:38:34 Anarres chat[5904]: CONNECT -- got it 
        Apr  5 15:38:34 Anarres pppd[5890]: Serial connection established. 
        Apr  5 15:38:35 Anarres pppd[5890]: Using interface ppp0 
        Apr  5 15:38:35 Anarres pppd[5890]: Connect: ppp0 -- /dev/ttyS2 
        Apr  5 15:38:36 Anarres pppd[5890]: Hangup (SIGHUP) 
        Apr  5 15:38:36 Anarres pppd[5890]: Modem hangup 
        Apr  5 15:38:36 Anarres pppd[5890]: Connection terminated. 
        Apr  5 15:38:36 Anarres pppd[5890]: Exit. 
o también:
        # plog 

        Apr 10 11:43:18 Anarres pppd[420]: Serial connection established. 
        Apr 10 11:43:19 Anarres pppd[420]: Using interface ppp0 
        Apr 10 11:43:19 Anarres pppd[420]: Connect: ppp0 -- /dev/ttyS2 
        Apr 10 11:43:20 Anarres pppd[420]: Remote message: 
        Apr 10 11:43:21 Anarres pppd[420]: Could not determine remote IP address 
        Apr 10 11:43:21 Anarres pppd[420]: LCP terminated at peer's request 
        Apr 10 11:43:22 Anarres pppd[420]: Hangup (SIGHUP) 
        Apr 10 11:43:22 Anarres pppd[420]: Modem hangup 
        Apr 10 11:43:22 Anarres pppd[420]: Connection terminated. 
        Apr 10 11:43:22 Anarres pppd[420]: Exit. 
este segundo me salía cuando no desactivaba la corrección de errores y la compresión de datos; el primero cuando había más problemas aun, :-)

Cuando deseas finalizar la conexión escribes:

        # poff 
        # 
y deberías oir como el modem 'cuelga'

si haces 'plog':

        # plog 

        Apr 10 11:49:35 Anarres pppd[457]: Serial connection established. 
        Apr 10 11:49:35 Anarres chat[458]: CONNECT -- got it 
        Apr 10 11:49:36 Anarres pppd[457]: Using interface ppp0 
        Apr 10 11:49:36 Anarres pppd[457]: Connect: ppp0 -- /dev/ttyS2 
        Apr 10 11:49:41 Anarres pppd[457]: Remote message: 
        Apr 10 11:49:41 Anarres pppd[457]: local  IP address 195.53.207.249 
        Apr 10 11:49:41 Anarres pppd[457]: remote IP address 172.16.1.50 
        Apr 10 11:49:55 Anarres pppd[457]: Terminating on signal 15. 
        Apr 10 11:49:55 Anarres pppd[457]: Connection terminated. 
        Apr 10 11:49:55 Anarres pppd[457]: Exit. 
Para poder utilizar 'pon', 'plog' y 'poff' sin ser 'root':
        # adduser 'usuario' dip 

        # chmod 640 /etc/ppp.* 
        # chmod 640 /etc/ppp/options 
Si haces:
        $ plog -f & 

se puede seguir todas las vicisitudes de la conexión.

6.2 Conexión a internet en Debian 2.0 (con pppconfig)

En Debian 2.0 existe la utilidad "pppconfig" para generar la conexión a Internet.

Tienen que existir los directorios /etc/chatscripts y /etc/ppp/peers, si no, no te arranca la utilidad

Comandos :

                # pon                   : efectuar conexión 
                # plog o plog -f        : para ver el log de la conexión

                 local IP address xxx.xx.xxx.xx 
                 remote IP address xxx.xx.xxx.xx 

                 (si salen estos mensajes es que ya estas conectado)

                # poff                  : para desconectar 

7. El correo y Linux

7.1 Netscape, lo fácil

Cuando instalé Linux también me instalé Netscape para todos los temas relativos a internet como www, correo y news, su uso es bastante sencillo y hasta ahora no me ha dado demasiados problemas, solo de vez en cuando algún molesto 'bus error' y todo se va al carajo ...

Sin embargo, no hago mas que oir hablar sobre programas como sendmail, fetchmail, procmail, pine, etc. , además parece ser que el uso de Netscape no está muy bien visto por la gente linuxera, por ejemplo se dice que Netscape consume demasiados recursos y que lo tienen instalado la gente que es poco currante ...

De todas formas, yo personalmente, lo que busco en Linux es poder aprender cosas, no me gustan los S.O. o programas que son muy fáciles de configurar, quiero meterme en líos y buscarme problemas que es la única forma de aprender, por lo tanto siguiendo con esa filosofía, decididamente voy a intentar instalarme y configurarme todos estos programas de correo y news.

7.2 Información sobre el tema

7.3 Agentes que pueden intervenir

En primer lugar, estos son los agentes que pueden intervenir en todo el tema este del correo :

MUA (Mail User Agent)

agente de usuario, programas para leer y escribir correo (Elm, Mutt, Pine)

MTA (Mail Transport Agent)

agente de transporte (mailer), transfiere los mails a su correcto destino (Sendmail)

MDA (Mail Delivery Agente)

agente de entrega de correo (Sendmail, Procmail)

Para no liarme mucho, de momento usaré como MUA el propio Netscape, es decir lo usaré para escribir el correo, pero cuando lo envíe pinchando el botón "Send now", quiero que me lo deje en la cola de mensajes a enviar de mi MTA, para ello configuro Netscape indicándole que mi servidor es mi propia máquina (localhost o 127.0.0.1), es decir :

        en edit / preferences / Mail&Groups / Mail server 
        pongo como Outgoing mail (SMTP) Server = 127.0.0.1

7.4 SENDMAIL

Ahora voy a configurar el MTA Sendmail, este programa tomará los correos provenientes de mi MUA, establecerá una sesión SMTP con el MTA de mi servidor, y le transferirá el mensaje.

Sigo las instrucciones del Fetchmail+Sendmail-COMO que antes estaba en la página del Proyecto Lucas (la última vez que entré ya no estaba este COMO) :

Ahora efectúo una prueba :

Como dice monkiki en su página El correo: Pine, Fetchmail, Sendmail :

Si queremos borrar un mensaje de la cola, hay que borrar el mensaje de los dos ficheros 
que están en /var/spool/mqueue. Pero cuidado con lo que borras ;-). 

(Efectivamente, en este directorio se guardan los mensajes hasta tanto no se envían. 
El mensaje se divide en dos ficheros :  df+identificativo es el cuerpo del mensaje y 
qf+identificativo es la cabecera, debes borrar los dos.

Si no quieres recibir un warning cada vez que un mensaje lleve más de cuatro horas sin ser enviado podemos comentar la siguiente línea de /etc/sendmail.cf: O Timeout.queuewarn=4h

7.5 FETCHMAIL

Bueno, ahora que tengo el Sendmail configurado y ya puedo enviar mensajes con él, voy a ver que hay para recibir. Me ha parecido ver por ahí que el Sendmail también vale para recibir (?), pero el que veo que usa y recomienda todo el mundo es Fetchmail, así que vamos con él.

Según las paginas man, Fetchmail es un programa que recoge el correo desde un servidor POP o IMAP y se lo pasa a tu sistema local de entrega de correo después de lo cual puedes tratarlo con algún MUA. Según monkiki la razón para usar Fetchmail para recoger el correo en lugar de Sendmail es que :

Como no siempre estamos conectados a Internet, Sendmail no es capaz de recibir al correo 
automáticamente, de modo que usamos este programa que recoge el correo de donde le digamos 
y se lo pasa a Sendmail.

Como antes, sigo las instrucciones del Fetchmail+Sendmail-COMO del Proyecto Lucas

Nuevamente, voy a probar usando como MUA el Netscape esta vez para leer los mensajes recibidos. Parece ser, que Fetchmail recoge el correo y se lo envía al sendmail local, el cual, si está correctamente configurado, lo escribirá en el directorio /var/spoll/mail en el fichero correspondiente al nombre del usuario.

Los programas (MUA) de correo de Linux acceden habitualmente a este lugar para leer el correo. Para usar Netscape hay que hacer :

        en edit / preferences / Mail&Groups / Mail server type 
        pincho  'Movemail aplication' y 'Built in'

Con esto Netscape busca el correo en /var/spool/mail y no en ningún servidor POP. Ahora la prueba :

También he probado a mandarme mensajes entre los usuarios de mi propia máquina y funciona perfectamente, no hay que ejecutar sendmail ni fetchmail ya que el demonio sendmail local se encarga de repartirlos, por supuesto no hace falta estar conectado a internet

7.6 PROCMAIL

Paso ahora a configurar Procmail, que es un programa que recoge el correo recibido y, en base a un fichero de control que contiene una serie de condiciones y acciones, verifica si el mensaje cumple alguna de las condiciones y si es así ejecuta la acción correspondiente.

Este fichero de control es un fichero que debe estar en el Home del usuario y llamarse .procmailrc, la serie de condiciones y acciones que contiene se llaman recetas.

Lo primero que hay que hacer es conseguir que cada vez que se reciba un correo se ejecute Procmail para ello, como está expuesto en el documento Procmail del que hablo arriba, puedes crear un fichero home/.forward, pero yo me he liado un poco con esta opción y no me ha llegado a funcionar bien, además creo que es mucho mejor la segunda posibilidad, que es configurar procmail como Agente de Entrega de Correo (mail delivery agent) de sendmail.

Por lo tanto, volvemos al fichero de configuración /etc/sendmail.cf y hay que buscar Mlocal en la sección Local and Program Mailer specification y sustituir lo que pone por esto :

          Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qmn, S=10/30, 
                  R=20/40, T=DNS/RFC822/X-Unix, 
                  A=procmail -a $h -d $u

Esto me ha funcionado bien. Después configuramos el home/.procmailrc del usuario/s que recibe el correo incluyendo las recetas que se quiera que pueden servir para desviar correos a distintos directorios en función de los parámetros de la cabecera del mensaje, etc.

Mi ./procmailrc no lo tengo todavía muy depurado y es bastante sencillo, pero funciona bien :

          VERBOSE=on 
          MAILDIR=/home/traque/nsmail 
          LOGFILE=/home/traque/procmailog 
          # 
          # Esta receta manda todo lo que trae en el subject la palabra 'linux' 
                al directorio /home/traque/nsmail/Linux 
          # 
          :0 
          * ^Subject:.*(linux) 
          Linux 
          # 
          # Esta receta manda todo lo que trae en el subject la palabra 'internet' 
                a /home/traque/nsmail/Internet 
          # 
          :0 
          * ^Subject:.*internet 
          Internet 
          # 
          # Esta receta manda todo lo que viene para mi e-mail a Personal 
          # 
          :0 
          * ^TOtraque@mx3.redestb.es 
          Personal 

El fichero logfile viene bien para depurar las recetas, verbose=on es para que se graben todos los mensajes en el log, el Maildir es el que utiliza Netscape, ya que es el que estoy usando de momento.

Si ejecutas el programa Mailstat que viene con el paquete Procmail, te saca una estadística de los mensaje recibidos y ha que directorio los ha llevado, desde la última vez que lo ejecutaste.

*********************************************************************************

DOCUMENTOS

PROCMAIL

Cuando se invoca, procmail lee el mensaje de correo de su entrada estándar, después separa la cabecera del cuerpo, y examina el fichero $HOME/.procmailrc. De acuerdo con el contenido de este fichero, el correo es entregado en su lugar correcto. Si no existe el fichero rc o falla en su procesamiento el correo es entregado en el fichero mailbox por defecto.

El fichero .procmailrc contiene una serie de instrucciones llamadas recetas las cuales pueden contener asignaciones de variables, sentencias condicionales e instrucciones. Cuando se procesa un mensaje, primero se examina si hay alguna asignación de variable en el fichero, si la hay lleva a cabo ésta y las acciones asociadas en caso de que se trate de una variable con significado especial.

Cuando se encuentra una receta comprueba si la cabecera del mensaje cumple alguna de las condiciones de la receta, si es así ejecuta la línea de acción y termina. Si la cabecera del mensaje no contiene alguna de las expresiones regulares de las líneas de condición de la receta, ésta falla y procmail pasa a la siguiente receta o asignación. Si se llega al final del recetario sin que se cumpla ninguna receta, el mensaje es añadido al final del fichero $DEFAULT y termina. El fichero recetario también puede ser dado por la línea de órdenes.

Para que procmail procese cada mensaje que recibimos debemos conseguir que cada vez que nos llegue uno de ellos procmail se ejecute y el mensaje le sea alimentado por su entrada estándar. Esto se puede conseguir de dos formas :

El fichero de recetas se compone de tres elementos: comentarios, asignaciones de variables de entorno y recetas.

Defensa contra Email-Bombing y Mail No-deseado

GUÍA DEL HACKING (mayormente) INOFENSIVO
Serie del Principiante #2, Sección 2.
Hackear en Windows95 (y un poco de NT, por dios)!
_____________________________________________________________
Copyright (c) Zach Babayco, 1996

Últimamente, existe más y más gente ahí fuera enviándote email que simplemente no deseas, como "Haz Dinero Rápidamente" basura o lamer-zines que nunca has deseado recibir. O peor todavía, está el email bomb.

Existen dos clases de email bomb, el Mail-masivo y el , email bomb empleando listas de correo:

1) Ataques de Mail-masivo. Esto es cuando el atacante te envía cientos, o puede que incluso miles de piezas de email, normalmente con la ayuda de un script y de mail falso. De los dos tipos, este es del que más fácilmente nos podemos defender, ya que los mensajes provendrán de sólo unas pocas direcciones como mucho.

2) Mail bombs usando Listas de Correo. En este caso, el atacante te suscribirá a todas las listas de correo que él o ella pueda. Esto es mucho peor que un ataque por email masivo porque estarás recibiendo email desde muchas listas de correo distintas, y tendrás que guardar alguna cantidad de ellos para poder averiguar cómo desuscribirte de cada lista.

Aquí es donde Procmail entra en acción. Procmail (pronunciado prok-mail) es un programa de filtrado de email que puede hacer varias cosas muy ingeniosas con tu email, como por ejemplo, si te suscribes a varias listas de correo que producen un gran volumen de mensajes, puede configurarse para clasificar el email en distintas carpetas de manera que todos los mensajes no estén mezclados en tu buzón. Procmail puede también ser configurado para borrar el email recibido de ciertas personas y direcciones.

Configurando Procmail

Primero, necesitas ver si tu sistema tiene instalado Procmail. En el prompt, teclea:

> which procmail

Si tu sistema tiene instalado Procmail, este comando te dirá dónde está localizado el programa. Apunta esto, lo necesitarás más tarde.

*NOTA* Si tu sistema te da una respuesta como "Comando desconocido: which" entonces prueba a sustituir `which´ por `type´, `where´ o `whereis´.

Si todavía no encuentras Procmail, entonces seguramente es que tu sistema no lo tiene instalado. Sin embargo, la suerte no te ha abandonado completamente (mira el FAQ mencionado al comienzo de este archivo y mira si tu sistema tiene alguno de los programas sobre los que se habla allí.)

A continuación, tienes que configurar el archivo sobre el que trabajará Procmail. Durante el resto de este documento, usaré el editor Pico. Tú puedes usar cualquier editor con el que te sientas cómodo.

Asegúrate de que estás en el directorio raíz, y entonces arranca tu editor.

>cd
>pico .procmailrc

Introduce lo siguiente en el archivo .procmailrc:

#Esta línea le dice a Procmail lo que tiene que poner en su archivo de registro. 
#Ponlo en on cuando estés #haciendo el debugging. 

VERBOSE=off 

#Sustituye ?mail? por tu directorio de email. 
MAILDIR=$HOME/mail 

#Aquí es donde el archivo de registro (logfile) y el archivo rc serán guardados 
PMDIR=$HOME/.procmail 

LOGFILE=$PMDIR/log 
#INCLUDERC=$PMDIR/rc.ebomb 
(sí, teclea la línea INCLUDERC CON el #) 

Ahora que has tecleado eso, guardalo y regresa al directorio raíz. 

> cd 
> mkdir .procmail 
Ahora ve al directorio que acabas de crear, y arranca tu editor con un nuevo archivo: rc.ebomb:

IMPORTANTE: Asegúrate que desactivas la opción de ajuste de palabras de tu editor en esta parte. Necesitarás tener la segunda, tercera y cuarta línea del siguiente ejemplo todas en una sola línea. Con Pico, usa el modificador -w. Consulta el manual de uso de tu editor para desactivar la opción de ajuste de palabras. Asegúrate de que cuando lo edites, NO DEJES ESPACIOS en esa línea.

> cd 
> pico -w rc.noebomb 

#noebomb = bloqueador de email bomb 

:0 
*!^((((Resent-)?(From|Sender)|X-Envelope-From):|From)(.*[^.%@a-z0-9])? 
(Post(ma?(st(e?r)?|n)|office)|Mail(er)?|daemon|mmdf|root|uucp|LISTSERV|owner 
|request|bounce|serv(ices)?|er))([^.!:a-z0-9]|$))) 
* ! ^From:.*(postmaster|Mailer|listproc|majordomo|listserv|cmeinel|johnb) 
* ! ^TO(netstuff|computing|pcgames) 
/dev/null 
Veamos qué es lo que hace lo anterior. Las primeras líneas le dicen a Procmail que este es el principio de un archivo "receta". Una receta consiste básicamente en lo que suena, le dice al programa lo que debe buscar en cada mensaje de email, y si encuentra lo que estaba buscando, realiza una acción con su correspondiente mensaje: dirigiendo el mensaje a alguien, colocándolo en una carpeta determinada, o en este caso, borrarlo.

La segunda, tercera y cuarta líneas (las que empiezan con *) se llaman CONDICIONES. El asterisco (*) le dice a Procmail que ese es el comienzo de una condición. El ! le dice que haga lo CONTRARIO de lo que normalmente haría.

Condición 1:

* ! ^((((Resent-)?(From|Sender)|X-Envelope-From):|From)(.*[^.%@a-z0-9])? 
(Post(ma?(st(e?r)?|n)|office)|Mail(er)?|daemon|mmdf|root|uucp|LISTSERV|owner 
|request|bounce|serv(ices)?|er))([^.!:a-z0-9]|$))) 
No te desmoralices con esto, es más simple de lo que parece a primera vista. Esta condición le dice a Procmail que mire el encabezamiento del mensaje, y que vea si proviene de direcciones de administración como root o postmaster, y que también compruebe si proviene de un mailer-daemon (la cosa que te envía el mensaje cuando tú envías uno). Si el mensaje SÍ proviene de una de estas direcciones, la receta pondrá el mensaje en tu buzón y no lo borrará.

Nota para el Usuario Avanzado: Aquellos de vosotros que estéis familiarizados con Procmail os estareis preguntando seguramente por qué digo que es necesario que el usario teclee esa línea de comandos tan larga entera, en vez de usar el comando FROM_MAILER. Bueno, parecía una buena idea al principio, pero hace unos días descubrí que FROM_MAILER comprueba también la Prioridad en el encabezamiento para las palabras "junk", "bulk" y "list". Muchos (si no todos) los servers de listas de correo ponen en el apartado de Prioridad: bulk o Prioridad: list, por tanto si alguien te subscribe a varios cientos de listas FROM_MAILER dejará pasar la mayoría de los mensajes, lo cual NO es lo que deseamos.

Condición 2:

* ! ^From:.*(listproc|majordomo|cmeinel|johnb) 
Esta condición hace una revisión más exhaustiva de la línea From: del encabezamiento. En este ejemplo, busca las palabras listserv, majordomo, cmeinel, y johnb. Si es de cualquiera de esa gente, le permite pasar a tu buzón. Si no, lo echa a patadas. Aquí es donde pondrías los nombres de usuario de la gente que normalmente te envía mensajes, y también los nombres de los servidores de listas de correo , como por ejemplo listproc y majordomo. Cuando edites esta línea, acuérdate de: únicamente poner el nombre de usuario en la condición, no la dirección de email completa de la persona, y acuérdate también de poner una | entre cada nombre.

Condición 3:

* ! ^TO(netnews|crypto-stuff|pcgames) 
Esta condición final es donde pondrías los nombres de usuario de las listas de correo a las que estas suscrito (si es que estás suscrito a alguna). Por ejemplo, yo estoy suscrita a las listas netnews, crypto-stuff y pcgames. Cuando recibes una mensaje desde una lista de correo la mayoría de las veces la lista de direcciones vendrá en la parte To: o Cc: del encabezamiento, en vez de en la parte From:. Esta línea buscará esos nombres de usuario y pasará los mensajes que concuerden a tu buzón. Las instrucciones de edición son las mismas que para la Condición 2.

La línea final, /dev/null, es esencialmente la papelera de tu sistema. Si una pieza de email no concuerda con ninguna de las condiciones (por ejemplo, no proviene de un administrador de sistema, ni de ninguna de tus listas de correo ni de nadie que conozcas) Procmail arrojará ese mensaje a dev/null, para que nunca vuelva a ser visto.

Ok. Ahora deberías tener ya creados dos archivos: .procmailrc y rc.noebomb. Necesitamos uno más antes de poner a funcionar todo apropiadamente. Guarda rc.noebomb y sal de tu editor, y ve a tu directorio raíz. Una vez allí, arranca tu editor otra vez con la opción de ajuste de palabra desactivada.

> cd > pico -w .forward
Ahora vamos a ver un extracto del FAQ sobre Filtrado de Email de Nancy M.:
        Introduce una versión modificada de lo siguiente en tu ~/.forward: 

        ?|IFS=? ? && exec /usr/local/bin/procmail -f- || exit 75 #nancym"
        
         == NOTAS IMPORTANTES == 
        * Asegúrate de que incluyes todas estos símbolos, comillas dobles(") y simple ('). 
        * La barra vertical es un adorno.       
        * Sustituye /usr/local/bin por la ruta de acceso correcta para procmail en tu sistema 
          (ver paso 1). 
        * Sustituye `nancym´ por tu userid. Necesitas poner tu userid en tu .forward para que 
          sea diferente de cualquier otro .forward que exista en tu sistema. 
        * NO USES ~ o variables como $HOME en tu archivo .forward. Si Procmail reside bajo tu 
          directorio raíz escribe la ruta de acceso *completa*. 

        En muchos sistemas necesitarás poner permisos de lectura universales en tu archivo 
        .forward y tu directorio raíz navegable para permitir al cliente de correo transportar 
        los mensajes. Para hacer esto, teclea: 
  
        cd 
        chmod 644 .forward 
        chmod a+x. 
Si el archivo .forward de arriba no funciona, las siguientes alternativas pueden ser de ayuda:
        En un mundo perfecto:           "|exec /usr/local/bin/procmail #nancym"
        En un mundo casi perfecto:      "|exec /usr/local/bin/procmail USER=nancym"
        En otro mundo:                  "|IFS=' '; exec /usr/local/bin/procmail #nancym"
        En un mundo diferente:          "|IFS=' '; exec /usr/local/bin/procmail USER=nancym" 
        En un mundo smrsh:              "|/usr/local/bin/procmail #nancym"
Ahora que tienes creados todos los archivos necesarios, es hora de probar este filtro. Ve a tu lector de mail y crea una nueva carpeta llamada Ebombtest. Este procedimiento difiere según cada programa, por lo que puede que tengas que experimentar un poco. Entonces abre tu archivo rc.noebomb y cambia /dev/null por Ebombtest. (Deberías haber cambiado ya las Condiciones 2 y 3 según tus preferencias; si no, ves y hazlo ahora!) Finalmente, abre .procmailrc y quita el # de la última línea.

Necesitarás dejar esto así un rato para probarlo. Dile a gente que tengas en la Condición 2 que te mande algún mensaje de prueba.

Si los mensajes acceden a tu buzón, entonces esa condición está correcta. Envíate a ti mismo algunos mensajes falsos con un nombre cambiado para comprobar si van a parar a la carpeta Ebombtest. También, mandate algún mensaje a ti mismo desde la dirección root@loquequieras.com para asegurarte de que la condición 1 funciona. Si estás en alguna lista de correo, sus mensajes deberían ir a tu buzón también.

Si todo esto sale bien, entonces felicidades! Ahora tienes una defensa activa contra mail bombs! Por el momento, carga la línea Ebombtest en el archivo .procmailrc. Si alguien decide alguna vez atacarte con un mail bomb, sólo necesitarás quitar el #, y te habrás desecho de la gran cantidad de mensajes que de otra manera irían a parar a tu buzón, dándote un momento para respirar antes de empezar a desuscribirte de todas las listas de correo, o empezar a tracear a los idiotas que hicieron eso, y echarlos de sus PSI´s.

si tienes algún comentario o preguntas sobre esto, mándame un email a zachb@netcom.com. Email bombs IRÁN a tu /dev/null, así que no te preocupes!

Disclaimer: Cuando activas este programa es inevitable que una pequeña cantidad de tu correo "legal" sea puesto en /dev/null debido a que es casi imposible saber los nombres de todas las personas que te mandan mensajes. Además, no asumo ninguna responsabilidad por las irresponsabilidades de la pérdida de email, ni por ningún daño que puedan causar esos mensajes perdidos.

8. Las news off-line con leafnode

Ya sabes lo qué son las news, los novatos podemos aprender mucho preguntando o simplemente leyendo diariamente los mensajes. Y sabes que existen programas como knews, Netscape y también emacs por medio de los cuales puedes bajarte los mensajes para leerlos. Ahora bien, con estos clientes de news podemos leer los mensajes que seleccionemos siempre y cuando estemos conectados a nuestro servidor de news en internet, y esto tal y como están los precios de timofónica te puede costar un riñón, por lo tanto se hace del todo imprescindible un sistema para leer las news off-line.

Primero, te diré que en la web de Monkiki tienes información sobre un lector de news off-line, aparte de un help para instalar leafnode. También te puedo dar la dirección de una página en inglés que contiene un how-to sobre leafnode. Además, aunque Netscape, aparentemente, no tiene ninguna opción para offline, hay un truco en la sección de trucos que explica cómo se pueden obtener las news off-line con Netscape.

Te hablo de leafnode, que es un servidor de news local. Es decir que te bajas todos los mensajes de una vez a tu HD y después cuando quieres leer las news con tu cliente favorito no hace falta que estés conectado a internet si no que te conectas a tu servidor local y te puedes tirar horas y horas leyendo tranquilamente. También hay otros servidores como inn+suck pero no lo he probado y no tengo ni idea de cómo se configura aunque tengo entendido que es un poquito mas complicado.

Antes de nada te cuento mis problemas con la versión 1.0-3 de leafnode:

Al principio instalé la versión 1.0-3 que es la que viene con mi distribución Debian 1.3.1. Esta versión me ha dado muchos problemas:

Conseguí bajarme los grupos, pero después no conseguí bajarme ningún post por más que lo intenté. Que conste que me había suscrito a un grupo con knews y aún así no me bajaba nada y tampoco me daba ningún error. Otro problema es que no podía acceder a los grupos con el Netscape, me daba siempre el error 'sintax error'. A todo esto, venga post a es.comp.os.linux explicando el problema y en las respuestas me hablaban de ficheros de configuración y etc. que yo no tenía. Y hete aquí que esto es debido a que los de Debian compilan el programa para que tome unas librerías distintas a las que vienen en las fuentes oficiales y que son las que utilizan el resto de las distribuciones.

       Así que, si tienes Debian los ficheros de la configuración son : 

              fichero de configuración : /etc/leafnode.conf 
              fichero catálogo de grupos : /var/lib/leafnode/groupinfo 
              ejecutable : /usr/sbin/leafnode ...

       Mientras que las librerías oficiales son : 

              fichero de configuración : /usr/lib/leafnode/config 
              fichero catálogo de grupos : /usr/lib/leafnode/groupinfo 
              ejecutable : /usr/local/sbin/leafnode ...
En fin, un lío impresionante, es posible que todo se debiera a una mala instalación o error por mi parte, así que, ya sabes, en estos casos lo mejor es reinstalar todo de nuevo. Me enteré de que leafnode iba ya por la versión 1.4 y pensé que ya que iba a reinstalar, mejor hacerlo con esta versión. Al final conseguí mi objetivo y esta es la versión que tengo instalada actualmente y que me funciona perfectamente.

Ahora cómo instalé leafnode 1.4

En el fichero Makefile de las fuentes es donde se pueden modificar las librerías arriba mencionadas. Yo las dejé igual que estaban.

Hay que crear un usuario llamado 'news'. Yo lo tenía ya creado, me lo creó cuando instalé el paquete .deb con el dselect de Debian. Si no con adduser ...

Ejecutar el comando make install que compila e instala los programas del paquete: leafnode, fetch, texpire y checkgroups

Me creo el fichero de configuración /usr/lib/leafnode/config copiándome el config.example que se ha generado al instalar y modificándolo para dejarlo así :

          server = news.redestb.es 
          expire = 7 
          maxcount = 2000
 
            (server = pon tu servidor de noticias 
             expire = tiempo de expiración de un thread en idas; el thread se mantendrá 
                      mientras tenga un mensaje que no haya expirado; los mensajes 
                      solo se borran cuando se ejecuta la utilidad texpire. 
             maxcount = máximo numero de mensajes de un grupo que se deben bajar del 
                                  servidor en una sola ejecución de fetch )
Ahora, si quieres, puedes planificar una ejecución periódica de texpire (utilidad para borrar mensajes antiguos), yo no lo tengo planificado, simplemente lo ejecuto de vez en cuando, pero si quieres puedes hacerlo utilizando el demonio cron. Este demonio se encarga de ejecutar procesos periódicos.

Para planificar texpire o cualquier proceso periódico con cron es necesario ejecutar el comando crontab que sirve para actualizar los ficheros crontabs que es por los que se guía el demonio cron (jo... que rollo). Bueno, pues tienes que ejecutar el siguiente comando :

               crontab -u news -e 
Con esto vas a editar (-e) el fichero crontabs del usuario (-u) news. Pero, ojo con este comando, te abre el editor vi, y si te pasa como a mi que no le cojo el tranquillo es mejor que antes, ejecutes un comando para que el crontab utilice otro editor, por ejemplo a mi me gusta emacs,
               export VISUAL=/usr/bin/emacs 
Y ahora si, ahora ejecutas crontab -u news -e, te abre el emacs e introduces las líneas :
       
               # arranca texpire todos los días a las 4 de la mañana 
               0 4 * * * /usr/local/sbin/texpire 

               si sustituyes el tercer * por un 1 se arrancará una vez por semana los 
               lunes (man cron y crontab) 
Ahora modificamos el fichero /etc/inetd.conf incluyéndole la siguiente línea :
               nntp  stream  tcp  nowait  news  /usr/sbin/tcpd  /usr/local/sbin/leafnode
Con esto se consigue que se lance automáticamente leafnode cada vez que un cliente de news se intenta conectar al puerto nntp. Para que coja la modificación es necesario ejecutar el comando kill -HUP o desconectarse y volverse a conectar.

Por último, el funcionamiento del servidor es el siguiente :

Vamos a bajarnos las news desde nuestro servidor de internet a nuestro disco duro, para ello, ejecutamos fetch -v una vez para que nos baje el catálogo de news-groups (esto te lo hará además cada 7 días), después con un cliente de news como Netscape, Knews o cualquier otro, tenemos que suscribirnos a los grupos que queramos, y finalmente, volvemos a ejecutar fetch -v que esta vez nos bajará las news de los grupos que hayamos seleccionado.

Ya tienes tu servidor de news funcionando, cada vez que ejecutes fetch -v (-v es para que veas lo que está haciendo, puedes meter varias -vvvv para que te dé mas información) te bajará todos los posts generados desde la ultima vez que lo hiciste.

Observarás que se te han creado un montón de subdirectorios en /var/spool/news, y también que tienes posts en grupos a los que no estás suscrito, es normal, esto se debe al crooss-post (se escribe así?) o sea, mensajes que además de dirigirse al grupo al que tu estas suscrito se dirigen a otros grupos.

Una cosa que se me olvidaba, entre novatos : para poder acceder a nuestro propio servidor de news tenemos que apuntar en el cliente de news que utilicemos a nuestro servidor de noticias local, o sea, donde antes teníamos news.redestb.es, noticias.ibernet.es, o cualquier otro servidor ahora ponemos localhost o 127.0.0.1.

9. Bourne Shell, tutorial en español

9.1 Creación de comandos y programas usando el shell

Además de usar el shell para ejecutar comandos, puedes usar su lenguaje de programación para escribir tus propios comandos o programas. Puedes poner comandos en el fichero (conocido como shell script) y después ejecutar el fichero como un comando o programa.

EL Bourne shell (sh) está disponible en todos los sistemas UNIX. Los scripts del Bourne shell también pueden trabajar bajo el Bourne Again Shell (bash). Los shells C y TC usan un lenguaje de programación similar al lenguaje C.

9.2 Creación y ejecución de shell scripts simples

Para crear un shell script simple, debes poner líneas de comando en un fichero, ponle los permisos de acceso apropiados y después ejecuta el fichero.

EJEMPLO :

Este es el contenido de un shell script llamado display :

       cat display
        # Este script displaya la fecha, hora, nombre de 
        # usuario y directorio actual
        echo "Fecha y hora:"
        date
        echo
        echo "Tu usuario es: `whoami` \\n"
        echo "Tu directorio actual es: \\c"
        pwd
Las primeras dos líneas que comienzan con una almohadilla (#) son comentarios y no son interpretadas por el shell. Usa comentarios para documentar tu shell script, te sorprenderá saber lo fácil que es olvidar lo que hacen tus propios programas.

Las backquotes (`) entre el comando whoami ilustran el uso de la sustitución de comandos.

- sustitución de comandos : para incluir la salida de un comando dentro de una línea de comandos de otro comando, encierra el comando cuya salida quieres incluir, entre backquotes (`)

- whoami : displaya el usuario actual

\\n es una opción del comando echo que dice al shell que añada un retorno de carro al final de la línea. \\c dice al shell que permanezca en la misma línea.

(si utilizas el shell bash, para que funcionen estas opciones tienes que poner echo -e )

Antes de usar el fichero como shell script debemos cambiar los permisos de acceso. Para dar permiso de ejecución al fichero deberemos usar el comando :

chmod u+rwx display

El +rwx después de la u te permiten leer, escribir y ejecutar el script, nadie mas tendrá permiso para hacerlo.

Para dar permiso a otros usuarios para leer y ejecutar el shell script usa :

chmod go+rx display

9.3 Programación con Bourne Shell

El shell también te ofrece un entorno de programación con características similares a las de los lenguajes de programación de alto nivel.

Pasando argumentos al shell

Los shell scripts pueden actuar igual que los comandos standard de Unix y tomar argumentos desde la línea de comandos.

La forma de pasar estos comandos es con los parámetros posicionales $1 hasta $9. Cada parámetro corresponde a la posición del argumento en la línea de comandos.

El parámetro posicional $0 hace referencia al nombre del comando o nombre del fichero ejecutable que contiene el shell script.

Solo se pueden pasar nueve argumentos, pero se puede acceder a mas de nueve usando el comando shift. Cada vez que se ejecuta el comando shift el argumento 1 desaparece, el 2 se convierte en el uno, y así sucesivamente hasta el 9 que se convierte en el 8 quedando aquel libre.

Se puede hacer referencia a todos los parámetros que se están pasando usando el parámetro especial $*. Esto es especialmente útil cuando se pasan nombres de ficheros como argumentos, por ejemplo :

     cat printps
        # Este script convierte ficheros ASCII a PostScript
        # y los envía a la impresora PostScript ps1
        # Usa la utilidad local "a2ps"
        a2ps $* | lpr -Pps1

     printps elm.txt vi.ref msg
Ejemplo de paso de argumentos :
     cat first_5args
        # Este script lista los cinco primeros argumentos
        echo Los cinco primeros argumentos de la línea
        echo de comandos son $1 $2 $3 $4 $5

     first_5args mines a pint john o.k.

Manejo de variables

Existen algunas variables que se establecen automáticamente con tu login.

Los valores de algunas de estas variables esta guardados en nombres que colectivamente son llamados 'tu entorno de usuario'.

Cualquier nombre definido en tu entorno de usuario, puede se accedido por un shell script. Para incluir el valor de una variable shell en tu entorno debes exportarla.

(Si se modifica el valor de una variable, este permanece hasta que efectúas el logout del sistema o sales del shell en el cual estas trabajando. Para hacer que otros programas que usan la variable tengan consciencia del cambio debes teclear el comando export variable).

Algunas variables establecidas internamente por el shell y que están disponibles para el usuario:

          $1 - $9       parámetros posicionales
          $0            nombre del comando actual
          $#            número de parámetros posicionales
          $?            exit status del último comando ejecutado
                        dado como un string decimal. Si todo ha
                        ido bien se retorna cero.
          $$            el numero de proceso de este shell, útil
                        para incluirlo en nombres de ficheros
                        para hacerlos únicos.
          $!            la pid del último comando ejecutado en
                        background.
          $-            las opciones actuales suministradas para
                        esta invocación del shell.
          $*            un string que contiene todos los
                        argumentos del shell comenzando por el $1.
          $@@           igual que el anterior, excepto cuando va
                        entrecomillado.
Reglas que gobiernan la evaluación de variables shell :
          $var                    significa el valor de la variable
                                  o nada si la variable no está
                                  definida.

          ${var}                  igual que el anterior excepto que 
                                  las llaves contienen el nombre de 
                                  la variable a ser sustituida.

          ${var-thing}            valor de var si var está        
                                  definida, si no thing.

          ${var=thing}            valor de var si var está        
                                  definida, si no thing y         
                                  el valor de var pasa a ser thing

          ${var?message}          Si definida, $var; si no, imprime 
                                  el mensaje y terminal el shell. 
                                  Si el mensaje esta vacío imprime 
                                  un mensaje standard.

          ${var+thing}            thing si $var esta definida, si 
                                  no nada.

Entrecomillados y caracteres especiales

Caracteres especiales para terminar palabras :

; & ( ) | ^ < > nueva-linea espacio tab

Para entrecomillar estos usa el backslsh (\) o llaves con comillas.

Comillas simples :

Entre comillas simples todos los caracteres son entrecomillados incluido el backslash.

grep : ${gid}: /etc/group | awk -F: '{print $1}'

Dobles comillas :

Entre dobles comillas se produce sustitución de variable (el signo del dolar se interpreta) pero no generación de fichero ( * y ? son entrecomillados)

Comillas contrarias :

Las comillas contrarias significan ejecutar el comando y sustituir por la salida.

TODAY=`(set \`date\`; echo $1)`

Leer de la entrada standard.

Para leer de la entrada standard se utiliza el comando read, por ejemplo :

          echo "Por favor introduzca su nombre:"
          read nombre
          echo "Bienvenido $nombre"

          echo "Introduce tu apellido\n"
          echo "seguido de tu nombre: \c"
          read apellido nombre
          echo "Bienvenido a Madrid $nombre $apellido"
Entrada standard : la fuente de información para un comando. Por defecto es el teclado a menos que se redireccione a un fichero o a otro comando.

Para redireccionar la entrada o salida standard se usa :

          cambiar la entrada   =    <        mail gerardo < documento
          cambiar la salida    =    >        grep gerardo /etc/passwd > mi_passw
          añadir a la salida   =    >>    cat parte2 >> mi_libro
También se pueden utilizar pipes. Unix permite enlazar dos o mas comandos usando un pipe. El pipe toma la entrada standard de la salida estandard de otro comando. La | (barra vertical) se usa para representar la conexión de los comandos.
Ejemplos :

          who | wc -l
          342

     Este comando dice cuantos usuarios están conectados al sistema.
     who saca por la salida standard una lista de usuarios conectados al sistema
     wc -l cuenta el numero de líneas de la entrada standard y lista el resultado.

          ps -aux|grep joe|sort +5 -6|less

     El primer comando ps -aux saca información sobre los procesos que corren 
     actualmente. Esta información entra a la entrada del comando grep joe que busca 
     una línea que contenga el usuario "joe". La salida de este comando se clasifica 
     por el sexto campo de cada línea y esta salida se displaya en el less.

Instrucciones condicionales.

Cada comando Unix retorna un valor de salida el cual puede ser consultado. Este valor está guardado en la variable de solo lectura $?. El valor 0 es bueno, cualquier otro es malo.

La instrucción if usa el status del último comando y condicionalmente ejecuta la siguiente instrucción. La sintaxis general es :

          if test
          then
              comandos
          else
              comandos
          fi
then, else, y fi son palabras reservadas y como tales únicamente serán reconocidas después de una nueva línea o ;(punto y coma). Asegúrate de que terminas cada if con su fi correspondiente.

El if se puede anidar :

          if ... 
          then ... 
          else if ...        (también se puede usar elif en lugar de else if)
                ... 
              fi 
          fi
Ejemplo de if :
          if who | grep -s keith >/dev/null
           then
             echo keith está conectado
          else
             echo keith no está conectado
          fi

        La lista de who se pasa a grep para buscar al usuario keith, la opción -s 
        consigue que grep trabaje silenciosamente y cualquier mensaje de error es 
        direccionado al fichero /dev/null.
        Dependiendo de que keith se encuentre o no en la lista de usuarios se saca 
        un mensaje u otro.
El operador && se usa para ejecutar un comando, y si es correcto, ejecuta el siguiente comando en la lista. Por ejemplo,en comando1 && comando2, se ejecuta primero comando1 y si es correcto se ejecuta comando2. Esto es equivalente a :
          if comando1
          then
              comando2
          fi
El operador || se usa para ejecutar un comando, y si falla, ejecuta el siguiente comando de la lista. Por ejemplo, en comando1 || comando2, se ejecuta primero comando1 y si falla se ejecuta comando2. Esto es equivalente a :
          comando1
          if test $? -en 0
          then
             comando2
          fi

Comprobación de ficheros y variables con el comando Test

El shell usa un comando llamado test para evaluar expresiones condicionales.

test devuelve 0 (verdadero) o 1 (falso), opciones :

     -b fichero - Verdadero si fichero existe y es un block special.
     -c fichero - Verdadero si fichero existe y es un character special. 
     -d fichero - Verdadero si fichero existe y es un directorio 
     -e fichero - Verdadero si fichero existe
     -f fichero - Verdadero si fichero existe y es un regular file. 
     -g fichero - Verdadero si fichero existe y es un set-group-id. 
     -k fichero - Verdadero si fichero tiene su ``sticky'' bit set. 
     -L fichero - Verdadero si fichero existe y es un symbolic link. 
     -p fichero - Verdadero si fichero existe y es un named pipe. 
     -r fichero - Verdadero si fichero existe y es un readable. 
     -s fichero - Verdadero si if file existe tiene un tamaño > 0. 
     -S fichero - Verdadero si fichero existe y es un socket. 
     -t [fd]    - Verdadero si  fd está abierto en un terminal. 
                  Si fd es omitido, su defecto es 1 (standard output). 
     -u fichero - Verdadero si fichero existe y su set-user-id bit is set. 
     -w fichero - Verdadero si fichero existe y es un writable. 
     -x fichero - Verdadero si fichero existe y es un ejecutable. 
     -O fichero - Verdadero si fichero existe y es un owned by the effective user id.
     -G fichero - Verdadero si fichero existe y es un owned by the effective group id.

     fichero1 -nt fichero2 - Verdadero si fichero1 es mas nuevo 
                             (according to modification date) que fichero2.
     fichero1 -ot fichero2 - Verdadero si fichero1 is mas viejo que fichero2. 
     fichero1 -ef fichero2 - Verdadero si fichero1 y fichero2 tienen el mismo numero de 
                             device and inode.

     -z string - Verdadero si la longitud de string es 0.
     -n string - Verdadero si la longitud de string no es 0. 

     string1 = string2  - Verdadero si los strings son iguales
     string1 != string2 - Verdadero si los strings no son iguales. 
     ! expr             - Verdadero si expr es falso.
     expr1 -a expr2     - Verdadero si expr1 y expr2 son verdaderos. 
     expr1 -o expr2     - Verdadero si expr1 o expr2 es verdadero. 
     arg1 OP arg2       - OP es uno de -eq, -ne, -lt, -le, -gt, or -ge.
     -l string          - evalua la longitud de string.

Instrucciones de control

La instrucción case

El flujo del programa se controla en base a una palabra dada. Esta palabra se compara con cada patrón hasta que se encuentra uno que haga juego. Cuando se encuentra, se ejecuta el comando asociado y se termina la instrucción.

     case palabra-dada in
     patrón1) comandos
     ;;
     patrón2|patrón3) comandos
     ;;
     patrónN) comandos
     ;;
     esac
Un comando puede asociarse con mas de un patrón. Los patrones pueden separarse unos de otros con el símbolo | . El orden de chequeo es el orden en que aparecen los patrones.

Para especificar un patrón por defecto se pueden usar wildcards :

        ?       comprueba un carácter
        *       comprueba cualquier número de cualquier 
                tipo de caracteres
        [nnn]   comprueba cualquiera de los caracteres  
                entre corchetes
        [!nnn]  comprueba cualquier carácter que no este 
                entre los corchetes
        [n-n]   comprueba cualquier carácter en el rango
La instrucción for

El bucle for sigue la siguiente notación general :

     for variable in lista-de-palabras
     do
         comandos
     done
Comandos es una secuencia de uno o mas comandos separados por una línea o por un ; (punto y coma).

Las palabras reservadas do y done deben estar precedidas por una línea o por un ; .

     for variable in lista; do comandos; done
Ejemplos :
        #!/bin/sh
        # por cada usuario dado como argumento se
        # comprueba si está conectado o no y se da
        # el mensaje apropiado
        for i in $*
        do
          if who | grep -s $i > /dev/null
          then
            echo $i está conectado
          else
            echo $i no está conectado
          fi
        done

     #!/bin/sh
     # compara un fichero con el mismo fichero en 
     # el directorio ?old?
        for i in *
        do
          echo $i:
          cmp $i old/$i
          echo
        done

     #!/bin/sh
     # si la lista-de-palabras se omite, el bucle se 
     # ejecuta una vez por cada argumento (asume $*)
     # Crear los ficheros pasados como argumento
     for y
     do
       > $y
     done
Las instrucciones while y until

La instrucción while tiene la forma general :

     while lista-de-comandos1
     do
       lista-de-comandos2
     done
Los comandos de lista-de-comandos1 se ejecutan, y si el status del último comando de la lista es 0, se ejecutan los comandos de lista-de-comandos2.

La sequencia se repite mientras el status de lista-de-comandos1 es 0.

La instrucción until tiene la forma general :

     until lista-de-comandos1
     do 
       lista-de-comandos2
     done
Su función es idéntica a while excepto en que el bucle se ejecuta mientras en status de lista-de-comandos1 no es 0.

Ejemplos :

             #!/bin/sh
             while who |grep -s $1 >/dev/null
             do
               sleep 60
             done
             echo "$1 está desconectado?

     El script verifica si el usuario que se pasa como argumento está conectado, mientras 
     lo está el script espera 60 segundos antes de hacer una nueva verificación.

             #!/bin/sh
             until test -f $FILE
             do
               sleep 60
             done
             echo "$FILE now exists"

     Verifica cada 60 segundos si existe el fichero representado por la variable $FILE.
Las instrucciones break y continue.

La instrucción break termina la ejecución del bucle mas interior causando la ejecución de la instrucción done mas cercana.

Para salir del nivel n, usa : break n, esto causa la ejecución de la instrucción done n.

El comando continue causa la ejecución de la instrucción while, until o for en la cual comienza el bucle que contiene el comando continue.

Ejemplo :

        #!/bin/sh
        while echo "Por favor introduce un comando"
        read respuesta
        do
          case "$respuesta" in 'fin') 
                break     # no mas comandos
                            ;;
                "")     
                continue  # comando nulo
                            ;;
                *)      
                eval $respuesta  # ejecuta el comando
                            ;;
          esac
        done

     Mientras el usuario introduzca un comando o un string 
     nulo el script continua funcionando. Para pararlo el 
     usuario debe teclear ?fin?.

Mas funciones shell

Aritméticas

No existen funciones aritméticas en el shell y por tanto hay que usar el comando expr que sirve para evaluar expresiones matemáticas (ver man expr).

Incluir texto en un shell script

Se puede incluir texto en un shell usando una forma especial de redireccionamiento. El símbolo << se usa para indicar que el texto debe ser leído hasta una marca dada, por ejemplo :

        #!/bin/sh
        # Este script muestra el mensaje dado, antes de ejecutarse
        cat << EOF
        Este shell script esta actualmente en desarrollo, por favor
        reporte cualquier problema a Daniel. Gracias.
        EOF
        exec /usr/local/test/bin/test_version
Forzar la evaluación de comandos

La función eval toma los argumentos de la línea de comandos y los ejecuta como comandos.

Por ejemplo :

          #!bin/sh
          echo ?enter a command:?
          read command
          eval $command
Ejecutar un comando sin crear un nuevo proceso

Exec ejecuta un comando sin crear un nuevo proceso. Una vez terminada la ejecución el shell continúa.

          exec zmail -visual
          Ejecuta zmail y cuando termina continúa el shell.
Controlar la finalización de un shell script

Para finalizar un shell script se utiliza el comando exit. Se le puede dar un argumento numérico que toma como status. Si se omite el status será el del último comando ejecutado. Por ejemplo exit 2, devuelve status=2.

Tratar las señales del sistema operativo

El comando trap se puede usar para capturar o ignorar las señales del sistema operativo. El formato del comando trap es :

trap ?lista-comandos? lista-señales

Varios traps pueden tener efecto al mismo tiempo. Si se reciben varias señales simultáneamente, serán despachadas en orden ascendente. Para comprobar que traps están establecidas, usa el comando trap sin argumentos.

Las señales mas comunes para usar con trap son :

          0 - salida del shell (por cualquier razón, incluido fin de
               fichero)
          1 - colgar
          2 - interrupción (^C)
          3 - quit (^\\ ; causa que el programa produzca un core dump)
          9 - kill (no puede ser parada ni ignorada)
          15 - terminate; señal por defecto generada por kill

Funciones creadas por el programador

Las funciones son herramientas poderosas a menudo poco usadas. La sintaxis es:

          nombre_funcion ()
          {
               comandos
          }
Dentro de una función los parámetros posicionales $0, $1, etc. son los argumentos de la función (no los argumentos del script).

Dentro de una función se usa return en lugar de exit.

9.4 Depuración de Shell scripts

Para ver donde se produce un error en un script usa el comando :

sh -x script argument

La opción -x del comando sh lista los comandos y sus argumentos que son ejecutados. Así puedes ver qué partes del script se han ejecutado cuando ocurre el error.

La opción -n del comando sh hace que no se ejecute ningún comando, solo chequea la sintaxis.

La opción -e en modo no interactivo, hace que si un comando falla se termine inmediatamente el script.

La opción -v imprime las líneas de entrada según son leídas

10. Comandos para novatos

10.1 Comandos básicos


(para mas información "man comando")
man                                     páginas del manual (es un help muy potente) 
ls                                      listar (como dir) 
rm                                      borrar un fichero 
cp                                      copiar un fichero 
pwd                                     te dice el directorio en el que estás 
cd directorio                           te sitúa en directorio 
cd ..                                   baja al directorio de nivel inferior 
chown, chgrp, chmod, touch              comandos para manejo de atributos de ficheros 
find, locate                            buscar ficheros 
cat, more, head                         listar ficheros (como type) 
split                                   partir ficheros 
grep                                    buscar texto en ficheros (muy potente)

10.2 Comandos para comunicaciones y redes

who                                     lista de usuarios conectados 
finger                                  información sobre usuario 
mail                                    sencillo programa de correo 
write                                   manda un mensaje a la pantalla de un usuario 
mesg                                    bloqueo de mensajes de write 
wall                                    mensaje a todos los usuarios 
talk                                    establecer una charla con otro usuario 
banner                                  saca letrero en pantalla con el texto que se le pase 
cal                                     saca el calendario en pantalla 
clear                                   limpia la pantalla 
date                                    saca fecha y hora actuales 
passwd                                  cambiar contraseña de un usuario

10.3 Entorno gráfico xwindow

Iniciar X                               startx
Abrir nuevas sesiones                   startx -- :2 , :3 , :4 , etc.
Configuración de XF86                    /etc/X11/XF86Config
Configuración de servidor X              /etc/X11/Xserver
Configurar X                            XF86Setup (entorno gráfico, tienes que instalar 
                                        xserver_vga) /usr/sbin/xbase-configure  
                                        (entorno línea de comandos)
Salir de las X                          ctrl-alt-backspace
Fichero donde está el programa
que arranca las X                       /etc/X11/window-managers 

10.4 Comprimir y descomprimir

                           
Descomprimir un *.tar.gz                tar -xvzf <fichero>
                           
Descomprimir un *.tar 
(el tar es un tar_gz al que 
 se le ha pasado gunzip)                tar -xvf

Descomprimir un *.gz                    gzip -d
Empaquetar sin comprimir                tar
Comprimir ficheros empaquetados         gzip

10.5 Manejo de las unidades de diskettes y Cd-Rom

Montar diskette                         mount -t msdos /dev/floppy /mnt 
                                        (/dev/floppy = /dev/fd0)
Montar Cd-Rom                           mount -t iso9660 /dev/cdrom /mnt 
                                        (/dev/cdrom = /dev/hdb)
Listar unidad montada                   ls /mnt 
Desmontar todo                          umount /mnt
Formatear floppy                        superformat /dev/fd0 hd  (msdos) 
                                        (hay que tener instalado fdutils) 
                                        superformat /dev/fd0 sect=21 cyl=83 
                                        mkfs.ext2 /dev/fd0   (crea sistema de ficheros ext2)

10.6 Manejo de ficheros

                           
Enlace simbólico entre ficheros          ln -sf /dev/ttyS0 /dev/mouse (puerto serie 1)  
                                         ln -sf /dev/ttyS1 /dev/modem (puerto serie 2)
                           
Número de inodo                          ls -i
                           
Número de enlaces de un fichero          ls -l
                           
Borrar enlaces                           rm fichero (si no tiene enlaces borra el fichero)
                           
Borrar directorios                       rm -r 
                           
Ver espacio libre en disco               df      (disco entero) 
                                         du -sh  (directorios y ficheros)
Buscar un fichero                        find / -name mime.types
                                         (la / es la raiz donde quieres buscar)

10.7 Uso del sistema

Ver pid de trabajos ejecutándose ps
Inicialización de puertos serie         /etc/rc.boot/0setserial
Inicio del sistema                      /etc/init.d/boot
Listar el hardware reconocido           dmesg , dmesg | more
Ver módulos cargados en el kernel      lsmod
Prompt                                  export PS1="\W$" 
                                        \W , te saca el nombre usuario 
                                        \H , te saca el nombre del Host  
                                        \T , te saca la hora 
                                        \V , ??? 
                                        export PS1="usuario$ "
Información del sistema                 uname -a
Librerías instaladas                     /sbin/ldconfig -p
Librerías que utiliza un programa        ldd /ruta/programa
Salir del sistema                       shutdown -r 0  (reinicializa el ordenador) 
                                        shutdown -h 0  (cierra el sistema y se para)
Eliminar Lilo                           fdisk /mbr  (entrando por símbolo del sistema, 
                                        en msdos c:)

10.8 Manejo de la impresora

                           
Dispositivo                             /dev/lp1
Probarlo                                ls > /dev/lp1
Para imprimir se necesita               lpr , Magicfilter y Mpage
Hay que configurar un filtro 
para la impresora                       Utilizar Magicfilterconfig --force  
                                        (para mi hp690 C elijo el filtro hp550c)
Ver colas impresión                      lpq
Estado impresoras                       lpc status
Eliminar colas en impresión             lprm

10.9 Comandos de IRC para IrcII

/server                                 conectar con un servidor (/server irc.arrakis.es)
/channel , /join                        conectar con un canal    (/channel #linux)  
/admin                                  datos de servidor o nickname 
/list                                   listar canales irc 
/names                                  nicknames de todos los usuarios 
/msg <nick> <msg>                       mensaje privado a nick 
/who <canal>                            quien está conectado y sus datos 
/whois <nick>                           verdadera identificación de alguien 
/quit                                   desconectar

10.10 Instalación y manejo de paquetes en Debian

dpkg -i                                 Instalar paquete 
dpkg --info                             Información del paquete 
dpkg -c                                 Muestra la lista de ficheros contenidos 
dpkg --contents                         Lista todos los ficheros contenidos con sus 
                                        directorios 
dpkg -f                                 Muestra información de versión del paquete 
dpkg --unpack                           Desempaqueta 
dpkg --purge                            Borra un paquete incluidos los ficheros de 
                                        configuración 
dpkg -r                                 Borra un paquete pero no borra los ficheros 
                                        de configuración 
dpkg -L                                 Lista el paquete si está instalado 
dpkg -l                                 Lista los paquetes instalados

10.11 Convertir paquetes de RedHat a Debian

                           
alien -d fichero.rpm                    convierte fichero rpm a deb  
alien -d fichero.tgz                    convierte fichero tgz a deb
alien -i fichero.rpm                    convierte fichero rpm a deb y lo instala
alien -i fichero.tgz                    convierte fichero tgz a deb y lo instala

11. Preguntas, respuestas, trucos

11.1 Eliminar ficheros Core

     ln -s /dev/null core  (envía los core a /dev/null) 

     ulimit -c 0 (limita el tamaño de los core a 0)

11.2 Imprimir paquetes instalados con dselect

     método 1 - dpkg --get-selections | awk '$2 == "install" { print $1 }' 

     método 2 - ( cd /var/lib/dpkg/info; ls *.list ) | sed -e "/\.list/s///" 

     método 3 - dpkg -l

11.3 Montar cdrom y floppy sin ser root

     Como root te creas los directorios
              /mnt/floppy            /mnt/a:             /mnt/cdrom 

     metes en /etc/fstab las siguientes lineas : 

     /dev/cdrom       /mnt/cdrom      iso9660          ro,user,noauto           0      0 
     /dev/fd0         /mnt/a:          msdos           user,noauto              0      0 
     /dev/fd0         /mnt/floppy      ext2            user,noauto              0      0 

     ahora ya puedes montar un disquete Ms-dos , un disquete ext2 o un Cd-rom, 
     respectivamente, con : 
         mount /mnt/a: 
         mount/mnt/floppy 
         mount/mnt/cdrom 

        El nombre del dispositivo puede ser distinto, por ejemplo, en vez de /dev/cdrom 
        puedes tener /dev/hdc ... etc., depende de cada cual. 

11.4 Ampliar tamaño de partición Linux

Bueno, ampliar no creo que se pueda, pero si te creas otra partición ext2, la montas debajo de / , como por ejemplo /home, luego te creas un directorio /home/usr/local y lo enlazas a /usr/local, etc... tendrás la sensación de que efectivamente tu partición / ha aumentado de tamaño :-).

O mejor todavía :

11.5 Personalizar tecla de función

Utilizo un pequeño script que tengo asociado a una tecla de función en mi .inputrc, así, cada vez que quiero meter o sacar un CD, le doy a la tecla F8.

     ## FICHERO:  $HOME/.inputrc 

     # Personalizar teclas de función 
     # F8 

     "\e[19~": "(. ~/scripts/cdrom)&\C-m" 

     Y el script es: 

     #!/bin/bash 

     if [ `grep -c cdrom /etc/mtab` = 0 ] ; 
     then mount /mnt/cdrom && cd /mnt/cdrom ; 
     else umount /mnt/cdrom && eject /dev/cdrom ; 
     fi 

11.6 Eliminar paquetes instalados en Debian

             dpkg --remove nombre_paquete_sin_extension_deb 

     eliminara el paquete aunque no los ficheros de configuración que ese 
     paquete pudiera tener. 

             dpkg --purge nombre_paquete_sin_extension_deb 

     eliminara todo. 

11.7 Hacer disco de arranque Linux

     cp /boot/vmlinuz /dev/fd0 

     así de simple, siempre y cuando el kernel contenga la información sobre cual 
     partición arrancar, etc. lo que se puede indicar así: 

     rdev /boot/vmlinuz /dev/tuparticionroot 

     rdev /boot/vmlinuz  indicará cual tiene configurada: 
       

          chanae:~# rdev /boot/vmlinuz 
          Root device /dev/hda3

11.8 Entrar al sistema sin saber la password

     Cuando aparece el prompt de Lilo o el del disco de arranque 
     escribir 'linux single' y entras como root sin necesidad de password 
     después hay que entrar con un editor en /etc/passwd, buscar una línea 
     que pone root:xxxx:0:0:root:/root:/bin/bash, 
     borrar xxxxx dejando root::0:0, etc 
     así has borrado la pasword. 

     Otra opción: desde DOS, utilizar un editor del disco duro (Norton) 
     buscar la cadena root en el HD y eliminar la password. 

     Otra opción: en el arranque, escribir init=/bin/bash, esto hace que se lance 
     bash directamente sin pasar por el init, o sea, sin pedir clave. 
     probablemente hay que remontar las particiones: 
     mount -t -o remount, rw / 
     mount -a -t nonfs 
     para estar seguro de que el PATH esta correcto hacer: 
     source /etc/profile 
     source /root/.profile 
     y por ultimo, a partir de una cuenta no-root, hacer su; para ver si la clave 
     de root esta ok: 
     paswwd 
     su < usuario-no-root >
     su 
     exit 
     exit 
     reboot 

11.9 Configuración de LILO

     Fichero /etc/lilo.conf : 

     # Sección global de arranque de LILO 
     boot = /dev/hda 
     compact          # si da problemas, descomentar esta opción 
     delay = 50 
     vga = normal     # forzando 'sane-state' 
     ramdisk = 0      # paranoia setting 
     # 
     # Sección de configuración de partición de LINUX arrancable 
     image = /vmlinuz 
     root = /dev/hdc2 
     label = linux 
     # 
     # Sección de configuración de partición de DOS arrancable 
     other = /dev/hda1 
     label = dos 
     table = /dev/hda 
     #fin 
Sustituye las particiones por las tuyas, la primera que pongas será la que arranque por defecto pasado el tiempo 'delay' en décimas de segundo.

Una vez hayas modificado este archivo, ejecuta lo siguiente:

               root::/# lilo
Veras como te aparecen por pantalla las particiones que hayas configurado para gestionar por lilo y la que hayas colocado como 'defecto' aparece con un asterisco..

Otra versión del /etc/lilo.conf

     boot=/dev/hda           # donde se instalará el LILO 
     compact 
     install=/boot/boot.b 
     map=/boot/map 
     vga=normal              # pantalla en modo VGA 
     ramdisk=0               # no creamos disco virtual, necesario para crear los 
                             # discos boot y root de la instalación 
     delay=50                # espera 10 segundos. [Ctrl] nos muestra las opciones 
                             # que seleccionaremos escribiéndola 
     default=linux-2.0.32    # establece el SO que arrancará por defecto 

     image=/vmlinuz          # la imagen del kernel a arrancar 
     label=linux-2.0.30      # el nombre asociado 
     root=/dev/hdb1          # partición donde está la correspondiente imagen 
     alias=l                 # para abreviar en la selección 
     read-only 

     image=/boot/zImage-2.0.32 
     label=linux-2.0.32 
     root=/dev/hdb1 
     alias=z 
     read-only 

     other=/dev/hda1 
     table=/dev/hda          # para que msdos encuentre la tabla de particiones 
     label=msdos 
     alias=m 
     ---- 

       Cuando has editado tu lilo.conf, para instalarlo tienes que ejecutar, como root, 

                              # lilo 

       y se instalará en el Master Boor Record de hda (en mi caso). 
       Debe ser una partición a la que tenga acceso la Bios del ordenador..

11.10 En Netscape los ficheros .gz y .tgz en lugar de bajártelos te los muestra

        Edit - Preferences - Navigator - Applications.
Buscamos en la lista "Zip compressed data", pulsamos el botón "Edit", en Suffix añadimos ",gz,tgz" y abajo seleccionamos "Save to disk". Ok, Ok y listos :-). (Hue-Bond)

De esta forma cuando pinches uno de estos ficheros te preguntará si quieres guardarlo, en lugar de intentar ejecutarlo.

11.11 News off-line con Netscape

El Netscape no hay ninguna opción para bajarse las news, pero con el siguiente truco se puede conseguir el mismo efecto:

  1. Lo primero es crearse dos nuevos directorios en el Message Center con "New Folder" (yo los llamo Linux y Linux_Archive).
  2. Abres el grupo es.comp.os.linux y le dices que te baje todos los mensajes. Después en menú "View" marcas "Messages" y "News". Eso expande todos los Treads.
  3. Ahora los marcamos para bajarlos. Lo podemos hacer con menú "Edit", "Select", "All" (o más rápido Alt+A). Y los bajamos con "File" al directorio que hemos creado.
  4. Sin cerrar la conexión debemos marcarlos todos como leídos. Para ello "Mark" y "All Read". Y ahora podemos cerrar la conexión.
  5. Para leerlos vamos a nuestro nuevo directorio Linux y los podemos ordenar cómo queramos... "View", "Sort"... yo lo tengo en "By Subject". Los que me interesan los archivo en el otro directorio que creé ("Linux_Archive") y los que no a la papelera ("Delete").
  6. Como seleccionamos la opción "View", "New", la próxima vez que entremos en el grupo sólo nos bajará los nuevos mensajes.

11.12 Hacer que la diskettera solo puedan montarla los usuarios de un determinado grupo

     $ ls -l /dev/fd0 
     brw-rw----   1 root     floppy     2,   0 ago 24  1997 /dev/fd0 

     $ grep floppy /etc/group 
     floppy::11:root,srtxg,fab 

     $ grep nobody /etc/passwd 
     nobody:*:99:99:nobody:/dev/null: 

     $ grep /dev/fd0 /etc/fstab 
     /dev/fd0        /mnt/floppy     vfat    user,noauto,uid=99,gid=11,umask=007 

     explicaciones: 

     * los permisos sobre el device (hacerlo para todos los /dev/fd0*) evitan 
       que se pueda acceder usando los mtools si no se es miembro del 
       grupo floppy. 
     * en fstab se declara las opciones "user" (para que pueda ser montado 
       por gento no-root), "noauto" (para que no sea montado al arranque), 
       el uid y gid de los archivos y directorios vfat (yo elegí nobody 
       y group floppy), y por fin la máscara (007 significa permisos 770; 
       o sea rwxrwx---). 

     Si además quieres impedir no solo el acceso a los datos, sino también el 
     uso de mount; cambia los permisos de mount y umount; algo así: 

     chown root.mount /bin/*mount 
     chmod o-rwx /bin/*mount 
     chmod u+s /bin/*mount 

     y añade al grupo mount todos los usuarios que quieras que puedan usar mount. 
     para montar el floppy (u otras cosas; todo lo que tenga "user" en las opciones 
     en /etc/fstab) 

     Pablo Saratxaga

11.13 Cómo formatear diskettes

      formato tipo msdos:   mformat a: 
      formato tipo ext2:    fdformat /dev/fd0H1440 
                            mkfs.ext2 /dev/fd0 

     Para Linux --> ext2 

     $ mkfs.ext2 [options] /dev/fd0 

     ó 

     $ mke2fs [options] /dev/fd0 

     El usuario que formatea deberá tener permiso de escritura para 
     `/dev/fd0'. Eso normalmente  se consigue añadiéndolo  al grupo 
     `floppy' (addgroup user group). 

     Para msdos 

     $ mkfs.msdos [options] /dev/fd0 

     ó 

     $ mkdosfs [options] /dev/fd0 

     Pero  también  hay  otras  utilidades  para  formatear  discos 
     DOS. Mira a  ver si tienes  el paquete `fdutils',  que permite 
     formatear los discos a mayor capacidad.

11.14 Cómo hacer que linux reconozca ampliación de memoria

     > He añadido 64 megas nuevos al aparato con lo que sumo 80 megas 
     > el problema es que linux solo me reconoce 64 ¿como hago para que 
     > reconozca los 80? 

        pon append="mem=80M" en lilo.conf
        o loadlin vmlinuz mem=80M
        

11.15 Primer editor

Una de las primeras dificultades con las que se topan los novatos es cómo ver y editar ficheros.

El "less" está más o menos bien aunque es un poco "soso". El "vi" puede ser un auténtico trauma.

Para los que acaban de llegar a linux puede que les sea interesante este "truco":

     1) Instalar el Midnight Commander. 
     2) Añadir en el ~/.bashrc estás líneas: 
     alias lee='mc -v '        #ojo, que hay un espacio detrás de la v. 
     alias edit='mcedit' 
     3) teclear "exit" e iniciar una nueva sesión. 
A partir de entonces se puede ver el contenido de un fichero con "lee fichero" (además lee fichero comprimidos) y editarlo con "edit fichero".

La tecla F10 es para salir, y la tecla F9 para abrir el menú.

Bueno, esto es lo que he hecho yo, y me gusta más que less y vim, pero hay una pega, y es que no puedo pegar en el mcedit con el ratón lo que previamente he copiado en otro terminal.

(ricardovm)

Pues lo acabo de probar:

       Mayúsculas + Botón Izquierdo:  inicio de la selección 
       Mayúsculas + Botón Derecho:    fin de la selección 
       Mayúsculas + Botón Central:    pegar 
NOTA: el bloque así seleccionado se maneja de forma estándar: si desde otra consola pulsamos el botón central del ratón, lo pegamos, etc.

Además el mc tiene su propia herramienta de selección de bloques (F3, o May+Flechas), y con esto se puede copiar (Ctrl+Ins), cortar (May+Del) y pegar (May+Ins) incluso de una sesión a otra, pues lo copiado (cortado) se guarda en  /.cedit/cooledit.clip.

Ambas herramientas se pueden usar simultánea e independientemente.

(tas@idecnet.com)

11.16 Instalar las X con Dselect de Debian.

Sesión de dselect. Como root pon dselect.

Dentro del menú ve a "[S]elect", te sale un mensajito de bienvenida y tal, pulsas la barra y ahora toca seleccionar paquetes.

Pulsa la "o" minúscula 2 veces y la mayúscula otras dos, con esto consigues que la lista de paquetes salga ordenada alfabéticamente.

Entonces ahora avanza páginas y páginas hasta encontrar el paquete "xbase" (creo).

Una vez ahí lo seleccionas pulsando la tecla "Ins" (si no lo tienes seleccionado ya, en cuyo caso esta parrafada te la saltas ;-)).

Probablemente dselect ahora te saque un mensaje diciendo "Che!! Y las dependencias qué?", pulsas la barra y ves abajo que pone

"xbase requires xserver-vga16" (por ejemplo),

entonces vas al xserver-vga16, que te aparece por ahí y lo "Ins"ertas, aunque verás que dselect ya lo ha seleccionado él solito.

Para salir y volver a la lista de todos los paquetes pulsa Enter.

Ahora un poco más abajo te aparecen los servidores, añade el xserver-svga y el xserver-s3v (el de la ViRGE). Si te pregunta por dependencias pues eso, aunque dselect ya lo suele añadir todo.

Instala también algún gestor de ventanas adicional (por defecto se instalan el twm y el fvwm creo),a mí me encanta el icewm.

Para salir de la lista de paquetes, es con Enter de nuevo y vuelves al menú principal.

Selecciona "[I]nstall" y ve a tomar un cafecito rápido de 5 minutos.

Cuando acabe pulsas Enter, te aparece de nuevo el menú y te vas a Quit o Exit o lo que sea.

Ya tienes las X instaladas.

Ahora toca sesión de XF86Setup.

Configuras el mouse, el teclado (Model: Generic 102 keys Intl PC, Layout: Spanish), la tarjeta de vídeo (tienes 5 ViRGEs, ya sabes, a experimentar), en esa misma pantalla pulsas el botoncito que pone "Detailed setup", seleccionas el servidor S3V (la fila de botones de arriba), luego el monitor (mírate el manual para saber las frecuencias, yo le puse el 4º, el que empieza por Super VGA y me va bien), por último los modos de vídeo y listo, pulsa "Done" abajo (en la sección Other no hace falta tocar nada, aunque nadie te prohibe echar un vistacito.).

Tras eso te aparece un dialoguillo, pulsas "Okay" y ahora se arrancará el servidor.

Si rula, felicidades; si no... a por otra ViRGE. ¿Que ya has probado las 5? Pues en "Detailed setup" prueba el servidor SVGA.

¿Que tampoco rula? Pueeeees entonces ya pasa de castaño... no? (Hue Bond)