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.

Índice General

1 Cómo instalé Linux Debian 1.3.1 3 1.1 Creación de la partición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Instalación de Linux Debian 1.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.1 Creación del disco RESCUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.2 Creación del disco DRIVER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.3 Instalación de paquetes con DSELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.1 Elegir el medio por el cual se va a instalar . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3.2 1. Update. Modificar lista de paquetes disponibles . . . . . . . . . . . . . . . . . . . . 7 1.3.3 2. Select. Pregunta qué paquetes quieres en tu sistema . . . . . . . . . . . . . . . . . . 8

2 Cómo instalé Linux Debian 2.0 8

2.1 Particionado del HD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.1 Preliminares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.2 Defragmentación del HD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1.3 Particionando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.2 Instalación de Linux Debian 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.1 Comenzando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.2 Creacion de las particiones Linux y Swap . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.3 Instalación del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2.4 Configuracion del sistema a nuestro gusto . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2.5 Instalación de paquetes con Dselect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3 Actualización de Debian 1.3.1 a Debian 2.0 19

4 Proyecto para incorporar sonido a mi Debian 23 4.1 Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4.2 Estudio del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.3 Compilación e instalación del kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

4.3.1 Creación del archivo de configuración con xconfig . . . . . . . . . . . . . . . . . . . . 24 4.3.2 Generación del kernel con soporte de sonido . . . . . . . . . . . . . . . . . . . . . . . 33

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

5 Cómo configuré la impresora 40

6 Cómo conectar con la Internet 41 6.1 Conexion Internet Debian 1.3.1 (a mano) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.2 Conexión a internet en Debian 2.0 (con pppconfig) . . . . . . . . . . . . . . . . . . . . . . . . 45

7 El correo y Linux 46 7.1 Netscape, lo fácil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 7.2 Información sobre el tema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 7.3 Agentes que pueden intervenir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 7.4 SENDMAIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 7.5 FETCHMAIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 7.6 PROCMAIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

8 Las news off-line con leafnode 57

9 Bourne Shell, tutorial en español 60 9.1 Creación de comandos y programas usando el shell . . . . . . . . . . . . . . . . . . . . . . . . 60 9.2 Creación y ejecución de shell scripts simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 9.3 Programación con Bourne Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

9.3.1 Pasando argumentos al shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 9.3.2 Manejo de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 9.3.3 Entrecomillados y caracteres especiales . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 9.3.4 Leer de la entrada standard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 9.3.5 Instrucciones condicionales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 9.3.6 Comprobación de ficheros y variables con el comando Test . . . . . . . . . . . . . . . . 65 9.3.7 Instrucciones de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 9.3.8 Mas funciones shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 9.3.9 Funciones creadas por el programador . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

9.4 Depuración de Shell scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

10 Comandos para novatos 70 10.1 Comandos básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 10.2 Comandos para comunicaciones y redes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 10.3 Entorno gráfico xwindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 10.4 Comprimir y descomprimir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 10.5 Manejo de las unidades de diskettes y Cd-Rom . . . . . . . . . . . . . . . . . . . . . . . . . . 72 10.6 Manejo de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 10.7 Uso del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 10.8 Manejo de la impresora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 10.9 Comandos de IRC para IrcII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 10.10Instalación y manejo de paquetes en Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 10.11Convertir paquetes de RedHat a Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

11 Preguntas, respuestas, trucos 74 11.1 Eliminar ficheros Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 11.2 Imprimir paquetes instalados con dselect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 11.3 Montar cdrom y floppy sin ser root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 11.4 Ampliar tamaño de partición Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 11.5 Personalizar tecla de función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 11.6 Eliminar paquetes instalados en Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 11.7 Hacer disco de arranque Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 11.8 Entrar al sistema sin saber la password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 11.9 Configuración de LILO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 11.10En Netscape los ficheros .gz y .tgz en lugar de bajártelos te los muestra . . . . . . . . . . . 77 11.11News off-line con Netscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 11.12Hacer que la diskettera solo puedan montarla los usuarios de un determinado grupo . . . . . 78 11.13Cómo formatear diskettes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 11.14Cómo hacer que linux reconozca ampliación de memoria . . . . . . . . . . . . . . . . . . . . . 79 11.15Primer editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 11.16Instalar las X con Dselect de Debian. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

1 Cómo instalé Linux Debian 1.3.1

Partiendo  de  la  distribución  que  viene  en  la  revista  Linux  Actual

n^{o}1yguindomeporlasinstruccionesquevienenenlamismavoyaintentarinstalarelS.O.enmiordenador. 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:

• verifico los discos antiguos con Chkdsk y están todos correctos, lo único que noto es que el D ha disminuido :-).

• Paso de nuevo Fips en modo test (-T) y todo está correcto. Al checkear el boot da error ’invalid jump

instruction 00 00 00’, quizás la partición todavía no está formateada? (exacto!).

1.2 Instalación de Linux Debian 1.3.1

1.2.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: 1.2.2 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

