Linux: de Novato a Novato <AUTHOR>Gerardo Travesedo Cabezuelo, <tt><htmlurl url="mailto:traque@mx3.redestb.es" name="traque@mx3.redestb.es"></tt> <DATE> Agosto de 1999 <ABSTRACT> Aquí encontrarás todas mis experiencias con Linux pasito a pasito, sin prisas y procurando no pasarme con los términos informáticos. </ABSTRACT> <TOC> <SECT> Cómo instalé Linux Debian 1.3.1 <P> Partiendo de la distribución que viene en la revista Linux Actual nº 1 y guiándome por las instrucciones que vienen en la misma voy a intentar instalar el S.O. en mi ordenador. En primer lugar, mi ordenador es un Pentium 200 MMX con 32 MB de memoria y dos Discos Duros: <TSCREEN><VERB> 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: </VERB></TSCREEN> 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: <SECT1>Creación de la partición <P> Paso la utilidad <BF>Defrag</BF> 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 <BF>Sys a:</BF> A continuación ejecuto <BF>chkdsk D:</BF> y <BF>Scandisk</BF> desde DOS. Copio del CD de la revista los ficheros <BF>Restorrb.exe , Fips.Exe y Errors.Txt</BF> al diskette de arranque creado. También copio <BF>Keyb.com</BF> ya que si no posteriormente no me funcionan las teclas bien y no puedo teclear <TT>':'</TT> . 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 <BF>keyb la</BF> o <BF>keyb sp</BF> (¡ojo!, al arrancar <TT>':'</TT> es la <TT>eñe</TT>). Ejecuto el programa <BF>FIPS</BF> 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 <BF>FIPS</BF> me sale: <TT>Wich Device (1=0x80 / 2=0x81)</TT> - pregunta en cual de los dos HD voy a hacer la partición - Tecleo 2 me sale : <VERB> 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 </VERB> (esta es la configuración de mi segundo disco duro con sus dos particiones D y E) <TT>Wich partition do you want to split (1/2) ?</TT> tecleo 1 (voy a partir la unidad D = 1) <TT>Quieres hacer un backup de tus SECTores root y boot ?</TT> tecleo Y <TT>Tienes un bootable floppy disck en A: ?</TT> lo meto y tecleo Y Me da el mensaje : <IT>Writing file a:\rootboot.000</IT> (con este fichero puedo restaurar la situación anterior a efectuar la partición, ver la documentación que viene con Fips). <TT>Introduce cilindro de comienzo de la nueva partición (138-260)</TT> - meto Cylinder = 184, lo que me da una partición de 604 MB, tecleo intro. <TT>Continue or reedit the partition table (C/R) ?</TT> - tecleo C <TT>Do you want to proceed (y/n)</TT> - tecleo Y (y fin bye) Ya está creada la partición, voy a comprobar si tengo algo roto: <ITEMIZE> <ITEM>verifico los discos antiguos con <BF>Chkdsk</BF> y están todos correctos, lo único que noto es que el D ha disminuido :-). <ITEM>Paso de nuevo Fips en modo test (-T) y todo está correcto. Al checkear el boot da error <IT>'invalid jump instruction 00 00 00'</IT>, quizás la partición todavía no está formateada? (exacto!). </ITEMIZE> <SECT1>Instalación de Linux Debian 1.3.1 <P> <SECT2>Creación del disco RESCUE <P> Desde DOS, entro en el directorio del CD <BF>BO\DISKS-I3\1997-10-\RESC1440.bin</BF>, meto un diskette en A: y ejecuto <BF>RAWRITE2 -f resc1440.bin -d a:</BF> <SECT2>Creación del disco DRIVER <P> Igual que con el Rescue pero con el fichero <BF>BO\DISKS-I3\1997-10-\Drv1440.bin</BF>. Me copio el fichero <BF>Base1_3.tgz</BF> en el Raiz de C: (Dos). Meto el diskette RESCUE y rearranco, después de una serie de mensajes me sale un menú : <VERB> 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 </VERB> <SECT1>Instalación de paquetes con DSELECT <P> <SECT2>Elegir el medio por el cual se va a instalar <P> <ITEMIZE> <ITEM>Cd-Rom, pide el block meto /dev/hdb <ITEM>dónde están los paquetes en el CD - tecleo none <ITEM>este directorio se llama stable/bynary en el sitio de distribución &nl; - tecleo stable/binary <ITEM>igual con /contrib/bynary - tecleo contrib/binary <ITEM>igual con /non-free/binary tecleo - non-free/binary, me da : &nl; no existe - tecleo none <ITEM>igual con local/binary tecleo none y se lo salta <ITEM>pulso return y vuelve a menú inicial </ITEMIZE> <SECT2>1. Update. Modificar lista de paquetes disponibles <P> Salen los siguientes mensajes : <VERB> - Uncompressing .......... done - Information about 976 packages was updated - Information about 31 packages was updated </VERB> <SECT2>2. Select. Pregunta qué paquetes quieres en tu sistema <P> <VERB> - 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) </VERB> <SECT> Cómo instalé Linux Debian 2.0 <P> 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: <SECT1>Particionado del HD <P> <SECT2>Preliminares <P> 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 <BF>Sys a:</BF>. En este disquete me copio los ficheros <BF>Restorrb.exe, Fips.exe y Errors.txt</BF> 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. <SECT2>Defragmentación del HD <P> 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 <BF>defrag</BF>. Paso <BF>defrag</BF> (que dura mas de media hora) desde Windows95, sin problemas. Ahora rearranco el ordenador, metiendo el disquete de arranque de DOS. Ejecuto <BF>Fips</BF> 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 <BF>Restorrb.exe</BF> dejándolo como estaba. Después me pregunta en cuál de los dos HD que tengo quiero hacer la partición: <TSCREEN><TT>Wich Drive (1=0x80 / 2=0x81)?</TT> -> contesto 1</TSCREEN> 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: <VERB> 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 </VERB> 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: <TSCREEN> <BF>Error Fips : hay información en el ultimo sector, no se puede hacer la partición</BF> </TSCREEN> En las instrucciones de <BF>Fips</BF> dice que puede haber problemas de este tipo si usas <BF>Image</BF> o <BF>Mirror</BF> en W95, entonces tienes que buscar un fichero que se llame <BF>image.idx</BF> o <BF> mirorsav.fil</BF> y borrarlos, ya que estos ficheros se colocan en el ultimo sector del HD y como son ficheros ocultos, <BF>defrag</BF> 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 <BF>image.idx</BF>, automáticamente lo borro (incluso de la papelera) y vuelvo a empezar con <BF>Fips</BF>. Ahora ya no me sale el error de antes, pero me ofrece los siguientes datos para hacer la partición : <VERB> 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 </VERB> ¡¡¡ 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 : <VERB> . 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 </VERB> Al final, encuentro en <IT>http://neon.airtime.co.uk/users/hal9000/defrag.htm</IT> un documento titulado <BF>"Completely Defragment your Hard Disk Drive"</BF>, con el que consigo por fin el espacio libre que necesito, los pasos a seguir son los siguientes : <ITEMIZE> <ITEM>Entrar en W95 y crear accesos directos en el escritorio de : <BF>Defrag</BF>, <BF>Ms-Dos</BF> y <BF>Sistema del Panel de control</BF>. <P>Esto es porque si no cuando desactivemos la memoria virtual tendremos problemas de memoria para acceder a ello por otros caminos. <ITEM>Entrar en el Panel de Control, en el icono que pone <BF>Sistema</BF> y desactivar la memoria virtual. <ITEM>Apagar el ordenador y volver a encender. <ITEM>Cuando se esta arrancado, en el momento en que sale <TT>"Iniciando Windows 95"</TT>, apretar la tecla <BF>F8</BF> y se nos presentara un menú en el que seleccionamos <TT>"Solo símbolo del Sistema"</TT>, y accedemos al DOS. <ITEM>Ya en el DOS, en la unidad C: , tecleamos el comando <BF>attrib -r -s -h -a /s</BF> para quitar todos los atributos de todos los ficheros de la unidad C: (esto puede durar una hora) <ITEM>Borrar todos los ficheros de los directorios <BF>TMP</BF> y <BF>TEMP</BF> <ITEM>Apagar y volver a encender. Esta vez entramos en W95. <ITEM><BF>LABEL</BF> <ITEM>Desde W95, entrar en DOS (desde el icono del panel principal) <ITEM>Entrar en el directorio C:\\WINDOWS y teclear <BF>attrib -r -s -h -a *.dat</BF> <P>Repetir esto ultimo de nuevo pero con los *.da0. Teclear el comando <BF>attrib</BF> para ver si todavía hay algún fichero oculto en el directorio WINDOWS ... si lo hay, quitarle los atributos. <ITEM>Volver a W95 y ejecutar <BF>defrag</BF> <ITEM>Si es necesario volver a repetir desde <BF>LABEL</BF>. </ITEMIZE> 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. <SECT2>Particionando <P> De nuevo vuelvo a ejecutar <BF>Fips</BF> y en esta ocasión si, me sale : <VERB> 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) ) </VERB> <TSCREEN> <TT>Do you want to continue or reedit the partition table (c/r) ?</TT> -> tecleo c </TSCREEN> Salen una serie de datos sobre el New boot sector <VERB> Checking boot SECTor ..... ok Ready to write new partition scheme to disck Do you want to proceed (y/n) ? -> tecleo y Repartitioning complete </VERB> Ya esta creada la nueva partición. <SECT1>Instalación de Linux Debian 2.0 <P> <SECT2>Comenzando <P> Siguiendo las instrucciones de la revista. Arranco Windows95 y me meto en el DOS. Inserto el CD de instalación y tecleo <BF>F:Install/boot.bat</BF>. 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: <TT>Select color or Monochrome display - </TT> elijo color y después next Ahora me sale el <BF>"Installation Main Menu"</BF>, para seleccionar el resto de las opciones. Configurar el teclado: selecciono "es". Se hace de la siguiente forma : <ITEMIZE> <ITEM>posicionarse sobre el titulo "es" <ITEM>dar a la tecla espaciadora, con lo que aparece un asterisco al lado <ITEM>dar a la tecla Tab, con lo que se enciende el OK <ITEM>dar a return </ITEMIZE> <SECT2>Creacion de las particiones Linux y Swap <P> Selecciono <BF>"Partition a Hard-Disk"</BF> y me sale <TSCREEN><VERB> Select Disk drive to partition. Me ofrece: /dev/hda y /dev/hdc (las particiones linux de mis dos HDs) </VERB></TSCREEN> <TSCREEN>Si solo tienes un HD seguramente no te saldrá esta opción.</TSCREEN> Elijo <BF>/dev/hda</BF> que es el nombre de dispositivo que se asigna en linux al primer disco duro <VERB> ( /dev/hda es el primer HD /dev/hdb es el Cdrom /dev/hdc es el segundo HD etc. ) </VERB> Al dar intro me sale la pantalla del <BF>cfdisk</BF> que es el programa de manejo de particiones de linux (como el <BF>fdisk</BF> de W95) <verb> 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 </verb> Aquí tenemos la partición <BF>/dev/hda1</BF> que es la C: de W95 en argot Linux. Y la <BF>/dev/hda2</BF> que es la que vamos a usar para nuestro Linux. El tipo es DOS porque <BF>Fips</BF> las crea siempre DOS. Ahora, para poder asignar la partición a Linux y dividirla en un área de <BF>datos</BF> y otro de <BF>swap</BF> 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 <BF>/dev/hda2</BF> y elijo la opción <BF>Delete</BF> con lo cual me queda de la siguiente forma : <verb> Name Flags Part type Fs type Label Size MB --------- ----- --------- -------------- ----- ------- /dev/hda1 Boot Primary DOS FAT 16(big) [ ] 1480,50 Free space 578,82 </verb> Ahora selecciono el Free space y elijo la opción New para crear las nuevas particiones. <VERB> 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 </VERB> A esta partición le pongo <BF>Tipo 83 (Linux)</BF>. También le puse <BF>Boot</BF>, que esta muy mal puesto. Solo puede haber una partición <TT>bootable</TT> en el HD. Por esto tuve problemas ya que al arrancar me daba el error <BF>"tabla de partición errónea"</BF>. A continuación, y de la misma forma me creo la partición para swap : <ITEMIZE> <ITEM>seleccióno <TT>Free space</TT> <ITEM>elijo <TT>New y enter</TT> <ITEM>elijo Tipo : <TT>primary</TT> <ITEM>el size lo dejo en 35.44 <ITEM>seleccióno ubicación : <TT>beginning</TT> <ITEM>seleccióno <TT>Type = 82</TT> (swap) </ITEMIZE> Me sale la situación final de las particiones : <verb> 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 </verb> Ahora le doy <BF>Write</BF> para que modifique la tabla de particiones con estos nuevos datos. <VERB> Are you sure -> yes Quit </VERB> Después de esto, me vuelve a salir el panel del <BF>Main Menu</BF> y ahora selecciono : <VERB> 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 </VERB> 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. <SECT2>Instalación del sistema <P> <VERB> 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 </VERB> Ya tengo instalado el sistema y se va a arrancar por primera vez. <SECT2>Configuracion del sistema a nuestro gusto <P> Una vez que el sistema ha arrancado, lo primero que se necesita es un usuario administrador del sistema <BF>(root)</BF>, 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. <TSCREEN><VERB> Me pide: Dar una password para el usuario root : se la doy Quieres crear un segundo usuario ? : yes. Me pide varios datos y se los doy. Shall I install shadow passwords (sistema de encriptación de claves) -> respondo Si (es recomendable) Shall I remove the pcmcia packages -> respondo Si (son paquetes especiales para portátiles, por eso los borro) Do you want to use PPP connection to install the system -> contesto Yes Sale un programa de configuración de PPP (creo que es pppconfig) Next: create a connection : . configurar el servidor DNS : IP primary : nnn.nnn.nnn.n (Dns primaria, se puede ver en tu conexión W95) IP secundary : nnn.nnn.n.nnn (Dns secundaria) Provider name : redestb (el nombre de tu proveedor) . crear conexión : elegir el método de autenticación PAP -> elijo este CHAT CHAP . Enter password : meto la password de mi conexión a internet . Manager User configuration : enter username ISP : nombre de mi usuario = traque.redestb1 . Manager Port configuration : enter port of your modem : el puerto al que esta conectado mi modem, es el /dev/TtyS1 (COM2) . Default Route : enabled -> ok . Ip numbers : noipdefault . Set speed : 115200 . Modem initialization string -> ATZ . Number to dial -> 055 . Tone or pulse -> ATDT (tone) . Properties -> OK ; sale el menú con todo lo anterior . elijo Finished . write files -> OK . Quit Si quieres probar la conexión, responde yes a la pregunta siguiente, Do you want me to start a PPP conection now? . Si no funciona, no te preocupes, ya la afinaras mas adelante. Choose one of several selections of packages to be installed. Esto es nuevo en la version 2.0, es una alternativa a Dselect que te da a elegir entre varios perfiles distintos y así no tienes que andar instalando paquetes con Dselect. Es una muy buena idea sobre todo para los mas novatos que se lían bastante con Dselect y no saben que elegir. Do you want to skip this step? -> tecleo N y me da a elegir entre los siguientes perfiles : </VERB></TSCREEN> <descrip> <tag/ADMIN/ Administrator box : Administrador del sistema (305 MB) <tag/BASIC/ Standard system without developments tools : Sistema básico sin herramientas de desarrollo (25 MB) <tag/DEVEL-COMP/ Huge development environment (perl, phiton, c, etc.): Entorno de desarrollo completo (programadores) (404 MB) <tag/DEVEL-STD/ Standard C development environment : Entorno standard de desarrollo en un entorno C (programadores) (340 MB) <tag/DIALUP/ Home machine (graphics, sound, X window, etc) : Sistema personal amigable, con gráficos, sonido, etc (420 MB) <tag/SERVER-COMP/ Server (add, mailinglist, backup, news, samba, squid, etc.) : Entorno servidor de internet completo (50 MB) <tag/SERVER-STD/ Standard server (ftp, web, dns, nis, pop): Entorno servidor de internet standard (40 MB) <tag/STANDARD/ Compiler, printing, emacs and networking : Un entorno standard con lo básico (89 MB) <tag/WORK-SCI/ Scientific workstation (tex, math, plot, X ...): Workstation científica (500 MB) <tag/WORK-STD/ Standard workstation (tex, graphics, internet, X): Workstation standard (382 MB) tag/CUSTOM/ select the tasks you will perform with this system </descrip> 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. <SECT2>Instalación de paquetes con Dselect <P> <SECT3>0. Access , elegir el método de acceso a los paquetes <P> 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. <TT>Enter block device name</TT> : 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 <BF>/dev/hdb</BF> 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. <SECT3>1. Update list <P> Damos return para que se actualice la lista activa de paquetes. <SECT3>2. Select <P> 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 : <ITEMIZE> <ITEM>Todos los Required Packages (requeridos por el sistema, estarán seleccionados) <ITEM>Todos los Important Packages (importantes) <ITEM>Standard Packages (standar de todas las distribuciones) <ITEM>lpr (para imprimir) <ITEM>Opcionales y Extras: <ITEM>sendmail, fetchmail, procmail (para el correo) <ITEM>ppp (necesario para conectarse a Internet) <ITEM>magicfilter, djtools, Mpage (necesarios para imprimir) <ITEM>filerunner (para manejar ficheros y directorios) <ITEM>todos los paquetes de la SECTion X11 (son las X) <ITEM>y todos los relacionados con los anteriores </ITEMIZE> <SECT> Actualización de Debian 1.3.1 a Debian 2.0 <P> <ITEMIZE> <ITEM>Estructura distribución Debian <P>Directorios en los que están situados los paquetes : <VERB> 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 </VERB> Directorios actualmente existentes en el FTP de Debian : <VERB> 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 </VERB <ITEM>Actualización via FTP, mi experiencia personal <P>Segun un mail que leí sobre cómo bajarse la 2.0 : <TSCREEN><VERB> 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) </VERB></TSCREEN> Otro mail : <TSCREEN><VERB> 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 .. </VERB></TSCREEN> Mi experiencia : <VERB> . 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). </VERB> 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é... <ITEM>La distribución Debian 2.0, saldrá en Linux Actual num. 4 (Septiembre-98) <P>En la lista española de Debian se recibió este post (omito los nombres) : <VERB> 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. </VERB> <ITEM>Actualización de Debian 1.3.1 a Debian 2.0 utilizando los CDs de Linux Actual num. 4 <P> Sigo las instrucciones de actualización de www.debian.org <BF>(autoup.sh , apt y a mano)</BF>, según tengo entendido mucha gente se ha actualizado con el script <BF>autoup.sh</BF> sin problemas. Sin embargo, me han dicho que lo mejor es actualizarse con <BF>apt-get</BF>, por tanto voy a utilizar esta opción. Por supuesto, hay que tener instalado el <BF>paquete apt</BF>, y el CD en el cdrom. Después tienes que incluir en el fichero <BF>/etc/apt/sources.list</BF> 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 : <VERB> # 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 </VERB> Ejecuto: <BF>apt-get update</BF>. Este comando te guarda los ficheros packages en el disco. Ejecuto: <BF>apt-get install timezones locales</BF>. Ejecuto: <BF>apt-get -f dist-upgrade</BF>. Esta es la actualización propiamente dicha. Ahora, arreglamos lo del <BF>wtmp</BF> y <BF>utmp</BF> con los siguientes comandos : <VERB> cd /var/log mv wtmp wtmp.libc5 touch wtmp cd /var/run cp /dev/null utmp </VERB> Por ultimo, se ejecutan todos los pasos de Dselect para que se reconfigure el sistema. <ITEM>Problemas que yo he tenido : <P> En la actualización, ningún problema. En las aplicaciones que tenia funcionando : <VERB> 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. </VERB> </ITEMIZE> <SECT> Proyecto para incorporar sonido a mi Debian <P> <SECT1>Antecedentes <P> Después de instalarme los programas de audio <BF>Xmixer</BF> y <BF>Xplaycd</BF>, 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 <BF>Howto-sonido del proyecto Lucas</BF> en el que señala como una de las primeras comprobaciones a realizar: <TSCREEN> cat /dev/sndstat </TSCREEN> al efectuar este comando me devuelve <BF>"No such device"</BF>, 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 <BF>es.comp.os.linux</BF> para preguntar si alguien con Debian ha tenido el mismo problema y me pueden aconsejar qué hacer. Me responden que, efectivamente: <BF>recompilar el núcleo con soporte para sonido</BF>. Hay que instalar las fuentes del kernel 2.0.30 con dselect y luego recompilar, aunque me advierten que mi tarjeta <BF>Pnp</BF> 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. <SECT1>Estudio del problema <P> El primer paso es recopilar información para guiarme en este proyecto : <ITEMIZE> <ITEM>El Kernel-Howto del proyecto Lucas : guía para compilar el núcleo <ITEM>El Howto-sonido del proyecto Lucas : todo sobre sonido en Linux <ITEM><ref id="tendero" name="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 <ITEM>Un Mini Howto sobre la Soundblaster-Awe, encontrado en http://Sunsite.unc.edu <ITEM>Información sobre tarjetas soportadas por el kernel Linux <ITEM>Informacion sobre <ref id="mitarjeta" name="mi tarjeta"> de sonido (Sound Blaster 16 Pnp) <ITEM>Notas sobre el artículo de Linux Actual num.1 <ref id="recompila" name="Recompilación del Kernel">. <ITEM>Hay una buena documentación en los ficheros Readme de /usr/src/linux/drivers/sound sobre todo en el Readme.cards </ITEMIZE> Una vez estudiada toda esta información, se pueden extraer las siguientes conclusiones : <TSCREEN><VERB> 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. </VERB></TSCREEN> Por tanto, la estrategia a seguir será la siguiente: <SECT1>Compilación e instalación del kernel <P> <SECT2>Creación del archivo de configuración con xconfig <P> 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: <TSCREEN><BF>make xconfig</BF></TSCREEN> Ojo, hay que ejecutarlo estando posicionado en el directorio <BF>/usr/src/linux</BF>. Solo se cargan como módulos (M) el <BF>soporte de puertos serie</BF> y el <BF>sonido</BF>. 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. <DESCRIP> <TAG/Code maturity level options/ <VERB> CONFIG_EXPERIMENTAL Para versiones alpha NO </VERB> <TAG/Loadable module suport/ <VERB> 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 </VERB> <TAG/General Setup/ <VERB> 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 </VERB> <TAG/Floppy, IDE, and other block devices/ <VERB> 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 </VERB> <TAG/Networking options/ <VERB> 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 </VERB> <TAG/SCSI support/ <VERB> SCSI support (CONFIG_SCSI) Soporte SCSI NO </VERB> <TAG/Network device support/ <VERB> 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 </VERB> <TAG/ISDN subsystem/ <VERB> ISDN support (CONFIG_ISDN) NO </VERB> <TAG/CDROM drivers/ <VERB> Support non SCSI, IDE/ATAPI CD-ROM (CONFIG_CD_NO_IDESCSI) NO </VERB> <TAG/Filesystems/ <VERB> 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 </VERB> <TAG/Character Devices/ <VERB> 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 </VERB> <TAG/Sound/ <VERB> Solo se listan las opciones elegidas Sound card support (CONFIG_SOUND) M Sound Blaster support (CONFIG_SB) YES /dev/dsp and /dev/audio support (CONFIG_AUDIO) YES MIDI interface support (CONFIG_MIDI) YES FM synteticer support (CONFIG_YM38) YES I/O Base 220 IRQ Por defecto salía 7 5 DMA 8 bits 1 DMA 16 bits 5 MPU I/O Base Por defecto salía 0 300 Audio DMA Buffer size 65536 </VERB> <TAG/Kernel hacking/ <VERB> Kernel profiling support CONFIG_PROFILE Para pruebas </VERB> </DESCRIP> <SECT2>Generación del kernel con soporte de sonido <P> <BF>SECUENCIA DE COMANDOS (siempre en /usr/src/linux) :</BF> <DESCRIP> <TAG/Make dep/ Establece las dependencias entre los módulos seleccionados <TAG/Make clean/ Limpia los restos de anteriores compilaciones, importante ya que make solo compila los archivos no construidos <TAG/Make zdisk/ Generar la imagen del kernel en <BF>/usr/src/linux/arch/i386/boot/zimage</BF> y deja además una copia en diskette (yo arranco con diskette). <P>En un primer intento me da el error: <BF>AS86 not found</BF> (no lo había instalado). Instalo el paquete <BF>bin86</BF> con dselect. Vuelvo a ejecutar el comando y funciona sin problemas. <TAG/ Make modules/ Compila los módulos seleccionados como cargables en ejecución y los deja en el árbol de directorios de las fuentes. <TAG/Make modules_install/ Copia los módulos creados y sus dependencias a <BF>/lib/modules/2.0.34</BF> que es donde los busca la herramienta que efectúa la carga. </DESCRIP> Una vez efectuados estos pasos, a continuación, modifico el fichero <BF>/etc/modules</BF> incorporando la palabra <BF>sound</BF> debajo de <BF>serial</BF>, 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 ... <SECT1>Resolución del problema de las tarjetas de sonido Pnp <P> Para verificar si tengo sonido, he insertado un cd de música en el cd-rom y después he ejecutado <BF>xplaycd</BF>. 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 <BF>/sbin/lsmod</BF> para saber los módulos cargados como residentes en el kernel y me sale solo <BF>"serial"</BF>. Hago <BF>/sbin/depmod -a</BF> , y después <BF>/sbin/modprobe sound</BF>, para cargar manualmente el módulo, y ahora, al hacer <BF>/sbin/lsmod</BF> sí me sale <BF>"sound"</BF>. Ahora sigo las instrucciones del Howto-sonido: <TSCREEN><VERB> 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. </VERB></TSCREEN> 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 <BF>Pnp</BF>, pero al parecer hay un paquete de programas que pueden solucionar el tema <BF>(isapnptools)</BF>. Estudiemos el tema del isapnp: <VERB> 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) </VERB> Siguiendo las instrucciones ejecuto como root <BF>isapnp /etc/isapnp.config</BF>. No me da error alguno. Ahora <BF>cat /dev/sndstat</BF> me sale correcto. Ahora hay que meter <BF>isapnp</BF> en el arranque <BF>(/etc/init.d/boot)</BF>, tal como se explica &nl; en <BF>/usr/doc/isapnptools/Readme.Debian</BF>. (!!!! ya lo tenia !!!!). Por último ... rearranco linux ... meto el cd de Los Ronaldos ... ejecuto xplaycd ... y ... <TSCREEN><BF>!!!!!!!! FUNCIONA !!!!!!!!!!!!!</BF></TSCREEN> 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. ***************************************************************************** <BF>DOCUMENTOS</BF> <LABEL ID="tendero"> <BF>Post de Tendero</BF> Subject: Como he configurado mi Awe64 ... y funciona !!! &nl; From: TENDERO@argen.net &nl; Date: 1998/07/07 &nl; Newsgroups: es.comp.os.linux &nl; 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: <VERB> [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 </VERB> 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 <TSCREEN><BF>sound</BF></TSCREEN> 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 <LABEL ID="mitarjeta"> <BF>Mi tarjeta de sonido</BF> <ITEMIZE> <ITEM>Características : <ITEMIZE> <ITEM>tarjeta de audio de 16 bits <ITEM>compatible Adlib y Sound Blaster (???) <ITEM>admite compatibilidad ISA 1.0a sobre Pnp <ITEM>admite General MIDI, Roland GS, MT-32, etc. <ITEM>admite algoritmos de compresión <ITEM>se puede conectar a una unidad IDE CD-ROM </ITEMIZE> <ITEM>Jaks : <ITEMIZE> <ITEM>entrada de línea <ITEM>entrada de micrófono <ITEM>salida de línea </ITEMIZE> <ITEM>Conectores : <ITEMIZE> <ITEM>Aux1 y Aux2 <ITEM>Joystick / MIDI <ITEM>micrófono <ITEM>altavoz del PC <ITEM>etc. </ITEMIZE> <ITEM>Direcciones de E/S : <ITEMIZE> <ITEM>Interfaz de sonido : 220H a 233H, 240H a 254H, 260H a 273H, 280H a 293H <ITEM>Juegos/joystick : 200H a 207H <ITEM>Sintetizador : 388H a 38bH <ITEM>MPU-401 UART : 300H a 301H, 330H a 331H </ITEMIZE> <ITEM>Lineas de solicitud de interrupción (IRQ) <ITEMIZE> <ITEM>Interfaz de sonido : IRQ 5 </ITEMIZE> <ITEM>Canales de acceso directo a memoria (DMA) <ITEMIZE> <ITEM>Canal inferior : DMA 1 <ITEM>Canal superior : DMA 5 </ITEMIZE> </ITEMIZE> <LABEL ID="recompila"> <BF>Recompilacion del kernel</BF> <ITEMIZE> <ITEM> 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. <P> <ITEM> El kernel debe contener todos los controladores o módulos necesarios para comunicarse con el hardware instalado. <P> <ITEM> 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í. <P> <ITEM> 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. <P> <ITEM> Las últimas versiones de Linux permiten cargar y descargar controladores en tiempo de ejecución, sobre un kernel ya compilado. <P> <ITEM> Las fuentes terminaran siendo instaladas en /usr/src normalmente, con nombres como /usr/src/kerne-source-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.) <P> <ITEM> 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 <P> <ITEM> 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 (directorio-fuentes) asume /usr/src/linux por defecto. <P> <ITEM> 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. <P> <ITEM> Existen las siguientes herramientas para efectuar la compilación: <P> <ITEMIZE> <ITEM> 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. <P> <ITEM> 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. <P> <ITEM> make xconfig se puede utilizar con Xwindow si está instalada la librería Tk. <P> <ITEM> make mrproper es necesario para eliminar todo rastro de anteriores compilaciones antes de efectuar una nueva. <P> make oldconfig intentará preparar las fuentes a partir de la última configuración realizada. <P> </ITEMIZE> <ITEM> Algunas opciones de configuración : <P> <ITEMIZE> <ITEM> Soporte de red : siempre necesario, no solo para Internet, si no porque muchos programas lo requieren, como por ejemplo las X Window <P> <ITEM> Tipo de procesador : si pones un tipo concreto el código no será ejecutable en procesadores mas antiguos. <P> <ITEM> Sistema de ficheros : incluir extf2, nfs, iso9660, proc, msdos(?), umsdos(? nombres largos) <P> <ITEM> Kernel hacking : para operaciones de depuración, no instalarlo ya que producirá un kernel mayor y mas lento <P> <ITEM> 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. <P> <ITEM> 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. <P> </ITEMIZE> <ITEM> Compilación del Kernel: <P> <ITEMIZE> <ITEM> make dep : establece las dependencias entre los módulos seleccionados <P> <ITEM> make clean : borra restos de compilaciones anteriores, es importante ya que make solo busca qué archivos no están construidos y los compila. <P> <ITEM> make zImage : deja una imagen comprimida del kernel en /usr/src/linux/arch/i386/boot/zImage. <P> <ITEM> 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. <P> </ITEMIZE> <ITEM> Instalación del nuevo Kernel: <verb> 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. </verb> <ITEM> Instalación de los módulos cargables en ejecución : <verb> 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. </verb> <ITEM> Instalación de los módulos de carga manual: <verb> /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 </verb> <ITEM> 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) : <verb> /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 </verb> </ITEMIZE> <SECT> Cómo configuré la impresora <P> <DESCRIP> <TAG/TEORIA/ Para que el sistema de impresión funcione se necesita que esté arrancado un <BF>demonio</BF> (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 <BF>'lpd'</BF> 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 <BF>/etc/printcap</BF>, el mío contiene las siguientes líneas: <VERB> 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: </VERB> 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 <BF>'filtro'</BF> para ello debemos instalar el programa <BF>magicfilter</BF> que será llamado por <BF>lpd</BF> cada vez que vayamos a imprimir, utilizando el filtro que aparece en el parámetro <TT>:if</TT>, este filtro lo configuramos por medio del programa <BF>magicfilterconfig</BF>. Por ultimo, el programa <BF>'lpr'</BF> es con el que imprimimos los documentos. <TAG/PRACTICA/ Resumiendo, necesitamos: <ITEMIZE> <ITEM> instalar con dselect los paquetes Debian : <BF>magicfilter, mpage, lpr</BF>, y si tienes una HP deskjet, instala también <BF>djtools</BF>. <P> <ITEMIZE> <ITEM> lpr se encuentra en <BF>Standard Packages in section net</BF> <ITEM> magicfilter y mpage se encuentran en <BF>Standard Packages in section text</BF> </ITEMIZE> <P> <ITEM> crear el fichero <BF>/etc/printcap</BF> configurando el filtro adecuado : <P> <ITEMIZE> <ITEM> ejecuto <BF>/usr/sbin/magicfilterconfig --force</BF> <ITEM> <TT>fullname ?</TT> - tecleo <BF>'HP Desckjet 690c'</BF> <ITEM> <TT>shortname ?</TT> - tecleo <BF>'hp690C'</BF> <ITEM> <TT>alias ?</TT> - tecleo <BF>'HP690'</BF> <ITEM> <TT>device ?</TT> - tecleo <BF>/dev/lp1</BF> (dispositivo correspondiente a la impresora) <ITEM> <TT>input filter</TT> - hay que elegir entre una lista, yo elijo <BF>dj550c</BF> <ITEM> después me pide datos para otra impresora, como solo tengo una tecleo <BF>intro</BF> <ITEM> me enseña los datos que he tecleado y me pregunta si es ok, tecleo <BF>"y"</BF> <ITEM> directorio spool no existe, creo /var/spool/lpd/hp690C ? (y/n), tecleo <BF>"y"</BF> <ITEM> <BF>/etc/printcap generated</BF> </ITEMIZE> <P> <ITEM> para imprimir, ejecutar <BF><lpr fichero></BF> <ITEM> para ver la cola de impresión, ejecutar <BF>lpq</BF>. <ITEM> para eliminar entradas de la cola de impresión, <BF>lprm</BF>. <ITEM> controlar el sistema de impresión, <BF>lpc</BF>. </ITEMIZE> </DESCRIP> <SECT> Cómo conectar con la Internet <P> <SECT1>Conexion Internet Debian 1.3.1 (a mano) <P> Hay que hacerlo como root. El kernel debe soportar PPP, para saberlo, si ejecutas el comando <BF>"dmesg | more"</BF> te tienen que salir, entre otros, unos mensajes parecidos a estos: <VERB> ... 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 ... </VERB> En el directorio /etc hay que tener estos dos archivos (o crearlos con 'touch archivo'): <VERB> # 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 </VERB> Y en /etc/ppp/ estos otros (como mínimo): <VERB> # 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 </VERB> <BF>Ahora seguiremos los siguientes pasos</BF> <ENUM> <ITEM>Asignamos al grupo de usuarios 'dip' estos archivos (si es necesario): <VERB> # chgrp dip /etc/ppp.chatscript /etc/ppp.options_out # chgrp dip /etc/ppp/options </VERB> <ITEM>Editamos 'ppp.chatscript': <VERB> =====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). </VERB> <ITEM>Editamos /etc/ppp.options_out <VERB> =====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. </VERB> <ITEM>IMPORTANTE: hacemos copia de /etc/ppp/options viejo y después lo sobreescribimos con &nl; /etc/ppp/options_out <VERB> # 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. </VERB> <ITEM>Editamos el fichero /etc/resolv.conf: <VERB> =====inicio===== nameserver 194.224.52.4 # DNS primaria nameserver www.xxx.yyy.zzz # DNS secundaria, si la tienes =====fin===== </VERB> <ITEM>Hacemos copia de 'pap-secrets': <VERB> # cp /etc/ppp/pap-secrets /etc/ppp/pap-secrets.original </VERB> <ITEM>Editamos /etc/ppp/pap-secrets: <VERB> =====inicio===== LCA013138@lacaixaweb * xxxxxxxxxx =====fin===== </VERB> </ENUM> Ahora el sistema debería estar listo para conectar: <VERB> # 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 </VERB> si no funciona te saldrá algo así: <VERB> # 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. </VERB> o también: <VERB> # 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. </VERB> 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: <VERB> # poff # </VERB> y deberías oir como el modem 'cuelga' si haces 'plog': <VERB> # 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. </VERB> Para poder utilizar 'pon', 'plog' y 'poff' sin ser 'root': <VERB> # adduser 'usuario' dip # chmod 640 /etc/ppp.* # chmod 640 /etc/ppp/options </VERB> Si haces: <VERB> $ plog -f & </VERB> se puede seguir todas las vicisitudes de la conexión. <SECT1>Conexión a internet en Debian 2.0 (con pppconfig) <P> En Debian 2.0 existe la utilidad <BF>"pppconfig"</BF> para generar la conexión a Internet. Tienen que existir los directorios <BF>/etc/chatscripts</BF> y <BF>/etc/ppp/peers</BF>, si no, no te arranca la utilidad <ITEMIZE> <ITEM> <TT>Create a conexión</TT> - OK <ITEM> Mensaje que te dice que no tienes el DNS de tu servidor (ISP) en el fichero <BF> /etc/resolv.conf</BF>, <TT>¿quieres instalarlo ahora?</TT> - YES <ITEM> <TT>Introduce el numero IP primario de tu servidor</TT> : 194.179.106.2 <ITEM> <TT>Introduce el numero IP secundario de tu servidor</TT> : 194.179.1.100 <ITEM> <TT>Provider Name</TT> : 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" <ITEM> <TT>Authentication metod</TT> : PAP <ITEM> <TT>Enter password</TT> : machaca "replace with password" con tu password <ITEM> <TT>Manage user configuration</TT> : machaca "replace with name" con el nombre de tu usuario en el servidor <ITEM> <TT>Manage port configuration</TT> : puerto donde tienes conectado el modem (generalmente /dev/ttyS1), o sea el que te sale por defecto <ITEM> <TT>Defaut route</TT> : enable (OK) <ITEM> <TT>Ip numbers</TT> : noipdefault (OK) <ITEM> <TT>Set speed</TT> : 115200 (OK) <ITEM> <TT>Modem initialization</TT> : ATZ (OK) <ITEM> <TT>Number to dial</TT> : numero telefónico de tu servidor 912000111 <ITEM> <TT>Tone or pulse</TT> : selecciona marcación por tonos o por pulsos (normalmente ATDT) <ITEM> ahora ok, y finished </ITEMIZE> Comandos : <VERB> # 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 </VERB> <SECT> El correo y Linux <P> <SECT1>Netscape, lo fácil <P> 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. <SECT1>Información sobre el tema <P> <ITEMIZE> <ITEM>Fetchmail+Sendmail-COMO : información sobre su configuración en la página del Proyecto Lucas. <ITEM>Sendmail Mini Como : compilación de sendmail.cf en la página del Proyecto Lucas. <ITEM>El correo: Pine, Fetchmail, Sendmail : información sobre su configuración en la <htmlurl url="http://www.arrakis.es/~eb5ccf/monkiki/home.html" name="página de Monkiki">. <ITEM><ref id="procmail" name="Resumen de un articulo de Linux Actual sobre Procmail">. <ITEM><htmlurl url="http://www.jazzie.com/ii/faqs/archive/mail/filtering-faq/" name="Faq sobre el filtrado de mensajes de correo con Procmail">, en inglés. <ITEM><ref id="defensa" name="Defensa contra Email-bombing y mail no deseado"> : basado en el faq sobre filtrado de mensajes, pero en español. <ITEM><htmlurl url="http://beaker.nmsu.edu/dcummins/Pine/pine.html" name="Un buen tutorial sobre Pine">. <ITEM><htmlurl url="http://www.washington.edu/pine/" name="Todo sobre Pine">. </ITEMIZE> <SECT1>Agentes que pueden intervenir <P> En primer lugar, estos son los agentes que pueden intervenir en todo el tema este del correo : <DESCRIP> <TAG/MUA (Mail User Agent)/agente de usuario, programas para leer y escribir correo (Elm, Mutt, Pine) <TAG/MTA (Mail Transport Agent)/agente de transporte (mailer), transfiere los mails a su correcto destino (Sendmail) <TAG/MDA (Mail Delivery Agente)/agente de entrega de correo (Sendmail, Procmail) </DESCRIP> Para no liarme mucho, de momento usaré como <BF>MUA</BF> el propio Netscape, es decir lo usaré para escribir el correo, pero cuando lo envíe pinchando el botón <BF>"Send now"</BF>, quiero que me lo deje en la cola de mensajes a enviar de mi <BF>MTA</BF>, para ello configuro Netscape indicándole que mi servidor es mi propia máquina (localhost o 127.0.0.1), es decir : <VERB> en edit / preferences / Mail&Groups / Mail server pongo como Outgoing mail (SMTP) Server = 127.0.0.1 </VERB> <SECT1>SENDMAIL <P> 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) : <ITEMIZE> <ITEM> revisar el contenido de mi /etc/hosts, ya que sendmail es muy quisquilloso en este tema <ITEM> 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. <ITEM> modificar sendmail.cf para indicarle mi servidor SMTP (DSsmtp: smtp.mx3.redestb.es) <ITEM> enmascaramiento del usuario que envía el mensaje <tscreen><verb> 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). </verb></tscreen> <ITEM> modificar sendmail.cf para incluir las rules especiales para que funcione correctamente el MUA Pine (si lo uso) <ITEM> enmascaramiento del dominio, modificando el sendmail.cf para indicarle mi dominio real (DMmx3.redestb.es) <ITEM> reiniciar sendmail con /etc/init.d/sendmail reload </ITEMIZE> Ahora efectúo una prueba : <ITEMIZE> <ITEM> redacto un mail de prueba destinado a mí mismo con Netscape <ITEM> lo envío desde Netscape con "send now" (debe recibirse en mi propia máquina) <ITEM> compruebo si tengo algún mensaje en la cola de sendmail para enviar ejecutando mailq (sendmail -bp) <ITEM> ¡efectivamente, el mensaje de prueba esta en la cola esperando para ser enviado <ITEM> ejecuto sendmail -q para enviar los mensajes de la cola, sin errores <ITEM> de nuevo con Netscape, pincho en 'Get msg', como siempre hago para recibir, y ... recibo mi prueba, ok. </ITEMIZE> Como dice monkiki en su página <htmlurl url="http://www.arrakis.es/~eb5ccf/monkiki/configurando/configurando-4.html" name="El correo: Pine, Fetchmail, Sendmail"> : <TSCREEN><VERB> 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. </VERB></TSCREEN> 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 <SECT1>FETCHMAIL <P> 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 : <TSCREEN><VERB> 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. </VERB></TSCREEN> Como antes, sigo las instrucciones del Fetchmail+Sendmail-COMO del Proyecto Lucas <ITEMIZE> <ITEM> aunque se puede utilizar sin fichero de configuración recomienda que se use (¡pues a usarlo!) <ITEM> el fichero debe ubicarse en /home/usuario/.fetchmailrc del usuario que use fetchmail <ITEM> genero el fichero tal como se dice en la página y le hago un chmod 600 para el tema de los permisos <ITEM> aunque en el howto se dice como automatizar la llamada, de momento lo invocaré simplemente con fetchmail </ITEMIZE> 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 : <VERB> en edit / preferences / Mail&Groups / Mail server type pincho 'Movemail aplication' y 'Built in' </VERB> Con esto Netscape busca el correo en /var/spool/mail y no en ningún servidor POP. Ahora la prueba : <ITEMIZE> <ITEM> redacto un mensaje con Netscape para mí mismo y lo envío <ITEM> ejecuto sendmail -q para mandarlo a mi servidor <ITEM> ejecuto fetchmail para recogerlo (antes dejo pasar un minutillo) <ITEM> en Netscape, pincho en 'get msg', y me mete el mensaje en el inbox (incluso después de haber desconectado) </ITEMIZE> 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 <SECT1>PROCMAIL <P> 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 <ref id="procmail" name="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 <BF>Local and Program Mailer specification</BF> y sustituir lo que pone por esto : <VERB> 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 </VERB> 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 : <VERB> VERBOSE=on MAILDIR=/home/traque/nsmail LOGFILE=/home/traque/procmailog # # Esta receta manda todo lo que trae en el subject la palabra 'linux' al directorio /home/traque/nsmail/Linux # :0 * ^Subject:.*(linux) Linux # # Esta receta manda todo lo que trae en el subject la palabra 'internet' a /home/traque/nsmail/Internet # :0 * ^Subject:.*internet Internet # # Esta receta manda todo lo que viene para mi e-mail a Personal # :0 * ^TOtraque@mx3.redestb.es Personal </VERB> 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. ********************************************************************************* <BF>DOCUMENTOS</BF> <p> <LABEL ID="procmail"> <BF>PROCMAIL</BF> 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 : <itemize> <item>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 : <verb> $ 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 </verb> <item>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 : <verb> "|IFS=' '&&exec /usr/bin/procmail -f ||exit 75 #usuario" </verb> </itemize> El fichero de recetas se compone de tres elementos: comentarios, asignaciones de variables de entorno y recetas. <itemize> <item>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. <p> <item>La asignación de variables de entorno tienen el mismo aspecto que en una shell bash, algunas variables importantes son : <verb> 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 </verb> <item>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 : <verb> ! 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) </verb> Cada receta comienza con una línea con la siguiente estructura: <verb> : 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 </verb> Ejemplo sencillo de receta clásica: <verb> 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 </verb> <item>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 : <verb> :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) </verb> <item>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 : <verb> :0 c backup :0 ic | cd backup && rm -f dummy `ls -t msg.*|sed -e 1,50d` </verb> 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. <p> <item>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) : <verb> :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) </verb> <item>Al comienzo de la línea de condición, podemos encontrarnos alguno de los siguientes caracteres con este significado : <verb> ! - 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 </verb> <item>Formail - es un programa de filtrado de mensajes <item>Lockfile - se usa para bloqueos del mail <item>Mailstat - lista las estadísticas de procmail (variable LOGFILE en .procmailrc) </itemize> <label id="defensa"> <BF>Defensa contra Email-Bombing y Mail No-deseado</BF> GUÍA DEL HACKING (mayormente) INOFENSIVO &nl; Serie del Principiante #2, Sección 2. &nl; Hackear en Windows95 (y un poco de NT, por dios)! &nl; _____________________________________________________________ &nl; 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 <BF>email bomb</BF>. Existen dos clases de email bomb, el Mail-masivo y el , email bomb empleando listas de correo: <BF>1) Ataques de Mail-masivo</BF>. 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. <BF>2) Mail bombs usando Listas de Correo</BF>. 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. <BF>Configurando Procmail</BF> Primero, necesitas ver si tu sistema tiene instalado Procmail. En el prompt, teclea: <Tscreen>> which procmail</tscreen> 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. <tscreen> >cd &nl; >pico .procmailrc </tscreen> Introduce lo siguiente en el archivo .procmailrc: <tscreen><verb> #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 </verb></tscreen> 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. <tscreen><verb> > 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 </verb></tscreen> 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. <BF>Condición 1:</BF> <tscreen><verb> * ! ^((((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]|$))) </verb></tscreen> 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á. <it>Nota para el Usuario Avanzado</it>: 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. <BF>Condición 2:</BF> <tscreen><verb> * ! ^From:.*(listproc|majordomo|cmeinel|johnb) </verb></tscreen> 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. <BF>Condición 3:</BF> <tscreen><verb> * ! ^TO(netnews|crypto-stuff|pcgames) </verb></tscreen> 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. <tscreen> > cd > pico -w .forward </tscreen> Ahora vamos a ver un extracto del FAQ sobre Filtrado de Email de Nancy M.: <tscreen><verb> 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. </verb></tscreen> Si el archivo .forward de arriba no funciona, las siguientes alternativas pueden ser de ayuda: <tscreen><verb> 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" </verb></tscreen> 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. <SECT> Las news off-line con leafnode <P> 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 <BF>news off-line</BF>. Primero, te diré que en la <htmlurl url="http://www.arrakis.es/~eb5ccf/monkiki/home.html" name="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 <htmlurl url="http://hinux.hin.no/linux/LDP/HOWTO/mini/News-Leafsite.html" name="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. <BF>Antes de nada te cuento mis problemas con la versión 1.0-3 de leafnode:</BF> 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. <VERB> 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 ... </VERB> 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. <BF>Ahora cómo instalé leafnode 1.4</BF> En el fichero <BF>Makefile</BF> 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 <BF>adduser</BF> ... Ejecutar el comando <BF>make install</BF> que compila e instala los programas del paquete: leafnode, fetch, texpire y checkgroups Me creo el fichero de configuración <BF>/usr/lib/leafnode/config</BF> copiándome el <BF>config.example</BF> que se ha generado al instalar y modificándolo para dejarlo así : <VERB> 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 ) </VERB> Ahora, si quieres, puedes planificar una ejecución periódica de <BF>texpire</BF> (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 <BF>cron</BF>. Este demonio se encarga de ejecutar procesos periódicos. Para planificar <BF>texpire</BF> o cualquier proceso periódico con <BF>cron</BF> es necesario ejecutar el comando <BF>crontab</BF> 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 : <VERB> crontab -u news -e </VERB> 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, <VERB> export VISUAL=/usr/bin/emacs </VERB> Y ahora si, ahora ejecutas <BF>crontab -u news -e</BF>, te abre el emacs e introduces las líneas : <VERB> # 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) </VERB> Ahora modificamos el fichero /etc/inetd.conf incluyéndole la siguiente línea : <VERB> nntp stream tcp nowait news /usr/sbin/tcpd /usr/local/sbin/leafnode </VERB> 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 <BF>kill -HUP</BF> o desconectarse y volverse a conectar. Por último, <BF>el funcionamiento del servidor es el siguiente</BF> : Vamos a bajarnos las news desde nuestro servidor de internet a nuestro disco duro, para ello, ejecutamos <BF>fetch -v</BF> 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 <BF>fetch -v</BF> 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 <BF>/var/spool/news</BF>, 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 <BF>localhost</BF> o <BF>127.0.0.1</BF>. <SECT> Bourne Shell, tutorial en español <P> <SECT1>Creación de comandos y programas usando el shell <P> 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. <SECT1>Creación y ejecución de shell scripts simples <P> 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. <VERB> 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 </VERB> Las primeras dos líneas que comienzan con una almohadilla (#) son <BF>comentarios</BF> 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 <BF>sustitución de comandos</BF>. - <BF>sustitución de comandos</BF> : 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 (`) - <BF>whoami</BF> : 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 <BF>permisos de acceso</BF>. Para dar permiso de ejecución al fichero deberemos usar el comando : <TSCREEN><BF>chmod u+rwx display</BF></TSCREEN> 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 : <TSCREEN><BF>chmod go+rx display</BF></TSCREEN> <SECT1>Programación con Bourne Shell <P> 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. <SECT2>Pasando argumentos al shell <P> 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 <BF>parámetros posicionales $1 hasta $9</BF>. Cada parámetro corresponde a la posición del argumento en la línea de comandos. El parámetro posicional <BF>$0</BF> hace referencia al nombre del comando o nombre del fichero ejecutable que contiene el shell script. <BF>Solo se pueden pasar nueve argumentos</BF>, pero se puede acceder a mas de nueve usando el comando <BF>shift</BF>. 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 <BF>$*</BF>. Esto es especialmente útil cuando se pasan nombres de ficheros como argumentos, por ejemplo : <VERB> 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 </VERB> Ejemplo de paso de argumentos : <VERB> 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. </VERB> <SECT2>Manejo de variables <P> 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). <BF>Algunas variables</BF> establecidas internamente por el shell y que están disponibles para el usuario: <VERB> $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. </VERB> <BF>Reglas</BF> que gobiernan la evaluación de variables shell : <VERB> $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. </VERB> <SECT2>Entrecomillados y caracteres especiales <P> Caracteres especiales para terminar palabras : <TSCREEN><BF>; & ( ) | ^ < > nueva-linea espacio tab</BF></TSCREEN> Para entrecomillar estos usa el backslsh (\) o llaves con comillas. <DESCRIP> <TAG/Comillas simples : / Entre comillas simples todos los caracteres son entrecomillados incluido el backslash. grep : ${gid}: /etc/group | awk -F: '{print $1}' <TAG/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) <TAG/Comillas contrarias : / Las comillas contrarias significan ejecutar el comando y sustituir por la salida. TODAY=`(set \`date\`; echo $1)` </DESCRIP> <SECT2>Leer de la entrada standard. <P> Para leer de la entrada standard se utiliza el comando read, por ejemplo : <VERB> 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" </VERB> <BF>Entrada standard</BF> : 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 : <VERB> cambiar la entrada = < mail gerardo < documento cambiar la salida = > grep gerardo /etc/passwd > mi_passw añadir a la salida = >> cat parte2 >> mi_libro </VERB> También se pueden utilizar <BF>pipes</BF>. 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. <VERB> 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. </VERB> <SECT2>Instrucciones condicionales. <P> Cada comando Unix retorna un <BF>valor de salida</BF> el cual puede ser consultado. Este valor está guardado en la variable de solo lectura <BF>$?</BF>. El valor 0 es bueno, cualquier otro es malo. <BF>La instrucción if</BF> usa el status del último comando y condicionalmente ejecuta la siguiente instrucción. La sintaxis general es : <VERB> if test then comandos else comandos fi </VERB> 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 : <VERB> if ... then ... else if ... (también se puede usar elif en lugar de else if) ... fi fi </VERB> Ejemplo de if : <VERB> 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. </VERB> <BF>El operador &&</BF> 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 : <VERB> if comando1 then comando2 fi </VERB> <BF>El operador ||</BF> 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 : <VERB> comando1 if test $? -en 0 then comando2 fi </VERB> <SECT2>Comprobación de ficheros y variables con el comando Test <P> El shell usa un comando llamado <BF>test</BF> para evaluar expresiones condicionales. test devuelve 0 (verdadero) o 1 (falso), <BF>opciones</BF> : <VERB> -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. </VERB> <SECT2>Instrucciones de control <P> <BF>La instrucción case</BF> 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. <VERB> case palabra-dada in patrón1) comandos ;; patrón2|patrón3) comandos ;; patrónN) comandos ;; esac </VERB> 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 : <VERB> ? 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 </VERB> <BF>La instrucción for</BF> El bucle for sigue la siguiente notación general : <VERB> for variable in lista-de-palabras do comandos done </VERB> 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 ; . <VERB> for variable in lista; do comandos; done </VERB> Ejemplos : <VERB> #!/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 </VERB> <BF>Las instrucciones while y until</BF> La instrucción <BF>while</BF> tiene la forma general : <VERB> while lista-de-comandos1 do lista-de-comandos2 done </VERB> 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 <BF>until</BF> tiene la forma general : <VERB> until lista-de-comandos1 do lista-de-comandos2 done </VERB> 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 : <VERB> #!/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. </VERB> <BF>Las instrucciones break y continue.</BF> La instrucción <BF>break</BF> termina la ejecución del bucle mas interior causando la ejecución de la instrucción <BF>done</BF> mas cercana. Para salir del nivel n, usa : <BF>break n</BF>, esto causa la ejecución de la instrucción done n. El comando <BF>continue</BF> causa la ejecución de la instrucción while, until o for en la cual comienza el bucle que contiene el comando continue. <VERB> 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?. </VERB> <SECT2>Mas funciones shell <P> <DESCRIP> <TAG/Aritméticas/ No existen funciones aritméticas en el shell y por tanto hay que usar el comando <BF>expr</BF> que sirve para evaluar expresiones matemáticas (ver man expr). <TAG/Incluir texto en un shell script/ Se puede incluir texto en un shell usando una forma especial de redireccionamiento. El símbolo <BF><<</BF> se usa para indicar que el texto debe ser leído hasta una marca dada, por ejemplo : <VERB> #!/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 </VERB> <TAG/Forzar la evaluación de comandos/ La función <BF>eval</BF> toma los argumentos de la línea de comandos y los ejecuta como comandos. Por ejemplo : <VERB> #!bin/sh echo ?enter a command:? read command eval $command </VERB> <TAG/Ejecutar un comando sin crear un nuevo proceso/ <BF>Exec</BF> ejecuta un comando sin crear un nuevo proceso. Una vez terminada la ejecución el shell continúa. <VERB> exec zmail -visual Ejecuta zmail y cuando termina continúa el shell. </VERB> <TAG/Controlar la finalización de un shell script/ Para finalizar un shell script se utiliza el comando <BF>exit</BF>. 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. <TAG/Tratar las señales del sistema operativo/ El comando <BF>trap</BF> se puede usar para capturar o ignorar las señales del sistema operativo. El formato del comando trap es : <TSCREEN>trap ?lista-comandos? lista-señales</TSCREEN> 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 : <VERB> 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 </VERB> </DESCRIP> <SECT2>Funciones creadas por el programador <P> Las funciones son herramientas poderosas a menudo poco usadas. La sintaxis es: <VERB> nombre_funcion () { comandos } </VERB> 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 <BF>return</BF> en lugar de exit. <SECT1>Depuración de Shell scripts <P> Para ver donde se produce un error en un script usa el comando : <TSCREEN><BF>sh -x script argument</BF></TSCREEN> La opción <BF>-x</BF> 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 <BF>-n</BF> del comando sh hace que no se ejecute ningún comando, solo chequea la sintaxis. La opción <BF>-e</BF> en modo no interactivo, hace que si un comando falla se termine inmediatamente el script. La opción <BF>-v</BF> imprime las líneas de entrada según son leídas <SECT> Comandos para novatos <P> <SECT1>Comandos básicos <P> <TSCREEN><VERB> (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) </VERB></TSCREEN> <SECT1>Comandos para comunicaciones y redes <P> <TSCREEN><VERB> 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 </VERB></TSCREEN> <SECT1>Entorno gráfico xwindow <P> <TSCREEN><VERB> 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 </VERB></TSCREEN> <SECT1>Comprimir y descomprimir <P> <TSCREEN><VERB> 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 </VERB></TSCREEN> <SECT1>Manejo de las unidades de diskettes y Cd-Rom <P> <TSCREEN><VERB> 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) </VERB></TSCREEN> <SECT1>Manejo de ficheros <P> <TSCREEN><VERB> 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) </VERB></TSCREEN> <SECT1>Uso del sistema <P> <TSCREEN><VERB> 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:) </VERB></TSCREEN> <SECT1>Manejo de la impresora <P> <TSCREEN><VERB> 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 </VERB></TSCREEN> <SECT1>Comandos de IRC para IrcII <P> <TSCREEN><VERB> /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 </VERB></TSCREEN> <SECT1>Instalación y manejo de paquetes en Debian <P> <TSCREEN><VERB> 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 </VERB></TSCREEN> <SECT1>Convertir paquetes de RedHat a Debian <P> <TSCREEN><VERB> 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 </VERB></TSCREEN> <SECT> Preguntas, respuestas, trucos <P> <SECT1>Eliminar ficheros Core <P> <TSCREEN><VERB> ln -s /dev/null core (envía los core a /dev/null) ulimit -c 0 (limita el tamaño de los core a 0) </VERB></TSCREEN> <SECT1>Imprimir paquetes instalados con dselect <P> <TSCREEN><VERB> 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 </VERB></TSCREEN> <SECT1>Montar cdrom y floppy sin ser root <P> <TSCREEN><VERB> 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. </VERB></TSCREEN> <SECT1>Ampliar tamaño de partición Linux <P> 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 : <itemize> <item>te creas una nueva partición, por ejemplo: /hdc3 <item>te copias todos los directorios de /usr a /mnt/hdc3 <item>te renombras el fichero /usr como /usr_ant por si las moscas <item>te creas el fichero /usr vacío <item>actualizas el /etc/fstab con la siguiente línea : <tscreen>/dev/hdc3 /usr ext2 defaults 0 0</tscreen> <item>rearrancas, y después de unos días, para ver que todo funciona bien, borras /usr_ant </itemize> <SECT1>Personalizar tecla de función <P> 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. <TSCREEN><VERB> ## 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 </VERB></TSCREEN> <SECT1>Eliminar paquetes instalados en Debian <P> <TSCREEN><VERB> 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. </VERB></TSCREEN> <SECT1>Hacer disco de arranque Linux <P> <TSCREEN><VERB> 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 </VERB></TSCREEN> <SECT1>Entrar al sistema sin saber la password <P> <TSCREEN><VERB> 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 </VERB></TSCREEN> <SECT1>Configuración de LILO <P> <TSCREEN><VERB> 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 </VERB></TSCREEN> 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: <TSCREEN><VERB> root::/# lilo </VERB></TSCREEN> 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 <TSCREEN><VERB> 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.. </VERB></TSCREEN> <SECT1>En Netscape los ficheros <TT>.gz</TT> y <TT>.tgz</TT> en lugar de bajártelos te los muestra <P> <VERB> Edit - Preferences - Navigator - Applications. </VERB> 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. <SECT1>News off-line con Netscape <P> El Netscape no hay ninguna opción para bajarse las news, pero con el siguiente truco se puede conseguir el mismo efecto: <ENUM> <ITEM>Lo primero es crearse dos nuevos directorios en el Message Center con "New Folder" (yo los llamo Linux y Linux_Archive). <ITEM>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. <ITEM>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. <ITEM>Sin cerrar la conexión debemos marcarlos todos como leídos. Para ello "Mark" y "All Read". Y ahora podemos cerrar la conexión. <ITEM>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"). <ITEM>Como seleccionamos la opción "View", "New", la próxima vez que entremos en el grupo sólo nos bajará los nuevos mensajes. </ENUM> <SECT1>Hacer que la diskettera solo puedan montarla los usuarios de un determinado grupo <P> <TSCREEN><VERB> $ 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 </VERB></TSCREEN> <SECT1>Cómo formatear diskettes <P> <TSCREEN><VERB> 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. </VERB></TSCREEN> <SECT1>Cómo hacer que linux reconozca ampliación de memoria <P> <TSCREEN><VERB> > 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 </VERB></TSCREEN> <SECT1>Primer editor <P> 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": <TSCREEN><VERB> 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. </VERB></TSCREEN> 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. <tscreen>(ricardovm)</tscreen> Pues lo acabo de probar: <TSCREEN><VERB> 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 </VERB></TSCREEN> 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. <tscreen>(tas@idecnet.com)</tscreen> <SECT1>Instalar las X con Dselect de Debian. <P> Sesión de dselect. Como root pon dselect. Dentro del menú ve a "[S]elect", te sale un mensajito de bienvenida y tal, pulsas la barra y ahora toca seleccionar paquetes. Pulsa la "o" minúscula 2 veces y la mayúscula otras dos, con esto consigues que la lista de paquetes salga ordenada alfabéticamente. Entonces ahora avanza páginas y páginas hasta encontrar el paquete "xbase" (creo). Una vez ahí lo seleccionas pulsando la tecla "Ins" (si no lo tienes seleccionado ya, en cuyo caso esta parrafada te la saltas ;-)). Probablemente dselect ahora te saque un mensaje diciendo "Che!! Y las dependencias qué?", pulsas la barra y ves abajo que pone <tscreen>"xbase requires xserver-vga16" (por ejemplo),</tscreen> entonces vas al xserver-vga16, que te aparece por ahí y lo "Ins"ertas, aunque verás que dselect ya lo ha seleccionado él solito. Para salir y volver a la lista de todos los paquetes pulsa Enter. Ahora un poco más abajo te aparecen los servidores, añade el xserver-svga y el xserver-s3v (el de la ViRGE). Si te pregunta por dependencias pues eso, aunque dselect ya lo suele añadir todo. Instala también algún gestor de ventanas adicional (por defecto se instalan el twm y el fvwm creo),a mí me encanta el icewm. Para salir de la lista de paquetes, es con Enter de nuevo y vuelves al menú principal. Selecciona "[I]nstall" y ve a tomar un cafecito rápido de 5 minutos. Cuando acabe pulsas Enter, te aparece de nuevo el menú y te vas a Quit o Exit o lo que sea. Ya tienes las X instaladas. Ahora toca sesión de XF86Setup. Configuras el mouse, el teclado (Model: Generic 102 keys Intl PC, Layout: Spanish), la tarjeta de vídeo (tienes 5 ViRGEs, ya sabes, a experimentar), en esa misma pantalla pulsas el botoncito que pone "Detailed setup", seleccionas el servidor S3V (la fila de botones de arriba), luego el monitor (mírate el manual para saber las frecuencias, yo le puse el 4º, el que empieza por Super VGA y me va bien), por último los modos de vídeo y listo, pulsa "Done" abajo (en la sección Other no hace falta tocar nada, aunque nadie te prohibe echar un vistacito.). Tras eso te aparece un dialoguillo, pulsas "Okay" y ahora se arrancará el servidor. Si rula, felicidades; si no... a por otra ViRGE. ¿Que ya has probado las 5? Pues en "Detailed setup" prueba el servidor SVGA. ¿Que tampoco rula? Pueeeees entonces ya pasa de castaño... no? (Hue Bond) </ARTICLE>