1.3.1 Elegir el medio por el cual se va a instalar • Cd-Rom, pide el block meto /dev/hdb

• dónde están los paquetes en el CD - tecleo none

• este directorio se llama stable/bynary en el sitio de distribución - tecleo stable/binary

• igual con /contrib/bynary - tecleo contrib/binary

• igual con /non-free/binary tecleo - non-free/binary, me da : no existe - tecleo none

• igual con local/binary tecleo none y se lo salta

• pulso return y vuelve a menú inicial 1.3.2 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

1.3.3 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

2.1.1 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.

2.1.2 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 :

• Entrar en W95 y crear accesos directos en el escritorio de : Defrag, Ms-Dos y Sistema del Panel de control. Esto es porque si no cuando desactivemos la memoria virtual tendremos problemas de memoria para acceder a ello por otros caminos.

• Entrar en el Panel de Control, en el icono que pone Sistema y desactivar la memoria virtual.

• Apagar el ordenador y volver a encender.

• Cuando se esta arrancado, en el momento en que sale "Iniciando Windows 95", apretar la tecla F8 y se nos presentara un menú en el que seleccionamos "Solo símbolo del Sistema", y accedemos al DOS.

• Ya en el DOS, en la unidad C: , tecleamos el comando attrib -r -s -h -a /s para quitar todos los atributos de todos los ficheros de la unidad C: (esto puede durar una hora)

• Borrar todos los ficheros de los directorios TMP y TEMP

• Apagar y volver a encender. Esta vez entramos en W95.

• LABEL

• Desde W95, entrar en DOS (desde el icono del panel principal)

• Entrar en el directorio C:\\WINDOWS y teclear attrib -r -s -h -a *.dat Repetir esto ultimo de nuevo pero con los *.da0. Teclear el comando attrib para ver si todavía hay algún fichero oculto en el directorio WINDOWS ... si lo hay, quitarle los atributos.

• Volver a W95 y ejecutar defrag

• Si es necesario volver a repetir desde LABEL.

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.

2.1.3 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

2.2.1 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 :

• posicionarse sobre el titulo "es"

• dar a la tecla espaciadora, con lo que aparece un asterisco al lado

• dar a la tecla Tab, con lo que se enciende el OK

• dar a return

2.2.2 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 :

• seleccióno Free space

• elijo New y enter

• elijo Tipo : primary

• el size lo dejo en 35.44

• seleccióno ubicación : beginning

• seleccióno Type = 82 (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.

2.2.3 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.

2.2.4 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)

2. Cómo instalé Linux Debian 2.0 17

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.

2.2.5 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 :

• Todos los Required Packages (requeridos por el sistema, estarán seleccionados)

• Todos los Important Packages (importantes)

• Standard Packages (standar de todas las distribuciones)

• lpr (para imprimir)

• Opcionales y Extras:

• sendmail, fetchmail, procmail (para el correo)

• ppp (necesario para conectarse a Internet)

• magicfilter, djtools, Mpage (necesarios para imprimir)

• filerunner (para manejar ficheros y directorios)

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

• y todos los relacionados con los anteriores

3 Actualización de Debian 1.3.1 a Debian 2.0

• Estructura distribución Debian Directorios en los que están situados los paquetes :

           Stable main
             Stable   - la última release de la distribución principal de Debian
             Contrib  - son paquetes libres pero dependen de librerías no libres
             Non-Free - no son libres, aunque pueden no costar dinero
             Non-US   - no están fuera de USA, algunos no son libres
             Unstable - paquetes que están destinados a incorporarse a los de arriba,
                        pero no están suficientemente testeados

Directorios actualmente existentes en el FTP de Debian :

Directorio debian :
Ftp.debian.org/pub/debian/dists/hamm/Contents-i386.gz
/hamm/binary-i386
/disks-i386 - discos de instalación bases, cfdisk,
              rawrite, rescue, etc.
/source           - fuentes
/upgrade-i386 - para actualizarse de la 1.3.1 a la 2.0
/contrib/binary-i386
/source
/main - es igual que hamm (es un enlace simbólico)
/non-free
Ftp.debian.org/pub/debian/dists/unstable/contrib
/main
/non-free

• Actualización via FTP, mi experiencia personal Segun un mail que leí sobre cómo bajarse la 2.0 :

La manera mas fácil sería usar dselect con el método ftp apuntando a
ftp.debian.org dists/hamm/main, dists/hamm/contrib y dists/hamm/nonfree.
(Incluso mejor es bajarse el paquete apt de
ftp.debian.org/debian/project/experimental/apt.*deb
y usar el método apt de dselect)

Otro mail :

Yo me he bajado el debian 2.0 en ftp.debian.org
dentro de hamm esta hamm, contrib y non-free
dentro de cada uno esta binary-i386/ y allí Packages.gz, bájatelos y ponlos en
los mismos directorios.
También te tienes que bajar el rawrite y los 7 discos. luego ves seleccionando
lo que tienes que actualizar, y a la faena ..

Mi experiencia :

. ya que me dicen que la mejor forma de actualizarse es con apt, voy a intentarlo :
. sigo instrucciones para actualizarse con apt :
. me bajo el paquete apt* de ftp.debian.org/debian/project/experimental
. lo instalo con dpkg -i apt*
. me da el error : can't open /usr/lib/libpthread.so , pero parece que se
instala correctamente
. me leo los documentos de /usr/doc/apt , no me aporta mucho
. modifico el fichero de configuración /etc/apt/source.list dejándolo así :
#deb file:<cd_mount_point>/debian stable main
deb ftp://slug.ctv.es/debian hamm main contrib non-free
#deb http://non-us.debian.org/debian-non-US frozen non-US
. la primera línea es para cargar desde CD-Rom, pero yo voy a actualizarme

vía ftp por tanto dejo sin # la segunda línea
. ejecuto apt-get update
      . me baja los ficheros packages
. ejecuto apt-get -f dist-upgrade
. el primer día muy bien, me ha bajado un montón de paquetes, pero lo
  dejo para mañana
y al día siguiente, no hay quien reenganche, me da el error :
     0%  [Forking]
     Get ftp://slug.ctv.es hamm/main ddd [2009k]
     0%  [Forking]
     0%  [ddd 23360/2009k 1%]
     0%  [ddd `Connecting to slug.ctv.es' 23360/2009k 1%]
     0%  [ddd `Connecting to slug.ctv.es' 23360/2009k 1%] 3594b/s 7h49m17s
     0%  [ddd `Logging in' 23360/2009k 1%]                3594b/s 7h49m17s
     0%  [ddd `Logging in' 23360/2009k 1%]
     1%  [Err:ddd 0/2009k 0%]
     1%  [Err:ddd 0/2009k 0%]                               324k/s 5m5s
     1%  [Err:ddd 0/2009k 0%]

Y de aquí no salgo, lo he intentado varias veces y siempre me pasa lo mismo,
he mandado un par de post a las listas de correo de Debian y no me han
contestado (también es verdad que estamos en agosto).

Me he enterado de que van a incluir la versión 2.0 en la revista Linux Actual num. 4, así que desisto, esperaré a septiembre y me la compraré...

• La distribución Debian 2.0, saldrá en Linux Actual num. 4 (Septiembre-98) En la lista española de Debian se recibió este post (omito los nombres) :

  Me iba a ir a casa ahora y se me olvidaba deciroslo ::)
        En la próxima Linux Actual (el numero 4, de setiembre) se va a
incluir, definitivamente, Debian 2.0 (yo me encargaré de hacer el CD,
espero no meter la pata). Además he hablado con el editor y es más que
probable que se incluyan las fuentes de Debian 2.0 también en otro CD.
        De hecho cuando se lo he dicho, no sabía si hacerlo en Linux
Actual o en una nueva revista que van a sacar en setiembre que va a
tener una sección de Linux, que, si no tiene las fuentes SI tendrá Debian
2.0 (me ha dicho nosequé de la última versión de RedHat pero estoy seguro
que saldrá con Debian)
        Me encargaré de hacer un par de páginas de cómo instalarse Debian,
y otra contando las nuevas cosas de Debian 2.0 y saldrá en Linux Actual
junto con un artículo mío que no han incluido en LA3 sobre el sistema de
paquetes de Debian.
Con lo que muy posiblemente el siguiente número de Linux Actual será un
"especial Debian" :)
        Lo que no sé es si, por llevar 3 CD's = 2 Cd's de Debian+ 1 Cd de
la revista, subirán un poco el precio :( espero que no.
        Después de todo esto voy a tener que hacer una buena donación a

          Debian (supongo que cuando se aclare el tema Debian-SPI -grin-) ya que me
          está dando *mucho* trabajo.

• Actualización de Debian 1.3.1 a Debian 2.0 utilizando los CDs de Linux Actual num. 4 Sigo las instrucciones de actualización de www.debian.org (autoup.sh , apt y a mano), según tengo entendido mucha gente se ha actualizado con el script autoup.sh sin problemas. Sin embargo, me han dicho que lo mejor es actualizarse con apt-get, por tanto voy a utilizar esta opción. Por supuesto, hay que tener instalado el paquete apt, y el CD en el cdrom. Después tienes que incluir en el fichero /etc/apt/sources.list el origen desde el cual vas a actualizar. En este caso va a ser desde un CD, por tanto hay que incluir la línea en negrita, suponiendo que el CD lo tienes montado en /mnt/cdrom :

               # Use for a local mirror - remove the ftp1 http lines for the bits
               # your mirror contains.
               # deb file:/your/mirror/here/debian stable main contrib non-free
               # See sources.list(5) for more information, especial
               # Remember that you can only use http, ftp or file URLs
               deb file:/mnt/cdrom/debian stable main
               #deb ftp://slug.ctv.es/debian hamm main contrib non-free
               #deb http://non-us.debian.org/debian-non-US frozen non-US

Ejecuto: apt-get update. Este comando te guarda los ficheros packages en el disco. Ejecuto: apt-get install timezones locales. Ejecuto: apt-get -f dist-upgrade. Esta es la actualización propiamente dicha. Ahora, arreglamos lo del wtmp y utmp con los siguientes comandos :

                 cd /var/log
                 mv wtmp wtmp.libc5
                 touch wtmp
                 cd /var/run
                 cp /dev/null utmp

Por ultimo, se ejecutan todos los pasos de Dselect para que se reconfigure el sistema.

• Problemas que yo he tenido : En la actualización, ningún problema.

En las aplicaciones que tenia funcionando :

               X WINDOW :
                    Se me arranca el servidor, pero no se me arranca el
                    window-manager (fvwm95). Se me queda bloqueado el entorno
                    gráfico X.

. meto en el fichero /usr/X11R6/lib/X11/xinit/xinitrc :
     /etc/X11/Xsession
  con esto funciona correctamente de nuevo.
Problema con los usuarios no root : startx da error al arrancar
el servidor cuando el usuario no es root.
. la única solución que encontré fue activar el bit Setuid del
  servidor /usr/X11R6/bin/XF86_S3V y a partir de entonces me
  funciono bien.
El fichero de configuración de fvwm95 no se ejecuta como antes.
Antes era /etc/X11/fvwm95/system.fvwm2rc95.
En la actualización se ha creado un
/usr/X11R6/lib/X11/fvwm95/.fvwm95rc, que manda sobre el
anterior.
Si borro este, se ejecuta un system.fvwm95rc que esta en
la misma librería.
SENDMAIL :
Cualquier operación que se efectúa, da el siguiente error :
     hash map "Alias0":unsafe map file /etc/aliases:
     No such file or directory
Esto me daba al hacer sendmail -q y también al enviar correo
con Netscape.
La solución ha sido ejecutar el comando newaliases con lo cual
se me ha generado el fichero /etc/aliases.db y sendmail ha
vuelto a funcionar.

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 :

• El Kernel-Howto del proyecto Lucas : guía para compilar el núcleo

• El Howto-sonido del proyecto Lucas : todo sobre sonido en Linux

• 4.4 (Post a las news) de un usuario (Tendero) que dice haber conseguido en su Debian 1.3.1 soporte para sonido con una tarjeta Sound Blaster Awe Pnp

• Un Mini Howto sobre la Soundblaster-Awe, encontrado en http://Sunsite.unc.edu

• Información sobre tarjetas soportadas por el kernel Linux

• Informacion sobre 4.4 (mi tarjeta) de sonido (Sound Blaster 16 Pnp)

• Notas sobre el artículo de Linux Actual num.1 4.4 (Recompilación del Kernel).

• Hay una buena documentación en los ficheros Readme de /usr/src/linux/drivers/sound sobre todo en el Readme.cards

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

4.3.1 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

             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

4.3.2 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

• Características :

– tarjeta de audio de 16 bits

– compatible Adlib y Sound Blaster (???)

– admite compatibilidad ISA 1.0a sobre Pnp

– admite General MIDI, Roland GS, MT-32, etc.

– admite algoritmos de compresión

– se puede conectar a una unidad IDE CD-ROM

• Jaks :

– entrada de línea

– entrada de micrófono

– salida de línea

• Conectores :

– Aux1 y Aux2

– Joystick / MIDI

– micrófono

– altavoz del PC

– etc.

• Direcciones de E/S :

– Interfaz de sonido : 220H a 233H, 240H a 254H, 260H a 273H, 280H a 293H

– Juegos/joystick : 200H a 207H

– Sintetizador : 388H a 38bH

– MPU-401 UART : 300H a 301H, 330H a 331H

• Lineas de solicitud de interrupción (IRQ)

– Interfaz de sonido : IRQ 5

• Canales de acceso directo a memoria (DMA)

– Canal inferior : DMA 1

– Canal superior : DMA 5

Recompilacion del kernel

• En arquitecturas tipo Unix, los programas no interaccionan directamente con ningún dispositivo del sistema sino que reclaman los recursos a un programa que se denomina kernel o núcleo.

• El kernel debe contener todos los controladores o módulos necesarios para comunicarse con el hardware instalado.

• Al iniciar el sistema, se carga el ’boot loader’ (LiLo, etc.), su misión es volcar en memoria la imagen del kernel y ejecutarlo, a continuación el kernel va activando sus distintos módulos para reconocer el hardware instalado e inicializarlo. Posteriormente pondrá en marcha todo el sistema de procesos que constituye todo el S.O. en sí.

• Los dispositivos que no se han reconocido en el arranque se deshabilitan, pero su código se queda en memoria ocupando espacio. Lo ideal es compilar el kernel solo con los dispositivos que existan instalados y se vayan a utilizar.

• Las últimas versiones de Linux permiten cargar y descargar controladores en tiempo de ejecución, sobre un kernel ya compilado.

• Las fuentes terminaran siendo instaladas en /usr/src normalmente, con nombres como /usr/src/kernesource-2.0.29 o /usr/src/Linux_2.0.30. También habrá un enlace simbólico /usr/src/linux que apunta a las fuentes mas modernas que interesa compilar. (Al descomprimir las fuentes del kernel 2.0.34 se me han instalado ya en /usr/src/linux.)

• Los patches son paquetes que no vienen con las distribuciones pero se pueden conseguir por la red y que contienen las modificaciones necesarias para transformar las fuentes de una versión en las de la consecutiva. El proceso es algo arriesgado porque es posible cometer una equivocación y machacar el código fuente original. Conviene realizar un backup de las fuentes previamente. Para actualizar 2.0.28 a 2.0.30 es necesario aplicar los patches 2.0.29 y 2.0.30

• En el directorio donde se encuentren los patches se debe ejecutar como root (y teniendo instalada la herramienta patch): /usr/src/linux/scripts/patch-kernel (directorio-fuentes) si no se pone (directoriofuentes) asume /usr/src/linux por defecto.

• El resultado de la configuración y compilación es un archivo binario (el kernel propiamente dicho) y una serie de módulos cargables en ejecución que posteriormente habrá que instalar.

• Existen las siguientes herramientas para efectuar la compilación:

– make config presenta una serie de prompts con el nombre del módulo a incluir/descartar, también aparecen las opciones disponibles (Y/n/m/?), la m significa no incluir en el kernel pero que se pueda cargar en ejecución, este método obliga a recorrer todas las opciones por lo que es muy recomendable para aprender aunque es poco claro y es fácil equivocarse.

– make menuconfig se puede utilizar si está instalada la librería ncurses, y construirá una interfaz con menús en modo texto que pueden ser usados desde una consola o un terminal.

– make xconfig se puede utilizar con Xwindow si está instalada la librería Tk.

– make mrproper es necesario para eliminar todo rastro de anteriores compilaciones antes de efectuar una nueva. make oldconfig intentará preparar las fuentes a partir de la última configuración realizada.

• Algunas opciones de configuración :

– Soporte de red : siempre necesario, no solo para Internet, si no porque muchos programas lo requieren, como por ejemplo las X Window

– Tipo de procesador : si pones un tipo concreto el código no será ejecutable en procesadores mas antiguos.

– Sistema de ficheros : incluir extf2, nfs, iso9660, proc, msdos(?), umsdos(? nombres largos)

– Kernel hacking : para operaciones de depuración, no instalarlo ya que producirá un kernel mayor y mas lento

– Soporte de ejecutables a.out : existen dos tipos a.out y ELF, actualmente casi todos son del segundo tipo, pero no conviene dejarlo como módulo separado ya que puede haber aún algunos programas del primer tipo.

– Carga automática de módulos : aunque se puede controlar manualmente la carga y descarga de módulos en el kernel, es preferible que el kernel reconozca automáticamente si se necesita un módulo y ejecute la carga a través de un proceso auxiliar (demonio). Para ello es necesario activar la opción de soporte del demonio de carga. Tanto si la carga es automática como si es manual es necesario habilitarla para que pueda ser usada.

• Compilación del Kernel:

– make dep : establece las dependencias entre los módulos seleccionados

– make clean : borra restos de compilaciones anteriores, es importante ya que make solo busca qué archivos no están construidos y los compila.

– make zImage : deja una imagen comprimida del kernel en /usr/src/linux/arch/i386/boot/zImage.

– make zdisk : igual que make zImage, pero además la instala en un diskette que debe estar en /dev/fd0 (A:) pudiendo posteriormente arrancar desde él.

• Instalación del nuevo Kernel:

Para que al iniciar el ordenador el boot loader (LILO) encuentre el kernel
es necesario reinstalarlo suministrando la dirección física en el disco
dónde se halla la imagen, esto se consigue ejecutando como root /sbin/lilo
que reinstala LILO con la información de un archivo de configuración
(etc/lilo.conf). Todos estos pasos se realizan automáticamente si la imagen
del kernel a sustituir se encuentra en /vmlinuz y al compilar se invoca con
make zlilo, pero esto no es adecuado porque no es seguro que el nuevo kernel
sea capaz de cargar y ejecutar correctamente. Si no guardamos un disquete de
arranque con un kernel correcto seremos incapaces de arrancar Linux de
nuevo.
Un procedimiento mas seguro es copiar la nueva imagen en el directorio donde
se encuentran las imágenes de los kernel para el arranque pero con un nombre
distinto de las demás. Este lugar es en Debian 1.3.1 /boot y el nombre
habitual /vmlinuz. Para que LILO conozca que existe un nuevo kernel es
necesario tocar el archivo /etc/lilo.conf en el que se describen los métodos
de arranque disponibles. Se añade una entrada para el nuevo kernel que por
ejemplo podría ser:
                   image=/vmlinuz
                   label=linux.2.0.34
                   read-only
Después es necesario invocar lilo para actualizar el boot loader (LILO) con
la nueva lista de métodos. Ojo, la imagen que hay que copiarse es la
comprimida que está en /usr/src/linux/arch/i386/boot/zImage, no equivocarse.

• Instalación de los módulos cargables en ejecución :

make modules : compila los módulos que se han seleccionado como cargables en
ejecución y los deja dentro del á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 buscarán las herramientas que realizan
la carga y descarga en el kernel.

• Instalación de los módulos de carga manual:

/sbin/depmod -a : carga la tabla de dependencias del módulo
/sbin/modprobe (módulo) : carga el módulo indicado y todos aquellos de los
                          que depende
El nombre del módulo será el que le corresponda al código objeto que generó
la compilación (con extensión .o) aunque hay creados alias que se pueden
consultar con : /sbin/modprobe -c

• Si se ha seleccionado la carga automática en la configuración del kernel, entonces de la carga de módulos se puede encargar el proceso auxiliar kerneld. Para que el sistema haga esto desde el inicio hay que añadir a los archivos de inicialización (si la distribución no lo ha hecho ya) :

        /sbin/depmod -a
        /sbin/kerneld
       Para saber los módulos cargados como residentes  : /sbin/lsmod
       Para saber los módulos disponibles para la carga : /sbin/modprobe -l

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:

• instalar con dselect los paquetes Debian : magicfilter, mpage, lpr, y si tienes una HP deskjet, instala también djtools.

– lpr se encuentra en Standard Packages in section net

– magicfilter y mpage se encuentran en Standard Packages in section text

• crear el fichero /etc/printcap configurando el filtro adecuado :

– ejecuto /usr/sbin/magicfilterconfig –force – fullname ? - tecleo ’HP Desckjet 690c’

– shortname ? - tecleo ’hp690C’

– alias ? - tecleo ’HP690’

– device ? - tecleo /dev/lp1 (dispositivo correspondiente a la impresora)

– input filter - hay que elegir entre una lista, yo elijo dj550c

– después me pide datos para otra impresora, como solo tengo una tecleo intro

– me enseña los datos que he tecleado y me pregunta si es ok, tecleo "y"

– directorio spool no existe, creo /var/spool/lpd/hp690C ? (y/n), tecleo "y"

– /etc/printcap generated

• para imprimir, ejecutar <lpr fichero>

• para ver la cola de impresión, ejecutar lpq.

• para eliminar entradas de la cola de impresión, lprm.

• controlar el sistema de impresión, lpc.

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

• Create a conexión - OK

• Mensaje que te dice que no tienes el DNS de tu servidor (ISP) en el fichero /etc/resolv.conf, ¿quieres

instalarlo ahora? - YES
• Introduce el numero IP primario de tu servidor : 194.179.106.2
• Introduce el numero IP secundario de tu servidor : 194.179.1.100

• Provider Name : aquí no hacer falta cambiar nada, a menos que tengas mas de una conexión en cuyo caso puedes poner el nombre del proveedor, por ejemplo "redestb" y cuando quieras conectar a redestb pones "pon redestb"

• Authentication metod : PAP

• Enter password : machaca "replace with password" con tu password

• Manage user configuration : machaca "replace with name" con el nombre de tu usuario en el servidor

• Manage port configuration : puerto donde tienes conectado el modem (generalmente /dev/ttyS1), o sea el que te sale por defecto

• Defaut route : enable (OK)

• Ip numbers : noipdefault (OK)

• Set speed : 115200 (OK)

• Modem initialization : ATZ (OK)

• Number to dial : numero telefónico de tu servidor 912000111

• Tone or pulse : selecciona marcación por tonos o por pulsos (normalmente ATDT)

• ahora ok, y finished 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

• Fetchmail+Sendmail-COMO : información sobre su configuración en la página del Proyecto Lucas.

• Sendmail Mini Como : compilación de sendmail.cf en la página del Proyecto Lucas.

• El correo: Pine, Fetchmail, Sendmail : información sobre su configuración en la página de Monkiki.

• 7.6 (Resumen de un articulo de Linux Actual sobre Procmail).

• Faq sobre el filtrado de mensajes de correo con Procmail, en inglés.

• 7.6 (Defensa contra Email-bombing y mail no deseado) : basado en el faq sobre filtrado de mensajes, pero en español.

• Un buen tutorial sobre Pine.

• Todo sobre Pine.

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) :

• revisar el contenido de mi /etc/hosts, ya que sendmail es muy quisquilloso en este tema

• compilar el fichero de configuración /etc/sendmail.cf (es muy fácil) si es que no lo tienes ya (necesitas el procesador de macros m4). Ojo, sigue las instrucciones para saber si lo tienes bien configurado, yo me encontré que en mi sistema ya existía un /etc/sendmail.cf y pasé de compilarlo, y después tuve el problema de que me desaparecían los mensajes recibidos que fetchmail le pasaba a sendmail para que éste los entregara ... cuando compilé como se dice en el howto se arregló el problema.

• modificar sendmail.cf para indicarle mi servidor SMTP (DSsmtp: smtp.mx3.redestb.es)

• enmascaramiento del usuario que envía el mensaje

          sendmail te pone "usuario_con_el_que_trabajas@dominio.es" :
          por ejemplo, mi usuario de correo es traque@mx3.redestb.es y tengo en mi maquina
          tres usuarios : root, gerardo y traque. Si envío el mensaje desde traque no hay problema,
          pero si lo envío desde gerardo me pone gerardo@mx3.redestb.es y la posible respuesta no
          me llegaría nunca. (/etc/userdb).

• modificar sendmail.cf para incluir las rules especiales para que funcione correctamente el MUA Pine (si lo uso)

• enmascaramiento del dominio, modificando el sendmail.cf para indicarle mi dominio real (DMmx3.redestb.es)

• reiniciar sendmail con /etc/init.d/sendmail reload Ahora efectúo una prueba :

• redacto un mail de prueba destinado a mí mismo con Netscape

• lo envío desde Netscape con "send now" (debe recibirse en mi propia máquina)

• compruebo si tengo algún mensaje en la cola de sendmail para enviar ejecutando mailq (sendmail -bp)

• ¡efectivamente, el mensaje de prueba esta en la cola esperando para ser enviado

• ejecuto sendmail -q para enviar los mensajes de la cola, sin errores

• de nuevo con Netscape, pincho en ’Get msg’, como siempre hago para recibir, y ... recibo mi prueba, ok.

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

• aunque se puede utilizar sin fichero de configuración recomienda que se use (¡pues a usarlo!)

• el fichero debe ubicarse en /home/usuario/.fetchmailrc del usuario que use fetchmail

• genero el fichero tal como se dice en la página y le hago un chmod 600 para el tema de los permisos

• aunque en el howto se dice como automatizar la llamada, de momento lo invocaré simplemente con fetchmail

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 :

• redacto un mensaje con Netscape para mí mismo y lo envío

• ejecuto sendmail -q para mandarlo a mi servidor

• ejecuto fetchmail para recogerlo (antes dejo pasar un minutillo)

• en Netscape, pincho en ’get msg’, y me mete el mensaje en el inbox (incluso después de haber desconectado)

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 7.6 (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
          #

          * ^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 :

• Instalar procmail como agente de entrega de correo (mail delivery agent), debe hacerse como root y requiere modificar el fichero de configuración de sendmail, tiene la ventaja de que todos los usuarios del sistema podrán utilizar procmail a partir de entonces (creando un procmailrc). Algunas distribuciones lo instalan de esta forma por defecto, para saber si lo tienes así instalado puedes hacer :

                   $ grep procmail /etc/sendmail.cf
                   si obtenemos alguna respuesta es probable que lo esté

      Lo que hay que meter en sendmail.cf es :
       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

• Invocar procmail por el procedimiento de crear un fichero llamado HOME/.forward con permiso de lectura para todo el mundo que contenga la siguiente línea :

            "|IFS=' '&&exec /usr/bin/procmail -f ||exit 75 #usuario"

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

• Son comentarios todos los caracteres desde la aparición de # en una línea hasta el final de la misma, excepto en las líneas de condición que no admiten comentarios.

• La asignación de variables de entorno tienen el mismo aspecto que en una shell bash, algunas variables importantes son :

INCLUDERC = procmailrc2
        (incluye el fichero procmailrc2 en ese punto del recetario)
MAILDIR = /home/usuario/mail
        (cambia en es punto el directorio en el que se ejecuta procmail)
DEFAULT , es el buzón por defecto del usuario,
        normalmente /var/spool/mail/usuario

• Una receta es un conjunto de expresiones regulares seguidas de una acción. Una expresión regular es un texto que puede incluir wild-cards y se usa para buscar. Por ejemplo, una expresión regular es lo que se pone detrás de grep o mejor de egrep cuando se quiere buscar un literal. Por tanto, en la receta le indicamos a procmail que si se cumple expresión-regular 1 y expresión-regular-2 ... y expresión regular-n, ejecute la acción. La línea de acción puede adoptar las siguientes formas :

! fulano@lugar.donde.sea     (el mensaje se envía a esa dirección)
| nombre_de_programa         (se ejecuta el programa)
nombre_de_fichero            (el fichero es considerado un buzón y se añade
                              al final del mismo)
nombre_de_directorio         (el mensaje es guardado en el directorio con un
                              nombre único)

Cada receta comienza con una línea con la siguiente estructura:

: 0  <opciones> :  <fichero lock>
opciones pueden ser entre otras :
f - hace que la receta se comporte como un filtro
h - solo se filtra la cabecera
b - solo se filtra el cuerpo
i - ignora cualquier error en la receta
w - comprueba el código de salida del filtro

        c - creación de un carbón copy (bifurcación)
        H - aplica las líneas de condición a la cabecera (defecto)
        B - aplica las líneas de condición al cuerpo
        D - distingue entre mayúsculas y minúsculas al aplicar las condiciones

Ejemplo sencillo de receta clásica:

DEFAULT=/var/spool/mail/pepe            Recipiente de mensajes por defecto
:0                                      señala el comienzo de una receta
* ^Sender: owner-lista-linux@vivaldi    verifica si el campo sender del mensaje
                                        contiene el texto
                                        owner-lista-linux@vivaldi
* ^From usuario@red                     verifica si el campo from del mensaje
                                        contiene el texto
                                        usuario@red
/dev/null                               las recetas están unidas lógicamente por
                                        un AND, por tanto si se cumplen las dos
                                        condiciones anteriores, se ejecuta la
                                        acción = a la basura
:0:                                     los : detrás del 0 (en realidad tras la
                                        lista vacía de opciones) nos asegura que
                                        se utilizará un lock para acceder a la
                                        carpeta  /mail/linux de tal manera que dos
                                        procesos procmail no accederán a ella al
                                        mismo tiempo (lo que podría suponer la
                                        corrupción de la carpeta)
* ^Sender: owner-lista-linux@vivaldi    si es un mensaje de la lista linux
mail/linux                              acción = se guarda en la carpeta de linux
:0:
* ^Resent-From: lista-erizos@akenaton   verifica si el campo resent-from viene con
                                        el texto de la lista erizos
mail/erizos                             acción = se guarda en la carpeta de temas
                                        de erizos

• Cuando en la cabecera de la receta se incluye la opción f la receta se comporta como un filtro, es decir, se examinan las líneas de condición, si se cumplen, se ejecutan las acciones (que consistirán en sustituir unos campos por otros o incluir valores, etc.) y se genera un mensaje de salida modificado que se convierte en la entrada de las siguientes recetas. Este tipo de recetas que aunque se cumpla la condición no terminan, se llaman "no terminales". Un ejemplo de filtro es esta receta que tiene como objetivo poner un Subject a los mensajes que no lo traen :

              :0 hfw
              * ¡^Subject:
              | $HOME/bin/formail -a "Subject: (sin subject)"
       (¡ significa negación, y formail es un programa que filtra mensajes de correo
          añadiendo y quitando campos)

• El uso de la opción c (carbón copy) se puede ver en el siguiente ejemplo que efectúa una copia de todos los mensajes que llegan al sistema y la deja en un directorio llamado backup, manteniendo en el solo los 50 últimos recibidos :

:0 c
backup
:0 ic
| cd backup && rm -f dummy `ls -t msg.*|sed -e 1,50d`

La primera receta al no tener ninguna condición sería normalmente una receta terminal que hace que el mensaje se guarde en el directorio backup, pero al llevar la opción c se convierte en no-terminal, con lo cual continua con la siguiente receta que lista todos los mensajes del directorio en orden cronológico inverso con ls -t msg.*, borrando con sed las 50 primeras líneas de salida de ls, y entregando el resultado como argumentos a rm -f.

• En el siguiente ejemplo queremos filtrar a toda costa los mensajes que recibamos de fulanito@de.tal, para ello usamos la opción B (aplica la condición al cuerpo) :

:0
* ^Sender: owner-lista-linux@vivaldi
{
     :0
     * ^From: fulanito@de.tal
     /dev/null
     :0 B
     * (dec* fulanito)|(fulanito wrote)|(fulanito escribi)
     /dev/null
     :0
     mail/linux
}
(el símbolo { abre un bloque de acción que incluye otras condiciones,
/dev/null es la papelera)

• Al comienzo de la línea de condición, podemos encontrarnos alguno de los siguientes caracteres con este significado :

! - invierte la condición o la niega
$ - antes de interpretar la condición se llevan a cabo las
    sustituciones que haría una shell en un texto entrecomillado,
    esto permite incluir valores de variables en las expresiones
    regulares
< - se comprueba si la longitud total del mensaje es menor que el
    número dado > - análogo al anterior
? - el resultado de la condición depende del código que devuelve el
    programa especificado

• Formail - es un programa de filtrado de mensajes

• Lockfile - se usa para bloqueos del mail

• Mailstat - lista las estadísticas de procmail (variable LOGFILE en .procmailrc)

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.

9.3.1 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.

9.3.2 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.

9.3.3 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)‘

9.3.4 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.

9.3.5 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

9.3.6 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.

9.3.7 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?.

9.3.8 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

9.3.9 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

10. Comandos para novatos 71

(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 74

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 :

• te creas una nueva partición, por ejemplo: /hdc3

• te copias todos los directorios de /usr a /mnt/hdc3

• te renombras el fichero /usr como /usr_ant por si las moscas

• te creas el fichero /usr vacío

• actualizas el /etc/fstab con la siguiente línea :

/dev/hdc3 /usr ext2 defaults 0 0

• rearrancas, y después de unos días, para ver que todo funciona bien, borras /usr_ant

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 ^{\underline{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^{o}, elqueempiezaporSuperV GAymevabien), porltimolosmodosdevdeoylisto, pulsa”Done”abajo(enlaseccinOthernohacefaltatocarnada, aunquenadieteprohibeecharunvistacito.). 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)