FAQ sobre Linux - es.comp.os.linux.*

Rafael Martínez, rafael@viewpoint.no
A. Gustavo Gonzalez, agonzale@cica.es
Mario Teijeiro Otero, asimovi@teleline.es
Manuel Constantino, constan@bart.us.es
Santiago Romero Iglesias, sromero@unix-shells.com
César Ballardini/Hispafuentes cballard@santafe.com.ar
Ignacio Arenaza inaki.arenaza@jet.es

04 septiembre 2000 / Versión 2.0.2
Este documento intentará dar respuesta a las preguntas y problemas más comunes que un principiante se hace antes de instalar linux, y al empezar a trabajar con Linux.

1. Introducción e información general

1.1 Introducción

Este documento pretende dar respuesta, a las preguntas más habituales, que los usuarios suelen hacerse cuando empiezan a trabajar con Linux. La idea surgió en el antigüo grupo de noticias es.comp.os.linux, y la primera versión fue publicada el 03 de junio de 1999. La FAQ ha sido creada por el coordinador de la misma, Rafael Martínez y por los colaboradores de la FAQ, A. Gustavo Gonzalez, Mario Teijeiro Otero, Manuel Constantino, Santiago Romero Iglesias, César Ballardini/Hispafuentes y Ignacio Arenaza.

La página principal de la FAQ es http://www.linux-es.com/Faq/, aquí podreis encontrar la última versión de la misma en formato HTML, PS, DVI, TEXTO y SGML. También es posible encontrarla en LUCAS y en los servidores espejos del mismo.

Si quereis colaborar y aportar ideas o sugerencias, ponerse en contacto con el coordinador de este documento.

Debido a que existen diferentes distribuciones de Linux y a que estas distribuciones muchas veces configuran ciertas cosas de manera diferente, en muchos casos no existe una receta válida al 100% para todos los sistemas. Hemos intentado realizar las explicaciones lo mas general posible, intentando dar una base para la solución de problemas. Esperamos que este documento os ayude a encontrar respuesta a vuestros problemas y que vuestro sistema mejore día a día.

1.2 ¿Qué es Linux?

LINUX es un sistema operativo, compatible Unix. Dos características muy peculiares lo diferencian del resto de los sistemas que podemos encontrar en el mercado, la primera, es que es libre, esto significa que no tenemos que pagar ningún tipo de licencia a ninguna casa desarrolladora de software por el uso del mismo, la segunda, es que el sistema viene acompañado del código fuente. El sistema lo forman el Núcleo (Leer sección Kernel/Núcleo) del sistema mas un gran número de programas / librerias que hacen posible su utilización.

Linux se distribuye bajo la GNU General Public License, por lo tanto, el código fuente tiene que estar siempre accesible.

El sistema ha sido diseñado y programado por multitud de programadores alrededor del mundo. El núcleo del sistema sigue en continuo desarrollo bajo la coordinación de Linus Torvalds, la persona de la que partio la idea de este proyecto, a principios de la década de los noventa.

Día a día, más y más programas / aplicaciones estan disponibles para este sistema, y la calidad de los mismos aumenta de versión a versión. La gran mayoria de los mismos vienen acompanados del código fuente y se distribuyen gratuitamente bajo los términos de licencia de la GNU Public License, aunque también existen programas comerciales, los cuales hay que comprar y que no se distribuyen bajo la licencia GNU.

En los últimos tiempos, ciertas casas de software comercial han empezado a distribuir sus productos para Linux y la presencia del mismo en empresas aumenta rapidamente por la excelente relación calidad-precio que se consigue con Linux.

Las plataformas en las que en un principio se puede utilizar Linux son 386-, 486-. Pentium, Pentium Pro, Pentium II/III, Amiga y Atari, también existen versiones para su utilización en otras plataformas, como Alpha, ARM, MIPS, PowerPC y SPARC

1.3 Historia de Linux

LINUX hace su aparición a principios de la década de los noventa, era el año 1991, por aquel entonces un estudiante de informática de la Universidad de Helsinki, llamado Linus Torvalds empezó, -como una afición y sin poderse imaginar a lo que llegaría este proyecto, a programar las primeras lineas de código de este sistema operativo llamado LINUX.

Este comienzo estuvo inspirado en MINIX, un pequeño sistema Unix desarrollado por Andy Tanenbaum. Las primeras discusiones sobre Linux fueron en el grupo de noticias comp.os.minix, en estas discusiones se hablaba sobre todo del desarrollo de un pequeño sistema Unix para usuarios de Minix que querian mas.

Linus nunca anuncio la versión 0.01 de Linux (agosto 1991), esta versión no era ni siquiera ejecutable, solamente incluía los principios del núcleo del sistema, estaba escrita en lenguaje ensamblador y asumía que uno tenía acceso a un sistema Minix para su compilación.

El 5 de octubre de 1991, Linus anuncio la primera versión "Oficial" de Linux, -versión 0.02. Con esta versión Linus pudo ejecutar Bash (GNU Bourne Again Shell) y gcc (El compilador GNU de C) pero no mucho mas funcionaba. En este estado de desarrollo ni se pensaba en los términos soporte, documentación, distribución y desarrollo.

Despues de la versión 0.03, Linus salto en la numeración hasta la 0.10, mas y mas programadores a lo largo y ancho de internet empezaron a trabajar en el proyecto y despues de sucesivas revisiones, Linus incremento el número de versión hasta la 0.95 (Marzo 1992). Mas de un año despues (diciembre 1993) el núcleo del sistema estaba en la versión 0.99 y la versión 1.0 no llego hasta el 14 de marzo de 1994.

Desde entonces no se ha parado de desarrollar, la versión actual del núcleo es la 2.2 y sigue avanzando dia a dia con la meta de perfeccionar y mejorar el sistema.

1.4 Características de Linux

Aquí teneis una lista bastante completa con las características de LINUX
[Fuente: Infosheet-Como. Autor: Ivan Casado] :

1.5 Linux Copyright

El copyright del kernel de linux pertenece a Linus Torvalds. Este se distribuye bajo la GNU General Public License, esto significa básicamente, que cualquiera puede libremente, copiarlo, cambiarlo y distribuirlo, pero sin posibilidad de aplicar restricciones en futuras distribuciones y teniendo que incluir el código fuente.

Las licencias de los programas y aplicaciones que acompañan al núcleo varian, muchos pertenecen al proyecto GNU y se distribuyen bajo GPL, y otros no.

2. Antes de la instalación

2.1 ¿Es linux para mí?

Aunque parezca muy simple, esta pregunta conlleva otra serie de cuestiones anejas, que hemos de considerar para responder con verosimilitud al profano en este sistema. Por otra parte, aunque convencidos abogados de este sistema operativo frente a los que no son de código abierto, también hemos de aceptar las limitaciones del mismo con respecto a los nuevos usuarios.

En un principio, linux era para gurús, hackers y desarrolladores...y hay muchos que piensan que debería seguir siendo así. No obstante, las facilidades que tanto en instalación, configuración y gestión del sistema, han proporcionado las distribuciones en sus versiones más recientes han acercado mucho al usuario final al mundo linux.

Cuando pensamos en esta FAQ, lo hicimos considerando que los "novatos" en este sistema podían ser de diversas procedencias; algunos podrían ser grandes conocedores de informática, programadores y administradores de sistemas "no-linux", quienes se adaptarían fácilmente. Otros podrían ser usuarios finales de algún otro sistema operativo, que utilizan el ordenador para correr aplicaciones, como algunos conductores usan el vehículo sólo como medio para acceder a lugares lejanos en tiempos cortos, pero no quieren saber nada de mecánica ni electricidad del automóvil...Al preguntarnos ¿Es linux para mí? queremos decir más bien ¿Me conviene usar Linux? ¿Para que lo quiero?

Hemos leído muchos libros y un gran número de documentos acerca de linux en relación con el usuario. Uno de ellos, titulado "Linux for the masses and other popular myths" de Todd Burgess ( http://eddie.cis.uoguelph.ca/~tburgess) trata en profundidad el tema de los tránsfugas de sistemas operativos por cuestiones de moda (Cool people use linux=la gente güai usa linux) y nos dice:

Usa linux:

No uses linux:

En una línea similar, encontramos otro interesante documento que ( http://source.syr.edu/~jdimpson/linux/usage/nouse.html) mantenía que:

No deberíamos usar linux:

Mucha gente que lea esta FAQ en el futuro, provendrá del ambiente Microsoft (Windows 95/98/NT/2000). En tal caso, aquéllos que usaren su computador básicamente para el procesamiento de textos y el empleo de hojas de cálculo, deberían quedarse como están. A pesar de todos sus fallos, Windows es fácil de usar, más aún de aprender y Dispone de una ingente cantidad de softtware. Los que tienen otras ambiciones, pueden plantearse cambiar a linux por 10 importantes razones ( http://www.croftj.net/~goob/local/why.html)

  1. Las distribuciones de Linux no son costosas: pueden obtenerse gratis de los lugares apropiados de internet o bien comprar los CDs por muy poco dinero comparado con otros sistemas comerciales.
  2. Linux es un sistema operativo completo con tres grandes características: Estable (es muy raro que colapse una aplicación en linux), Fidedigno (un servidor linux puede funcionar durante cientos de días sin necesidad de reiniciarse, lo que no es común en otros sistemas) y Extremadamente potente.
  3. Tiene un entorno de programación completo, incluyendo C, C++, Pascal, compiladores Fortran, utilidades como Qt y lenguajes de guiones (scripts) como Perl, gwak y sed. (un simple compilador C para Windows cuesta cientos de dólares)
  4. Presenta una excelentes prestaciones para conexión en red, permitiendo compartir PPUs y módems.
  5. Constituye el entorno ideal para hacer funcionar servidores web (Apache) o FTP (oran).
  6. Además del software "libre", hay también bastante software comercial para linux.
  7. Se actualiza y mantiene fácilmente.
  8. Admite múltiples procesadores como norma.
  9. Es realmente multitarea (a diferencia de Windows).
  10. Tiene un excelente servidor XWindow y numerosos gestores de ventanas X.

y además, por instalar linux no tendremos que renunciar a Windows: es posible gestionar linux + otros sistemas operativos en el mismo ordenador.

Para terminar, me gustaría copiar literalmente un trozo de la introducción de un libro titulado "Manual Avanzado de linux" de Raúl Montero Rivero (Ed. Anaya) que viene como anillo al dedo al nuevo usuario de nuestro sistema:

"Aprenderás qué es linux, sus virtudes y sus defectos, cómo puedes conseguirlo, qué distribución elegir a la hora de instalarlo, cómo administrar tu sistema correctamente, cómo trabajar con XWindow, cómo conectarte con él a Internet...Pero no todo va a ser tan fácil con linux, porque como comprobarás, no es un sistema hecho para cobardes. Tendrás que ser valiente"

Si te da miedo formatear tu disco duro, linux no es para tí. Si te acobarda tener que reinstalar todo de nuevo sólo porque has cometido un pequeño error en el proceso de instalación, abandona y no sigas. Si te aterra la mera idea de particionar tu disco duro, apaga y vámonos. Y si te vas pasar todo el rato pensando que al configurar la frecuencia de tu monitor para que funcione X windows, te lo puedes cargar, mejor que vuelvas a tu Windows de siempre.

Ahora seguro que ya sabes si linux es para tí... ¡Bienvenido!

2.2 ¿Cuanto espacio necesito en mi disco duro, para instalar Linux?

Esto depende en gran medida de la cantidad de programas/paquetes que quieras instalar, del espacio que reserves para swap (espacio de intercambio) y del espacio libre que quieras tener para datos/documentos. Hay que puntualizar que los datos que se dan en esta subsección hacen referencia al sistema en si, mas programas.

Con el precio de los discos actuales, no deberiamos tener problemas de espacio. No es dificil encontrarse hoy en día con máquinas en las que es normal tener 6-12 Gb de espacio de almacenamiento.

2.3 ¿Cuanta memoria necesito, para usar Linux?

Esto dependerá también en gran medida del uso que le vayas a dar a tu máquina, cuanta mas memoria, mejor trabajara. Aqui tienes unos datos orientativos sobre la cantidad de memoria necesaria:

Al igual que la capacidad del disco duro no es un problema hoy en día, tampoco la memoria suele serlo, ya que la mayoría de máquinas que se venden actuálmente vienen al menos con 64 Mb de RAM.

2.4 ¿Funcionará mi equipo con linux?

Hoy en día, la gran mayoría de hardware está soportado por Linux, asi que no deberiais tener problemas. De todas maneras, existen configuraciones que no están soportadas y quizas últimos modelos de tarjetas gráficas, controladoras, etc, que tampoco lo estén.

Día a día se trabaja para dar soporte a nuevo hardware y lo que no este soportado hoy, probablemente está soportado muy pronto. En un pasado, muchas casas de productos no apoyaban a linux, con el consiguiente retraso en el soporte a estos productos, con respecto a otros sistemas operativos, pero ultimamente esto está cambiando rápidamente.

Si quereis comprobar si vuestro hardware esta soportado por linux o no, leer el Hardware-Howto, un documento con el hardware soportado por linux. También os podeis pasar por esta excelente web, Linuxhardware.net, donde podreis consultar sobre vuestro hardware.

2.5 ¿Cómo consigo Linux?

Linux es un sistema de libre distribución por lo que podeis encontrar todos los ficheros/programas necesarios para su funcionamiento en multitud de servidores conectados a Internet. La tarea de reunir todos los ficheros/programas necesarios, asi com instalarlos en tu sistema puede ser una tarea bastante complicada y no apta para muchos. Por esto mismo, nacieron las llamadas distribuciones de Linux, empresas que se dedican a hacer el trabajo "sucio" para nuestro beneficio y comodidad.

Una distribución no es otra cosa, que una recopilación de programas y ficheros, organizados y preparados para su instalación. Estas distribuciones se pueden obtener a traves de Internet, o comprando los CDs de las mismas, los cuales contendrán todo lo necesario para instalar un sistema Linux bastante completo y en la mayoría de los casos un programa de instalación que nos ayudara en la tarea de una primera instalación. Casi todos los principales distribuidores de Linux, ofrecen la posibilidad de bajarse sus distribuciones, via FTP (sin cargo alguno).

Existen varias distribuciones creadas por diferentes empresas a unos precios bastantes asequibles (si se compran los CDs, en vez de bajársela via FTP), las cuales deberiais de poder encontrar en tiendas de informática o librerías. En la siguiente dirección teneis una lista con las empresas que distribuyen distribuciones en España y Centro/Sur américa, http://www.linux-es.com/distribuidores.php En el peor de los casos siempre podeis encargarlas directamente por Internet a las empresas que las crean. A veces, las revistas de informática sacan una edición bastante aceptable de alguna distribución.

Si vais a instalar el sistema por primera vez, os recomiendo haceros con una de estas distribuciones y en un futuro cuando querais actualizar el sistema con las últimas versiones y actualizaciones del núcleo y programas que utiliceis, usar Internet.

Para mas información sobre las distintas distribuciones de Linux podeis leer la Linux Distribution HOWTO

A continuación teneis una lista con las principales distribuciones de linux:

2.6 ¿Qué distribución es la mejor?

Esta pregunta se podría denominar "la pregunta del millon". Son muchos los usuarios que la hacen y la respuesta no es fácil de hacer.

Como ya se ha explicado en la sección Qué es Linux?, un sistema Linux esta formado por el núcleo (Leer sección kernel/núcleo) más una serie de programas y librerias que hacen posible tener un sistema productivo y operativo. Tanto el núcleo, como las librerias y programas necesarios estan disponibles libremente en internet.

Con esto, cualquiera con conocimientos, puede instalarse un sistema Linux sin necesidad de adquirir una distribución, o crear una nueva distribución desde cero. No hace falta decir, que hacer esto es una tarea que requiere muchos conocimientos y tiempo. Lo que hacen las empresas que crean una distribución es precisamente esto, poner todos los componentes necesarios juntos, con esto nos evitamos el tener que hacerlo nosotros.

Las distribuciones suelen traer un programa de instalación, generalmente creado por la empresa que crea la distribución, manuales con documentación, una serie de programas/librerias para poder usar el sistema, un kernel, y en algunas ocasiones aplicaciones diversas y soporte técnico.

Sabido esto, podemos afirmar que la diferencia entre una distribución u otra es la calidad de lo incluido en la misma; algunos programas de instalación pueden ser mas intuitivos que otros o más fáciles de utilizar, la calidad de la documentación, que el conjunto de programas/librerias esten bien comprobados y funcionen bien juntos (diferentes versiones, librerias, etc), soporte eficiente, etc, el kernel/núcleo es el mismo en todas las distribuciones, excepto en la versión, es decir, una distribución A con el kernel/núcleo 2.2.9 y otra distribución distinta B con el kernel/núcleo 2.2.9 están utilizando exactamente el mismo kernel/núcleo, el kernel/núcleo es común a todas las distribuciones y no existe un kernel para una distribución y otro para otra.

A continuación teneis unos comentarios sobre las distribuciones mas usadas. No son en absoluto todas, pero si son las que forman el mayor porcentaje de sistemas Linux instalados:

Redhat:

Debian:

SuSE:

Caldera:

Slackware:

Mandrake:

Conectiva:

Hispafuentes:

2.7 ¿Puedo tener más de un sistema operativo en mi equipo?

La respuesta es si, no es ningún problema el tener más de un sistema operativo en tu máquina. Es mas, hay mucha gente que tiene incluso 3 y 4 sistemas.

Para hacer esto, hay que tener claro como se instalan los sistemas que queremos tener, como realizar particiones en el disco duro (Leer sección Durante la instalación) y en que orden deberiamos instalarlos para que no tengamos problemas.

Existen unos documentos Howtos y MiniHowtos que explican muy bien como tener diferentes sistemas en tu ordenador, los podreis encontrar en cualquier servidor que contenga la documentación de Linux. Mas información en la subsección ¿Dónde encuentro documentación sobre linux?:

Algunos documentos a tener en cuenta:

2.8 ¿Funcionan mis programas/juegos para Windows en Linux?

Como primera afirmación, podemos decir que no, tus programas para Windows no funcionaran en Linux. Windows y Linux/Unix no son compatibles y programas compilados en una u otra plataforma no funcionarán en otra plataforma que no sea en la que el programa se compiló para su utilización.

Como segunda afirmación, podemos decir, que en algunos casos es posible ejecutar programas para Windows en Linux, si hacemos uso de un emulador de windows para Linux. Un emulador es un programa que se ejecuta en Linux y que crea una máquina virtual windows, engañando al programa windows, que creera que se está ejecutando en un sistema Windows.

Existen dos emuladores de uso común, Wine (libre) y WMware (comercial). De estos dos parece ser que WMware es de una calidad superior y que funciona sin grandes problemas.

Podemos aconsejar, el no usar emuladores para evitar problemas. A no ser que tengas necesidad de usar una aplicación muy especial, existen versiones de programas con características similares a los de Windows, nativos de Linux, con lo que probablemente te funcionen mejor, más rápido y no te consuman tantos recursos. La elección es vuestra ;-)

2.9 ¿Qué tengo que saber antes de instalar linux?

Introducción

Si nos ceñimos a esta FAQ, en la primera sección se proporciona una información de carácter general acerca de qué es Linux, su historia, características,.... En la segunda sección se añaden otros aspectos fundamentales como ¿Para qué quiero linux?, ¿Qué espacio y memoria necesito?, ¿Funcionará en mi equipo?, ¿Cómo lo consigo?, ¿Qué distribución es la que más me conviene?, etc.

Lo que se ha abordado en esta sección son los datos relativos al sistema donde vamos a instalar linux. Muchos usuarios desconocen por completo qué es lo que están usando: no saben que placa base tienen, ni que tipo de memoria, qué tarjeta de vídeo, si su ratón es serie o ps2, ... y por supuesto otras más sutiles como el refresco vertical de la pantalla de su monitor. Es necesario conocer el tipo de hardware de nuestro sistema informático para ver si es compatible con la distribución de linux que vamos a instalar.

Hay un par de libros de la editorial Anaya que son excelentes para prepararse:

Antes de instalar Linux hay que preparar el PC para la instalación. Puede que ya dispongamos de un PC con algún sistema operativo instalado como MS-DOS, Windows o OS/2 o puede ocurrir que vayamos a comprarnos un PC nuevo para instalar Linux en él. En este último caso podremos elegir el hardware y los periféricos compatibles con linux. De todos modos en el apartado siguiente nos dedicaremos a considerar el hardware soportado por el sistema operativo linux.

Los componentes fundamentales

En la tabla adjunta se indican los requerimientos mínimos (M) y óptimos (O) para los componentes más típicos de un PC

A continuación veremos todo desde un punto de vista mucho más pormenorizado.

La Unidad Central de Procesos:
Linux funcioma bien con cualquier procesador a partir de i386, especialmente i486, Pentium, Pentium Pro Pentium II/III y los Intel compatibles AMD y Cyrix, tambien existen versiones para Alpha, ARM,MIPS, PowerPC y SPARC. No funcionará con ningún i286 o inferior porque no son de 32 bits (Aunque existen proyetos por ahi para hacerlo funcionar en 8086 /80286).

Buses:
Linux los admite todos: ISA, VLB, EISA, PCI, PS/2 y MCA (este último desde la versión 2.0.7). El bus USB estará totalmente soportado en la serie 2.4.x del kernel/núcleo.

Hay dos placas base que no funcionan con linux: La Supermicro P5MMA y la Supermicro P5MMA98. Para que lo hagan es necesario descargar de la red BIOS adecuadas: ftp.supermicro.commma9051.zip y ftp.supermicro.com/a98905.zip/

Memoria RAM:
Para que el sistema con XWindow funcione decentemente debería disponer de al menos 16 MB de RAM. Como máximo puede gestionar 2 GB de RAM, pero a partir de 1 GB, pueden aparecer grandes limitaciones en la celeridad si no se instala memoria caché adicional en el PC (Este tema esta sufriendo grandes cambios en las últimas versiones del kernel/núcleo). Si la memoria es superior a 64 MB habrá de indicarse al sistema en el fichero de configuración de LILO /etc/lilo.conf como una línea (Esto no es necesario a partir de la serie 2.2.x del kernel); p.ej., si tenemos 128 MB pondremos

  append="mem=128M"
Discos duros:
Linux funciona con cualquier disco duro compatible con el BIOS del PC. Para instalar linux en el PC, no vendría mal disponer de una partición de alrededor de 1 GB para el linux native. Si se usa un disco duro de gran capacidad (que tenga más de 1024 cilindros), entonces habremos de situar LILO, el kernel y los archivos de configuración en los primeros 1023 cilindros. Realmente linux no trabaja con los discos directamente, sino con los controladores del disco. Linux funciona con todos los controladores IDE e IDE/ATAPI, ciertos controladores EIDE (que gestionan hasta cuatro dispositivos sean discos duros o CD-ROMs) y los controladores SCSI a excepción de los adaptadores SCSI de puerto paralelo.

Miscelánea:
La gran mayoría del hardware soportado por linux puede consultarse en las direcciones http://users.bart.nl/~patrickr/hardware-howto/Hardware-HOWTO.html, http://www.xfree86.org/ y http://linuxhardware.net/

Todo sobre controladores EIDE, SCSI, Lectores y grabadores CD-ROM, Unidades de cinta, Unidades extraíbles, ratones (trackballs y touchpads), tarjetas de red (Ethernet, RDSI, Token-Ring, ARCnet...), tarjetas gráficas incluídas en la última lista de XFree86, tarjetas de sonido, dispositivos PCMCIA, etc. , se encuentra en estas direcciones y deben consultarse para evitar sorpresas.

El peligro de Windows: Impresoras y modems

Existe un peligro en lo que respecta a ciertas impresoras y modems llamados winprinters y winmodems que no funcionan en linux.

Hay dos tipos de impresoras que definitivamente no funcionan con linux: todas las impresoras Hewlett-Packard Desjet 820xx y la Sharp JX-9210 que solo funcionan con Windows 95. El resto son compatibles con linux, aunque en ciertos casos hace falta descargar controladores (Canon BJC600/800; HP Deskjet 500/.../855C) o programas que mejoran la calidad de impresión (como el free-lj4 para la serie HP Laserjet 4)

El problema de los winmodems es que parte del hardware es sustituido por software y ese software solamente es de Windows, con lo cual no pueden funcionar en linux. Lo malo es que al comprar un modem nos venden un winmodem sin avisar. Si tenemos uno de ellos lo mejor es reemplazarlo por otro que funcione en linux. Para ello lo mejor es consultar en la dirección http://www.o2.net/~gromitkc/winmodem.html para escoger uno adecuado.

Existen proyectos para soportar estos dispositivos tambien en linux, Winmodems.

Antes de la instalación

Antes de comenzar la instalación, es necesario recoger la información necesaria para llevar a buen término el proceso:

Todos estos datos serán necesarios para instalar convenientemente el hardware y configurar las XWindow.

Por último, antes de comenzar sería bueno haber leído un poco de linux o --mejor aún-- tener un amigo que ya conozca el sistema y que se digne a acompañarnos durante la instalación y configuración de nuestra distribución.

3. Durante la instalación

3.1 ¿Dónde instalo Linux?

Linux se puede instalar en cualquier disco que tengas en tu sistema y en cualquier partición del disco duro (Primaria o extendida).
No podras tener Linux en una partición compartida con otro sistema operativo, Linux necesita su propia partición/es para funcionar.

3.2 ¿Qué es una partición? ¿Cómo creo una partición?

Particionar el disco duro es una manera de dividir el disco físico en varios discos lógicos. O lo que es lo mismo, al particionar un disco, dividimos el disco en varias partes independientes unas de otras, creando la ilusión de que tenemos diferentes discos, cuando en realidad lo que tenemos es un solo disco físico dividido en partes. Una partición es una de estas partes (divisiones) del disco.

Existen dos clases de particiones: primarias y extendidas. En un disco solo podras tener como maximo 4 particiones primarias o 3 primeras y 1 extendida. En la partición extendida se podrán definir todas (bueno también existe un límite, pero es alto) las unidades lógicas que queramos. Con este sistema podemos tener una gran cantidad de particiones en nuestro disco. Cualquier disco que tengamos en nuestro ordenador tiene al menos una partición primaria, que en la mayoría de los casos tiene un tamaño equivalente al total del disco.

Unos ejemplos aclararan las cosas:

Las combinaciones son múltiples y variadas y dependerán de nuestros gustos y de lo que necesitemos.

Casi todos los sistemas operativos traen un programa con el que podemos crear, modificar y borrar las particiones de nuestro disco. En Ms-Dos/Windows de llama fdisk, este programa solo puede trabajar con particiones de Ms-Dos/Windows. En Linux también se llama fdisk (/sbin/fdisk), pero es un programa más potente, capaz de trabajar y crear particiones tanto para Linux como otros sistemas operativos. Si vas a trabajar con Linux, es recomendable el uso del fdisk que viene con tu distribución, para evitar problemas.

Al contrario que Ms-Dos, Windows, OS/2, las diferentes particiones en linux no se denominan C:, D:, E:, ...., etc, existe una denominación propia:

Si los discos son IDE:

Si los discos son SCSI:

IMPORTANTE: Es muy importante saber lo que se está haciendo cuando trabajeis con programas que modifican la tabla de particiones de un disco. Al cambiar la tabla de particiones de vuestro disco, se pierden los datos contenidos en las particiones afectadas. Realizar copias de seguridad de los datos que querais mantener antes de usar FDISK.

3.3 ¿Porqué necesito diferentes particiones?

El particionar el disco, es símplemente una manera de organizar tu disco duro. Podrás organizarlo con una sola partición o en varias. Es el usuario el que deberá decidir cuantas particiones tendrá su disco, y el tamaño de las mismas, hay que recordar, que al menos hay que tener una partición primaria.

Desventajas de tener vuestro disco dividido en diferentes particiones.

Ventajas en tener vuestro disco particionado en varias particiones:

3.4 ¿Cuantas particiones necesito para Linux?

La respuesta rápida y fácil es: recomendable al menos dos, una para el sistema/datos y otra para Swap. Usualmente se suelen tener tres, una para el sistema/programas (/), otra para los datos (/home) y otra para swap.

La respuesta larga y no tan fácil es mas complicada de explicar: Todo dependerá muchisimo del uso que se le vaya a dar al sistema.

Para sistemas que se utilicen de forma particular y por uno o pocos usuarios bastará con las dos/tres particiones antes mencionadas, esto evitará los problemas de saber que cantidad de espacio necesitan las diferentes particiones y el quedarnos sin espacio en alguna partición vital, mientras que nos sobra en otras.

Para sistemas servidores, con gran cantidad de servicios y usuarios es muy recomendable tener varias particiones/discos. Existe un documento (HOWTO: Multi Disk System Tuning) muy bueno y quizas complicado para el principiante que explica cuantas particiones y discos y que tamaño deberian tener en función del uso que se le vaya a dar al sistema, lo podeis encontrar en http://www.nyx.net/~sgjoen/disk.html o en cualquier servidor con documentación Howto. Otro documento (HOWTO: Linux Partition) más sencillo, se puede encontrar en http://www.linux-es.com/docs/HOWTO/mini/Partition.

3.5 ¿Qué es la Swap?

La swap es un espacio reservado en tu disco duro para poder usarse como una extension de memoria virtual de tu sistema. Es una técnica utilizada desde hace mucho tiempo, para hacer creer a los programas que existe mas memoria RAM de la que en realidad existe. Es el propio sistema operativo el que se encarga de pasar datos a la swap cuando necesita más espacio libre en la RAM y viceversa.

En Linux, la memoria total disponible por el sistema está formada por la cantidad de memoria RAM instalada + la swap disponible. El acceso a la swap (disco duro) es más lento que el acceso a la memoria RAM, por lo que si nuestro ordenador esta muy cargado de trabajo y hace un uso intensivo de la swap, la velocidad del sistema disminuirá. Un uso muy intensivo y continuado de la swap es un indicativo de que necesitamos más memoria en nuestro sistema para que funcione desahogado con el uso que le estamos dando.

En linux generalmente se usa como minimo una partición dedicada a swap (aunque también se puede tener un fichero swap).

3.6 ¿Cuanta Swap necesito?

Esta es otra pregunta que es difícil de contestar: Todo dependerá del uso que se le vaya a dar al sistema y del espacio libre que tengamos.

Si vas a utilizar muchos programas a la vez y tienes poca memoria RAM, necesitarás más swap, si tienes mucha RAM, no necesitaras tanta swap. Hay que recordar que un uso no intensivo de la swap es normal y no afectará mucho a la velocidad del sistema, pero como hemos dicho antes, un uso muy intensivo y continuado es un indicativo de que necesitamos mas memoria RAM.

No existe una fórmula mágica para saber cuanto espacio deberiamos reservar para swap. Hay que recordar que la memoria total disponible en Linux es RAM + Swap. Como datos orientativos podriamos decir que como mínimo, esta combinación debería ser de 32MB para sistemas que se utilicen en modo texto y de 64MB en adelante para sistemas que se utilicen en modo gráfico.

Aquí teneis una serie de consejos sobre la swap:

Para un uso privado "normal-alto" del sistema, aquí teneis unos ejemplos orientativos, segun nuestra experiencia, de la cantidad de swap recomendable:

Como dato anecdótico, decir que existen servidores, en donde la cantidad de swap llega a ser de 256MB y hasta 512MB aunque yo tengo ordenadores con 16MB de RAM y 16MB de Swap como servidores de impresión que funcionan sin ningún problema.

En fin, cada uno debe de saber el uso que le va a dar a su sistema y analizar la cantidad de memoria necesaria, aunque si teneis espacio de sobra en el disco, más vale tener más Swap disponible que la necesaria, por lo que pueda ocurrir en un futuro, como dice el dicho, más vale que sobre que no que falte.

3.7 No tengo sitio en mi disco duro, ¿Qué hago?

Si tienes todo el espacio de tu disco ocupado por otros sistemas operativos, deberás conseguir espacio para poder crear la particion/es donde instalar Linux. Existen tres maneras de hacer esto:

La primera, comprar un disco duro he instalarlo.

La segunda, es borrar todas las particiones de tu disco duro, con lo que perderás toda la información que contiene, y empezar desde cero a definir las diferentes particiones del disco. Asi podras definir las particiones para Linux y otros sistemas operativos si vas a tenerlos.

La tercera, existen unos programas que permiten cambiar la tabla de particiones del disco, sin perder los datos de las mismas. Si tienes por ejemplo una partición de 1GB con 500MB libres, puedes utilizar uno de estos programas para "robarle" espacio a la partición y crear una nueva particion, teniendo al final por ej. una partición de 600MB con la información de la partición original y una nueva partición con el resto de espacio liberado 400MB.

Existen dos programas "ladrones de espacio" que se suelen utilizar normalmente en el caso tercero:

IMPORTANTE: Hacer copias de seguridad, cada vez que vayais a cambiar, modificar o "jugar" con la tabla de particiones de vuestros discos duros. Un fallo en el sistema, o un error vuestro puede haceros perder información importante.

3.8 ¿Cómo configurar el arranque de Linux?

La manera más fácil de arrancar Linux es con LILO. Pasate por la sección Sobre LILO para más información.

3.9 ¿Cómo utilizar LoadLin para el arranque de Linux?

A veces ciertos programas o "sistemas operativos" están diseñados para modificar el Master Boot Record (MBR) del ordenador sin tener en cuenta los contenidos actuales del mismo, lo que suele redundar en la eliminación de LILO y la imposibilidad del usuario de entrar en Linux. Para solucionar estos problemas, o por si simplemente deseamos entrar en Linux desde msdos, está disponible el programa LOADLIN.

Loadlin es un programa de MSDOS que podemos encontrar en el directorio dosutils de los CDs de Linux (en la propia distribución). Este programa permite arrancar Linux desde MSDOS a partir de él mismo, un fichero kernel de Linux (como vmlinuz, bzImage o zImage) y una partición Linux. Mediante él podemos hacernos un disco de seguridad para arrancar Linux cuando LILO sea borrado por otros S.O.:

Creamos un directorio a:\loadlin y copiamos alli el ejecutable Loadlin.exe. Copiamos también cualquier kernel/núcleo de linux que tengamos disponible (por ejemplo \vmlinuz o \boot\bzImage) al mismo diskette.

Cuando necesitemos arrancar desde el diskette, arrancamos en msdos y ejecutamos lo siguiente:

Formato de uso:

  loadlin kernel root=particion
En nuestro caso:
  a:
  loadlin bzImage root=/dev/hda4
(cambiando cada cosa por su nombre correcto de fichero de kernel y partición donde tengamos instalado Linux). Esto lo podemos escribir en el mismo diskette en un fichero linux.bat, por ejemplo. Tras ejecutarlo, Linux arrancará normalmente con dicho kernel/núcleo y con los datos de la partición indicada, lo cual permite restaurar el MBR original (con LILO) ejecutando de nuevo LILO (mediante /sbin/lilo, o /sbin/lilo -v).

4. Sobre LILO

4.1 ¿Qué es LILO y para qué sirve?

LILO, literalmente, el cargador de linux (LInux LOader) es un gestor de arranque muy versátil que permite iniciar un sistema operativo (SO) cargando el sector de arranque de una partición del disco duro (o de un disquete).

Esto lo pueden hacer otros gestores de botado, pero sólo LILO puede cargar el kernel de linux y arrancar linux presentando además la posibilidad de pasar parámetros al kernel mediante líneas de comando.

LILO tiene una serie de componentes que se cargan de manera secuencial. En primer lugar, se carga la primera parte (el comienzo del código) del cargador en el sector de arranque. Cuando este primer tramo del cargador se ha iniciado, aparece una "L" en el monitor. Entonces, el resto (la mayor parte del código) del cargador (que junto con la primera parte del código se encuentra en el fichero /boot/boot.b) procede a iniciarse. Justo antes de que se cargue este segundo tramo de código, se presenta "I" en la pantalla. Si todo ha ido bien, después de haberse cargado, la siguiente letra de LILO, "L", aparecerá en la pantalla. Después de esto, se produce la carga de la tabla de descriptores a partir del fichero /boot.map, donde se establecerán las ubicaciones de los posibles kernels de linux así como los sectores de arranque correspondientes a otros SOs que también gestione LILO. Por último, se carga el SO seleccionado, que en principio será el kernel de linux. Si todo ha funcionado sin problemas, aparecerá una "O" en el monitor y se habrá escrito en la pantalla la palabra LILO.

Si hubieren problemas en el proceso de arranque la presencia o ausencia de las letras de LILO junto con algunos otros mensajes serán claves para diagnosticar la causa del fallo.

4.2 ¿Dónde se instala LILO?

Dependiendo de las necesidades que tengamos, podremos instalar LILO:

La opción de instalar LILO en un disquete ("de arranque") es el procedimiento más seguro, pero también el más lento de cargar linux en nuestra máquina.

Si solamente tenemos linux en nuestro ordenador, la opción idónea sería instalar LILO en el MBR del primer disco duro. Si vamos a disponer de otros SOs coexistiendo en nuestra máquina (MS-DOS, Windows), también podemos escoger la instalación de LILO en el MBR, y gestionar con él la carga de los SOs. Pero con esto hay que tener ciertas precauciones.

Si ya tenemos un SO en una partición, p. ej. Windows 95, cuando instalemos LILO en el MBR, sobreescribiremos dicho sector y ya no podremos arrancar Windows 95, si no lo gestiona el propio LILO. Si tenemos linux instalado con LILO en el MBR y después instalamos p. ej., Windows 95, se borrará LILO del MBR y no podremos arrancar linux. En tal caso, para poder usar LILO como gestor común, habría que cargar linux con un disquete de arranque y reinstalar, desde linux LILO en el MBR. Por lo tanto, si vamos a meter varios SOs en nuestra máquina, es mejor instalar primero los otros y luego linux, usando después LILO como gestor de arranque de todos los SOs.

Si nos planteamos iniciar los diversos SOs, incluído linux desde otro gestor de arranque, como por ejemplo el moderno BootMagic del PartitionMagic 4.0 (Englobado ya en El Caldera OpenLinux 2.2), la mejor opción sería escribir LILO en el sector de arranque de la partición linux nativa correspondiente. En tal caso, cuando instalemos linux, deberemos marcar dicha partición raíz como activa (usando el comando "a" de fdisk o el "b" de cfdisk).

4.3 ¿Qué limitaciones impone el BIOS a LILO?

Excepto en el caso de que LILO sea el gestor de otros SOs, será el BIOS u otro cargador el responsable de ejecutar el sector de arranque de la partición. El BIOS (Basic Input Output System) cuando encendemos el ordenador, lleva a cabo el POST (Power-On Self Test) para comprobar los parámetros de la configuración de hardware que se encuentran permanentemente salvados en el chip CMOS (Complementary Metal Oxyde Semiconductor) RAM (continuamente alimentado por una batería aunque el ordenador se apague): memoria instalada, disqueteras, discos duros, cd-roms,...

Despues del test, BIOS muestra en la pantalla los valores de los parámetros de hardware y procede a arrancar el SO. En el caso de un disco duro toma el MBR del disco primario y de él se cargará el programa gestor de arranque. Antaño, el MBR contenía el sistema de arranque del único sistema operativo instalado. Hoy día como es posible cargar más de un SO, para arrancar, hace falta un gestor de arranque múltiple, como por ejemplo LILO. Por lo tanto, LILO está limitado por las opciones del BIOS. Además, LILO depende del BIOS para cargar los ficheros /boot/boot.b; /boot.map; los diversos kernels; los sectores de arranque de los otros Sos y el mensaje de arranque de LILO si se ha definido.

Las restricciones más importantes que afectan LILO eran en el caso de BIOS antiguos la limitación a los dos primeros discos duros y la imposibilidad de acceder más allá de 1024 cilindros por disco, lo cual se vulneraba en cuanto el disco duro superaba los 504 Mbytes, por lo que convenía tener la partición raíz que contuviera los kernels en las primeras posiciones de la tabla. Los BIOS de las modernas placas base ya soportan hasta cuatro dispositivos (discos duros o cdroms). Así, cuando la partición de arranque de linux se encuentra en el segundo, tercero o cuarto disco duro, LILO imprime un mensaje de precaución pero continúa. El límite de los 1024 cilindros no ha cambiado con los nuevos BIOS, pero los controladores de disco con soporte de LBA (Logical Block Address) o LARGE(IDEs con más de 1024 cilindros, la mayoría de EIDEs y todos los SCSI) pueden "traducir" o "remapear" la geometría del disco en otra equivalente de manera que parezca que el sistema tiene menos de los 1024 cilindros y se puedan gestionar hasta casi 8 Gbytes. Si la información acerca de la geometría del disco que hay en el menú del BIOS (remapeada con p.ej. LBA) no es la misma (en cuanto a cilindros/cabezas/sectores) que la que nos da fdisk, entonces se producirá un problema de "geometry mismatch" (no equivalencia de geometría) y LILO abortará el arranque a menos que se utilice la opción "linear" en la configuración de LILO.

4.4 ¿Cómo se configura e instala LILO?

La configuración de LILO se hace en /etc/lilo.conf, pero antes que editar y escribir manualmente la configuración en este archivo, existen interfaces o programas capaces de preparar una configuración conveniente para el usuario, de manera que solamente en el caso de incorporar opciones avanzadas tenga que editar y modificar a mano el archivo.

En primer lugar existe un programa llamado "Quickinst" que acompaña la distribución original del programa LILO. Se trata de un guión (shell script) que produce una configuración mínima de LILO que luego conviene actualizar. Por otra parte la mayor parte de las distribuciones proporcionan un asistente durante la instalación que ayuda a la configuración de LILO. RedHat en su "INSTALL" dedica una parte importante a la configuración de LILO. El"SETUP" de Slackware también lo permite. Distribuciones como Caldera OpenLinux o SuSE disponen de herramientas de instalación que permiten una cómoda configuración de LILO para el usuario (LISA y LIZARD para OpenLinux 1.3 y 2.2, y YAST para SuSE). Quizá Debian ha sido un poco más espartana (al menos hasta Hamm 2.0) en su utilidad de instalación para la configuración de LILO: se limita a escribir una configuración básica de LILO sin soporte para otros SOs ni otros kernels.

El fichero /etc/lilo.conf solo debería ser leído por el superusuario administrador, ya que podría contener contraseñas. En caso de duda, deberíamos hacer (como root)

  chmod 600 /etc/lilo.conf
Escribiendo /etc/lilo.conf

El fichero /etc/lilo.conf comienza con una "global section" (sección general) seguida de una o más "system sections" (secciones para cada SO que LILO gestione) que comenzarán por image= (si es un kernel linux) u other= (si es otro SO). Los comentarios en el fichero comienzan con el símbolo de la almohadilla (#).

Consideremos a continuación las líneas más importantes de /etc/lilo.conf:

Sección general

Sección linux

Sección otros SOs

Otras opciones interesantes (solo algunas)

Después de haber escrito el fichero /etc/lilo.conf, es necesario lanzar el "map installer" haciendo:

  /sbin/lilo
con lo cual LILO escribe un backup del sector de arranque, escribe la primera parte de su código en él y crea un nuevo fichero de mapeado (/boot/map). LILO anuncia entonces por la pantalla los SOs que gestiona, añadiendo una estrella al que se arrancará por defecto. Hay que recalcar que si cualquiera de los componentes de LILO cambia o se modifica su configuración mediante /etc/lilo.conf, es necesario volver a reinstalar LILO con /sbin/lilo.

Configuración mínima de LILO y configuración para gestionar linux y otro sistema operativo (win95)

Consideremos el siguiente fichero /etc/lilo.conf únicamente para arrancar linux:

  #
  #Fichero de configuración /etc/lilo.conf
  #
  # Sección general
  boot=/dev/hda
  delay=100
  vga=normal

  # Partición linux

    image=/vmlinuz
    root=/dev/hda1
    label=linux
    read-only  
Este ejemplo se interpreta de la siguiente forma:

LILO se va a instalar en el MBR del disco duro /dev/hda. El modo de video EGA es 80x25, el sistema linux nativo se encuentra en la primera partición del disco duro (/dev/hda1) y la imagen del kernel se encuentra en el fichero /vmlinuz. Despues de 10 segundos, arrancará el sistema linux, cuyo nombre es "linux". Si hacemos /sbin/lilo, entonces aparecerá en el monitor:

  Added linux*
Veamos ahora otro fichero de configuración para gestionar linux y win95:
  #
  # Fichero de configuración /etc/lilo.conf
  #
  # Sección general

  boot=/dev/hda
  prompt
  timeout=100
  vga=normal

  # Partición linux

    image=/vmlinuz
    root=/dev/hdc1
    label=linux
    read-only  

  # Partición Windows 95

    other=/dev/hda1
    label=win95
    table=/dev/hda
En este caso, LILO también está en el MBR del primer disco duro (/dev/hda) y hay dos sistemas operativos: linux en la partición /dev/hdc1 y Windows 95 en la partición /dev/hda1. La tabla de partición para el gestor de arranque corresponde al dispositivo /dev/hda.

si hacemos /sbin/lilo, aparecerá el mensaje:

  Added linux*
  Added win95

lo que significa que LILO va a gestionar los dos sistemas operativos y que por defecto el primero en arrancar será linux.

Cuando reinicialicemos el sistema, si todo ha ido bien aparecerá la palabra LILO seguida del indicador de arranque

  LILO boot:
y así permanécera durante unos 10 segundos, pasados los cuales si no hemos escrito el nombre de uno de los SOs, cargará por defecto linux.

Si antes del tiempo, pulsamos la tecla TAB, entonces aparecerán en pantalla los nombres de los SOs gestionados:

  linux       win95

4.5 ¿Cómo desinstalo LILO?

Hay razones para desear desinstalar LILO. Una, desinstalar el sistema linux de nuestra máquina. Otra imperativa: porque algo va mal. LILO es un programa que, mal manejado, puede hacer al sistema no arrancable si se instala en el MBR. Mal configurado, impedirá el acceso al cualquier SO. En tales casos es indispensable disponer de disquetes de arranque para dichos SO. Por lo tanto es conveniente hacer el disco de arranque de Windows y el de arranque de linux (en el momento adecuado de la instalación del sistema) de manera que nos permita acceder via disquetera al sistema correspondiente en caso de imposibilidad de arrancar. Nótese que en el BIOS el arranque deberá comenzar por defecto en la disquetera A:.

Una vez que hemos arrancado el SO, hay muchas maneras de desinstalar LILO del MBR. Si nos encontramos en DOS o Windows, basta con ejecutar el comando MS-DOS

  FDISK /MBR (ó SYS C: si C: es el disco duro en cuyo MBR se instaló LILO)
si estamos en OS/2
  FDISK /NEWMBR
que escriben los primeros 446 bytes (el código de arranque) en el MBR y dejando las particiones ilesas.

si estamos en linux, basta con hacer

  /sbin/lilo -u 
para restaurar el MBR anterior a la instalación de LILO

Además de todo esto puede hacerse otra cosa: Cuando LILO sobreescribe el MBR, salva una copia de backup en /boot/boot.xxxx, donde xxxx es un número mágico del dispositivo donde se ha instalado. Veamos algunos ejemplos

  Disco         /dev/zzz                xxxx
  IDE primario  /dev/hda                0300
  SCSI primario /dev/sda                0800
  floppy        /dev/fd0                0200
así, si queremos desinstalar LILO del sector de arranque de alguno de estos dispositivos, bastará con hacer:
  dd if=/boot/boot.xxxx of=/dev/zzz bs=446 count=1
Si LILO se ha instalado en una partición raíz, no hará no arrancable ningún otro sistema operativo. Únicamente, si está mal instalado, hará que no arranque linux. Si deseamos restaurar el sector de arranque de la partición /dev/yyyy (p.ej. /dev/hda1) podemos reescribir el sector de botado haciendo:
  dd if=/dev/yyyy of=New-file bs=512 count=1
  dd if=Backup-Date of=/dev/yyyy
si lo que queremos es desinstalar linux, borraremos la partición root con fdisk.

4.6 LILO no funciona bien. Diagnóstico de errores.

Cuando LILO se inicia, si todo ha ido bien, presenta en la pantalla las cuatro letras "LILO". Como ya vimos, cada letra correspondía a una acción. Si LILO no ha funcionado, las letras que presente en pantalla junto con ciertos mensajes, serán la clave para saber donde está el problema. Veamos los más comunes:

La mayor parte de las veces, no se trata de un problema físico del dispositivo de botado, sino errores debidos a la no equivalencia entre la geometría del disco que fdisk presenta y que el BIOS ha remapeado. En tal caso el uso del parámetro "linear" en /etc/lilo.conf puede funcionar. Otras veces puede deberse a que se ha intentado instalar LILO en una partición lógica. Y otras veces a causas más sutiles. Por ejemplo: Yo arranco linux junto a otros sistemas operativos con el gestor de arranque de Partition Magic y tengo LILO en una partición raíz. Una vez hice un "resize" y cambié el tamaño de mi partición linux nativa porque necesitaba espacio para instalar nuevos programas. Al terminar e intentar arrancar linux de su partición, apareció en la pantalla "LI". Eso se debió a que después de haber hecho el cambio de tamaño, había movido /boot/boot.b y no había lanzado el map installer /sbin/lilo. Cogí mi disquete de arranque de linux, y cuando entré ejecuté la orden y reinicié el sistema. Todo funcionó.

5. Kernel / Núcleo

5.1 ¿Qué es el kernel/núcleo?

El kernel o núcleo de linux se podría definir como el corazón de este sistema operativo. Es el encargado de que el software y el hardware de tu ordenador puedan trabajar juntos.

Las funciones más importantes del mismo, aunque no las unicas, son:

Existen dos versiones del Linux kernel: Cómo interpretar los números de las versiones: Las versiones del núcleo se numeran con 3 números, de la siguiente forma: XX.YY.ZZ Unos ejemplos nos ayudarán a entenderlo mejor:

5.2 ¿Dónde consigo el kernel/núcleo?

El núcleo se puede bajar de un gran número de servidores en internet. El servidor principal es http://www.kernel.org/ y la página de servidores espejos es http://www.kernel.org/mirrors/.

Si tienes problemas accediendo a estas páginas, aquí tienes una copia en otro servidor http://www.linux-es.com/lista_kernel.html

5.3 ¿Cómo se configura e instala el kernel/núcleo?

Este es uno de los temas que más asustan a los nuevos usuarios de linux. Lo primero deciros que no hay razón para asustarse, la configuración e instalación de un nuevo núcleo en nuestro sistema es más fácil de lo que suena.

Lo que si hay que hacer, es tener claro una serie de cosas antes de ponernos a trabajar, para asi evitar problemas. A continuación teneis una pequeña guia sobre como configurar e instalar un nuevo núcleo en tu sistema.

Si habeis decidido instalar un nuevo núcleo en tu sistema, esto es lo que teneis que hacer?

  1. Bajarse la última versión. De donde? Leerse la subsección anterior.

    NOTA: Si vais a instalar un núcleo de la serie 2.2.x, teneis que tener en cuenta que algunas distribuciones no están/estaban preparadas para hacer uso de esta serie. Si vuestra distribución no es de las que vienen preparadas, teneis que actualizar una serie de paquetes/programas antes de instalar el nuevo núcleo (mas información en la documentación que acompaña al nucleo). Las últimas distribuciones vienen todas preparadas para los núcleos de la serie 2.2.x y posteriores, esta nota solo es para los que tengan una distribución antigüa.

  2. Tener claro lo que vamos a hacer, leerse el documento HOWTO sobre el núcleo ( Ingles / Castellano)
  3. Tener claro las opciones que tenemos que configurar, para poder utilizar el hardware de nuestro sistema, asi como las características que queremos utilizar. Por ejemplo, si no utilizamos un dispositivo SCSI, no tenemos que configurar nada en el apartado SCSI de nuestro núcleo. Asi nos ahorramos espacio y tiempo.
  4. Entrar como root: su root
  5. Ir al directorio /usr/src/: cd /usr/src/
  6. Copiar el archivo que os habeis bajado al directorio /usr/src: cp linux-xx.yy.zz.tar.gz .
  7. Descomprimirlo y desempaquetar: tar -xvzpf linux-xx.yy.zz.tar.gz

    NOTA: El archivo linux-xx.yy.zz.tar.gz se desempaquetará en el directorio /usr/src/linux. Si ya existe un directorio llamado /usr/src/linux en tu sistema, renombrarlo, p.ej: mv linux linux-old . En algunas distribuciones, usr/src/linux es un enlace simbólico a linux-x.y.z, borrar este enlace simbólico. Es importante que no exista ningún directorio/enlace simbólico llamado linux, antes de desempaquetar la nueva versión. Si te has bajado el kernel comprimido con bzip2, tendras que descomprimirlo con bunzip2 linux-xx.yy.zz.tar.bz2 antes de desempaquetarlo con tar -xvf linux-xx.yy.zz.tar

  8. Entrar en /usr/src/linux: cd /usr/src/linux
  9. Configurar el núcleo, esto se puede hacer de tres maneras diferentes:

    Si teneis XWindow instalado, os recomiendo el último comando, si no, el segundo. Os recomiendo que las opciones que vienen por defecto no las toqueis si no sabeis lo que haceis, podeis pulsar Help en cada opción para obtener una descripción de la misma. Configurar las opciones que querais tener en vuestro nuevo núcleo. Una vez terminada la configuración, grabar los cambios y salir del programa de configuración.

  10. Una vez terminado el proceso de configuración, tenemos que compilar nuestro nuevo núcleo. Para ello hay que hacer lo siguiente:

    make dep
    make clean
    make bzImage

  11. Si en el proceso de configuración, elegimos alguna opción como módulo, tendremos que compilar/instalar dichos módulos:

    make modules
    make modules_install

    NOTA: No olvidar ejecutar como root el comando depmod -a la primera vez que arranqueis con vuestro nuevo núcleo, para computar las dependencias entre módulos.

  12. Ya tenemos el núcleo y los módulos compilados, ahora tenemos que instalarlo. Casi todo el mundo utiliza LILO para arrancar el sistema, por ello explicaré como instalarlo utilizando LILO.

    Todavia estamos en /usr/src/linux , ejecutar el comando make install , esto copiará el núcleo que acabamos de crear, a el directorio /boot de nuestro sistema, con el nombre vmlinuz, o como un enlace simbóolico vmlinuz -> vmlinuz-xx.yy.zz

  13. Ahora tenemos que configurar LILO para que reconozca el nuevo núcleo. Tendremos que modificar el fichero /etc/lilo.conf. Aquí teneis un ejemplo, del fichero /etc/lilo.conf antes de modificarlo:
      boot=/dev/hda 
      prompt 
      timeout=50 
      image=/boot/vmlinuz-2.0.34 
         label=linux 
         root=/dev/hda1 
         read-only 
    
    Y aqui como quedaría despues de la modificación, para que reconozca nuestro nuevo núcleo al arrancar:
      boot=/dev/hda 
      prompt 
      timeout=50 
      image=/boot/vmlinuz 
         label=nuevokernel 
         root=/dev/hda1 
         read-only 
      image=/boot/vmlinuz-2.0.34 
         label=linux 
         root=/dev/hda1 
         read-only 
    
  14. Ahora solo tenemos que ejecutar el comando /sbin/lilo y arrancar el sistema de nuevo. Si tuviesemos algún problema con el nuevo núcleo, siempre podriamos arrancar con el antiguo escribiendo linux y pulsando ENTER cuando arrancamos y nos sale en pantalla lilo: De esta manera podemos entrar y ver que es lo que ha fallado.

    NOTA: Recordar que existen multitud de opciones para configurar LILO, y que los ejemplos anteriores, son ejemplos. Puede que vuestro sistema necesite diferentes parámetros y opciones. Leeros los documentos HOWTOS sobre el núcleo y LILO antes de cambiar nada en vuestro sistema. Al final de esta sección teneis enlaces a los mismos. Suerte y espero que tengais las cosas un poco mas claras.

5.4 ¿Qué son los parches (patchs)? ¿Cómo se instalan?

¿Qué son los parches y para qué sirven?:

Un parche para el núcleo no es más, que un fichero que solamente contiene información, sobre las lineas de código que han cambiado desde la versión precedente del núcleo. De esta manera, solamente os teneis que bajar un fichero con los cambios, en vez, del núcleo al completo. El ahorro en cantidad de Mb bajados es bastante considerable, sobre todo para aquellos que dependen del módem y no tienen una conexión buena a internet.

Algo a tener muy en cuenta si vais a actualizar el núcleo por medio de parches, en vez de bajaros el núcleo al completo, es que teneis que ir actualizando de versión a versión. Para que se entienda un poco mejor, aqui teneis un ejemplo:

Si teneis el núcleo 2.2.0 y vais a actualizarlo al 2.2.1, os podeis bajar el fichero patch-2.2.1.gz [70Kb] en vez, del núcleo 2.2.1 al completo [12.5Mb]. Pero si teneis el nucleo 2.2.0 y vais a actualizar al 2.2.4, NO os vale bajaros el fichero patch-2.2.4.gz nada más, tendriais que bajaros el 2.2.1, 2.2.2, 2.2.3 y 2.2.4. Esto es porque los ficheros patch solamente contienen los cambios de versión a versión.

Si la diferencia entre la versión que teneis y la que quereis instalar, es muy grande (p.ej: del 2.2.0 al 2.2.10), no os merece la pena actualizar por medio de parches, en este caso bajaros la versión completa.

¿Qué hacer con un fichero patch-XX.YY.ZZ.gz?:

Ya os habeis bajado el fichero patch (se pueden bajar del mismo subdirectorio donde está la versión completa), que necesitas para actualizar el núcleo, y ahora, ¿qué hacemos?. Ahora, hay que aplicarlo al núcleo que teneis y compilar de nuevo. El procedimiento para actualizar el núcleo por medio de ficheros patch es el siguiente:

5.5 ¿Algún consejo sobre el kernel/núcleo?

Pregunta: ¿Necesito actualizar el núcleo que utilizo, cada vez que una nueva versión aparece?
Respuesta: No. ¿Porqué? La explicación es la siguiente:

Cuando un nuevo núcleo aparece, puede ser por las siguientes causas:

Si las características que se han añadido, no las vamos a utilizar, es evidente que no necesitamos actualizar. Si los fallos de programación que se han corregido afectan a características/drivers que no utilizamos, no necesitamos actualizar. Si no utilizamos el nuevo hardware soportado, tampoco necesitamos actualizar.

De todas maneras es recomendable, actualizar de vez en cuando, sobre todo cuando se corrigen fallos de seguridad o cuando los cambios en el nuevo núcleo afectan a características/funciones/hardware que utilicemos. El código esta ahí, libre y esperando a ser compilado en un nuevo ordenador, cada usuario debe de decidir cuando es hora de una actualización.

Pregunta: ¿Soy nuevo en Linux y acabo de instalar una distribución, como actualizo el núcleo?
Respuesta: Te aconsejo que esperes un poquito. La distribución que acabas de instalar (si es de las últimas) viene con un núcleo de los "últimos", totalmente funcional y que te sirve sin problemas. Utiliza el sistema un tiempo, familiarizate con el nuevo sistema que acabas de instalar, y cuando comprendas un poco más como funcionan las cosas, actualiza el núcleo. Un buen punto de partida para encontrar información sobre el núcleo, lo tienes en estas páginas.

5.6 Enlaces sobre el kernel

6. XWindow / Gestores de ventanas

6.1 ¿Qué es XWindow?

El protocolo XWindow fue desarrollado a mediados de los años 80 como respuesta a la necesidad de un interfaz gráfico transparente sobre todo para sistemas Unix.

XWindow es el encargado de visualizar la información de manera gráfica y es totalmente independiente del sistema operativo (los sistemas Unix/Linux no necesitan de XWindow para funcionar, pudiendo trabajar en modo texto). La gran diferencia entre XWindow y la interfaz gráfica de otros sistemas operativos es que XWindow distribuye el procesamiento de aplicaciones, especificando un enlace cliente-servidor. El cliente X especificará "Que hacer" al servidor X, que se encargará de "Como hacerlo".

Pero dejémonos de teoría y pasemos a un ejemplo práctico. La gran ventaja de XWindow es que el servidor X de una aplicación y el cliente X donde trabajamos no tienen porque estar en la misma máquina. Podemos estar utilizando XWindow en nuestra máquina, conectarnos a otra remota, ejecutar un programa en esta máquina remota y utilizar/ver este programa en nuestra máquina local. Todo esto independientemente de la plataforma/sistema operativo que el ordenador remoto utilice. Como veis las posibilidades son muchas y potentes.

     Cliente X
        |
        |
       Xlib
        |
        |
    Servidor X
        |
        |
Sistema operativo

6.2 ¿Cómo configuro XWindow?

Para utilizar el sistema en modo gráfico es necesario instalar XWindow en tu sistema. Existen servidores comerciales y bajo licencia GNU. En estos apartados nos basaremos en XWindow bajo licencia GNU, XFree86, ya que es el que se incluye en todas las distribuciones de Linux.

Una vez instalado XWindow tendremos que configurarlo para que funcione en nuestro sistema. El fichero de configuración del XWindow se llama XF86Config y generalmente se encuentra en el directorio /etc/X11/.

Unos datos que teneis que saber antes de configurar XWindow son:

Antes de lanzar XWindow mediante el comando startx debemos asegurarnos de la correcta configuración de los diferentes parámetros del mismo (teclado, ratón, tarjeta de vídeo, etc.). Hay diferentes métodos para hacer esto.

En primer lugar tenemos los programas de configuración semi-automática. Según la distribución de Linux que utilicemos tendremos a nuestra disposición una serie de programas que nos permitirán realizar la configuración de XWindow de una manera más o menos sencilla:

Estos programas nos preguntarán cosas básicas sobre el teclado, el monitor, la videomemoria o la tarjeta de vídeo instalada (lo harán cuando no sean capaces de detectarlas por sí mismos). Debemos responder siempre la opción más acertada y en cuanto a monitores, nunca especificar características superiores de las que disponemos. Un caso muy habitual en tarjetas muy nuevas es no encontrar un soporte exacto para los últimos chipsets, problema que se suele corregir acudiendo al soporte de framebuffer del kernel o esperando a que quienes trabajan en XFree86 obtengan por parte de los fabricantes la información sobre cómo programar sus tarjetas.

En ciertos casos también se nos puede preguntar si deseamos que el sistema arranque directamente en XWindow o incluso testear los diferentes modos de vídeo para ver que si son correctamente soportados.

Además para que estos programas realicen una correcta configuración el sistema debe estar ya correctamente configurado en cuanto a modo texto se refiere. Por ejemplo, Xconfigurator no activará el teclado en castellano para XWindow si no hemos especificado que el idioma en que queremos usar nuestro Linux es este mismo, mediante la orden

  export LANG=es_ES
bien en la línea de comandos, o en el fichero /etc/profile. Cuando Xconfigurator detecta esta variable de entorno ya sabe qué lenguaje utiliza el usuario y por tanto configurará XWindow para el correcto uso del teclado en este lenguaje. Otras variables indican el tipo de ratón, etc. y suelen ser correctamente especificadas por el programa de instalación. En el caso de XF86Setup la configuración permite una mayor participación por parte del usuario, ya que en lugar de realizar una configuración automática proporciona una lista de opciones para cada apartado, de modo que si conocemos nuestro hardware es la mejor manera de configurar el sistema. Además, a la hora de elegir resoluciones de vídeo, este programa permite especificar cual es la resolución por defecto deseada mientras que Xconfigurator deja marcada la menor de ellas como "por defecto" (o la primera que seleccionemos).

El programa de configuración xf86config es el más antiguo de todos, y realiza la configuración mediante preguntas que se responderán con teclado. Nos preguntará la tarjeta de vídeo, monitor, rango de frecuencias del monitor, videomemoria y resoluciones de trabajo deseadas, así como el mapa del teclado a utilizar (es 102 = España 102 teclas).

Como siempre, el método más eficaz de configurar XWindow es directamente editando los ficheros de configuración.Y es que otro método de configuración básico es sencillamente editar el fichero /etc/X11/XF86Config, que es en realidad lo que hacen todos los programas comentados anteriormente. En este fichero la configuración está dividida en secciones y mediante cualquier editor de texto llano es posible cambiar cualquier parámetro de XWindow.

Este fichero se divide en varias categorías o secciones (todas ellas con más subopciones muy bien comentadas en dicho fichero de configuración):

Una vez creado este fichero, entramos en XWindow mediante el comando startx.

Del entorno XWindow se puede salir en cualquier momento mediante la combinación de teclas Ctrl+Alt+Borrar, o bien seleccionando LOGOUT en el menú del gestor de ventanas que utilicemos.

Para volver a las consolas de texto bastará con utilizar la combinación de teclas Ctrl+Alt+F1, +F2, etc (hasta F6 en las instalaciones por defecto). Para volver al terminal gráfico se utiliza de F7 en adelante (Ctrl+Alt+F7, +F8, etc.).

Si durante la instalación (o en la línea apropiada del fichero XF86Config) seleccionamos varias resoluciones de vídeo, es posible cambiar entre ellas mediante las teclas Ctrl+Alt+'+' y Ctrl+Alt+'-' (los signos del teclado numérico).

Además, si por defecto marcamos 8bpp (o 16 bpp) en las opciones, nada nos impide lanzar posteriormente XWindow en la profundidad de color deseada:

  [sromero@localhost]# startx -- -bpp 8
  [sromero@localhost]# startx -- -bpp 16
  etc.
También es posible establecer la profundidad de color por defecto mediante una línea DefaultColorDepth = 16 en el fichero de configuración XF86Config, sección Screen.

Por último, saber que podemos lanzar más de una sesión de XWindow simultáneamente (en las consolas accesibles desde Ctrl+Alt+F8, +F9, etc.), mediante:

  [sromero@localhost]# startx -- :1
  [sromero@localhost]# startx -- :2
  etc.

6.3 ¿Cómo cambio la resolución por defecto?

En el fichero /etc/X11/XF86Config en la sección screen correspondiente al servidor que se está utilizando actualmente, en la subsección Display correspondiente a la Depth en que estemos trabajando, buscamos la linea:

  Modes "resolución_1" "resolución_2"...
Un ejemplo:
  Modes       "1024x768" "800x600" "640x480" "320x200"
Entonces ponemos la resolución que queramos que sea por defecto de primera. Estas resoluciones puestas aquí son entre las que podremos cambiar si queremos al pulsar Ctrl+ Alt+ '+' ó Ctrl+Alt+'-', una vez arrancado XWindow.

6.4 ¿Cómo cambio el escritorio virtual?

En el fichero /etc/X11/XF86Config, en la sección screen correspondiente al servidor que se está utilizando actualmente, en la subsection Display correspondiente a la Depth en que estemos trabajando, añadimos la línea:

  Virtual tamaño_x tamaño_y  #en píxeles
Un ejemplo:
  Virtual     1024 768
Hay que puntualizar que si existe una resolución definida de Modes mayor que el escritorio virtual, esta no se podra utilizar. Resumiendo, no se puede tener una resolución de trabajo mayor que el escritorio virtual.

6.5 ¿Cómo cambio el numero de colores por defecto?

Hay dos maneras:

Mediante la línea de comandos:

  [user@localhost]# startx --bpp resolución  (dónde resolución es 8, 16,24 ó 32) 
Mediante el fichero de configuración:

En el fichero /etc/X11/XF86Config, en la sección screen correspondiente al servidor que se está utilizando actualmente, añadimos la línea:

  DefaultColorDepth depth_que_queramos_utilizar
Un ejemplo:
  DefaultColorDepth 16
Un Depth con valor 8 significa que trabajaremos a 256 colores, uno con valor 32 truecolor. No todas las tarjetas graficas podran utilizar todos los Depth disponibles en todas las resoluciones, todo dependera de la tarjeta grafica y de la memoria que esta tenga.

6.6 ¿Cómo arranco directamente en XWindow?

En Linux es perfectamente posible pedir que el arranque del sistema se haga en modo gráfico, y que el login y password se introduzcan directamente en una ventana XWindow para la posterior carga del gestor de ventanas habitual que use dicho usuario.

Es decir, podremos identificarnos y aparecer directamente bajo X sin necesidad de ejecutar startx.

Para arrancar directamente en XWindow (o no hacerlo) todo el proceso de configuración gira en torno a cambiar el runlevel (o nivel de ejecución en que arranca Linux).

El runlevel es, dicho de una manera sencilla, el modo en que arranca Linux. Por defecto el runlevel suele ser el 2 ó el 3, es decir, arranque en modo texto o consola ó en modo gráfico. Para cada distribución suele haber una lista de runleves y sus significados, aunque casi se puede decir que son similares para todas ellas. Para Redhat, por ejemplo, la lista es la siguiente:

  # Porción del fichero /etc/inittab
  # Default runlevel. The runlevels used by RHS are:
  #   0 - halt (Do NOT set initdefault to this)
  #   1 - Single user mode
  #   2 - Multiuser, without NFS (The same as 3)
  #   3 - Full multiuser mode
  #   4 - unused
  #   5 - X11
  #   6 - reboot (Do NOT set initdefault to this)
Como puede verse, el arranque normal por defecto para que puedan acceder usuarios a Linux es 2 (si no tenemos red) o 3 si queremos usar servicios de red, siendo normalmente este el runlevel por defecto. Como puede verse, X11 tiene asignado el runlevel al 5. Si cambiamos el runlevel por defecto para que arranque en el 5, nos aparecerán directamente X Window.

Para cambiar este runlevel por defecto hay que editar el fichero /etc/inittab, y acudir a la siguiente línea:

  id:3:initdefault:
El valor numerico antes de initdefault indica el runlevel de arranque por defecto. Si lo cambiamos de 3 a 5, la próxima vez que arranquemos Linux arrancará en X Window:
  id:5:initdefault:
Para que el proceso se ejecute correctamente debe tener instalado un gestor de arranque en runlevel 5, que es el programa encargado de pedir el login+passwd y arrancar el gestor de ventanas adecuado. Puede elegir entre xdm (el que viene por defecto con XWindow), kdm (version de kde del mismo) y gdm (versión aportada por gnome). Cada una de ellas dispone de ciertos ficheros de configuración o ejecutables para cambiar el fondo del login, el lenguaje, gestor de ventanas, etc. Consulte los ficheros en los paquetes relacionados.

Haga "man runlevel" para mas información sobre runlevels.

En las últimas versiones de Redhat, el programa Xconfigurator le permite elegir si desea o no arrancar directamente en XWindow (él mismo modifica el runlevel por defecto) mediante una simple pregunta a la que se debe responder SI (Si desea arrancar en runlevel 5) o NO (si desea arrancar en runlevel 3). Esta pregunta se le suele realizar al finalizar la selección de resoluciones y antes de salir de Xconfigurator.

Una vez arranque en XWindow, puede volver a cualquier consola de texto mediante las teclas Ctrl+Alt+F1, Ctrl+Alt+F2, etc. (por defecto entre F1 y F6 tendrás 6 consolas de texto), y volver a XWindow en cualquier momento mediante Ctrl+Alt+F7 en adelante.

En algunas distribuciones puede ser necesario indicarle a inittab dónde está el gestor de runlevel 5 que debe arrancar:

Para xdm:

  #Run xdm in runlevel 5
  x:5:respawn:/usr/X11R6/bin/wdm -nodaemon
Para gdm:
  x:5:respawn:/etc/X11/prefdm -nodaemon
Estas líneas suelen ser automáticamente incluidas en el fichero por los rpm/deb instaladores de xdm, kdm y gdm. Consulte en la ayuda de dichos programas para más información.

6.7 ¿Qué es un gestor de ventanas?

Un gestor de ventanas no es otra cosa que el conjunto de programas, ventanas, funcionalidades, .... que hacen posible que el usuario pueda interactuar con el sistema de forma gráfica y no en modo texto.

Para usar un gestor de ventanas, hay que tener configurado un servidor X. También hay que decir que el gestor de ventanas utilizado es totalmente independiente del servidor X utilizado.

  Gestor de ventanas
        |
        |
     Cliente X
        |
        |
       Xlib
        |
        |
    Servidor X
        |
        |
Sistema operativo
Al contrario que en otros sistemas operativos, en Linux no es necesario utilizar un servidor X - gestor de ventanas para usar el sistema. El sistema operativo y el conjunto servidor X - gestor de ventanas usado, son cosas totalmente diferentes, independientes entre si. Es más, existen usuarios que trabajan en modo texto sin ningun problema y sin usar un interfaz gráfico.

Existen numerosos y variados gestores de ventanas para Linux, unos mejores y otros más desarrollados y estables. Es el usuario el que tiene que decidir que gestor satisface mejor sus necesidades, pudiendo incluso tener mas de uno instalado. Para aclarar un poco las cosas, podriamos decir que, si un ordenador es usado por varios usuarios, todos utilizarán el mismo servidor X pero no necesariamente el mismo gestor de ventanas.

6.8 ¿Cómo elijo el Gestor de ventanas que quiero arrancar?

Una vez configurado X se hace necesario decirle a XWindow qué gestor de ventanas debe arrancar. Dicho de una manera sencilla, XWindow es la conjunción de 3 componentes:

Así, al dividir XWindow en estos 3 módulos se nos permite cambiar cualquiera de ellos para dotar a XWindow del aspecto o funcionalidades que deseemos. El entorno de ventanas no suele cambiarse nunca (es XFree86), y el servidor X tampoco, ya que éste último es siempre el ejecutable apropiado para manejar nuestra tarjeta gráfica (XFree86-SVGA, XFree86-S3, etc.), pero el último es totalmente seleccionable entre multitud de opciones y es lo que nos permite cambiar radicalmente el aspecto de XWindow. Cambiando el gestor de ventanas (o Window Manager) podemos cambiar prácticamente el funcionamiento completo de XWindow.

Gestores de ventanas hay muchos: kde, afterstep, gnome, WindowMaker, icewm, etc, y todos tienen sus respectivos ejecutables: startkde, afterstep, gnome-session, wmaker, icewm, etc. Toda esta explicación se ha dado por un motivo muy sencillo: la posibilidad de elegir el Gestor de Ventanas deseado es parte de la configuración activa de XWindow, y vamos a ver la manera de decirle a XWindow qué gestor deseamos utilizar.

Para ello, simplemente debemos ir al directorio HOME del usuario en cuestion (/home/usuario) o de root (/root) y editar (creándolo si no existe) el fichero de texto .xinitrc . En este fichero pondremos una línea que indicará el Gestor de Ventanas que deseamos utilizar, en el formato:

  exec ejecutable_del_gestor_de_ventanas
Además podemos utilizar líneas de comentarios que comiencen por el carácter '#' y que XWindow ignorará:

Ejemplos de ficheros .xinitrc:

  # utilizar afterstep
  exec afterstep
otro ejemplo podría ser lanzar kde:
  # utilizar KDE
  exec startkde
Así, dependiendo del ejecutable que lancemos (startkde, gnome-session, icewm, wmaker, ctwm, fvwm2, wmaker, blackbox, etc.) podremos arrancar el WM deseado.

NOTA: Si tenemos nuestro sistema configurado para arrancar directamente en XWindow, tendremos que utilizar el fichero .Xclients en vez de .xinitrc, el formato es igual en los dos ficheros.

6.9 ¿Dónde consigo un nuevo gestor de ventanas?

Muchas distribuciones incluyen en sus CDes una serie de gestores de ventanas. También os lo podeis bajar de sus respectivos servidores web:

7. Administración

7.1 ¿Puedo trabajar normalmente como root?

Un consejo, solo utilizar la cuenta de root (administrador) para tareas de administración. Para trabajar normalmente con el sistema NO hacerlo como root, ya que se tiene acceso completo a todo el sistema y es fácil de estropear cosas si no se sabe lo que se hace.

Aqui teneis un ejemplo que le ocurrio al autor de esta subsección trabajando como root:

"Sólo utilizo la cuenta de root para administración del sistema, pero un día estuve demasiado tiempo trabajando con ella para intentar empaquetar un rpm, resulta que lo instalé mal y creé el directorio /usr/src/redhat/usr/src/redhat/SRC/, eso no era lo que quería, así que tecleé:
 
  [root@asimovI src]$ cd .. ; rm -rf * 
Yo pensaba que estaba dentro del segundo usr, pero estaba en el primero, menos mal que me di de cuenta pronto y pulsé Ctrl+c para abortar el comando de borrado mientras se estaba borrando el directorio X11R6, así que no corrompí/destrocé por completo el sistema, sólo tuve que volver a instalar algunos paquetes. Pero ¿y si no me doy cuenta?, pues que no podría haber hecho nada ya que hubiese borrado todo el contenido de /usr no existirían librerías, comandos, etc, teniendo que haber instalado el sistema operativo de nuevo."

Después de este ejemplo, volvemos a recomendar lo que dijimos al principio, utilizar la cuenta de root solo en los casos necesarios y siempre teniéndole un respeto al poder que da. Estar seguros al 100% de lo que haceis como root, para no estropear el sistema. Una buena costumbre es nunca hacer login con root, sino trabajar como un usuario normal y cuando se necesite ser root hacer un su, y tan pronto como deje de ser necesario tener el privilegio hacer un exit, para volver a trabajar como usuario normal.

7.2 ¿Cómo abro/cierro una nueva cuenta?

Aquí veremos como abrir y cerrar una cuenta de usuario.

Abrir una nueva cuenta.

El abrir una nueva cuenta, no es más que añadir una entrada en el archivo/etc/passwd del sistema. Una entrada en este archivo tiene la siguiente forma:

  <user>:<encrip>:<UID>:<GID>:<informacion>:<home>:<shell>

  user:        Es el nombre de usuario.
  encrip:      Es la clave encriptada.
  UID:         Es el número UID con el que nos identificará el kernel.
  GID:         El numero de grupo principal GID al que pertenecemos.
  información: Información varia, tal como nombre completo del usuario, 
               número de teléfono, e-mail, etc.
  home:        Es el directorio home del usuario, es decir, el directorio al que 
               accedemos justo después de hacer entrar en el sistema.
  shell:       Es el shell que se abrirá para ejecutar las órdenes que de el usuario.
Hay utilidades que hacen que añadir cuentas de usuario sea más fácil. Entre ellas están el comando /usr/sbin/adduser o /usr/sbin/useradd y /usr/bin/passwd. Lo pasos para crear un usuario son:
  [root@asimovI /root] /usr/sbin/adduser mario
  [root@asimovI /root] passwd mario
Para más información hacer man adduser, sobre todo si se quiere poner caducidad a las claves.

Hay otras utilidades más vistosas y fáciles de usar e intuitivas ya que son bajo XWindow, un ejemplo de éstas son en el contol-panel de redhat, el YaST en SuSE, el gestor de usuarios de Kde, etc.

Hay que aclarar que si el campo de la clave encriptada del fichero /etc/passwd no contiene ningun valor, no sera necesario la utilización de una clave para entrar en el sistema. Esto es totalmente desaconsejable por los problemas de seguridad que puede crear.

Sin embargo es útil, por ejemplo, cuando nos olvidamos de la clave de root, la solución es arrancar con un disket de rescate, luego montar la partición de linux, y borrar la clave encriptada de la entrada de root en el fichero /etc/passwd. Luego reiniciamos el equipo, entramos como root y ejecutamos passwd root para poner la nueva contraseña.

NOTA: Este sistema de cambio de clave para la cuenta root no siempre funciona, dependiendo de la distribución que tengamos ó de como tengamos configurada la seguridad en nuestro sistema.

Borrar una cuenta de usuario.

El comando a utilizar es /usr/sbin/userdel el cual tiene la siguiente sintaxis:

  userdel [-r][login]
Este comando borra el usuario login, y si se añade la opción -r también borra su directorio de usuario.

Para borrar una cuenta de usuario también se pueden utilizar las utilidades gráficas que comentamos antes, de una forma muy intuitiva.

7.3 Tengo un ejecutable que no quiere ejecutarse.

A todos nos a ocurrido alguna vez, que al intentar ejecutar un comando/programa hemos obtenido como respuesta command not found.

Esto significa que el shell/intérprete de comandos no encontró el comando que queríamos ejecutar. Las causas más comunes suelen ser:

Otra respuesta que podemos obtener al intentar ejecutar un comando/programa es Permission denied.

El error es bien claro, el ejecutable existe pero no tenemos permiso para ejecutarlo, comprueba que lo podemos ejecutar, es decir, tiene una x en el grupo al que pertenezcamos: dueño, grupo, u otros. Mas información sobre permisos en la subsección ¿Cómo se cambian los permisos de ficheros y directorios?.

Por ultimo, podemos obtener un error en el que se nos informa que cierta librería no se encuentra.

Ejecuta el comando:

  [asimov@asimovI bin] ldd comando
Esto mostrará todas las librerías compartidas que el comando/programa utiliza/necesita para funcionar.

Si no tenemos algunas, las tenemos que instalar, pero si las tenemos tenemos que comprobar que /sbin/ld (el cargador de librerías dinámicas) sabe donde están, para ello hemos de añadir una entrada en el fichero /etc/ld.so.conf que consiste en poner el directorio donde esta la librería, luego ejecutamos /sbin/ldconfig -D para cerciorarnos que la lee.

7.4 ¿Cómo dar formato a un disquete en Linux?

El formato de disquetes en Linux depende del tipo de formato que se le desee dar al disquete (tipo MSDOS, tipo FAT32/VFAT, tipo Ext2 de Linux, minix, etc.). En general solo hay que usar uno de los comandos mkfs disponibles, que creará el sistema de ficheros pertinente:

Para formatear disquetes en formato Linux-ext2

  mkfs.ext2 [opciones] /dev/fd0
o bien su equivalente:
  mke2fs [opciones] /dev/fd0
El usuario que formatee deberá tener permiso de escritura para la disquetera (normalmente /dev/fd0). Para eso debe estar en el grupo de usuarios floppy o que /dev/fd0 tenga permisos 666 (para todo el mundo).

Para formatear disquetes en formato msdos

  mkfs.msdos [opciones] /dev/fd0
o bien:
  mkdosfs [opciones] /dev/fd0
Otro comando disponible si tenemos instaladas las mtools es mformat:
  mformat a:
Este ultimo comando formateara el disquete en formato ms-dos.

Por último, existen otros programas como fdformat o superformat (ver paquete fdutils) que también sirven para dar formato a disquetes.

NOTA: Formatos del tipo ext2 y ms-dos son los que se utilizan más usualmente en linux. Hay que aclarar que un disquete con formato ext2 No será posible leerlo bajo ms-dos o Windows, solamente bajo Linux. Un disquete con formato ms-dos podrá ser leido indistintamente por ms-dos, windows o Linux (si tenemos soporte en el kernel/núcleo para trabajar con este formato).

7.5 ¿Cómo puedo montar y desmontar unidades en Linux?

Montar un sistema de ficheros/dispositivo a nivel usuario no es más que hacerlo disponible en el árbol de directorios de nuestro sistema. Como ya sabeis, en Linux vemos todos los sistemas de ficheros/dispositivos en un sólo árbol de directorios, no existen letras a:, c:, etc., de esta manera nos da igual que el contenido de un directorio sea un sistema de ficheros msdos, vfat, ext2, se encuentre en diferentes discos/particiones, esté en una máquina remota, etc. Esta abstracción tiene un inconveniente, hay que montarlo, es decir, indicarle al kernel de Linux que a través del directorio XXXX, accedemos al sistema de ficheros/dispositivo yyy. Esto se hace con el comando mount (man mount, para detalles).

Montar un sistemas de ficheros/dispositivo a nivel kernel, no es más que rellenar unas tablas de registro. Es decir, ver si el sistema de ficheros está soportado, o lo que es lo mismo, si existe la tabla de funciones con las que manejarlo. Luego registrar estas funciones y enlazar el directorio al sistema de ficheros. Esto es más bien lo que hace la llamada al sistema mount, la cual es llamada mediante el comando del mismo nombre.

Los parametros necesarios para montar un sistema de ficheros son:

Ejemplo: Montar el cdrom en el directorio /dev/cdrom.

  mount -t <sistema de ficheros> <Dispositivo> <Directorio>
  mount -t iso9660 /dev/hdb /mnt/cdrom
Supongo que ya comprendereis el inconveniente de esto: Cada vez que se quiere acceder a un cdrom se ha de ejecutar el comando anterior, en vez de teclear d: (como en otros sistemas operativos). Pero la versatilidad y la flexibilidad que ofrece hace que no se tenga en cuenta ese inconveniente (como usuario accedo dentro de un directorio sin que me pase por la cabeza por ejemplo que ese fichero está al otro lado del planeta utilizando para ello el protocolo nfs).

Existen otras formas de reducir la línea de comandos, para ello (entre otras cosas) existe el fichero /etc/fstab. En él se indican los sistemas de ficheros sobre los que trabajamos normalmente: el sistema de ficheros en el que tenemos los directorios de linux, el /proc, la partición dos, el cdrom, y el floppy.

El fichero /etc/fstab funciona de la siguiente manera:

Partimos de un ejemplo de contenido de /etc/fstab:

  # <device> <mountpoint> <filesystemtype> <options>                        <dump> <fsckorder>

  /dev/hda2  /            ext2             defaults                            1       1
  /dev/hda3  /usr         ext2             defaults                            1       2
  /dev/sda1  /home        ext2             defaults                            1       2
  /dev/hdb   /mnt/cdrom   iso9660          user,noexec,nodev,nosuid,ro,noauto  0       0
  /dev/fd0   /mnt/floppy  vfat             user,noexec,nodev,nosuid,rw,noauto  0       0
  none       /proc        proc             defaults                            0       0
  /dev/hda4  swap         swap             defaults                            0       0
  /dev/hda1  /mnt/dos     vfat             exec,dev,suid,rw,auto               0       0                      
Con la información contenida en este fichero, el sistema haria lo siguiente al arrancar el sistema: Veamos la explicación de los parametros usados en /etc/fstab:

En la columna de dispositivo (device) se indica el dispositivo/partición a montar, en la punto de montaje (mountpoint) se indica el directoria mediante el cual vamos a acceder al sistema de archivos. En la columna de tipo de sistema de ficheros (filesystemtype) se indica el sistema de ficheros que se usara sobre el dispositivo.

Las opciones (options) significan lo siguiente:

El fichero /etc/fstab de nuestro ejemplo nos permitiría hacer lo siguiente para montar un disquete o CD-Rom:

  mount /mnt/cdrom 
  mount /mnt/floppy
Cuando dejamos de utilizar un sistema de ficheros, tenemos que darlo de baja (desmontarlo), para eliminar todas las referencias del kernel a él. El comando utilizado para esto es umount.

Para desmontar un sistema de ficheros/dispositivo:

  umount <directorio|dispositvo>
ej:
  umount /mnt/floppy  
  umount /dev/fd0 

NOTA: Es necesario ejecutar el comando umount cada vez que cambiemos un disquete, ya que no siempre cuando se escribe en un dispositivo, se realiza automáticamente un volcado al dispositivo (por eso se pueden perder datos si se apaga el ordenador a lo bruto). Además si cambiamos el disquete sin hacer umount, el kernel piensa que hay el sistema de ficheros anterior y cuando guarda alguna información lo hace con referencia al retirado, perdiéndose todo.

Este es un punto a tener en cuenta con el uso de disquetes, ya que, el mecanismo para retirar un disquete es mecánico, no existe posibilidad de impedir por medio de software que álguien saque un disquete de la disquetera. No ocurre lo mismo con el CD-Rom, ya que el sistema bloqueará la posibilidad de extraerlo cuando este montado.

7.6 ¿Cómo se crea un disquete de arranque para Linux?

Solo tenemos que ejecutar los siguientes comandos con un disquete vacío dentro de la disquetera:

  [sromero@localhost]$ /sbin/mke2fs /dev/fd0
  [sromero@localhost]$ [ -d /fd ] || mkdir /fd
  [sromero@localhost]$ mount /dev/fd0 /fd
  [sromero@localhost]$ cp /boot/boot.b /fd
  [sromero@localhost]$ cp /vmlinuz /fd
  [sromero@localhost]$ echo image=/fd/vmlinuz label=linux | /sbin/lilo -C - -b /dev/fd0 -i /fd/boot.b -c -m /fd/map
  [sromero@localhost]$ umount /fd
  [sromero@localhost]$ rmdir /fd
Lo que hacen estos comandos es:
  /sbin/mke2fs /dev/fd0    -> Formatea el disquete con formato ext2
  [ -d /fd ] || mkdir /fd  -> Si no existe el directorio /fd lo crea
  mount /dev/fd0 /fd       -> monta el disquete en dicho directorio.
  cp /boot/boot.b /fd
  cp /vmlinuz /fd          -> Copia el kernel de Linux y el archivo
                              de boot al disquete. Si nuestro kernel no
                              se llama vmlinuz (por ej bzImage o zImage)
                              o no está en el raíz debemos cambiar esto.
  echo image=...           -> Activa el kernel en el disquete.
  umount /fd               -> Desmontamos el disco
  rmdir /fd                -> Borramos el dir /fd
Si alguno de los paths o nombres cambia los deberemos cambiar dentro del diquete.

7.7 ¿Cómo se utilizan los empaquetadores-des/compresores?

Los ficheros tar no son ficheros comprimidos, sino empaquetados. Tar es un empaquetador, es decir, es algo parecido a un compresor como arj o zip, pero sin compresión. Se dedica a incluir todos los ficheros juntos en el mismo archivo, preservando las estructuras de directorios y permisos de los mismos. Como veremos, lo podremos comprimir gracias al programa GZip.

Hay 2 operaciones básicas con tar: empaquetado y desempaquetado. Si estamos en un directorio y queremos empaquetar todos los ficheros de este directorio y los que cuelgan de él, basta con ejecutar la orden:

  tar -cvf fichero.tar *

  c = compress  (más bien, empaquetar)
  v = verbose   (para que nos diga lo que hace)
  f = file      (empaquetar en un fichero)
  *             (empaquetar todos los ficheros, podría haber sido *.doc, etc.)
Si disponemos de un fichero .tar y queremos desempaquetarlo:
  tar -xvf fichero.tar
               
  x = eXtract   (desempaquetar).
También es posible listar los contenidos de un fichero .tar antes de desempaquetarlo, mediante la orden tar -tvf fichero.tar .

Por otra parte, el ficheros con extensión gz son ficheros comprimidos. A diferencia de arj o zip, el contenido de un fichero GZ es un solo fichero, es decir, cuando comprimimos fichero.txt con este compresor (llamado gzip) obtenemos un fichero.txt.gz de tamaño mucho menor. Con GZ no es posible empaquetar ficheros, es decir, la compresión se realiza a un sólo fichero.

Para comprimir un fichero con gz, se utiliza el comando:

  gzip fichero
Para descomprimirlo:
  gunzip fichero.gz
La combinación de tar y gz es lo que permite el tener multiples ficheros comprimidos en un sólo archivo. Es decir, si empaquetamos un directorio con tar y luego comprimimos ese archivo tar con gz, obtenemos un tar.gz comprimido con múltiples ficheros.

La compresión y descompresión es posible hacerla en 2 pasos (primero tar y luego usar gz) o bien usar el flag -z de tar para ello:

Compresión:

  tar -cvzf fichero.tar.gz *
Descompresion:
  tar -xvzf fichero.tar.gz
Otro formato que se ha puesto de moda es bzip2, con el mismo sistema de funcionamiento que Gzip, y cuyos nombres de ejecutable son bzip2 (comprimir) y bunzip2 (descomprimir). Este compresor obtiene mejor compresión que Gzip y su funcionamiento es igual de sencillo, aunque tarda mas en comprimir y utiliza mas recursos.

Estos compresores/descompresores/empaquetadores son una gran y libre alternativa a formatos comerciales como zip, arj y rar, también disponibles para Linux (comandos zip, unzip, rar y unarj).

Para descomprimir ficheros arj mediante unarj, simplemente hace falta ejecutar el comando unarj x fichero.arj. El compresor es shareware y se debe obtener en la Web de sus programadores.

Zip es el programa destinado a hacer Linux capaz de leer y escribir los ficheros en formato .zip (generados por pkzip o winzip): Para ello tenemos los comandos zip e unzip, que nos permitiran comprimir y descomprimir ficheros sueltos, directorios completos, directorios con recursividad, etc:

Para comprimir todos los ficheros de un directorio en un zip:

  zip fichero.zip *
Para comprimir este directorio y todos los que cuelguen del mismo:
  zip -r fichero.zip *
La descompresión se realiza mediante unzip:
  unzip fichero.zip
El programa rar también es un buen compresor que podemos encontrar en diferentes formatos (rpm, deb, tar.gz) en Internet. Su uso es identico a la versión MSDOS:

Comprimir:

  rar a fichero.rar *
Descomprimir:
  rar x fichero
Para más información sobre cualquiera de los des/compresores basta con consultar la página man del mismo, mediante "man comando".

7.8 ¿Cómo instalo, desinstalo o actualizo paquetes rpm?

Los paquetes rpm son archivos que llevan incluidos dentro de ellos todos los ficheros que componen un determinado programa. Internamente están comprimidos, pero nosotros sólo debemos pensar en ellos en términos de Instalación, Actualización, Borrado y Consultas. Dentro del rpm van los ficheros del programa a instalar, su descripcion, a que directorios van a ir instalados, scripts de auto-configuración en algunos casos, etc.

La sintaxis de rpm es rpm -acción nombre_del_paquete

Acciones:

  rpm -i  archivo   (instalar)
  rpm -e  paquete   (desinstalar)
  rpm -u  paquete   (actualizar)
  rpm -qi paquete   (pedir info)
Ejemplos:
  rpm -i  Par-1.50-1.i386.rpm
  rpm -e  Par
  rpm -u  Par
  rpm -qi Par
Supongamos el fichero programa-1.0.rpm que no tenemos instalado y que acabamos de bajar de Internet. Procedemos a su instalación:
  rpm -i programa-1.0.rpm
Tras eso el programa estará instalado en nuestro Linux y podremos ejecutarlo y usarlo normalmente. Tal vez nuestro problema es que no sabemos como se llama el ejecutable y los demás ficheros de configuración que le acompañan. Para solucionar eso hacemos una consulta (query) del paquete ya instalado:
  rpm -ql programa
La acción -ql significa "query list", y nos mostrará en pantalla la lista de ficheros instalados de este programa y sus directorios destinos. Si por ejemplo deseamos ver sólo los fichero sean instalados en los directorios bin (los ejecutables) podemos hacer uso de grep, la herramienta de Linux que sólo nos mostrará aquellas líneas que contengan una cadena determinada:
  rpm -ql programa | grep bin
Esto nos mostrará sólo los ficheros de "programa" que hayan sido instalados en directorios bin.

Si queremos saber que hace un paquete instalado, podemos verlo con la opción "query info" (-qi):

  rpm -qi programa
Como ejemplo, veamos la salida para el paquete fetchmail de Linux:
  Name        : fetchmail               Relocations: (not relocateable)
  Version     : 5.0.0                   Vendor: Red Hat Software
  Release     : 1
  Install date: dom 30 may 1999 16:00:12 CEST
  Group       : Applications/Internet
  Size        : 565413
  Packager    : Red Hat Software http://developer.redhat.com/bugzilla
  Summary     : A remote mail retrieval and forwarding utility.
  Description :
  Fetchmail is a remote mail retrieval and forwarding utility intended
  for use over on-demand TCP/IP links, like SLIP or PPP connections.
  Fetchmail supports every remote-mail protocol currently in use on the
  Internet (POP2, POP3, RPOP, APOP, KPOP, all IMAPs, ESMTP ETRN) for
  retrieval.  Then Fetchmail forwards the mail through SMTP, so you can
  read it through your normal mail client.
Si el programa no nos gusta, la deinstalación es muy sencilla:
  rpm -e programa
Obviamente, no tenemos porqué instalar los programas para ver su contenido o información. Los podremos ver antes de la instalación insertando un comando p antes de la acción:
  rpm -qpi fichero.rpm
  rpm -qpl fichero.rpm
Si queremos ver la lista de RPMs instalados disponemos del comando "query all" (-qa):
  rpm -qa
Para verlo en formato pausado, podemos usar una tubería:
  rpm -qa | less
Es posible que tras un tiempo obtengamos la versión 2.0 del programa que ya disponemos instalado. En esto caso hay 2 opciones: bien eliminar el programa anterior (-e) e instalar este nuevo (-i), o, simplemente, actualizar el programa a la versión 2.0 con el comando -U (de Update):
  rpm -U programa-2.0.rpm
Por último, si al tratar de instalar un paquete rpm aparece el siguiente error:
  Data type X not supprted
Esto es debido a que nuestra versión de rpm es muy antigua, al menos más que el rpm que estamos tratando de instalar, y que este tiene algún tipo de compresión o elemento que nuestro rpm no entiende. Bastará entonces con actualizar nuestro ejecutable del RPM.

Cabe decir que también existen front-ends al programa rpm, es decir, programas en modo gráfico (o texto) que realizan las acciones del programa RPM mediante pulsaciones nuestras del ratón. Es el front-end el que se encarga de pasarle a RPM los parámetros correctos para que se realice la acción pedida por el usuario. Entre estos programas tenemos glint, gnorpm, purp, kpackage, xrpm, etc.

7.9 ¿Cómo instalo paquetes .deb de debian?

Al igual que el formato RPM, los .DEB encapsulan todos los ficheros y scripts vinculados a un determinado programa pero para la distribución Debian. Además de disponer de herramientas de instalación como dselect, se incluye la posibilidad de instalación manual mediante las diferentes opciones del programa dpkg:

Instalación de paquetes deb:

  dpkg -i nombre_del_paquete.deb
Para hacer consultas:
  dpkg -s nombre_del_paquete (admite comodines)
Para desinstalar:
   
  dpkg -r nombre_del_paquete
El resto de opciones de dpkg puede verse con man dpkg.

7.10 ¿Cómo se convierten paquetes entre RPM, DEB y TGZ con alien?

Alien es un programa que permite convertir un paquete binario entre los formatos rpm (Redhat, Suse), deb (Debian) y tgz (Slackware):

Conversion a .DEB:

 
  alien --to-deb paquete.elquesea
Conversion a .RPM:
 
  alien --to-rpm paquete.elquesea
Conversion a .TGZ:
 
  alien --to-tgz paquete.elquesea
Existen otros flags (como -i) que permiten directamente tras la conversión realizar la instalación del paquete generado. Alien realiza la conversión descomprimiendo el paquete original y generando el nuevo paquete, diciéndonos el lugar del árbol de directorios donde dejará el paquete recién generado, según la distribución (por ejemplo, en Redhat en /usr/src/redhat/RPMS/).

7.11 ¿Cómo instalo un nuevo programa?

En esta sección consideraremos las posibilidad de instalar un nuevo programa en nuestro sistema linux.

La oferta de programas en linux y los formatos de paquete

En la red podemos encontrar una enorme cantidad de software para linux el cual podemos encontrarlo como archivos en código fuente, que han de compilarse antes de su instalación, o en formato binario, listos para ser instalados. En formato binario encontraremos los paquetes que instalan las diversas distribuciones linux y -evidentemente- el software comercial: no iban a desvelar su código fuente ;-))!.

La idea fundamental que justifica la necesidad de paquetes de software para linux estriba en que:

Existen varios sistemas o formatos de paquetes, que fueron establecidos por ciertas distribuciones de linux y que merecen discutirse separadamente: el sistema de paquetes Debian, RedHat y Slackware

El sistema de paquetes Debian

Este sistema fue el primero en aparecer, exclusivo de Debian y muy potente: su sistema de dependencias es el más completo y flexible que existe. Lo usa la propia Debian y Corel Linux. Los paquetes debian tienen la extensión .deb y la herramienta de gestión de dichos paketes es dpkg. Una descripción mínima de las posibilidades de dpkg se indica a continuación

Instalación

-i|--install

   dpkg -i < nombre del paquete.deb > ; por ejemplo:

   dpkg -i icewm_0.8.12-1.deb

Si deseamos instalar toda una seie de paquetes que se encuentran en un directorio determinado, por ejemplo, /usr/local/Debian/archive, es posible hacerlo de manera recurrente con la opción -R:

    dpkg -i -R /usr/local/Debian/archive

sin embargo, esta opción puede no ir bien a causa de posibles dependencias entre paquetes ya que dpkg los va instalando conforme los encuentra, y ese quizás no sea el orden requerido para las dependencias. Mejor es entonces hacer la instalación en dos etapas con las opciones --unpack y --configure:

   dpkg --unpack /usr/local/Debian/archive

desempaqueta todos los ficheros .deb del directorio. Si solamente queremos configurar algunos de ellos, haremos entonces

   dpkg --configure < nombre del paquete >

pero si queremos instalar todos los paquetes desempaquetados del directorio haremos:

   dpkg --pending

o de manera más corta,

   dpkg -a

Actualización

Para actualizar se usa la misma opción -i que en la instalación. Si por ejemplo tenemos instalado el paquete icewm_0.8.11-1.deb y hacemos

   dpkg -i icewm_0.8.12-1.deb

en lugar de instalarse separadamente actualiza el sistema a esta última versión.

Desinstalación

-r|--remove

Esta opción borra un paquete determinado, pero no borra los ficheros de configuración. Esto puede interesarnos cuando pensemos reinstalar el paquete en el futuro, pues ya dispondríamos de los ficheros de configuración. Así si queremos eliminar el paquete icewm_0.8.12-1.deb que tenemos instalado dejando sus ficheros de configuración haremos

   dpkg -r icewm

NOTA: nótese que sólamente hay que escribir el cabecero del paquete, no su versión ni su extensión.

--purge

En este caso el paquete se borra junto con todos sus ficheros de configuración asociados. El paquete queda completamente erradicado del sistema:

   dpkg --purge icewm

Consultas

Existe una utilidad que funciona como interfaz de usuario para la gestión de paquetes debian llamada dselect, que nos sirve cuando hay que navegar entre la multitud de paquetes de un CD debian o en los directorios remotos mediante ftp. Pero aunque se trata de una herramienta poderosa en manos del usuario medio y avanzado, es muy temida por el neófito habida cuenta de su poco intuitivo manejo. Para evitar esta reacción del usuario novel, los desarrolladores de Debian han creado la utilidad apt, que en la nueva liberación Debian 2.2 debería encontrarse plenamente activa junto con un propio front-end. Mientras tanto los novicios har=EDan bien en consultar el manual de dselect para novatos http://www.debian.org/releases/stable/i386/dselect-beginner.html.

El sistema de paquetes RedHat

El formato de paquetes diseñado por RedHat, lo usan además todas las distribuciones basadas en él como Caldera Openlinux, Mandrake, Esware, Hispafuentes y también SuSE, aunque esta última no se trata de una "emanación" de RedHat. La extensión de los paquetes es .rpm y la herramienta de gestión de paquetes se llama también rpm, cuyas posibilidades se muestran a continuación:

Instalación

-i

   rpm -i nombre_del_paquete.rpm; por ejemplo:
   dpkg -i wget-1.4.5-2.rpm

Sin embargo, el paquete solamente se instalará si se han satisfecho las posibles dependencias con otros paquetes. Es posible forzar la instalación rechazada a causa de dependencia con otros paquetes usando la opción -nodeps, pero no es aconsejable.

Actualización

-U

   rpm -i nombre_del_paquete_actualizado.rpm
   rpm -U wget-1.5.3-1.rpm

de este modo se desinstala el paquete obsoleto wget-1.4.5-2 y se instala la nueva versión wget-1.5.3-1. Si el programa rpm encuentra un fichero de configuración que no ha sido cambiado por el administrador hasta el momento de la actualización, sobreescribe el nuevo fichero de configuración en él, pero si encuentra el fichero de configuración modificado por el administrador, entonces salva el fichero de configuración antiguo con la extensión .rpmorig y lo reemplaza por el nuevo.

Desinstalación

-e

   rpm -e nombre_del_paquete
   rpm -e wget

NOTA: Nótese que sólamente hay que escribir el cabecero del paquete, no su versión ni su extensión.

Consultas

Para realizar una consulta disponemos de la orden

   rpm -q [parámetros] [opciones] [nombre del paquete]

Antaño (hasta la versión de RedHat 5.2), había una herramienta estupenda para la gestión de paquetes rpm mediante interfaz gráfica de usuario: se llamaba glint, y fue muy aplaudido por los neófitos y administradores por su facilidad para manipular los paquetes. Hoy día ya no disponemos de él, pero si se utilizan Escritorios como KDE o GNOME, podemos usar sus utilidades kpackage o gnorpm, respectivamente.

El sistema de paquetes de Slackware

En cuanto al "sistema de paquetes .tgz" de Slackware, hay cierta distancia con respecto a los ya vistos y es que no hace comprobación de dependencias, labor que corresponde al usuario o administrador. El sistema de paquetes sirve fundamentalmente para instalar o desinstalar de manera rápida los paquetes. La ventaja de esta estrategia es que los usuarios de Slackware pueden instalar los paquetes inmediatamente sin esperar a que pasen el filtro de las dependencias. Por ello, Slackware es una distribución orientada a usuarios algo avanzado, con una idea diáfana de lo que necesitan. El sistema de paquetes de Slackware utiliza ficheros tar comprimidos, tar.gz o tgz, existiendo un programa interactivo para gestionarlos llamado pkgtool. Pero también dispone de utilidades en línea de comando para manejar los paquetes.

installpkg

Escribiendo

   installpkg [ opciones ] archivo.tgz
instalamos el paquete en Slackware. Las opciones son:

removepkg

Escribiendo

   removepkg [ opciones ] archivo.tgz
desinstalamos el paquete del sistema completamente, eliminando además los scripts, librerías, ficheros y directorios anejos. Las opciones son:

upgradepkg

Esta utilidad permite actualizar un paquete instalado con otro especificado. Si tienen el mismo nombre, basta con hacer:

upgradepkg packagename, pero si el nombre es distinto hay que escribir: upgradepkg oldpackagename % newpackagename.

Otros gestores y conversión de paquetes

Las opciones: Midnight Commander y FileRunner

Existen dos herramientas que pueden ayudarnos a instalar paquetes .rpm, .deb o.tgz, mediante el uso del llamado sistema virtual de ficheros. Se trata del Midnight Commander (MC) y de FileRunner (FR). Estas herramientas permiten acceder al contenido de los paquetes como si fueran directorios, explorando su interior, y vislumbrando los archivos presentes. El conocido MC, se encuentra ya integrado en GNOME y puede descargarse desde http://www.gnome.dk/mc/index.html. El FR es otra fantástica utilidad desarrollada en tcl/tk que puede conseguirse en http://www.cd.chalmers.se/~hch/filerunner.html.

El octavo pasajero

Sí, a veces, dada la inexistencia de un sistema estándar de paquetes hay utilidades que los desarrolladores de un sistema han producido y preparado y que no encontramos en una determinada distribución. Así, puede haber un archivo .rpm que no existe como .deb o .tgz. En estos casos existe una herramienta inestimable que permite convertir unos paquetes en otros: Alien.

Alien, creado por Giovanni Quadriglio no debería utilizarse intentando reemplazar paquetes importantes del sistema, como las bibliotecas compartidas, el sistema de inicio (sistemv o BSD), etc, que son esenciales para el funcionamiento del mismo. Por otra parte, no se elabora del mismo modo un paquete para Debian que para RedHat. Más aún! Puede haber diferencias en los paquetes .rpm dependiendo que sean de Caldera, SuSE o RedHat; así que Tened cuidado ahí fuera! ;-).

Alien puede descargarse de http://kitenet.net/programs/alien, en cualquiera de los formatos conocidos. Para usar alien se necesitan otras utilidades. La primera, ya que alien está escrito en perl, será disponer de perl instalado. Para la versión actual de alien (6.99) nos bastará perl 5.004. Para convertir paquetes a rpm o desde rpm, necesitaremos tener instalado el RedHat Package Manager; para el caso de deb, necesitamos dpkg, dpkg-deb, debmake, gcc y make. Todos estos archivos "extra" que nos harán falta para las múltiples posibilidades de alien pueden descargarse de ftp//ykbsb2.yk.psu.edu.pub/alien/ como un paquete llamado "alien-extra", en cualquier formato de paquete. Las fundamentales acciones conversoras de alien podemos extraerlas del man:

   alien [ opciones ] paquete a convertir
Las opciones son -d para transformar cualquier formato a .deb (por defecto), -r para convertir a .rpm y -t para pasar a .tgz (también es posible pasar a .slp de Stampede con --to-slp).

Instalando a las bravas

A menudo, especialmente en el caso de la programación libre de código abierto (free software, source code), se dispone del código original (fuente), que generalmente se suministra en forma de un archivo "empaquetado" que contiene "pegados" todos los ficheros y directorios que nos harán falta y que muy a menudo se encuentra además comprimido, para reducir el tamaño del mismo. Para empaquetar ficheros y directorios en un único archivo se usa el programa tar (produciendo un archivo .tar) y para comprimirlo se usan las utilidades compress, gzip o bzip2 (dando lugar a los archivos .z o .Z, .gz y .bz2, respectivamente). De este modo, podemos encontrar nuestros archivos fuente como .tar únicamente en el caso de programas no muy grandes, pues si no hay que comprimirlos para que la gente los descargue con mayor facilidad o quepan más archivos en un medio de almacenamiento como un CDrom. Por eso es más frecuente encontralos con el formato .tar.Z, .tar.gz (también escritos como .tgz y conocidos familiarmente como "tarballs") o .tar.bz2. Una vez que hemos descargado alguno de estos archivos o lo hemos copiado a nuestro disco duro desde un CDrom ó un floppy, habremos de descomprimirlos/desempaquetarlos en un directorio para proceder a su instalación.

En los siguientes epígrafes vamos a considerar los pasos que hay que dar para instalar felizmente la aplicación escogida.

Ubicación de los archivos fuente

Normalmente el código fuente de los programas se sitúan en /usr/local/src. Para que cualquier usuario ubique ahí sus propios directorios el administrador debe otorgar los siguientes permisos (como al /tmp):

   chmod 1777 /usr/local/src

De este modo todos los usuarios pueden poner archivos ahí, pero solamente los propietarios pueden borrar sus ficheros. No obstante, en otros casos, únicamente es el administrador el que se encarga de la selección e instalación del software y entonces los permisos deben ser 755 propietario root y grupo root.

Descompresión y desempaquetado simultáneo con tar

La utilidad tar nos permite descomprimir (caso que sea necesario) y desempaquetar los archivos. Dependiendo del formato del archivo se utilizará una u otra opción. Recomiendo que hagais man tar para ver el variado plumaje de sus opciones. Las más usuales son:

De este modo podemos efectuar las siguientes acciones:

   tar xvf archivo.tar

   tar zxvf archivo.tar.Z
   
   tar zxvf archivo.tar.gz (ó tgz)
 
   tar yxvf archivo.tar.bz2

No obstante, antes de proceder a la descompresión/desempaquetado del archivo fuente es de recibo hacer un tar tzf al archivo fuente para ver si los ficheros se expanden dentro de un subdirectorio o directamente en /usr/local/src. En este último caso (algo raro), se debe crear un subdirectorio en /usr/local/src copiar el fichero tar a este subdirectorio y proceder a desempaquetarlo.

NOTA: Este último caso no es muy común, pero se dan algunos casos en los que el creador del fichero tar, queriendo o sin querer, comete el fallo de no empaquetar los ficheros dentro de su propio directorio. Esto a sido causa de que a más de uno de nosotros se nos haya llenado p.ej. el directorio /usr/local/src de un monton de "basura" y que hayamos pasado un "ratito" limpiando dicho directorio.

Instalación

Una vez que hemos descomprimido y desempaquetado ficheros y directorios, debemos buscar y leer cuidadosamente los archivos README e INSTALL, donde se nos indicará paso a paso como habrá de hacerse la instalación. En muchos casos se nos advierte de que hay que modificar el Makefile o escoger algunos directorios determinados para la ruta de bibliotecas ó de ciertos ejecutables o hacer algún enlace simbólico o copiar algún archivo en un directorio dado. De cualquier forma, lo más común es ejecutar lo siguiente.

./configure

: Este programa analiza la configuración del sistema y genera un archivo Makefile. Dicho archivo indica los pasos que el programa make ha de seguir para compilar la aplicación. En algunos casos no hay archivo configure y hemos de editar nosotros el Makefile o el config.h para establecer las opciones que nos interesen. No está de más echar un vistazo de todas maneras. Una vez realizado este primer paso debemos ejecutar

make

: Este programa invoca al compilador siguiendo las instrucciones del fichero Makefile. Algunas veces habrá que hacer make all o make nombre_del_programa, como indique el archivo README o INSTALL. Mientras se compila, aparecen en la pantalla mensajes indicadores de las tareas que se están realizando. Pueden aparecer muchos warnings, pero pueden ignorarse, ya que no darán problemas. La compilación habrá terminado con éxito si no se detiene con algún mensaje de Error. De este modo se habrá creado el fichero ejecutable. Para instalarlo convenientemente ejecutaremos el comando su para transformarnos en superusuario y entonces escribiremos

make install

: Generalmente el ejecutable se copia a /usr/local/bin, las bibliotecas en /usr/local/lib y la página de manual en /usr/local/man. Si queremos que se copien en otro directorio hay que cambiar la línea correspondientes en el Makefile o hacer ./configure --prefix=/directorio_de_instalación. En otros casos, no hay que hacer make install y copiamos a mano los archivos a los correspondientes directorios o hacemos un enlace simbólico a los mismos. Existen otras opciones que pueden realizarse después como make clean, etc, que vendrán indicadas en el fichero README o INSTALL.

NOTA: Este proceso que puede parecer muy complicado al principio, no lo es tanto cuando lo hayas hecho unas cuantas veces. Lo importante es leerse detenidamente los ficheros README o INSTALL que vengan con el programa.

7.12 ¿Cómo se cambian los permisos de ficheros y directorios?

Lo primero que hay que decir es que para conseguir toda la información sobre los comandos involucrados en el tema de permisos podeis consultar man chmod, man chown y man chgrp

Información de un fichero/directorio

Cuando obtienes información sobre un fichero/directorio, existen diferentes campos que te dicen que clase de permisos el fichero/directorio tiene.

  Ej:

  [user@localhost]# ls -l
  -rwxr-x---   1 pepito depart1     4348 Nov 24 16:19 test
En la primera columna se pueden ver una serie de letras -rwxr-x---, estas letras nos dicen quien en el sistema, y que clases de permisos tiene el fichero test.

Estas letras están agrupadas en tres grupos con tres posiciones cada uno, más una primera posición que nos dice de que clase de archivo se trata (los mas normales (d) directorios, o (-) archivos de datos). En nuestro ejemplo la primera posición es (-) con lo cual el archivo test, es un archivo de datos (binario/ejecutable en este ejemplo).

El primer grupo de tres (rwx en nuestro caso) nos dice que clase de permisos tiene el dueño del fichero (u)(user/owner)).
El segundo grupo de tres (r-x en nuestro caso) nos dice que clase de permisos tiene el grupo del fichero (g)(group).
Y el último grupo de tres (--- en nuestro caso) nos dice que clase de permisos tienen todos los demás usuarios del sistema sobre este fichero(o)(others).

  r :significa permiso para leer 
  w :significa permiso para escribir  
  x :significa permiso para ejecutar  

La segunda columna pepito, nos dice quien es el dueño del fichero,(pepito en este caso).
La tercera columna depart1, nos dice cual es el grupo del fichero (depart1 en este caso).
La cuarta columna 4348, nos dice el tamaño del fichero.
La quinta columna Nov 24 16:19, nos dice cual es la fecha y hora de la última modificación.
La sexta columna test, nos dice cual es el nombre del fichero/directorio.

Asi pues, el fichero test de nuestro ejemplo tiene los siguientes permisos:

Como cambiar los permisos/dueño/grupo de un fichero/directorio?:

Para cambiar el dueño del fichero: chown usuario fichero
Para cambiar el grupo del fichero: chgrp grupo fichero
Para cambiar los permisos se utiliza el comando: chmod permisos fichero

Los permisos se pueden especificar de diferentes maneras, una serie de ejemplos, es lo mejor para comprenderlo:

  chmod ugo+rwx test (da permisos rwx a todos, user,group,others)
  chmod ugo-x test (quita permiso x (ejecucion) a todos, user,group,others) 
  chmod o-rwx test (quita permisos rwx a others) 
  chmod u=rwx,g=rx test (da permisos rwx a user, rx a group y ninguno a others) 
Asi podriamos continuar con todas las posibles combinaciones de letras, es cuestión de usar la imaginación ;-)

Existe otro metodo que utiliza numeros, en vez de letras para asignar permisos, la siguiente tabla nos puede ayudar un poco a comprender esta manera:

  r w x  VALOR DECIMAL

  0 0 0  0 (000 binario es 0 en decimal)
  0 0 1  1  .........
  0 1 0  2  .........
  0 1 1  3  .........
  1 0 0  4 (100 binario es 4 en decimal)
  1 0 1  5  .........
  1 1 0  6  .........
  1 1 1  7 (111 binario es 7 en decimal)

1 significa activado y 0 desactivado, o sea 101 activa r y x, y desactiva w.

Sabiendo esto solo tenemos que usar el valor decimal, un ejemplo aclarara esto.

  chmod 750 test 

  da permisos rwx al usuario (7=111)  
  da permisos r-x al grupo (5=101)  
  da permisos --- a los demas (0=000)  

7.13 ¿Cómo apago mi equipo?

Para apagar el equipo tienes que hacerte superusuario y hacer:

  [asimovI@localdomain root]#  shutdown -t3 -h now 

Esto pararía todos los procesos en curso, haría sync, entraría en el runlevel 0, y desmontaría todas las particiones. El proceso de parada llegaría cuando se observa system halted, y si la fuente lo permite y se compiló el kernel con esa opción, el ordenador se apaga automaticamente sin necesidad de pulsar el botón de apagado.

La opción h viene de halt (parar), y hace que se mantenga parado después de todo el proceso de apagado. La opción now indica que lo haga ahora, esta opción se puede sustituir por un número que define los minutos a esperar antes de realizar el shutdown.

Para reiniciar el equipo tienes que hacerte superusuario y hacer:

  [asimovI@localdomain root]#  shutdown -t3 -r now  
Pues como habías imaginado hace lo mismo que la anterior pero en vez de ponerse en system halted se pone en system reboot y reinicia.

Existe otro método que consiste el accionar tres teclas, sí, esas que tanto hay que usar en otros sistemas operativos, las CAS (Ctrl+Alt+Supr), en una de las consolas de texto del sistema. Estas tres letras se configuran en el proceso de arranque de Linux, cuando se lee /etc/inittab existe una entrada que asocia estas tres teclas al comando shutdown

  # Trap CTRL-ALT-DELETE
  ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Un consejo:

En los métodos anteriores es necesario ser superusuario ya que el comando shutdown lo requiere. Cosa lógica ya que sino cualquier usuario de la máquina la podría echar abajo. Esto hace bastante incómodo el apagarlo, por lo que un consejo práctico es editar /etc/inittab y cambiar la -r por la -h del comando que se une a las CAS, esto asociará el apagar el sistema a las tres teclas y no al reiniciarlo. Con esto ya no es necesario hacerse superusuario, sino estar sentado delante del ordenador a apagar.

Nota: En los kerneles 2.2.x hay que modificar una línea en el /etc/rc.d/*halt. En dónde llame al halt, hay que añadirle la opción -p. Si no lo que hace es reboot.

8. USB

8.1 USB ratón-teclado

Esta sección está fuertemente basada en el capítulo 2 del documento The Linux USB sub-system y me centro en el ratón y teclado, supongo que el resto de componentes no debiera tener ningún problema añadido (exceptuando dispositivos de puerto pararelo).

Se supone que se trabaja con el kernel 2.2.16 (es en el que probó el autor, aunque debiera de funcionar con el 2.2.14).

¿Cómo puedo saber si mi adaptador USB es OHCI o UHCI ?

Si tu placa madre usa chipsets Intel, PIIX4, VIA,... el adaptador USB es UHCI, y si usa Compaq, iMacs, OPTi, Sis,Ali,... el adaptador USB es OHCI. En caso de no conocer que chipsets tiene tu ordenador hay dos opciones: lo abres y/o (lo más cómodo) y suponiendo que tengas un kernel compilado con la entrada /proc/pci activada, puedes hacer un cat /proc/pci, si la entrada USB es de la forma 0xHHHH (16 bits) es UHCI, si es 0xHH000000 (32 bits) entonces es OHCI.

No me aparecen las opciones de compilación de USB en el kernel 2.2.16

Los drivers de USB están en contínuo desarrollo y se arreglan muchos bugs de una versión a otra, al igual que se añaden muchas características nuevas. Actualmente, el desarrollo de USB se centra para la serie de kerneles 2.4 y los que vienen de serie con el 2.2.x están muy anticuados. Para ello hay un backport de los drivers USB de la seria 2.4 al 2.2.16. Estos funcionarán con los dispositivos soportados a excepción de los que usen el puerto paralelo, por necesitar éstos del driver partport que sufrió muchas modificaciones.

Entonces lo que tendremos que hacer es descargar el parche de http://www.suse.cz/development/usb-backport/usb-2.4.0-test2-pre2-for-2.2.16-v3.diff.gz y aplicarlo al árbol de fuentes del kernel 2.2.16 mediante los comandos:

   [22:55:17 asimov@asimovi download]$ cd /usr/src/linux-2.2.16/
   [22:55:17 asimov@asimovi download]$ gzip -dc /tmp/usb-2.4.0-test2-pre2-for-2.2.16-v3.diff.gz|patch -p1

Ahora ya podremos hacer un make xconfig o un make menuconfig, el make config se lo dejo a los arriesgados o a los que no tienen más remedio (aunque si se tiene usb, se tiene máquina suficiente ;-).

¿Qué opciones marco?

La primera opción a seleccionar es la de Support USB (recomiento la opción como módulo), y la opción Preliminary USB device filesystem para la opción de /proc/usb, a continuación si se sabe ya si es OHCI o UHCI pues seleciona UHCI (Intel PIIX4, VIA, ...) ó ohci-hcd (Compaq, iMacs,OPTi, SiS, ALi,...) aunque si se va a utilizar el script de este howto, mejor seleccionar los dos (siempre como módulo).

Necesitarás marcar qué dispositivos quieres usar:

¿Dónde está el dispositivo del ratón, y cómo le digo a las X donde está?

El dispositivo de un PS/2 es el /dev/psaux, el de uno serie es el /dev/ttySx, en realidad da igual el nombre, lo importante son los números mágicos mayores y menores. En el script que se adjunta más abajo, crea el directorio /dev/input/ y en él dispositivo con mknod /dev/input/mice c 13 63.

Para utilizar el ratón USB con las X, hay que editar el fichero /etc/X11/XF86Config

Versión

XFree86>=4.0

   Section "InputDevice"
             Identifier "Ratón USB"
             Driver "mouse"
             Option "Protocol" "IMPS/2"
             Option "Device" "/dev/input/mice"
             Option "ZAxisMapping" "4 5"
EndSection
Y en la seccion ServerLayout:
             InputDevice "Ratón USB" "CorePointer"
Versión

XFree86 3.3x

   Section "Pointer"
             Protocol "IMPS/2"
             Device "/dev/input/mice"
             ZAxisMapping 4 5
EndSection

¿Como cargo los módulos compilados y como monto el sistema de ficheros /proc/usb?

Yo cogí el fichero que viene en la Mandrake 7.1, y lo modifiqué un poco, ya que éste viene para cargar los módulos antiguos, y modifiqué tambien la detección de si es UHCI o OHCI. Aquí está:

#!/bin/sh
if [ ! -f /etc/conf.modules -o ! -f /etc/sysconfig/usb ];then
        echo "No existe /etc/sysconfig/usb";
        exit 1;
fi
. /etc/rc.d/init.d/functions
. /etc/sysconfig/usb
#Esta función mete el alias correspondiente en /etc/conf.modules
function sed_usb_interface () {
        local module
        module=$1
        #echo "alias usb-interface $module"
        echo "alias usb-interface $module">>/etc/conf.modules
        touch /lib/modules/$(uname -r)/modules.dep
}
#Esta funcion detecta el tipo de interfaz usb que tenemos (uhci_t o ohci_t)
function probe_usb_interface () {
        local t pci_f uhci_t ohci_t
        if ! grep -q "USB" /proc/pci  ;then
        return 1;
        fi
        if [ $(cat /proc/pci |sed -n '/USB/,$p'|sed -n '3p'|awk  '{print $3;}'|wc -c|sed -e 's/\ *//') -gt 7 ];then 
                sed_usb_interface usb-ohci      
                return 0;
        else    
                sed_usb_interface usb-uhci      
                return 0;
        fi
}       
 
function get_usb_interface () {
        if ! grep -q "^alias usb-interface" /etc/conf.modules; then
                echo -n "Detectando interfaz USB    "
                if ! probe_usb_interface; then
                        echo_failure;
                        echo
                        exit 1;
                else
                        echo_success
                        echo
                fi
        fi
}
 
function mount_proc_usb () {
        if grep -q usbdevfs /proc/filesystems; then
                if ! grep -q /proc/bus/usb /proc/mounts; then
                        action "Montando sistema de ficheros USB" mount -t usbdevfs /proc/bus/usb /proc/bus/usb
                fi
        fi              
}
 
function umount_proc_usb () {
        if grep -q usbdevfs /proc/filesystems;then
                if grep -q /proc/bus/usb /proc/mounts;then
                        action "Desmontando sistema de ficheros USB" umount /proc/bus/usb
                fi
        fi
}
 
 
################################################
#           Main                               #
################################################
 
PKLVL=`sed -e 's/^\(.\).*/\1/'</proc/sys/kernel/printk`
case $1 in
        start)
        get_usb_interface;
        sysctl -w kernel.printk=0
        action "Cargando interfaz USB" /sbin/modprobe usb-interface
        if [ "$MOUSE" = "yes" ];then
                sleep 2
                if [ ! -d /dev/input ];then
                        mkdir /dev/input
                fi
                if [ ! -c /dev/input/mice ];then
                        mknod /dev/input/mice c 13 63
                fi
                action "Cargando ratón USB" /sbin/modprobe input && /sbin/modprobe hid && /sbin/modprobe mousedev
        fi
        if [ "$KEYBOARD" = "yes" ];then
                sleep 2
                action "Cargando teclado USB" /sbin/modprobe input && /sbin/modprobe hid && /sbin/modprobe keybdev
        fi
        sleep 1 && sysctl -w kernel.printk=$PKLVL
        mount_proc_usb;
        ;;
        stop)
        sysctl -w kernel.printk=0
        if [ "$MOUSE" = "yes" ];then
                action "Descargando ratón USB" /sbin/modprobe -r mousedev && /sbin/modprobe -r hid && /sbin/modprobe -r input 
    fi
    if [ "$KEYBOARD" = "yes" ];then
                action "Descargando teclado USB" /sbin/modprobe -r keybdev && /sbin/modprobe -r hid && /sbin/modprobe -r input 
    fi
    action "Descargando interfaz Usb" /sbin/modprobe -r usb-interface
    sleep 1 && sysctl -w kernel.printk=$PKLVL
    ;;
    status)
    if fgrep -q usbcore /proc/modules; then
            echo "USB Cargado."
    else 
            echo "USB no cargado."
    fi  
    exit 0
    ;;
    restart)
    $0 stop
    $0 start
    ;;
    *)
    echo "Uso: $(basename $0) start|stop|restart|status"
    exit 0
    ;;
esac
exit 0
 

Este archivo se puede meter en /etc/rc.d/init.d/usb, y hacerle un enlace desde el nivel de ejecución, bien sea a mano, o mediante el ksysv o cualquier otro editor de niveles de arraque. Este fichero funcionará en redhat y derivadas. Para que funcione en el resto hay que eliminar la línea . /etc/rc.d/init.d/functions y sustituir la expresión action <cadena> por echo <cadena>';'.

El fichero supone que existe el fichero /etc/sysconfig/usb, en el que estarán las claves MOUSE y KERYBOARD, con yes o cualquier otra cosa.

Básicamente los módulos a cargar son:

usbcore.o, usb-uhci.o o usb-ohci.o, input.o, hid.o, y mousedev.o y/o keybdev.o

Direcciones de interés

http://www.linux-usb.org.

Aquí está todo lo que se necesita (para qué se quiere más).

9. Internet / Modems

9.1 ¿Qué es un modem? ¿Y un puerto serie?

¿Por qué los modems están normalmente asociados a puertos serie? Lo impone el hecho que cuando uno usa un modem, la línea telefónica a la que está conectado sólo tiene un cable por el que enviar la información. Para transmitir simultáneamente los 8 bits de los que consta un byte, que es la unidad de información usual en los ordenadores, harían falta 8 cables (8 líneas telefonicas). Una solución alternativa es enviar los 8 bits sucesivamente uno detrás del otro a intervalos de tiempo regulares. Precisamente esto es lo que hace un puerto serie.

El corazón del puerto serie es un chip del ordenador llamado UART (Receptor-Transmisor Asíncrono Universal) el cual se encarga de todo el trabajo, tanto para recibir datos como para enviarlos. Así, la potencia de dicha UART y lo bien configurada que esté influirán en la calidad de la comunicación.

El flujo de bits generado por la UART/puerto serie no puede introducirse directamente en la línea telefónica al no estar preparada para ello. La solución es utilizar un aparato intermedio que tome los bits que llegan del puerto serie y emita un tono u otro por la línea telefónica según le llegue un bit 0 o un 1. Esto es lo que se conoce como "modular una señal". Al otro lado del hilo telefónico otro aparato similar interpretaría estos tonos y generaría unos o ceros en función del tono recibido. Éste sería el paso opuesto, "demodular la señal". Como normalmente se deseará enviar y recibir, el aparato intermedio deberá realizar ambas funciones: MOdular y DEModular (MO-DEM). Así funcionaban los modems antiguos. Los modernos se basan en los mismos principios aunque son infinitamente más versátiles y potentes.

Los modems modernos realizan la modulación y demodulación utilizando chips especiales llamados DSP (Procesadores Digitales de Señales en castellano). Son como microprocesadores, pero muy rápidos y optimizados para tratamiento de señales. Los modems modernos también incorporan sistemas de compresión de datos que aceleran las transferencias, sistemas de corrección de errores, cambios automáticos de velocidad de transferencia si la calidad de la señal mejora o empeora, etc...

Existen dos clases de modems: Los internos y los externos. Los externos van conectados a un puerto serie del ordenador por lo que simplemente se limitan a las funciones descritas de modulación-demodulación, compresión, correción, etc. Los modems internos "de verdad", al no ir conectados a un puerto serie incorporan una UART como las de dichos puertos serie, de forma que a ojos del ordenador se trata de un puerto serie más.

9.2 Entonces, ¿Qué es un winmodem, modem HSP o modem software ? ¿Funcionan los winmodem en Linux ? ¿Y los modems PCI?

Son modems internos "capados". Los fabricantes les quitan chips para que sean más baratos. Por ejemplo, algunos no tienen UART, a otros les quitan los protocolos de compresión, etc. Para que tengan las mismas funciones que los modems "de verdad", las funciones correspondientes a los chips retirados las tienen que realizar drivers del sistema operativo, o sea el microprocesador del ordenador.

Los fabricantes de los distintos modems sólo ofrecen drivers para Windows y no dan especificaciones de como se programan, y así desarrollar versiones para Linux. Por tanto estos modems no funcionan en Linux.

NOTA: Ya existe un proyecto para soportar estos modems en linux. No están todos soportados pero si muchos de ellos. En http://www.linmodems.org/ existe informacion detallada sobre este proyecto.

Al contrario que hace un tiempo, ya existen en el mercado modems PCI totalmente soportados y que son modems "de verdad". asi que el tener un modem PCI no es sinónimo de problemas actualmente. En esta página http://www.o2.net/~gromitkc/winmodem_es.html teneis más informacion sobre los winmodems.

9.3 ¿Cómo se configura el puerto serie ?

La primera pregunta sería: ¿ Debo configurar mis puertos serie ?

En general, sólo deberás configurar los puertos serie en estos casos:

Si no cumples ninguna de estas condiciones, puedes ignorar el resto de la sección.

Un puerto serie (más exactamente, la UART del puerto serie) usa un rango de direcciones de entrada-salida y una solicitud de interrupción para comunicarse con el sistema operativo. Para el correcto funcionamiento del ordenador y del sistema operativo, ningún otro dispositivo del ordenador puede usar alguno de esos valores. Nuestro objetivo será conseguir esto, y en segundo lugar, hacer que el sistema operativo atienda a ese rango de entrada-salida y esa interrupción para comunicarse con el modem.

Tradicionalmente la elección del rango de entrada-salida y la interrupción se realizaba a través de una serie de microinterruptores manuales situados en el modem. Conocida la posición de estos interruptores, se configuraba el sistema operativo para que usara esos valores. Hoy en día casi la totalidad de los modems internos son Plug'n'Play, lo cual significa que el sistema operativo puede, por software, decirle a la tarjeta qué valores debe usar.

Configuración de modems Plug'n'Play en Linux

Si tienes un modem Plug'n'Play, lo primero que habrá que hacer es decirle que rango de entrada-salida y que interrupción debe usar. Lo más cómodo en este caso es usar los mismos valores que Windows 95. Para ello arranca Windows 95, y haz Inicio->Configuración->Panel de control. Una vez en el Panel de control, elige el icono 'Sistema' y dentro de él, el 'Administrador de dispositivos'. Dentro del apartado 'Puertos COM y LPT' elige el correspondiente al puerto COM donde tienes el modem. Busca en 'Recursos' el rango de entrada-salida y la interrupción que use y apúntalos.

Con esos valores en la mano, puedes configurar tu modem Plug'n'Play en Linux. Eso se hace con el programa 'isapnp'. Entra en Linux y busca si tienes un archivo llamado /etc/isapnp.conf. Si no lo tienes haz lo siguiente:

  pnpdump > /etc/isapnp.conf
Esto generará el esqueleto de un archivo de configuración para 'isapnp'. Este programa generará un listado con todas las posibles posibilidades de configuración que permiten tus dispositivos Plug'n'Play, pero todas deshabilitadas con un '#' al principio de cada línea. Los dispositivos aparecen por secciones por lo que es fácil encontrar los correspondientes a tu modem.

Así tu misión se reducirá a encontrar en la sección correspondiente a tu modem del archivo /etc/isapnp.conf, dos líneas así:

  # (IO 0 (BASE 0x0NNN))
  # (INT 0 (IRQ MM (MODE +E)))
donde NNN sea el rango de entrada-salida que use el modem en Windows y MM la interrupción. Las líneas no tienen por qué ser consecutivas ni ir en ningún orden especial. Cuando las encuentres, quítales el '#' inicial. Luego, al final de la sección del modem encontrarás una línea parecida a esta:
  # (ACT Y)
De la misma forma, le quitas el '#' inicial. Ya está. Listo para enviar dichos valores al modem. Esto lo hace la orden isapnp /etc/isapnp.conf y deberá aparecer en los scripts de arranque de Linux para enviar los valores cada vez que enciendas el ordenador. Las distribuciones más recientes (Red-Hat 5.0 y posteriores, Debian 2.0 y posteriores) ya incluyen dicha invocación por lo que no necesitarás tocar los scripts de arranque. En caso de tener una distribución antigua, será necesario añadir dicha orden. Un buen sitio para incluirla sería el script rc.local, que suele estar situado en uno de los subdirectorios de /etc.

De todas formas será necesario ejecutar isapnp /etc/isapnp.conf si queremos activar los cambios en este momento y nos queremos ahorrar el rearrancar la máquina.

Ahora hay que decirle al sistema operativo que debe usar esos valores para comunicarse con el modem. En el caso de los modems Plug'n'Play lo que viene a continuación es imprescindible.

Configuración de los puertos serie a ojos del sistema operativo

Lo primero que hay que saber es que Linux no llama a los puertos serie de la misma forma que el DOS o Windows. Así existe la siguiente correspondencia:

  DOS-Windows                     Linux
  -----------                   ----------
     COM1                       /dev/ttyS0
     COM2                       /dev/ttyS1
     COM3                       /dev/ttyS2
     COM4                       /dev/ttyS3
Ojo a las mayúsculas y las minúsculas del nombre de Linux. Son importantes.

Para leer la configuración y configurar los puertos serie se usa la orden 'setserial'. Para leer la configuración, hay que ejecutar setserial con el puerto serie que deseamos ver como único parámetro.

Por ejemplo:

  setserial /dev/ttyS1
nos muestra la configuración de COM2 y se obtendrá algo como esto:
  /dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ 3
o sea, el puerto serie (/dev/ttyS1), el tipo de chip UART que lleva (16550A), el puerto base de entrada-salida (2f8) y la solicitud de interrupción (3). Nótese que estos son los valores que el sistema operativo CREE que debe utilizar para comunicarse con el modem/puerto serie. Es posible que ahora no coincidan con los reales, incluso que ni siquiera detecte la UART, lo cual no es raro en caso de modems Plug'n'Play.

Si no coinciden, asignaremos los valores adecuados. Por fortuna, por lo general no será necesario indicar la dirección base de entrada-salida. Salvo casos muy, muy excepcionales COM1 usa la dirección base 3f8, COM2 la 2f8, COM3 la 3e8 y COM4 la 2e8, y eso setserial lo sabe. Así, al indicar el puerto serie, setserial implícitamente sabe cual es la dirección base. En cambio, en caso de tener un puerto COM5 o superior sí será necesario indicar la dirección base.

Así para COM1-COM4 sólo indicaremos la interrupción. Por ejemplo, supongamos que tenemos un modem en COM3 que usa la interrupción 5. La orden a introducir sería.

  setserial /dev/ttyS2 irq 5 autoconfig
Y si quisiéramos indicar también la dirección base de entrada-salida (por tener el modem en COM5, por ejemplo) se haría así.
  setserial /dev/ttyS4 port 0x2e8 irq 10 autoconfig
lo cual hace que el sistema operativo use un rango de direcciones desde la 2e8, y la interrupción 10. Nótese que el '0x' antes de la dirección base es importante.

Por último sólo queda ver que los cambios han surtido efecto. Para ello bastará usar de nuevo setserial de la primera forma que se indicó.

Por desgracia esta configuración durará hasta que apaguemos el ordenador. Por tanto será necesario incluir la línea o líneas de configuración setserial /dev/ttyS2 irq 5... en uno de los scripts de arranque de Linux para que los puertos se configuren cada vez que se inicie el sistema operativo. Un buen candidato es rc.local, que estará en uno de los subdirectorios de /etc. En caso de ser necesario incluir en rc.local tanto el isapnp /etc/isapnp.conf para configurar un modem Plug'n'Play, y el setserial... de los puertos serie, deberá colocarse el isapnp... en primer lugar.

También habrá que usar setserial de la misma forma si el ordenador tuviera más de dos puertos serie, (contando los que traen los modems internos en caso de disponer de alguno). El motivo es que por alguna extraña razón de diseño del PC, COM1 y COM3 por defecto comparten la misma interrupción, y a pesar de que esa configuración no es deseable, Linux por defecto busca COM3 en la misma interrupción que COM1, por lo que habría que cambiar la de COM3. Lo mismo ocurre con COM2 y COM4 por lo que habría que cambiar COM4. Si no se hiciera esto, podrían ocurrir cosas muy raras, como ratones y modems que dejan de funcionar, modems que funcionan "a pedales" (cuando se mueve el ratón), etc...

9.4 ¿ Cómo compruebo que todo está bien configurado ?

Una vez activados los cambios con el comando isapnp para los modems Plug'n'Play y el/los comando(s) setserial necesarios para configurar el/los puerto(s) serie, o se ha reiniciado el ordenador con los scripts de arranque modificados para que ejecuten dichas órdenes (es más seguro hacer lo primero), se puede probar si todo va bien. La forma más sencilla es usar un programa de comunicaciones y enviarle comandos al modem para ver si responde.

Así un programa adecuado sería minicom que es un terminal de comunicaciones tipo Telix. No es complicado de configurar. Pulsando Ctrl+a y luego z sale un menú. Una de las opciones 'cOnfigure minicom' dará paso a otro menú donde la opción "Serial port setup" nos permitirá elegir el puerto serie, la velocidad con la que nos comunicaremos con él (no la velocidad del modem) y otras opciones más. Lo normal es usar 115200 o 57600 para la velocidad, 8N1, "Hardware Flow Control: Yes" y "Software Flow control: No". Una vez configurado y sin ningún menú sobre la pantalla escribes 'AT' (Las dos en mayúsculas o las dos en minúsculas) y pulsas ENTER. Si el modem responde al instante 'OK' o con un número cero, indicaría que el modem funciona y que responde bien. Para completar la faena puedes probar a conectarte a una BBS o a tu nodo de infovia plus (los nodos de infovia plus permiten una conexión tipo terminal, aunque no sé que se puede hacer con ella) y así probar que todo va bien.

Si el modem tarda en responder al 'AT', o no responde, algo ha fallado en la configuración del modem o del puerto serie y habría que revisar lo hecho.

Un comentario sobre el 'AT'. Cuando se escriben estas dos letras pueden ocurrir varias cosas.

9.5 ¿Cómo conecto a internet con pppd ?

¿Que es pppd? Se trata de la primera posibilidad de conexión a internet que ofrece Linux. Es una conexión a internet que gasta pocos recursos y con posibilidad de hacerla desde la consola, sin necesidad de entrar en modo gráfico. Cualquiera que aspire a obtener al máximo rendimiento de la conexión a internet, por ejemplo automatizando la conexión, automatizando la recogida de correo, noticias, ftp, etc... casi seguro no tendrá más remedio que pasar por aquí.

Como inconvenientes, tiene unos cuantos. El más destacable es la falta total y absoluta de interactividad o de información en pantalla de cómo va la conexión, siendo necesario el uso de otros comandos (como ifconfig) o la observación de archivos históricos (/var/log/messages) para averiguar si la conexión se ha realizado con éxito o ha habido algún error.

La configuración de pppd se basa en la creación de una serie de archivos.

/etc/ppp/options : Configuración de la conexión y del puerto serie
/etc/ppp/marcado : Configuración del modem y marcado del número de teléfono
/etc/ppp/pap-secrets : Claves de acceso para identificación con PAP
/etc/ppp/chap-secrets : Claves de acceso para identificación con CHAP
/etc/resolv.conf : Servidores de nombres (DNS)

Así un posible /etc/ppp/options sería así:

  -----------------------------------------------------------------
  connect "/usr/sbin/chat -v -f /etc/ppp/marcado"
  name mi_login@mi_proveedor
  defaultroute
  noipdefault
  modem
  crtscts
  asyncmap a0000
  mru 576
  /dev/ttySx
  115200
  --------------------------------------------------------------------
Comentarios: /etc/ppp/marcado:
  --------------------------------------------------------------
  ABORT "BUSY"
  ABORT "NO CARRIER"
  ABORT "NO DIALTONE"
  ABORT "ERROR"
  ""
  "AT& F" TIMEOUT 5 OK
  "ATW1DTnumero_de_telefono" TIMEOUT 100 CONNECT
  ---------------------------------------------------------------
Comentarios:

/etc/ppp/pap-secrets y /etc/ppp/chap-secrets

Existen dos formas posibles de identificación cuando nos conectamos a un proveedor: PAP y CHAP. PAP es la más sencilla y es la que usaba por ejemplo Infovia. CHAP es muy usada en Infovia Plus.

El formato de ambos archivos es el mismo:

  ------------------------------------------------------------------------
  mi_login@mi_proveedor *       password
  ------------------------------------------------------------------------
Comentarios: ¿Cual uso, pap-secrets o chap-secrets? Si sabes que tu proveedor usa PAP, grábalo como pap-secrets. Si usa CHAP, grábalo como chap-secrets. Si no sabes cual usa, puedes hacer prueba-y-error o crearte los dos, o crearte uno sólo y hacer un enlace simbólico de uno al otro. Por ejemplo, si has creado chap-secrets, para hacer un enlace desde pap-secrets se haría:
  cd /etc/ppp
  ln -s chap-secrets pap-secrets
Esto en teoría haría que pppd y tu proveedor se pusieran de acuerdo para elegir PAP o CHAP según prefieran.

/etc/resolv.conf :

Aquí irían las direcciones de los DNS primario y secundario. El formato es muy sencillo:

  -------------------------------------------------------
  nameserver DNS_primario
  nameserver DNS_secundario
  -------------------------------------------------------
Por ejemplo, nameserver 195.5.65.2

Comentarios:

Una vez creados los scripts, la conexión se efectuaría al escribir pppd o /usr/sbin/pppd.

Para comprobar si la conexión tiene éxito, se puede usar el comando /sbin/ifconfig y ver si al cabo de un minuto o dos aparece un bloque nuevo ppp0.

Otra forma es consultando periódicamente el fichero /var/log/messages hasta ver si aparece algo como esto:

  Local  IP address xxx.xxx.xxx.xxx
  Remote IP address yyy.yyy.yyy.yyy
Lo cual indicaría una conexión con éxito. Una forma de hacer esto sería con la orden tail -f /var/log/messages y pulsar Ctrl+C cuando veamos que la conexión ha funcionado o fallado.

La desconexión se realizaría introduciendo la orden killall pppd.

En caso de necesitar ayuda, remitir la duda a es.comp.os.linux.misc o es.comp.os.linux.redes mandando copia de los scripts (ocultando los passwords, claro) y lo que haya salido en /var/log/messages durante la conexión fallida.

NOTA IMPORTANTE: Los ficheros arriba descritos han de crearse desde cero con un editor de Linux. Crearlos con un editor de DOS o de Windows, o con operaciones de cortar-y-pegar en Windows añade un caracter no visible al final de cada línea que Linux confundiría con un caracter normal, inutilizando los scripts.

9.6 ¿Cómo conecto a internet con KDE-kppp?

Después de haber utilizado diversos sistemas para conectar con Internet a través de InfovíaPlus mediante módem y haber constatado en el grupo de noticias es.comp.os.linux la gran cantidad de veces que se pregunta acerca de cómo conectarse mediante kppp, hemos pensado que este breve resumen sobre como establecer la conexión usando el kppp podría ser interesante para algunos que se inician en linux y disfrutan del entorno grafico KDE. Las notas que escribo a continuación se refieren a la versión KDE 1.0 (las diferencias con respecto al KDE 1.1 son mínimas)y por lo tanto voy a partir de la base de que el usuario de linux ha instalado ya el KDE y le funciona sin problemas de ningún tipo.

Guía paso a paso de conexión a internet a través de InfovíaPlus con kppp.

Antes de comenzar

El módem debe estar correctamente instalado y su funcionamiento verificado (usando por ejemplo el programa minicom). El dispositivo asociado al módem dependerá del puerto serie al que está conectado. Si está conectado al "COM2" (en jerga DOS) el dispositivo será /dev/ttyS1, y podemos hacer un enlace simbólico a /dev/modem:

  ln -s /dev/ttyS1 /dev/modem
Además debemos saber su velocidad máxima. Si el módem es de más de 28,8Kbps podemos tomar 115200.

Otros datos fundamentales son los que tienen que ver con nuestro proveedor de internet:

Comenzamos

Invoquemos kppp mediante acción sobre el correspondiente icono del menú del KDE o escribiendo en un terminal

  [user@localhost]# kppp
Para que programa funcione para un usuario normal el propietario y el grupo deben ser root y el ejecutable debe tener el bit SETUID activado, para poder abrir el dispositivo del módem. Si no es así se pone uno superusuario
  [user@localhost]# su root

  (... da la password... y entonces hacemos)

  [user@localhost]# chown root.root kppp
  [user@localhost]# chmod +s kppp
  [user@localhost]# exit

  (...para volver a usuario normal...)
Si todo ha ido bien aparecerá la ventana del kppp y con el ratón accionaremos la tecla
  setup
Entonces se abrirá la ventana kppp configuration con varias pestañas indicando secciones: Accounts; Device; Modem; PPP y About. Comenzaremos por la primera sección

La sección ABOUT evidentemente es para mirar solamente. Por último accionamos el botón OK de la ventana kppp configuration. Con ello volvemos a la inicial de kppp. Activamos "Show log window". En el casillero "Connect to" deberá aparecer el nombre de nuestra conexión (en el ejemplo INFOPLUS). El login ID será en nuestro ejemplo user@proveedor. Escribimos la password en su casillero: ****** y por último pulsamos "connect"

Si todo va bien, aparecerán dos ventanas: una con el marco superior indicando "Connecting to: INFOPLUS" que mostrará Dialing 954547000 y otra mayor, a la derecha de la primera indicando en su marco superior "Login Script Debug Window" y presentando una serie de acciones:

  ATZ
  OK
  ATD954547000

  (Mientras está "Expecting Connect")
cuando se ha establecido la conexión, aparece en esa misma pantalla
  CONNECT 115200
e indicará en su marco inferior "running pppd" mientras la otra ventana indica "Logging on the network". Cuando la ventana mayor presente en su marco inferior "Done"; la otra más pequeña, que en su marco superior exhibirá el nombre de la conexión (INFOPLUS), se minimizará y ya estamos conectados.

Si restauramos la ventana de conexión INFOPLUS en un momento dado nos mostrará la siguiente información:

  Connected at 115200
  Time connected ....
  Session bill...PTAS
  Total bill ....PTAS
y dos teclas "Details" (para ver los detalles de la conexión con nuestro proveedor) y "Disconnect" evidentemente para desconectarnos. Si la pulsamos, aparecerá de nuevo la ventana kppp y entonces, para salir, presionaremos la tecla "quit".

Preguntas habituales

9.7 Mi modem cuelga durante la negociación inicial.

La negociación se puede distinguir por ser la fase en la que suenan los modems. Si cuelga bruscamente puede ser debido a un TIMEOUT demasiado corto en el script de marcado. Se puede subir a TIMEOUT 100 o a TIMEOUT 150. En caso de seguir colgando, se puede intentar añadir S7=100 o S7=150 entre el AT y el DTnumero_de_telefono en el script de marcado.

9.8 Mi modem suena muy fuerte ¿Cómo le bajo el volumen?

Depende de lo que quieras. Si simplemente quieres bajar el volumen del modem, basta añadir L1 o L0 a la cadena de inicialización del modem. Un posible sitio para colocarlo seria entre el "AT" y el DTnumero_de_telefono en el script de marcado.

Si lo que quieres es que no suene para nada (por ejemplo, si quieres automatizar la conexión para que se realice de madrugada) deberás añadir M0 a la cadena de inicialización del modem. Puedes colocarla en el mismo sitio que se indicó para L1 o L0.

9.9 Conecto a internet, pero no logro ir a ningún sitio.

Lo primero que hay que tener en cuenta es que no hay conexión hasta que no aparece por /var/log/messages lo de Local IP Address xxx.xxx.xxx.xxx y Remote IP Address yyy.yyy.yyy.yyy (o el bloque ppp0 al escribir ifconfig. Esto viene al caso de que a veces la autentificación inicial falla, por ejemplo porque haya caído el proveedor o esté saturado. En esos casos Infovia Plus no corta la conexión y puede parecer que el modem está conectado a internet cuando en realidad ni siquiera ha llegado a contactar con el proveedor. En ese caso habría que revisar las claves de acceso que se hubiesen introducido en pap-secrets o chap-secrets o intentarlo más tarde.

En caso de aparecer Local IP Address... y Remote IP Address... en /var/log/messages, pero no conseguir conectar a ningún sitio habría que revisar en primer lugar /etc/resolv.conf y ver si las direcciones allí introducidas son correctas. Una forma de averiguar si es culpa de los DNS es probar a conectar usando una dirección numérica. Por ejemplo se puede probar con la dirección 130.206.1.2 que corresponde a www.rediris.es . Si conecta, es un problema en /etc/resolv.conf (o del DNS de tu proveedor).

Si se descarta el DNS, comprueba que tienes la opción defaultroute en /etc/ppp/options. En caso afirmativo, comprueba /var/log/messages y mira si aparece algún mensaje tipo ppp not replacing existing default route to .... Este último caso es típico si se tiene alguna tarjeta de red y has definido alguna dirección de gateway. Lo normal es eliminar dicho gateway. Averigua como introduciste el gateway y elimínalo. Una forma de eliminarlo sería por ejemplo con linuxconf, que viene con Red-Hat.

9.10 ¿Qué significa eso de "Unsupported protocol 0x31"?

Es un mensaje que aparece en /var/log/messages típico de Infovia Plus y debido a un protocolo de red llamado IPX. No debe suponer ningún problema para la conexión, pero si resultara molesto se podría añadir la opción noipx a /etc/ppp/options.

9.11 Mi modem no cuelga ¿Qué hago?

Asegúrate de que tienes (si usas pppd) la opción modem en /etc/ppp/options.

En caso de que la tuvieras, comprueba que has puesto una cadena de inicialización al modem en el script de marcado (por ejemplo at& f, atz...).

En caso de que así siguiese sin colgar, tendrás que echar mano del manual del modem y buscar el comando "que haga que el modem cuelgue (o se resetee) cuando cambie la línea DTR". Normalmente es & Dx donde 'x' es un numero (que es lo que deberás buscar en el manual del modem, si prefieres prueba-y-error 'x' normalmente estará entre 0 y 4). Luego deberás editar el script de marcado del modem y colocar dicho "& Dx" entre el "AT" y el "DTnumero_de_telefono". Al usar el caracter '&', no olvides poner todo el conjunto (desde el AT hasta el final del número de teléfono) entre comillas dobles (p.e.: "AT& D3DT055").

9.12 Internet me va mucho mas lento con Linux que con Windows.

Esto puede deberse a muchas causas:

Deberás verificar la configuración del modem y del puerto serie. Sigue la descripción que se da en la sección correspondiente de la FAQ.

Comprueba que la velocidad que has puesto en /etc/ppp/options NO es la velocidad del modem (nada de 28800, 33600 o lo que sea, no es eso lo que debes poner ahí). Pon 115200 o 57600, preferiblemente la primera. Si tienes una UART 16450 u 8250 pon 38400 y asegúrate de NO poner el flag 'spd_hi' o 'spd_vhi' con setserial (si has seguido las instrucciones de la FAQ desde el principio no hace falta que compruebes esto). El tipo de UART que tienes lo podrás ver haciendo setserial /dev/ttySx donde 'x' es 0 para COM1, 1 para COM2, etc...

Si sigue lento o conectando mal, asegúrate de poner una cadena de inicialización al modem ("at& f", "atz") y que la opción crtscts aparece en /etc/ppp/options. En caso de continuar los problemas deberás echar mano del manual del modem y buscar las opciones que "activen el control de flujo RTS/CTS". Suelen ser de la familia de las que empiezan por '&'. En algunos modems es una sola orden (por ejemplo "& K3") y en otros hay que activar el RTS y el CTS separadamente. Colocar el o los comandos entre el "AT" y el "DTnumero_de_telefono". Si usas el caracter '&', asegúrate de poner todo el conjunto (desde el AT hasta el final del número de teléfono) entre comillas dobles (p.e. "AT& K3DT055").

9.13 Tengo más de un proveedor de internet ¿Qué hago para poder elegir por cual me conecto?

Una posible forma sería eliminar de /etc/ppp/options la opción name mi_login@mi_proveedor. De esta forma, si hemos puesto en pap-secrets o chap-secrets, el login y el password de todos nuestros proveedores, bastaría con escribir pppd name login@proveedor para elegir a cual nos queremos conectar.

Esto funciona si todos los proveedores comparten el mismo número de teléfono (por ejemplo, si todos están en infovía plus). En caso de tener diferentes números de teléfono, habría que eliminar en connect "/usr/sbin/chat -v -f /etc/ppp/marcado" de /etc/ppp/options, crearse un fichero de marcado particular para cada proveedor y crearse un fichero para cada proveedor en /etc/ppp con las dos opciones personalizadas que le correspondan. O sea:

  /etc/ppp/nombre_del_proveedor:

  ------------------------------------------------------------
  connect "/usr/sbin/chat -v -f /etc/ppp/marcado_proveedor"
  name login@proveedor
  ------------------------------------------------------------
Y ejecutar pppd así:
  /usr/sbin/pppd file /etc/ppp/nombre_del_proveedor
Las DNS de todos los proveedores se podrían poner en /etc/resolv.conf, añadiendo nuevas líneas "nameserver xxx.xxx.xxx.xxx". Es conveniente ordenar los nameservers poniendo primero todos los DNS primarios de todos los proveedores y después los DNS secundarios. También conviene poner en primer lugar los correspondientes a los proveedores más usados.

9.14 Solo puedo usar internet como root. ¿Qué hago para poder hacerlo como usuario?

Hay dos formas de hacerlo. La forma "buena", sería usando el programa sudo el cual permite ejecutar como usuario algunos programas que sólo podrían funcionar como root. Esto supondría que cada vez que uno quisiera conectarse a internet debería introducir un password, lo cual es útil en caso de que otros tuvieran acceso a nuestro ordenador. Para lo configuración de sudo consultar man sudo.

La forma "mala", y digo mala porque es más insegura en caso de que otros tengan acceso a nuestra máquina, consistiría en poner pppd "suid root" lo cual posibilita que un usuario normal tuviera acceso al programa de una forma similar que root.

Para esto último, habría que empezar por localizar pppd. Suele estar en el directorio /usr/sbin. Luego haría falta echar un vistazo para ver que permisos tiene. Esto se hace con la orden ls -l pppd y debe arrojar algo parecido a esto.

  -rws--x--x   1 root   ppp     70336   May 18  1996 pppd
Lo que se persigue es que la tercera letra sea una 's', como en el ejemplo. Si el programa no está "suid root", la tercera letra será una 'x'. Entonces en este caso habría que hacer chmod 4711 pppd para conseguirlo.

Los scripts de /etc/ppp necesitarían también acceso libre para los usuarios así que habría que hacer chmod 755 /etc/ppp y chmod a+r /etc/ppp/*. El efecto secundario que esto tiene es que cualquier usuario del sistema puede leer las claves de acceso a nuestro proveedor de internet. Existe la posibilidad de limitar la conexión a internet (y a los scripts de conexión y claves de acceso), leer la sección ¿Cómo se cambian los permisos de ficheros y directorios?

NOTA: Aún así, es posible que no seamos capaces de conectar con internet como usuario normal. Una posible causa de fallo sería intentar conectar a internet escribiendo pppd en vez de /usr/sbin/pppd. Para root funciona la primera, pero para el resto de usuarios no. El motivo es que el PATH (el conjunto de directorios en los que Linux busca un ejecutable) es diferente para root que para los usuarios normales. Los usuarios normales no tienen /usr/sbin dentro del PATH así que deberán hacer /usr/sbin/pppd para conectarse a internet o hacer un enlace simbólico a /usr/sbin/pppd desde otro directorio que sí esté en el PATH de usuario (como por ejemplo /usr/bin), o hacernos un script (pequeño programa) que se limite a ejecutar /usr/sbin/pppd. Para el enlace simbólico bastaría hacer: ln -s /usr/sbin/pppd /usr/bin/pppd

10. Internet / RSDI

10.1 Introducción a RSDI

Esta sección pretende dar algunos detalles de como utilizar ciertas tarjetas RSDI con el sistema operativo Linux. En concreto se centrará en aquellas tarjetas que estén soportadas con el driver HiSax, del paquete isdn4linux. Los ejemplos concretos usados a lo largo del documento harán referencia a una tarjeta Elsa QuickStep 1000 y a un sistema Debian GNU/Linux 2.0, ya que ésta es la configuración que posee el autor. Sin embargo el uso de cualquier otra tarjeta de las gestionadas con el driver HiSax o de otra distribución debería plantear cambios mínimos en los ejemplos.

Se ha añadido una nueva subsección al documento que indica como conectarse a Infovia+ con Linux y RDSI, ya que a Telefónica le ha dado por cambiar el protocolo de conexión de bajo nivel, sin consultar a nadie. Bueno, en realidad simplemente ha eliminado el antiguo sistema de conexion, ya que en la Infovia tradicional funcionaban tanto el método antiguo como el nuevo, necesario ahora por imperativo legal.

Los pasos que se indican aquí sirven para usar la tarjeta RDSI de dos formas diferentes:

Aun cuando la segunda forma de trabajar está descrita en el RDSI-COMO de LUCAS, hay algunos usuarios que están teniendo problemas para ponerla en marcha. Voy a tratar de plasmar en esta página como he realizado yo la configuración en mi instalación de Debian 2.0 con un núcleo 2.0.36.

10.2 Configuración del hardware.

Como paso previo a cualquiera de los dos modos de funcionamiento, es requisito indispensable que el núcleo reconozca nuestra tarjeta RDSI y nos deje usarla. De esto se encargan varios componentes del núcleo que será necesario compilar. Para ello, recomiendo usar un núcleo de linux igual o posterior al 2.0.36. De esta forma el driver de HiSax más reciente ya viene incorporado en el núcleo y no hay que conseguirlo aparte y parchear el mismo.

Pasos a seguir para la compilación del soporte de la tarjeta en el núcleo

Una vez que dispongamos de las fuentes del núcleo tenemos que realizar las siguiente operaciones:

Pasos necesarios para la configuración de la tarjeta

10.3 El método de emulación de módem analógico (PPP asíncrono)

Para usar la tarjeta RDSI emulando un módem analógico convencional necesitaremos un demonio pppd reciente (el que venga con su distribución valdrá seguramente). También será de gran ayuda el documento "eng-i4l-faq", disponible en http://www.isdn4linux.de/). Hay sendas versiones en alemán e inglés.

En este momento ya está disponible la tarjeta RDSI para su uso. Para ello, en los scripts de configuración de pppd tenemos que realizar un par de cambios o tres. Estos son:

A continuación adjunto una copia de mis ficheros /etc/ppp/peers/provider (fichero de configuración de pppd en Debian GNU/Linux 2.0) y /etc/chatscripts/provider (fichero de conexión de chat en Debian GNU/Linux 2.0).

--------------------------------
Fichero: /etc/ppp/peers/provider
Permisos: chmod 640
Propietario: root
Grupo: dip
--------------------------------

                              
   connect "/usr/sbin/chat -v -f /etc/chatscripts/provider" 
   passive 
   user inaki.arenaza@jet 
   noipdefault 
   debug 
   defaultroute 
   asyncmap 00000 
   mtu 576 
   mru 576 
   /dev/ttyI0 
   115200 
   :172.16.1.96 
   ipcp-accept-local 
   ipcp-accept-remote 

-------------------------------------
Fichero: /etc/chatscripts/provider
Permisos: chmod 640
Propietario: root
Grupo: dip

Nota: Lo que aparece entre paréntesis
son comentarios que no deben incluirse
en el fichero real.
--------------------------------------

                                     
   "" "ATS14=3" (usar HDLC como protocolo de nivel 2) 
   "" "AT& B2000" (Tamaño máximo del bloque de transmisión) 
   "" "AT& E900123456" (MSN/EAZ = número de teléfono propio 
                       incluyendo prefijo). 
   ABORT BUSY 
   ABORT "NO CARRIER" 
   ABORT VOICE 
   ABORT "NO DIALTONE" 
   "" ATD055 
   CONNECT "" 

-------------------------------------
Fichero: /etc/ppp/pap-secrets
Permisos: chmod 600
Propietario: root
Grupo: root
-------------------------------------

   inaki.arenaza@jet    *     mi_contraseña  

Entre el nombre del usuario, el asterisco y la contraseña debe haber un tabulador (ojo, no usar espacios en blanco).

En este momento debe asegurarse de que tiene creados los ficheros de dispositvo /dev/ttyI0, /dev/ttyI1, etc. Si no es así, puede crearlos con el comando MAKEDEV que se haya en el directorio /dev, o a mano con el comando mknod. Si usa MAKEDEV (al menos la versión de Debian GNU/Linux), basta con que ejecute lo siguiente en el directorio /dev:

   ./MAKEDEV isdn-tty
   ./MAKEDEV isdn-io 

Si ya tiene creados los dispositivos /dev/ttyI*, y tiene instalado pppd y chat, ya puede probar su conexión a Internet. En concreto, con la configuración de ejemplo de este documento y usando un sistema Debian GNU/Linux, basta con teclear pon, y se lanzará la ejecución del demonio pppd que establecerá la conexión con su proveedor a través de Infovía. Puede ver un registro de la conexión en /var/log/ppp.log (en los sistema Debian GNU/Linux). Si la conexión falla por alguna razón, en ese fichero aparecerá el porqué.

Ahora ya puede usar su navegador favorito o el lector de correo. Para cortar la conexión, basta con ejecutar el comando poff (en los sistemas Debian GNU/Linux).

10.4 Infovia+ (PPP síncrono)

Todo lo explicado en las anteriores subsecciones está muy bien, pero .... ¡¡ya no sirve para Infovia+!!. Por alguna razón que al común de los mortales se nos escapa, Telefónica ha decidido eliminar de un plumazo el soporte de PPP asíncrono en la nueva Infovia+. Así que la mayoría de los usuarios de RDSI con Linux nos hemos visto forzados a cambiar toda la configuración del subsistema RDSI para poder usar el protocolo estrella de Infovia+: el PPP síncrono.

Qué nos hace falta

Para poder usar el PPP síncrono con Linux es necesario:

Compilación del paquete isdn4k-utils

Instalación y configuración de isdn4k-utils

Las operaciones anteriores podían hacerse como un usuario normal. Sin embargo, los pasos a realiza a partir de ahora deben hacerse como usuario root.

Con esto ya hemos creado el esqueleto de los ficheros de configuración. Ahora tenemos que editarlos para adaptarlos a nuestras necesidades. Todos estos ficheros están situados en el directorio /etc/isdn. Los ficheros que hay que editar son:

   /etc/isdn/callerid.conf 
   /etc/isdn/device.ippp0 
   /etc/isdn/ipppd.ippp0 
   /etc/isdn/isdn.conf 
   /etc/isdn/isdnlog.isdnctrl0 

Le recomiendo que lea con atención los comentarios de los ficheros para saber para que sirve cada uno de ellos. Un detalle muy importante a la hora de editar estos ficheros es que hay que eliminar (no vale con que sean comentarios) las líneas que dicen:

   # REMOVE the next line once configuration is complete ####################
   echo "Warning! $0 not configured yet! Aborting..."; exit 1
   # REMOVE the above line once configuration is complete ###################

de todos los ficheros en los que aparezcan, ya que de lo contario las funciones de configuración del sistema RDSI suponen que sus ficheros siguen sin configurar y no activan ni la interfaz RDSI ni el resto de los servicios RDSI.

No use el fichero device.ippp0 tal cual. Debe editarlo y cambiar los valores de LOCALMSN por su número de teléfono y REMOTEMSN por el número de teléfono del nodo de Infovia+ que use.

Por último, necesita el fichero de inicio de todas las utilidades para que todo quede correctamente configurado en cada arranque del sistema. El fichero que se encarga de todo esto en Debian GNU/Linux es /etc/init.d/isdnutils. En Redhat deberia de estar en /etc/rc.d/init.d/

Puesta en marcha (por fín ;-)

Ya tenemos todo listo. Ahora llega el momento de comprobar que todo este montaje funciona.

Antes de indicar como hacer para activar y desactivar la conexión a Infovia+, le recuerdo que Infovia+ solicita por defecto la autentificación por medio de CHAP, así que le recomiendo que edite su fichero /etc/ppp/chap-secrets y añada allí sus credenciales.

Para activar la conexión debemos ejecutar el comando:

   /usr/sbin/isdnctrl dial ippp0 

Esto hará que la tarjeta marque el número indicado en REMOTEMSN (en el fichero /etc/isdn/device.ippp0) y que comience todo el proceso de conexión y negociación del protocolo.

Yo personalmente no tecleo este comando cada vez que quiero conectar. Me he creado un pequeño script al que llamo ipon (puesto que Debian GNU/Linux incluye un script llamado pon usado para conectar con módems analógicos con pppd, yo llamo al mío ipon porque usa ipppd). El script está situado en /usr/bin y sus permisos son:

   -rwxr-xr-x   1 root     root           41 Jan 24 10:58 /usr/bin/ipon 

   Su contenido es: 

   #!/bin/sh
   /usr/sbin/isdnctrl dial ippp0
   /usr/bin/tail -f /var/log/syslog

La segunda línea es opcional, y sirve para visualizar el registro de eventos del sistema, para ver si todo va correctamente.

Ahora puede ejecutar el script y ver si puede hacer unos cuantos pings a algunas maquinas de Internet. Si todo ha ido correctamente, ya puede usted navegar (o lo que más le guste) por Internet. ¡Enhorabuena!

Sino, una atenta revisión de los ficheros de configuración junto con los mensajes de error que aparezcan en el registro del sistema deberían dar con el error en poco tiempo.

Por ultimo, para indicarle al sistema que deseamos cortar la conexión, basta con teclear:

   /usr/sbin/isdnctrl hangup ippp0 
De nuevo, yo he creado un script similar al anterior, al que llamo ipoff, situado en el mismo directorio y con los mismos permisos. Su contenido es:
   #!/bin/sh
   /usr/sbin/isdnctrl hangup ippp0

11. FTP/Telnet

11.1 ¿Qué es el protocolo FTP?

El Protocolo de Transferencia de Ficheros (File Transfer Protocol o, para abreviar, FTP) es uno de los pilares de Internet junto con el acceso a páginas Web (http). Durante mucho tiempo ha sido el servicio TCP/IP de Internet más utilizado, debido a que cualquier distribución Linux (así como en otros Sistemas Operativos) incluye el software necesario, muy fácil de usar y configurar, y de reducido tamaño.

Tal y como se comenta en la documentación (man ftp), "el Protocolo de Transferencia de Ficheros (FTP) es un protocolo de la familia TCP/IP usado para transferir ficheros entre máquinas que ejecutan TCP/IP (aunque hay programas estilo FTP para otros protocolos). Este protocolo permite transferir ficheros y manipular directorios en máquinas remotas. No está diseñado para permitir el acceso a otra máquina con el fin de ejecutar programas (para eso tenemos telnet), pero resulta la mejor utilidad para manipulación de ficheros.".

Esto quiere decir que una máquina con un servidor de ftp dispone de una estructura de directorios con ficheros y que además es capaz de permitir a cientos o miles de usuarios la recogida de ficheros o envío de nuevos ficheros al servidor.

Cuando hablamos de FTP estamos hablando (para explicarlo de una manera sencilla) de la descarga o subida de ficheros en Internet entre 2 máquinas, y es lo que permite entrar en ftp.idsoftware.com, por ejemplo, y bajarse la última versión del ejecutable de Quake II para Linux. También nos permite, por ejemplo, entrar en nuestro directorio privado en nuestro Proveedor de Servicios de Internet para poner allí nuestra página Web con el fin de que sea accesible desde el exterior. Para hacer esto disponemos de múltiples posibilidades debido a la disponibilidad de software para ello en Linux, desde ftp hasta ncftp, wget, etc..

Así pues, no es necesario utilizar el navegador de WWW para descargar programas de direcciones que comienzan por ftp://, ya que disponemos en nuestro sistema de herramientas mucho más potentes para tales menesteres: los programas de ftp. Aquí aprenderemos los comandos básicos así como la manera de instalar nuestro propio ftp anónimo para que otros accedan a nuestros ficheros desde el exterior.

11.2 El comando FTP

Comenzaremos hablando del programa ftp (lo que muchos habituales de Internet llaman «el típico ftp de toda la vida», conocido en las Universidades y sencillos terminales en modo texto cuando no se disponía (o no se necesitaba) del entorno gráfico.

Si se necesita transferir un fichero a otra máquina de una red o recuperarlo desde otra (y la red bien puede ser Internet), lo que necesitamos es un programa como ftp. Ftp es un programa sencillo y que viene en cualquier distribución de Linux (en el caso del autor, el paquete instalado es ftp-0.10-2.rpm). Como la mejor manera de aprender es con ejemplos (antes de ver todas las posibilidades que ofrece) supongamos que un compañero nos comenta que es posible obtener la última version de Netscape Communicator en el ftp de la dirección ftp://ftp.juan.es/pub/programas. Sería muy sencillo introducir esta URL (dirección de recurso de Internet) en Netscape Navigator para que éste nos haga de cliente de FTP, pero supongamos que no estamos dentro de XWindow (o que no nos apetece arrancar el navegador, o incluso que nos apetece bajarnos este fichero en varias sesiones, tal y como hacen GetRight y NetVampire para Windows, y que podremos hacer con ftp). Para conseguir nuestro objetivo hacemos:

  [root@localhost sromero]# ftp ftp://ftp.juan.es
  Connected to ftp.juan.es.
  220 Juan FTP server (Version wu-2-41) ready.
  Name (ftp.juan.es:sromero):_
En ese momento el programa habrá accedido a la máquina remota, quien nos está pidiendo que nos identifiquemos (Name) con nuestro nombre de usuario (también podríamos haber entrado con ftp y abrir el servidor con open ftp.juan.es). Si no somos usuarios habituales de dicha máquina (no poseemos ninguna cuenta especial en la misma), tendremos que identificarnos como anonimo (anonymous) y como password o palabra clave dar nuestra dirección de correo electrónico, proceso conocido como login o ftp anónimo, y que nos permitirá entrar en la máquina remota si ésta tiene permitido el acceso anónimo. Así pues contestamos:
  Name (ftp.juan.es:sromero) anonymous
  331 Guest login ok, send your complete e-mail address as password.
  Password:  sromero@unix-shells.com
Con lo que la máquina remota nos dará acceso a su sistema de ficheros ftp.
  230- ¡Bienvenido al servidor FTP de Juanito!
  230 Guest login ok, access restrictions apply.
  Remote system type is UNIX.
  Using binary mode to transfer files.
  ftp> _
En ese momento nos percatamos de que la terminal de texto se ha quedado en espera de introducción de comandos por nuestra parte. Ante la pregunta de «¿qué puede hacerse ahora?» surge la respuesta: «estamos en un sistema Unix», con lo que nada nos impide (si están dentro de aquel sistema) desplazarnos entre los distintos subdirectorios (ls, cd, etc.):
  ftp> ls
  200 PORT command successful.
  150 Opening ASCII mode data connection for /bin/ls.
  total 6
  drwxr-xr-x   6 root     root    1024 Jul 17 10:47  .
  drwxr-xr-x   6 root     root    1024 Jul 17 10:47  ..
  drwxr-xr-x   2 root     root    1024 Jul 17 10:47  bin
  drwxr-xr-x   2 root     root    1024 Jul 17 10:47  etc
  drwxr-xr-x   2 root     root    1024 Jul 17 10:47  lib
  drwxr-xr-x   2 root     ftp     1024 Jul 31 09:17  pub
  226 Transfer complete.
A la vista de los directorios disponibles, vamos a pub/programas como se nos había especificado.
  ftp> cd pub
  250 CWD command successful.
  ftp> cd programas
  250 CWD command successful.
  ftp> ls
  200 PORT command successful.
  150 Opening ASCII mode data connection for /bin/ls.
  total 3
  drwxr-xr-x   6 root     root         1024 Jul 17  09:18   .
  drwxr-xr-x   6 root     root         1024 Jul 17  09:18   ..
  drwxr-xr-x   6 root     root  10221024 Jul 17  09:18  netscape.rpm
Es posible hacer uso del comando get para descargar un fichero (o mget para múltiples ficheros), pero antes nótese que uno de los mensajes que se leyó al hacer el login fue "Using binary mode to transfer files", lo cual nos indica que hay 2 maneras de bajarse ficheros: los de formato texto y los binarios, y que debemos especificar el modo correcto para bajarse ficheros de cada tipo (el comando ascii especifica formato ascii mientras que binary especifica formato binario). En este caso no tendremos que teclear binary pues el sistema ya nos avisa de que por defecto se descargan ficheros en binario, de modo que ejecutamos get para obtener el fichero:
  ftp> get netscape.rpm
Con lo que obtendremos el fichero en nuestra máquina tras esperar el tiempo necesario y tras el cual nos avisará el propio programa de ftp.

11.3 Como bajarse ficheros en varias sesiones con FTP

¿y si cuando llevamos 1 hora de conexión necesitamos apagar el sistema o se corta la conexión? ¿Y si simplemente queremos bajarnos un fichero de gran tamaño en diferentes sesiones, conectándonos por ejemplo media hora diaria?

Nada nos impide continuar la descarga de un fichero otro día y desde el punto en que nos quedamos (sin perder ni un sólo bit) aunque se nos haya cortado la conexión en anteriores intentos. Para hacer esto disponemos del comando reget (con la misma sintaxis de uso que el comando get), el cual comprobará la existencia de un fichero con el mismo nombre que el que pretendemos bajarnos en el directorio actual de tal modo que en caso de existir continuará la descarga en el punto en que se quedo nuestro fichero incompleto, lo cual nos permitirá hacer de una manera muy cómoda y sencilla la descarga de grandes programas en varias sesiones, algo incluido en un programa con mucho tiempo y experiencia a sus espaldas y que algunos programas para Windows 95 pretenden vender como una gran novedad (véase GetRight o NetVampire).

Dicho de una manera sencilla: podemos comenzar a bajarnos un programa con get, cortar la descarga mediante CONTROL+C, salir del programa de ftp con quit, entrar al día siguiente y continuar con reget, repitiendo el proceso hasta completar la descarga o download del fichero.

  ftp> get netscape.rpm
  (al rato CTRL+C)

  (Otro dia:)
  ftp> reget netscape.rpm

11.4 Listado de comandos FTP

Otros comandos del ftp estándar son:

!: Ejecuta la shell para permitirnos la entrada de comandos en nuestro Linux. Con exit volveremos de nuevo al programa de ftp matando el shell. Si se especifica tras la admiración un comando de Linux, éste será ejecutado en la shell abierta.

Ejemplos:
!ls : haría un dir en nuestra máquina.
!xterm & lanzaría otra xterm
etc.

ascii: especifica tipo de transferencia de ficheros ASCII, en contraposición a ficheros binarios (no texto).

binary: especifica tipo de transferencia binaria (por defecto).

bell: le indica al sistema que ejecute un pitido (bell) cuando se finalicen la ejecución de los comandos. Así podemos ejecutar bell, y dejar un fichero de gran tamaño descargándose, sabiendo que tras su finalización oiremos un BEEP, lo cual nos permite dejar la ventana minimizada y hacer cualquier otra tarea.

bye, quit: termina la sesión ftp y sale.

cd, dir, ls, list, mkdir, rmdir, pwd: órdenes básicas de acceso a directorios, equivalentes a la del propio Sistema Operativo.

close: termina la sesión ftp sin salir del programa.

delete y mdelete: borran uno o varios ficheros en la máquina remota.

Ejemplos:
delete netscape.rpm
mdelete *.doc

get y mget: recibir uno o varios ficheros de la máquina remota.

Ejemplos:
mget *.doc
get "datos.doc"

reget: continuar bajando un fichero cortado anteriormente.

Ejemplo:
reget datos.doc

put y mput: enviar ficheros desde nuestra máquina a la máquina remota.

Ejemplo:
put fichero.html

open: conectar a un ftp remoto (ej: open ftp.xoom.com).

rename: renombrar fichero en la máquina remota.

Ejemplo: rename juan.html index.html

user y pass: especificar nuestro nuevo nombre y password.

verbose: activar o desactivar modalidad informativa.

lcd: Cambiar directorio local. Su utilidad radica en que cuando hacemos un download, éste irá a parar al directorio local donde estemos, de modo que cambiando de directorio podemos dejar los ficheros que nos bajamos en los lugares adecuados.

Ejemplo:
lcd /home/sromero/downloads

help, ?: imprimir información de ayuda del programa local.

Se puede obtener más información sobre estos comandos en la página man de ftp (man ftp), aunque la mayoría de los comandos de ftp son bastante explicativos y suelen coincidir con sus equivalentes en Linux.

11.5 Como subir paginas Web a nuestro ISP

Una de las cosas que pregunta mucha gente en los diferentes canales del IRC o en las news consiste en la subida de su página Web (creada en casa) a su directorio personal en su proveedor para que sea accesible al resto de usuarios de Internet. Aún hay mucha gente que no sabe realizar este proceso con lo que deja su espacio (que suele ser de 2Mb o más, dependiendo del servidor) libre en el servidor, y no aprovecha este servicio de Internet.

Lo primero de todo es crear nuestra página Web, que no es más que un directorio (con sus posibles subdirectorios) lleno de htmls, imágenes, y un fichero index.html que será la página inicial de la Web. Pero... ¿Cómo se pone dicha página en nuestro ISP?

Para solucionar esto disponemos de nuestro potente programa de ftp, que sirve también para este tipo de acciones. Para ello una vez creada nuestra página en casa, hacemos ftp a nuestro servidor (ejemplo: ftp ftp.arrakis.es), y el sistema nos pedirá la habitual identificación.

En lugar de identificarnos como anónimo (anonymous), lo hacemos con nuestro login y password (a veces necesitaremos utilizar los comandos user nombre, pass password) de acceso a nuestro servidor, con lo que tras la autentificación entramos al servidor dentro de nuestro directorio personal (si contratamos en su día el servicio de página Web), donde podremos preparar los directorios para nuestra página mediante los comandos mkdir y cd, que actúa sobre el servidor remoto, y lcd, que actúa cambiando de directorio en nuestra propia máquina.

Para ello hacemos lcd /home/usuario/donde_sea/web con lo cual ponemos el directorio actual en el especificado.

Una vez seleccionados lo directorios correctos, está disponible el comando put nombrefichero (o mput, para multiples ficheros) para subir la página (como otro fichero cualquiera) al servidor. Recuerde que la página principal de su Web debería llamarse index.html si quiere que haya alguna página por defecto en su dirección WWW, y que a partir de ésta debe estar la misma jerarquía de directorios que creó en su PC durante la creación de la misma.

Una vez subida la página, salga del programa de ftp con quit y haga un sencilla prueba mediante su navegador habitual.

11.6 Como instalar nuestro propio servidor FTP

Lo que se va a comentar a continuación es una manera muy sencilla de instalar un servidor de FTP anónimo para que otros usuarios puedan acceder a él mientras estemos conectados a Internet. Esto implica que podrán recoger ficheros así como dejarnos los ficheros que nosotros deseemos aceptar.

Para ello, y siguiendo la manera más sencilla posible, instalamos los paquetes anon-ftp y wu-ftpd y permitimos que estos habiliten la carga de los daemons necesarios en memoria (cosa que los paquetes rpm harán automáticamente al instalarlos con el parámetro -i):

  [root@localhost sromero]# rpm -i anonftp-2.5-1.rpm
  [root@localhost sromero]# rpm -i wu-ftpd-2.4.2b16-4.rpm
Si no disponemos de dichos paquetes los podemos obtener del ftp de RedHat (ftp.redhat.com), del subdirectorio pub/manhattan/contrib/i386, en formato rpm, para convertirlo a otros formatos de instalación (deb o tar.gz) mediante el script alien si fuera necesario. El primer paquete contiene la estructura básica de un servidor ftp mientras que el segundo contiene el servidor de ftp (un daemon) propiamente dicho.

El primero de los paquetes creará en /home/ftp una estructura de directorios que será el directorio raíz de nuestro ftp, siendo por defecto los siguientes:

  [root@localhost home/ftp]# ls   
  bin    etc    lib    pub
Este directorio (/home/ftp) será el directorio raíz de los usuarios de nuestro ftp, es decir, que cuando el usuario realice un dir al directorio raíz estará viendo los mismos directorios que nosotros en /home/ftp. La forma de añadir o quitar programas a nuestro ftp resulta, pues, muy sencilla, y se reduce a añadir programas y directorios en el directorio /home/ftp/pub, que es de donde los usuarios remotos deben coger los ficheros. En este subdirectorio crearemos los distintos directorios (ej: juegos, fotos, tutoriales, etc.) e incluiremos los ficheros que queremos que sean accesibles desde el exterior. Tras esto y un reset (o un simple reinicio del daemon) tendremos instalado nuestro servidor de ftp.

A la hora de decirle a alguien que puede entrar en nuestro servidor, recordemos que un usuario «de a pie» no suele disponer de una dirección de Internet propia (como ftp.netscape.com o ftp.idsoftware.com), sino que de lo único de que disponemos es (a menos que hayamos contratado nuestro propio dominio y dns) de una dirección IP a través de la cual somos accesibles desde el exterior. Si queremos que alguna persona del IRC (o, en general, cualquier usuario de Internet) entre en nuestro ftp, le deberemos comunicar nuestra IP ya que es perfectamente posible acceder a un ordenador remoto especificando la dirección IP en lugar del nombre. Para averiguar nuestra dirección IP basta con extraerla del archivo /var/log/messages, de los datos de la última conexión (al final del fichero):

  fecha localhost pppd[393]: Remote message: 
  fecha localhost pppd[393]: local IP address 195.5.78.128
Si estamos dentro del IRC otra manera de obtener nuestra dirección IP es mediante comandos del IRC (como /whois, /dns, etc.) con nuestro nick identificativo (/whois Jose). Dicha IP se la comunicaremos a la persona que quiere entrar en nuestro ftp para que pueda hacerlo mediante la orden ftp dir_IP:
  [pepe@OtraMaquina home]# ftp 195.5.78.128
Obviamente, parece muy incómodo tener que especificar cada vez nuestra nueva dirección IP, pero esto es así debido a que las direcciones IP asignadas por nuestro servidor varían en cada conexión, con las excepciones de que hayamos contratado una dirección IP fija (en cuyo caso no variará y todo el mundo podrá acceder a nuestro ftp usando la misma dirección) o de que hayamos contratado un nombre de dominio (como ftp.miftp.org), de manera que se pueda acceder al mismo desde esta notación nominal (mucho más sencillo). También es posible disponer de algún servicio de redirección de nombres a IPs, y hacer un ftp a dicho nombre.

Mediante el anterior comando, cualquier persona conectada a Internet (y mientras lo estemos nosotros), podrá acceder a nuestra jerarquía de directorios /home/ftp, y subir o descargar ficheros, así como utilizar todos los comandos de ftp que hemos visto en el presente artículo, y desde cualquiera de los clientes de ftp comentados (incluyendo, por ejemplo, Netscape) convirtiendo a nuestro ordenador en un servidor de ftp como otro cualquiera.

Si queremos testear si hemos configurado correctamente el ftp, podemos hacer un ftp sobre nuestra propia máquina de manera que se active nuestro servidor y podamos testear el servicio. Para ello especificaremos nuestra dirección IP de loopback (la dirección IP de nuestra máquina, 127.0.0.1), o el nombre de nuestra máquina (por ejemplo, localhost):

  [root@localhost sromero]# ftp 127.0.0.1
  [root@localhost sromero]# ftp localhost
En principio no debemos tener ningún problema en el test, aunque en caso de obtener un mensaje de «Connection refused», será necesario comprobar la existencia de la siguiente línea en el archivo de seguridad /etc/inetd.conf:
  ftp  stream  tcp  nowait  root  /usr/sbin/tcpd  in.ftpd -l -a
El objetivo de esto es permitir que nuestra máquina sea accesible vía FTP desde el exterior.

Existe un documento Howto sobre FTP anonimo que profundiza en la configuración del mismo, haciendo especial incapie en los aspectos de seguridad.

11.7 Otros programas de FTP en modo texto

Pese a la gran versatilidad que tiene ftp, en Linux se disponen de algunos programas que pueden facilitar y acelerar algunas de las funciones de ftp, como ncftp (un cliente de ftp más avanzado que el sencillo ftp) y wget, (un programa que permite descargar ficheros de cualquier recurso WWW).

Ncftp se utiliza de forma similar a ftp, pero con la salvedad de que es capaz de hacer logins automáticos (user anonymous y password email), que permite edición de líneas anteriormente escritas (history de comandos), que dispone de un modo visual (a pantalla completa) y en línea (al estilo ftp), con una barra de estado que nos informará en todo momento de qué hace el programa, que recuerda URLs (si entramos una vez en hyper.unc.edu.es, bastaría en otra conexión especificar "open hyper" o incluso "open hy" para que recuerde la URL completa), y con un comando get algo especial. El get que usa ncftp es capaz de saltarse los ficheros de los que ya disponemos, de coger múltiples ficheros (por ejemplo, get *), de bajar un programa a trozos sin necesidad de reget (mediante get -C nombre_fichero), bajarnos ficheros de X días de antigüedad o menos ( get -n X *.txt ), o incluso la posibilidad de hacer un get recursivo que entre en subdirectorios remotos y que restaure la misma jerarquía de directorios en nuestra máquina, así como los ficheros que contenga (get -R /pub/juegos). Además permite entrar directamente a ftps y directorios. Por ejemplo, en el programa de ftp básico, para entrar en ftp.test.com/pub/linux habría que hacer "ftp ftp.test.com" y luego "cd pub/linux", mientras que con ncftp podemos hacer directamente desde la línea de comandos:

  ncftp ftp.test.com/pub/linux
Además ncftp recuerda el último directorio de cada site donde entremos, de modo que la siguiente vez que entremos en, por ejemplo, ftp.test.com apareceremos directamente en pub/linux. Dispone de muchas más funcionalidades, como un cálculo de tiempo esperado de download del fichero (ETA), una barra de progresión de downloads, etc. (para más información, consultar la página man).

Todo ello con un tamaño en disco de 174.000 bytes para la versión 2.4.3 (ncftp-2.4.3-3.i386.rpm), lo que lo hace ideal para bajarse cientos de imágenes de un directorio sin ir una por una, o subir multiples ficheros a una máquina remota (como cuando subimos nuestra página Web a nuestro ISP).

Wget es un programa que hace algo similar a get y reget pero desde la línea de comandos del Linux y que también sirve para direcciones http. La sintaxis de wget es la siguiente:

  
  wget [opciones] dirección_de_Internet
Entre las opciones disponibles las más útiles son:

-r: wget recursivo (entra en directorios y links) -L: sólo entra en los links locales. -c: para bajarse un fichero en varias sesiones o continuar desde donde se quedó si se corta la conexión. Esta opción hace que si existe en el directorio actual un fichero con el mismo nombre que el que se pretende bajar, pero con menor tamaño, wget continue bajando datos sólo desde el final del fichero local (solo los datos que faltan para la finalización del download).

Un par de ejemplos de uso del programa podrían ser:

  wget -c ftp.juan.es/pub/programas/netscape.rpm
  wget -r ftp.juan.es/pub/fotos/paisajes
  wget -rL www.8052.com
El primer ejemplo se bajaría el fichero netscape.rpm directamente al directorio actual, pudiendo cortarlo en cualquier momento con CTRL+C para continuar su download otro dia desde el punto en que se quedó (como reget, NetVampire, etc) utilizando el mismo comando. El segundo ejemplo se bajaría todos los ficheros que hubieran en el directorio pub/fotos/paisajes del ftp especificado, y el tercero se bajaría la web www.8052.com completa (incluyendo fotos, subdirectorios, etc) para poder navegar por ella en el disco duro offline.

Existen multitud de opciones (ver página del manual) que lo hacen indispensable y sumamente útil. Cuenta con un frontend para GTK en modo gráfico (Gwget) por si no nos gusta la línea de comandos, pero en sí wget es un programa ideal cuyo uso está justificado, pues podemos correrlo en diferentes xterm o consolas obteniendo ficheros de Internet a la máxima velocidad posible.

Otro programa bastante interesante y similar a Wget (pero que trabaja en forma de caché-proxy) es WWWoffle, que permite descargar ficheros y páginas Web completas para navegar por ellas después en modo desconectado. También es posible marcarle páginas en modo desconectado para que se las baje cuando conectemos (sin ser necesaria mediación alguna por nuestra parte) de forma transparente al usuario.

Cftp (Comfortable FTP) es otro programa que nos permitirá navegar por el ftp mediante las teclas de los cursores, de forma que pulsando INTRO entraremos en los directorios sobre el que situemos el cursor virtual, o nos bajaremos el fichero sobre el que estemos.

Lftp es un programa al estilo ncftp con multitud de opciones de uso e ideal para la realización de mirrors (hacer una copia exacta de un ftp o de un subdirectorio del mismo) y mirrors inversos (copiar a un ftp el contenido exacto de un subdirectorio local, ideal para subir páginas Web completas con subdirectorios, ya que él mismo detecta qué ficheros locales son más nuevos que los presentes en el ordenador remoto, actualizando éstos). Como características fundamentales tiene: soporte de alias, caché, bookmarks, busqueda de ficheros, mirror (con opciones de continuación, recursión, borrado, etc.) mirror inverso, y sencillos ficheros de configuración.

11.8 Programas graficos de FTP

Si lo que queremos es que nuestro programa de ftp tenga un aspecto impecable y que sea una utilidad gráfica, disponemos en Linux de múltiples posibilidades (no sólo de texto vive el hombre, aunque siempre resulte lo más rápido y estable).

Entre los ftps más vistosos destacan gftp (del entorno gnome), IglooFTP, WX-ftp (clon de Wsftp) o el mismo Netscape Navigator.

12. Mail/News

12.1 ¿Qué es el correo electronico?

El correo electrónico es casi probablemente el servicio más útil para muchos de los usuarios de Internet, permitiendo intercambio de información casi instantáneamente. Este servicio consiste, dicho de una manera sencilla, en el envío de un bloque de información de texto (aunque puede llevar incluida información multimedia o en general cualquier otro fichero adjunto) de un remitente a un destino, de igual modo que el correo convencional. La diferencia radica en que en lugar de necesitar lapiz y papel, nuestro correo electronico (email, de electronic mail) es generado normalmente por nuestro programa de correo como un bloque de texto a enviar con el siguiente formato:

  From:     <direccion_email_del_remitente>
  To:       <direccion_destino_del_email>
  Subject:  <tema_del_que_se_habla>
  Otros:    <otros_campos_de_informacion>
  <texto_que_deseamos_enviar.>
  .
Las direcciones de email son direcciones en servidores de correo igual que las direcciones postales lo son para la localización geográfica (por ejemplo, mi email es sromero@unix-shells.com, y un mensaje a dicha dirección llegaría a mi máquina servidora de correo de donde yo lo recogería para su lectura).

Un ejemplo de email seria el siguiente:

  From: agonzalo@server.es
  Date: Wed, 12 May 1999 22:19:24 +0200
  Organization: Universidad de Sevilla
  To: sromero@unix-shells.com
  Subject: Una pregunta sobre configuraciones...

  Hola, te queria hacer una pregunta...
  ¿me puedes ayudar con fetchmail?
Este bloque de texto se envia al servidor de correo de nuestro proveedor (o al nuestro, como ahora veremos) quien se encargara de moverlo por Internet hasta llegar al destinatario de nuestro mensaje. Podemos dividirlo en 2 partes: la cabecera del mensaje (todos los campos From, To, etc.), necesaria para el correcto envio del mismo, y el cuerpo del mensaje (el texto en si) que es lo que deseamos enviar.

Obviamente no tenemos que generar nosotros todo eso en un fichero de texto y despues realizar las operaciones para su envio (o recepción), sino que existen programas (clientes de correo) en los cuales introducimos el mensaje y éstos generan las cabeceras necesarias para los programas, permitiendonos además su envio y recepción. Ejemplos de clientes de correo son Pine, Netscape Communicator, MailX, Kmail, etc.

12.2 ¿Cómo puedo leer y contestar correo con mail/mailx?

El correo electrónico en Linux no puede considerarse como un extra al sistema operativo, sino que forma parte del mismo pues es una característica casi inherente a todo Linux. Esto quiere decir que aunque no hayamos instalado ningún cliente de correo como Netscape o Pine, probablemente dispondremos en el sistema de herramientas ya preparadas para ello.

Dentro de casi cualquier sistema Linux disponemos de un programa básico de email en consola (modo texto) llamado Mailx que nos permitirá el envio, lectura y contestación de mensajes de correo electrónico. En resumen, posibilita el envío de texto y datos dentro de una estructura coherente llamada mensaje, con su cabecera (campos: FROM (persona que envía el mensaje), TO (persona destinataria del mismo), SUBJECT (tema del que trata el mensaje) y CC o carbon copy (lista de personas que recibirán una copia del mismo).) y su BODY (cuerpo del mensaje), pudiendo incluir además ficheros añadidos que vienen incluidos dentro del paquete del mensaje (attach).

Para explicar el uso de mailx se va a usar un sencillo ejemplo en un máquina con un sólo usuario: sromero, además del obligatoriamente existente root (puede obternerse la lista de usuarios presentes en el sistema y en qué terminal están trabajando simplemente ejecutando la orden who). Suponga os que somos el usuario sromero y queremos enviarle un mensaje a root para testear las capacidades de envio de email. La manera más sencilla de enviar un mensaje a un usuario de la red es ejecutar mail :

  [sromero@localhost info]$ mail root
  Subject: Prueba de MailX.
  Esto es el cuerpo del mensaje. Es una prueba de mailx.
  Un mensaje se acaba con un punto (.) al principio de línea.
  .
  Cc: (intro) 
Al ejecutar mail root se nos ha preguntado el tema (subject), el cuerpo del mensaje (acabado en punto (.)), y a quién se le deseaba enviar copias del mismo (Cc), cosa que hubiera sido bastante útil si nuestro mensaje fuera una invitación a un grupo de amigos o una información para un grupo concreto de personas. Tras escribir esto, el mensaje escrito se graba como un fichero de texto (con el mismo nombre que el destinatario del mensaje, y al que se añadirán más mensajes conforme se le vayan enviando a dicho destinatario) en el directorio /var/spool/mail, a la espera de que el usuario destino los lea y vayan siendo eliminados del mismo.

Si root está conectado o entra más tarde en cualquier terminal del sistema, recibirá un mensaje de aviso indicando que el sistema ha detectado la llegada de correo para el usuario:

  You have mail.
Para realizar la lectura del correo electrónico, simplemente se invoca al programa mail, obteniendo una lista del correo pendiente y esperando el programa a que el usuario lo lea, responda, borre o almacene para más tarde:
  [root@localhost /root]# mail
  Mail version 8.1 6/6/93.  Type ? for help.
  "/var/spool/mail/root": 3 messages 3 new
  >N  1 sromero   Thu Jul 30 17:04  17/55   "Prueba de MailX."
   N  2 sromero   Thu Jul 30 17:15  17/50   "Pregunta sobre adm"
   N  3 sromero   Thu Jul 30 17:16  15/44   "Felices vacaciones!"
  & _
Como puede verse, mail nos muestra los mensajes pendientes (en este caso 3) por responder, con su usuario de origen (sromero), la fecha y el tema, con el cursor virtual (>) situado sobre el primero (es decir, indicando sobre cual actuará una orden de lectura, respuesta o borrado), y con un promtp (el carácter &) a la espera de recepción de órdenes sobre qué hacer con dicho correo.

Estas órdenes son:

  'número' -> Listar el mensaje .
  't' -> lista el mensaje actual (el apuntado por >)
  'n' -> Pasar al siguiente mensaje y visualizarlo.
  'd' -> Borrar mensaje.
  'e' -> Editar mensaje
  'r' -> Responder mensaje.
  'q' -> Salir de mailx.
A la mayoría de estas opciones se les puede pasar un nº de mensaje (desde 1 hasta n) para indicar sobre qué mensaje realizar la acción (ejemplo 'd 3' o 'delete 3'). Otras opciones, obtenidas mediante la ayuda de mailx, son:
  & ?
  Mail Commands
  t    listar mensaje
  n    ir al mensaje especificado y listarlo.
  e    editar mensaje
  f    ver cabeceras del mensaje
  d    borrar mensaje
  s    añadir mensajes a un fichero
  u    recuperar mensajes borrados
  R    Responder a los remitentes del mensaje
  r    Responder al remitente y a todos los destinatarios.
  pre  hacer ir los mensajes de nuevo a /usr/spool/mail
  m    enviar mensaje a los usuarios especificados.
  q    salir grabando mensajes en mbox
  h    mostrar cabeceras activas.
  !    permite ejecutar una shell o comandos de shell
En el caso de no disponer de correo en ese momento, mail nos avisa con un:
  [root@localhost root]# mail
 No mail for root
Otro fichero asociado es el fichero .signature de nuestro directorio home, utilizado como fichero de firmas y cuyo contenido es incluido al final de los emails escritos y respondidos por nosotros, pudiendo editarse y rellenarse con cualquier editor estándar de Linux para incluir nuestra firma personal. Este fichero es utilizado por la mayoría de gestores de correo de Linux como fichero de firmas por defecto, tal y como hace Mail, Pine, Netscape, Kmail, etc.

12.3 Envio de correo: Sendmail basico

Una de las necesidades básicas en nuestros sistemas Linux es el envio de correo electrónico o email a direcciones fuera de nuestra red local (a Internet, por ejemplo) o, en general, de nuestra propia máquina. Cuando escribimos un email en mailx, en Netscape, o en cualquier otro cliente de news, hace falta alguien que lleve dicho mensaje hasta el servidor de correo saliente (SMTP) de nuestro proveedor de Internet para que éste deje cada mensaje en el buzón destino correcto. Esta es una de las tareas que sendmail puede realizar en nuestras máquinas.

En nuestros envios de mensajes, pues, necesitamos un agente que extraiga dicho correo de /var/spool y lo envie a nuestro Proveedor de Servicios de Internet (por ejemplo, a smtp.arrakis.es). Sendmail es un programa tan completo que su estudio dispone de libros de cientos de paginas (incluso hay alguno que llega al millar de ellas) para abordar su gestión completa. Ya que muchos disponemos de Linux en nuestras propias máquinas (y somos también root de ellas), vamos a exponer el método más sencillo de configuración para uso con un sólo Proveedor de Servicios de Internet (ISP).

Lo primero es saber si lo tenemos instalado y con el daemon funcionando. Normalmente dicho paquete estará instalado y funcionado ya que es un daemon básico en todas las distribuciones Linux. Para arrancar el daemon (si no lo tenemos ya funcionando) y de paso chequear si está instalado, basta con ir a /etc/rc.d/init.d en el caso de Redhat (en otras distribuciones puede variar el directorio) y ejecutar:

  /etc/rc.d/init.d/sendmail stop
  /etc/rc.d/init.d/sendmail start
Obtendremos lo siguiente.
  [root@compiler /root]# /etc/rc.d/init.d/sendmail stop
  Shutting down sendmail: sendmail
  [root@compiler /root]# /etc/rc.d/init.d/sendmail start
  Starting sendmail: sendmail
También podemos observar simplemente si durante el arranque y lanzamiento de los daemons del sistema sendmail es iniciado con lo que no haría falta su lanzamiento manual.

Tras asegurarnos de disponer de sendmail instalado y si somos root de nuestra máquina procederemos a la configuración más básica y sencilla del mismo (también es posible contactar con el administrador o root de la misma si no lo somos), que consiste en la edición del fichero de configuración /etc/sendmail.cf, (por ejemplo con el editor joe, emacs, jed, etc) con el fin de modificar algunas líneas del mismo y configurar sendmail para nuestro uso:

Con estos cambios estamos forzando a que cuando se escribe un email, la dirección de retorno del mismo tenga el dominio correcto, cosa que se podría modificar de igual manera (sin el retoque de sendmail.cf) si nuestro programa para leer/contestar el correo permite hacerlo (en PINE, por ejemplo, modificamos la cabecera FROM en las opciones, en CUSTOMIZED-HEADERS). Para un usuario medio (acceso a Internet, recogida y envio de correo en un proveedor, etc.), el método comentado del sendmail.cf es más que suficiente. Además existen otros métodos e incluso otros MTAs (agendes de correo) como qmail o smail, que pueden realizar el mismo papel de una manera más sencilla.

Una vez realizada la configuración, supongamos que desde un usuario cualquiera enviamos un email a jose@proveedor.es, mediante el comando mail jose@proveedor.es. Dicho email se grabará en /var/spool/mqueue a la espera de ser enviado a nuestro ISP quien a su vez lo enviará al usuario juan. Es decir, los emails que enviemos a Internet se guardarán en el directorio del correo hasta que se realice su envio mediante sendmail en la próxima conexión a Internet, gracias al comando "sendmail -q". Los mensajes en cola de envío se encuentran en /var/spool/mqueue (por si queremos releerlos o borrar alguno), y podemos consultarlos mediante el comando mailq.

Sendmail es un daemon o demonio, es decir, está ejecutandose en nuestra consola continuamente tratando de enviar el correo cada X tiempo. Para evitar esto, y obligarle a que el envío se realice manualmente por nuestra parte, debemos modificar el arranque de sendmail en el fichero /etc/rc.d/init.d/sendmail cambiándolo para que arranque con las siguientes opciones:

  daemon /usr/sbin/sendmail -bd -oDeliveryMode=d
Otro problema común es recibir una advertencia (warning) cada vez que un mensaje lleve más de X hroas sin ser enviado (4 por defecto). Para evitar eso tan sólo hay que editar /etc/sendmail.cf y comentar (colocando un símbolo # al principio de la línea, y, por tanto, deshabilitándola) la siguiente opción:
  Timeout.queuewarn=4h
Otra opción a comentar (añadiendo # al principio de la línea correspondiente en sendmail.cf) es la siguiente:
  Timeout.queuereturn=5d
Esta opción especifica que si el correo no ha podido ser enviado durante 5 días debe ser devuelto a sendmail. Esto puede ser util si estamos enviando los emails a un proveedor y se pierden, con lo que gracias a la devolución podrían ser reenviados, pero en nuestro caso no va a ser necesario pues los mensajes residiran en nuestro disco duro hasta el momento en que los enviemos.

En resumen: sendmail es un agente de transporte de correo (MTA) que recoge nuestros emails y los deja temporalmente como simples ficheros de texto que son en /var/spool/mqueue a la espera de realizar su distribución a los destinatarios especificados. Esta entrega se puede hacer bien mediante el comando "sendmail -q" o bien esperando a que el sistema llame a sendmail (lo llama cada X tiempo, siendo este tiempo programable) para que lo distribuya. Este tiempo, así como los restantes parámetros de configuración (como el servidor SMTP, que es el lugar a donde sendmail debe enviar los mensajes, es decir, nuestro proveedor de Internet) se pueden especificar en el fichero de configuración /etc/sendmail.cf .

Gracias a sendmail podremos enviar mensajes de corre electronico estando desconectados de Internet, mensajes que serán enviados por él cuando se realice la próxima conexión. Esto nos permitirá responder el correo electrónico desde nuestro cliente de correo, con el siguiente mecanismo: una vez configurado sendmail, en nuestro cliente de correo ponemos como SMTP la dirección IP de nuestra máquina (nuestra IP de red, nuestro nombre de máquina o bien 127.0.0.1 o localhost) de modo que cuando escribamos un mensaje en Netscape y pulsemos en Enviar, éste será enviado *a nuestra propia máquina* de tal forma que sendmail se encargará de enviarlo durante la próxima conexión a Internet cuando se ejecute mediante "sendmail -q" o como daemon temporal. Esto nos permite contestar el correo electronico en nuestro cliente favorito, sin gasto de teléfono por nuestra parte, y pudiendo simplemente enviar los mensajes y dejar que sendmail los distribuya al conectar a Internet.

12.4 Recogida de correo: Fetchmail

Si con programas como sendmail es posible enviar el correo a nuestra máquina estando desconectados de Internet para su posterior distribución cuando se conecte a la Red, con Fetchmail es posible hacer el proceso inverso, es decir, recoger TODO el correo de todos los servidores POP o IMAP deseados para su posterior recogida desde nuestra máquina y lectura en modo desconectado.

Fetchmail es el daemon encargado de la recogida de correo, para posteriormente pasárselo a sendmail, que es quien lo distribuye. La forma más sencilla de configurar fetchmail es creando un fichero .fetchmailrc en el directorio personal del usuario (ya sea /home/usuario o incluso /root), de forma que sea el mismo usuario quien recoja el correo y se lo pase al usuario/usuarios que deban leerlo. Dicho fichero tiene un formato como el que sigue:

  defaults
  fetchall
  flush
  pass8bits

  poll servidor_de_correo
  proto pop3
  user usuario
  pass password
  to usuario_local
(pueden haber más bloques poll/proto/user/pass/to si hay mas servidores de correo de donde deseemos recoger el mismo)

Las opciones incluidas en este fichero son las siguientes:

Un ejemplo de fichero .fetchmailrc para un usuario sromero@arrakis.es en /home/sromero sería el siguiente:

  defaults
  flush
  fetchall
  pass8bits
  poll pop.arrakis.es
  proto pop3
  user sromero@arrakis
  pass mipassword
  to sromero
Además, este fichero tiene que tener unos permisos de lectura/escritura concretos, debido a que posee nuestro password de correo, cosa que se realiza con la orden chmod:
  [sromerolocalhost sromero]#   chmod 0600 .fetchmailrc
La forma de recoger el correo es, estando conectado, ejecutar la orden "fetchmail".

Por último, podemos hacer que fetchmail corra en forma de demonio (el equivalente en MSDOS sería como un programa residente), y que recoja el correo sólo cada X segundos, cosa muy sencilla de realizar añadiendo la siguiente opción al fichero .fetchmailrc:

  set daemon X
 
  (ejemplo: set daemon 300)
Esto haria que fetchmail buscara correo nuevo cada 300 segundos sin necesidad de ser lanzado por nuestra parte con el comando "fetchmail".

Una vez recogidos los mensajes (ya sea en forma manual o como daemon), éstos son depositados por sendmail en /var/spool/mail, de manera que puedan ser accedidos por cualquier programa de correo del sistema (mailx, pine, y, como veremos ahora, Netscape). Simplemente debemos configurar nuestro cliente de correo especificando como servidor POP nuestra propia máquina (localhost, 127.0.0.1, etc). Tras haber recogido todos los mensajes con fetchmail y ya desconectados de la Red, en el cliente de correo (por ejemplo Netscape) le damos a GET NEW MESSAGES (Obtener nuevos mensajes) y aparecerán ante nosotros los emails recogidos por fetchmail dispuestos para ser respondidos totalmente offline.

12.5 Sendmail y Fetchmail: Todo Offline

Con fetchmail y sendmail, trabajar con el correo electrónico en modo desconectado (tanto leer como contestar el correo OFFLINE, con el consiguiente ahorro de dinero en tiempo de conexión) consiste simplemente en lo siguiente:

  [root@localhost root]# pppd
  [root@localhost root]# sendmail -q
  [root@localhost root]# fechmail
  [root@localhost root]# killall pppd
Con la primera línea conectamos a Internet, para posteriormente enviar el correo pendiente en la cola de mensajes (los enviados por nosotros a nuestramáquina), así como recoger el correo entrante en nuestro ISP con fetchmail (y dejarlo en nuestra máquina listo para recogerlo con Netscape, Pine o nuestro cliente de correo).

Gracias a esto en apenas unos minutos de conexión enviamos todo el correo saliente y recogemos los nuevos mensajes, dejándolos en nuestro sistema listos para su contestación con el modem desconectado. Otra opción es incluir las llamadas a las funciones de envío y recogida en el fichero /etc/ppp/ip-up, de manera que la recogida sea automática al realizarse la conexión. Además podremos utilizar procmail para distribuir el correo, de manera que todos los usuarios de una red tengan la misma dirección de email en Internet pero luego puedan enviarse mensajes a usuarios individuales con esa misma dirección, etc. Las posibilidades de actuación de Linux son infinitas en este campo, pudiendo crear listas de correo, filtros anti-spam, etc.

12.6 ¿Cómo configuro Netscape para trabajar Offline?

Si disponemos de nuestros emails en /var/spool/mails nada nos impide utilizar Netscape para trabajar con ellos, y así de paso trabajar en modo desconectado u offline. Para ello tan sólo hemos de ir a las opciones del programa (edit->preferences), y modificar los datos que especifican nuestro servidor de correo entrante y saliente.

Para ello vamos a la pestaña Mail & Groups, submenú Mail Server y como Outgoing mail (SMTP) server especificamos localhost (nuestro ordenador), de manera que al enviar emails con Netscape vayan a parar al directorio /var/spool/mail. Como Mail server type especificamos la opción "Movemail Application", y seleccionamos Built in, para que utilice la herramienta interna de Netscape para la recogida del correo, tal y como se puede ver en la figura adjunta.

Por último como root habremos de cambiar los permisos del directorio /var/spool/mail para que Netscape pueda escribir en ellos:

  [root@localhost root]# cd /var/spool
  [root@localhost spool]# chmod 01777 mail
(otra posibilidad es buscar la aplicación movemail y darle permisos de root.root y atributos +s para que tome privilegios de administrador).

Una vez realizado esto, todas las recepciones y envíos se realizan sobre el directorio /var/spool/mail y /var/spool/mqueue, con lo que podremos leer y responder desde Netscape los emails recogidos con fetchmail, y cuyas respuestas serán enviadas por sendmail en la siguiente conexión a Internet. De la misma manera, podemos especificar localhost como servidor de correo entrante (pop) y saliente (smtp) en otros programas de correo para que accedan a nuestra máquina y podamos trabajar en modo desconectado, como en el programa Kmail incluido en KDE, en Pine, etc.

12.7 ¿Qué son las news o grupos de noticias?

Las news (grupos de noticias) son un interesante servicio de Internet que permite el intercambio de mensajes en un foro común sobre un determinado tema de interés para todos sus lectores. En cuanto a formato, son algo similar a los emails: simples mensajes de texto formados por la cabecera del mensaje seguida del cuerpo, y donde a su vez la cabecera se divide en diferentes campos que indican el remitente, el grupo destinatario o el tema del mensaje.

Si se busca información de un determinado tema (programación, electrónica, diseño, imágenes, etc.), sólo es necesario apuntar nuestro programa de news (por ejemplo, Collabra Discussion Groups, de Netscape, incluido con Communicator) hacia el grupo adecuado para disponer de la posibilidad de intercambio de información e intereses comunes entre un gran grupo de usuarios interesados en el mismo tema. Apuntándose, por ejemplo, al grupo es.comp.os.linux estaremos en conexión con un grupo temático dedicado exclusivamente al habla sobre este S.O. Si enviamos un mensaje al grupo, todas las personas suscritas al mismo podrán leerlo y contestarlo (algo así como enviar emails pero a un lugar donde lo pueden leer todas las personas interesadas en el tema) tanto personalmente como al grupo en general, pudiendo por tanto aprender mucho sobre el tema tratado. La variedad de temas disponibles en los diferentes grupos permiten nuestra participación activa, yendo desde la simple lectura (de la que se puede aprender mucho) hasta la colaboración con el grupo respondiendo a preguntas que ayuden a otros lectores a desarrollarse.

12.8 ¿Cómo se accede a las news?

En general, basta con instalar un cliente de news e indicarle la dirección de nuestro servidor de news (el nombre o IP de la máquina que contiene los grupos), tal como news.arrakis.es, news.ctv.es, o como quiera que se llame nuestro proveedor de servicios de Internet. También existen diferentes servidores de news gratuitos, algunos de ellos sin limitaciones y otros que sólo permiten postear mensajes de un determinado nº de líneas, o donde el nº de líneas de texto nuevo sea mayor que el texto al que se contesta, ya que al ser como un email, se puede dejar el texto anterior al contestar:

  Ejemplo:

  --------------------------------------------------
  > JuanJO preguntó:
  > ¿alguien sabe como hacer esto?

   Pues tienes que ir al directorio... [etc]
  --------------------------------------------------
Sabido ya nuestro servidor de news y el puerto de acceso (general- mente el 119) la configuración del acceso simplemente consiste en ir a las opciones del cliente de news que deseemos usar e indicarle como "Servidor de News" la dirección de nuestro server, y como puerto, el apropiado para el mismo.

Una vez realicemos la configuración, el cliente de news se bajará del servidor remoto una lista de todos los grupos temáticos disponibles y de las descripciones de los contenidos, para que posteriormente podamos seleccionar aquellos de nuestro interés. Suelen haber miles o decenas de miles de grupos diferentes, ordenados por tematicas. Los grupos de news son como una jerarquía donde cada grupo se divide en subgrupos hasta llegar a aquel de la tematica deseada:

  es.*                   -> todos los grupos de news en castellano
                            (hay miles de ellos)
  es.ciencia.*           -> grupos de news sobre ciencia.
                            (hay unas decenas, de electrónica,
                             matemáticas, biología, etc)
  es.ciencia.electronica -> grupo de news sobre electronica en castellano.

  o bien:
 
  es.comp.*              -> grupos relacionados con ordenadores.
  es.comp.os.*           -> grupo de news dedicados a S. Operativos.
  es.comp.os.linux       -> grupo de news sobre el S.O. Linux.
  es.comp.os.windows     -> grupo de news sobre el "S.O." Windows
  (etc...)
Esta lista de grupos y sus descripciones se almacena en nuestro PC para que posteriormente a su download completo (suele tardar bastante al ser muy extensa) podamos suscribirnos a aquellos grupos que más nos interesen. En el caso del autor, y como ejemplo, uso Netscape Communicator y estoy suscrito a es.ciencia.electronica, es.comp.os.linux y rec.games.programmer, los cuales recibo en diferentes carpetas para leer mensajes de cada uno de los temas por separado (cada vez que conecto a Internet recojo los nuevos mensajes de cada grupo y envio mis respuestas).

Tanto Netscape Communicator como otros lectores/clientes de noticias (Slrn, Krn, Xrn) dan acceso a la lectura y gestión de artículos de las news siempre y cuando estemos conectados a Internet (trabajando online), es decir, hay que estar conectado, recoger los nuevos mensajes, y leerlos y contestarlos estando conectados lo cual conlleva un gasto (innecesario como veremos) de teléfono a la hora de leer, responder y descartar los mensajes que nos interesen.

Existen algunos programas que permiten hacer algo más ahorrativo: al entrar en el grupo de news que nos interesa, podremos leer las cabeceras de los mensajes disponibles (como por ejemplo en el programa HY-News), marcar los que nos interesen y posteriormente bajarlos para leerlos una vez desconectados de la línea, si bien el marcado de cabeceras requiere un tiempo de lectura y elección que puede llegar a bastantes minutos si estamos suscritos a diferentes grupos, aunque siempre es mejor esto que responder todos los artículos online.

En Linux disponemos de la posibilidad (de nuevo formando parte gratuita del Sistema Operativo y no como un extra a añadir al mismo) de instalar clientes de news (y servidores) que nos permitirán trabajar en modo desconectado de la misma manera que se puede hacer con el correo (en aquel caso mediante fetchmail y sendmail). Estos programas funcionan bajandose TODOS los nuevos articulos/mensajes de news (a gran velocidad al ser conexion directa al servidor) para luego en nuestro cliente de correo especificar como servidor de news nuestro propio PC (localhost) de modo que podremos leer y contestar las news totalmente offline.

En este aspecto podemos elegir principalmente entre leafnode e inn+suck. Éstos 2 ultimos paquetes (inn y suck) son muy potentes y mucho más avanzados para nuestros propósitos iniciales, de modo que si nuestro uso de las news es sencillo (no queremos montar nuestro propio servidor sino simplemente obtener un medio para leer las news offline) nos quedaremos con leafnode mucho más sencillo de instalar y configurar.

12.9 Leafnode como servidor de NNTP

Como puede leerse en la página del manual (man fetch) leafnode es un paquete de trabajo con news diseñado para ordenadores pequeños con pocos usuarios, de manera que no ocupa mucho espacio y permite la gestión de muchos grupos. El diseño de leafnode está pensado para que sea capaz de autoreparar errores cuando ocurran, y que no necesite mantenimiento manual. Es decir: nos encontramos ante un programa que requiere poco espacio y mantenimiento, pero que en cambio nos proporciona total acceso a la gestión de grupos de noticias, gracias a leafnode (un servidor de NNTP), fetch, el programa que se encarga de recoger las news de Internet y dejarlas en nuestro disco duro para su posterior lectura por parte del programa que deseemos, y texpire, que se encarga de eliminar los mensajes viejos para recuperar disco duro y deshacernos de los artículos no deseados según el tiempo de expiración que hayamos configurado.

Leafnode es un programa incluido en la mayoría de las distribuciones Linux (sobre todo en las de RedHat), y si no disponemos de él puede encontrarse en ftp.redhat.com en el directorio pub/manhattan/contrib/i386 (versión 1.5) o en la sección de viejos RPMs (la versión 1.4). Algunas (caso de algunas distribuciones Manhattan) versiones tienen un fallo con Netscape, pero al autor le consta que a partir de la versión 1.9 este fallo fue corregido completamente (NOTA: El autor usa leafnode 1.4 ya que le sigue funcionando perfectamente y no ve ninguna necesidad de actualizar a la version 1.9 :). La instalación en formato rpm es mediante el comando rpm -i, y para paquetes .deb y tar.gzs también se debe seguir el método habitual de instalación ya conocido por los que usan distribuciones Debian o Slackware, además de poder convertir el paquete de rpm a cualquier otro formato mediante el script alien, incluido en muchas distribuciones y que podemos encontrar en el home de Debian.

12.10 Configuración de Leafnode

Una vez instalado leafnode se debe proceder a configurarlo. Como root entramos en el directorio /usr/lib/leafnode y editamos el fichero config, donde leeremos algo similar a lo siguiente (fichero de configuración de la versión 1.4):

  # This is the NNTP server leafnode fetches its news from.
  # You need read and post access to it.
  server = news.arrakis.es

  # Unread discussion threads will be deleted after this many days if
  # you don't define special expire times. Mandatory.
  expire = 5

  # Non-standard expire times (no regex possible)
  #groupexpire comp.linux.misc = 5   # group too big to hold articles 20 day
  #groupexpire any.newsgroup = 100  # very interesting, hold articles longe

  # Never fetch more than this many articles from one group in one run.
  maxfetch = 2000

  # Specifies an upper limit on how many groups an article may be posted to. 
  maxcrosspost = 0
El significado de las diferentes opciones es muy descriptivo:

La opción server indica el servidor de donde leafnode ha de leer las noticias. En este caso se tiene especificado como servidor news.arrakis.es. En principio esta línea no contendrá ningún valor si es la primera vez que lo configuramos, así que será necesario incluir aqui el nombre de nuestro servidor de noticias habitual (news.ctv.es, news.arrakis.es, etc.).

Con expire=5 le indicamos a leafnode que si un tema (thread o hebra) de artículos no ha sido tratado durante 5 días o más, debe borrarlo (lo haremos con texpire). Es decir, si un hipotético tema llamado «Pregunta simple», y sus respuestas «Re: Pregunta simple» llevan 5 días sin ser tratados, todos estos mensajes son eliminados del disco duro para ahorrar espacio (debido a que es considerado como tema antiguo). El número de días puede ser modificado a nuestro gusto mediante esta opción.

Las 2 opciones groupexpire comentadas permiten especificar excepciones a diferentes grupos (por ejemplo, si queremos que en un determinado grupo se guarden los artículos más días) con respecto al tiempo considerado para eliminar artículos. En este sentido, se utiliza para hacer una excepción para un grupo concreto sobre el valor de expire generalizado para todos los grupos (por ejemplo, si un grupo tiene un flujo muy grande de mensajes puede no interesarnos que caduquen a los 5 dias sino a los 3).

El parámetro maxfetch especifica el máximo número de artículos a recoger cada vez de cada grupo. La primera vez que recojamos los mensajes de un grupo nos recogerá este número de posts, así que es recomendable ponerlo a 500 inicialmente y despues de la primera recogida de grupos dejarlo en el valor deseado.

La opción maxcrosspost indica el número máximo de grupos a los que un artículo puede ir dirigido (para evitar el crossposting o repeticion del mismo mensaje en diferentes grupos), o cero para no indicar límite de grupos.

Una vez configurado el programa conectamos a Internet y ejecutamos el programa de recogida de news (fetch) mediante la orden:

  [root@localhost root]#   fetch -v
Mediante esta orden, y al ser la primera vez que llamamos al programa, fetch se dedicará a bajarse de nuestro servidor de news todos los nombres y descripciones de los grupos de noticias existentes para que posteriormente podamos suscribirnos a cualquiera de ellos.

Si queremos seguir el proceso y saber que hace en todo momento leafnode, podemos ejecutar el siguiente comando en otra consola virtual o xterm:

  tail -f /var/log/messages
Veremos algo similar a:
  Jan 2 11:07:00 localhost fetch: Registered group arrakis.binarios
  Jan 2 11:07:00 localhost fetch: Registered group arrakis.consultas
  Jan 2 11:07:00 localhost fetch: Registered group arrakis.general
  Jan 2 11:07:00 localhost fetch: Registered group arrakis.noticias
  Jan 2 11:07:00 localhost fetch: Registered group a.bsu.programming
  Jan 2 11:07:00 localhost fetch: Registered group a.bsu.religion
  (y un largo etc).
El parámetro -v (verbose) le indica a leafnode que muestre mensajes en pantalla indicando qué hace en cada momento. Hay diferentes niveles de explicación (-v, -vv, ...-vvvvv) que nos permitirán saber qué hace el programa y observar la progresión del mismo. Tras un tiempo (dependiendo de la velocidad de nuestro modem), el programa terminará de recoger los nombres de los newsgroups (proceso largo, debido a la gran cantidad de ellos, así que tendremos que tener paciencia esta primera vez de ejecución), y habremos de resetear el inetd para que se active nuestro servidor de news (leafnode):
  [root@localhost root]#   /etc/rc.d/init.d/inet  restart
Por último (aunque suele ser realizado automáticamente al instalar el paquete), debemos asegurarnos de que tenemos abierto el puerto de nntp (de nuestro servidor de noticias) en el archivo /etc/inetd.conf, simplemente comprobando si existe (y creando en caso negativo) una línea similar a la siguiente:
  nntp  stream  tcp  nowait  news  /usr/sbin/tcpd  /usr/sbin/leafnode
Tras esto podemos desconectar de Internet y prepararnos para elegir los grupos a los que deseamos suscribirnos, como veremos a continuación.

Nota: Es posible que si instalamos leafnode desde un fichero tar.gz, el path destino de instalación sea /usr/local/sbin/leafnode, de modo que la linea anterior debe cambiar para ajustarse al path donde leafnode este disponible.

  nntp  stream  tcp  nowait  news  /usr/sbin/tcpd  /usr/local/sbin/leafnode
Las ultimas versiones llevan un mayor número de opciones las cuales podemos (y deberíamos) consultar en la página man de fetch.

12.11 Suscripción a los grupos de noticias deseados

Una vez tenemos la lista de grupos y sus descripciones (Active List) en nuestro disco duro, llega el momento de suscribirse a los grupos que deseamos recoger. Para ello nos vamos a /var/spool/news/interesting.groups y creamos allí ficheros con los nombres de los grupos a los que nos queremos suscribir. Dicho de una manera sencilla, si nos queremos suscribir a es.comp.os.linux y es.ciencia.electrónica, por ejemplo, dentro de /var/spool/news/interesting.groups creamos dichos ficheros sin contenido alguno:

  [root@localhost root]#   touch  es.comp.os.linux
  [root@localhost root]#   touch  es.ciencia.electronica
El comando touch sirve para actualizar la fecha de un fichero, y si no existe se encarga de crearlo (vacío, de cero bytes). El directorio interesting.groups es para leafnode una base de datos de los grupos que debe bajarse, estando especificados en forma de ficheros. Después de los 2 touch, el contenido del directorio es el siguiente:
  [root@localhost interesting.groups]# ls -l
  total 0
  -rw-r--r--   1 news     news     es.ciencia.electronica
  -rw-r--r--   1 news     news     es.comp.os.linux
Mediante esto, cada vez que recojamos los artículos llamando a fetch (como ahora veremos), leafnode se bajará los artículos nuevos de estos 2 grupos. Por supuesto, es posible suscribirse a tantos grupos como sea necesario, creando los ficheros con touch (o creandolos con cualquier editor de texto y grabándolos vacíos).

Tras esto ya estamos suscritos a diferentes grupos en el leafnode, lo cual significa que leafnode se bajará los mensajes de dichos grupos. El siguienet paso sería ir al cliente de news y poner como Groups Server (servidor de news, de nntp o de grupos) el nombre o IP de nuestra propia máquina, como 127.0.0.1 o localhost. Tras esto veremos aparecer en el cliente de news (por ejemplo en Netscape Communicator) la lista de grupos que hay en nuestro sistema (la que se bajó leafnode) y nos podremos suscribir a los grupos que deseamos leer en nuestro netscape (Join Discussion Groups).

Es decir, primero con Leafnode nos suscribimos a los grupos que deseamos recibir en el sistema, y luego cada usuario, en su cliente de news, se suscribe, de dichos grupos que se reciben, a los que desea leer en su cliente.

12.12 Recogida de news

Una vez configurado todo el sistema de leafnode, veamos el proceso que se seguiría cada vez que se deseen recoger los artículos de las news cada día (o cada vez que se use Internet). Para ello, conectamos a Internet (por ejemplo, ejecutamos pppd, enviamos nuestro correo con sendmail, recogemos los mensajes nuevos con fetchmail, etc.) y ejecutamos el siguiente comando:

  [root@localhost root]#   fetch -v
En ese momento, leafnode enviará los artículos que hayamos respondido (si es la primera vez, no habremos escrito nada todavía) y después comenzará a bajarse todos los artículos nuevos de los grupos a los que nos hayamos suscrito en /var/spool/news/interesting.groups. Nótese que leafnode la primera vez se bajará unos 2000 mensajes de cada grupo (depende de la opción maxfetch especificada en el fichero de configuración, por lo que recomendamos que inicialmente se deje en 500 para colocarla en 2000 tras la primera recogida), pero a partir de ese momento en la siguiente conexión sólo se bajará los artículos nuevos.

Nótese también que leafnode se baja todo el grupo (todos los mensajes, no siendo necesario marcar cabeceras), con lo que no es necesario pasar tiempo marcando los artículos deseados, sino que posteriormente dispondremos de todo el grupo para su lectura en offline. Además leafnode es muy rápido bajando los artículos, pues lo hace a altas velocidades y permite también ser añadido al script ip-up para su recogida automática tras la conexión.

Una vez recogidos los artículos estos son dejados en /var/spool/news (en nuestro disco duro) para que puedan ser accedidos por cualquier cliente de news, como Krn, Xrn, Netscape, etc. Por otra parte, una vez por semana leafnode realiza una actualización de la lista de grupos y descripciones (no recogida completa sino actualización) aunque esto se puede evitar si así lo deseamos, como veremos más adelante.

Otra de las ventajas de que la recogida se haga por medio de un comando de consola es que podemos colocar en un script de shell (como ya dijimos, algo similar a un BATCH de MSDOS, pero mucho más potente), que nos haga la recogida automática de correo y news para nuestro ordenador. Para ello creamos un fichero "recoge" con el siguiente contenido:

  # Script para recogida de correo
  echo Enviando correo pendiente...
  sendmail -q
  echo Recogiendo correo entrante...
  fetchmail
  echo Posteando y recogiendo news...
  fetch -v
Tras crear este fichero, le damos permisos de ejecución (chmod +x recoge), y ya puede ser utilizado en alguna consola virtual o xterm para recoger el correo+news automáticamente (enviar y recoger correo y news), mientras navegamos o trabajamos con el resto del sistema.

12.13 Configuración del cliente de news para trabajar con leafnode

La configuración del cliente que utilicemos es muy sencilla, y consiste en cambiar el servidor de news que tuvieramos especificado en las opciones del programa (por ejemplo, news.arrakis.es) por nuestra propia máquina (localhost), con lo que cuando sea pulsado el botón de "Coger nuevos mensajes", por ejemplo, se estará accediendo a nuestra máquina (concretamente a leafnode) para leer dichos nuevos mensajes de /var/spool/news, es decir, los artículos recogido por fetch.

En Netscape Communicator esto se especifica en el menú Edit, opción Preferences, pestaña Mail & Groups, subopción Groups Server, donde especificaremos 127.0.0.1 (o localhost) como Groups Server y nuestro home (/home/sromero en mi caso) en la opción Discussion Groups (news) directory. Tras eso nos suscribiremos a los grupos deseados (cada usuario puede elegir cualquier grupo de los especificados en interesting.groups) mediante la opción Join Discussion Groups del menú File. El proceso es similar para otros clientes como Krn, Slrn (con un sencillo fichero de configuración) o incluso el editor de texto Emacs (que puede utilizarse también para gestionar las news).

Una vez realizado esto, al pulsar sobre "Get new messages" estaremos accediendo a nuestro disco duro para leer los ultimos artículos recogidos por leafnode, y al enviar un mensaje en realidad estará siendo grabado como un fichero de texto en el directorio /var/spool/news/out.going, donde se almacenan todos los mensajes enviados offline hasta que en la próxima conexión fetch los envíe a nuestro servidor de news (y por tanto, sean posteados en Internet).

12.14 Eliminación de noticias antiguas (Texpire)

Cada cierto tiempo debemos limpiar nuestro disco duro para eliminar mensajes antiguos. Esto no significa que debamos entrar en el directorio news para comprobar qué mensajes están atrasados y eliminarlos, porque como ya se ha comentado, leafnode es un programa diseñado para automatizar todo este tipo de procesos. Para ello sólo tendremos que ejecutar el programa texpire (incluido con leafnode), que se encarga de recorrer todos los grupos de que dispongamos en nuestro disco duro y eliminar aquellos threads que sobrepasen sin actualizar el número de días indicado en el fichero de configuración de leafnode (en nuestro ejemplo indicamos 10 días). Al ejecutar texpire la salida suele ser algo parecido a lo siguiente (la aparición de varios grupos a los que no estamos suscritos es debido a que hay mensajes con crossposting, dirigidos a varios grupos):

  [root@localhost root]# texpire
  es.ciencia.electronica: 10 articles deleted, 182 kept
  es.ciencia.misc: 21 articles deleted, 25 kept
  es.comp.hackers: 1 articles deleted, 10 kept
  es.comp.lenguajes.java: 10 articles deleted, 1 kept
  es.comp.os.linux: 100 articles deleted, 690 kept
  total: 142 articles deleted, 1012 kept
Realizando esto regularmente mantendremos nuestro disco duro sólo con los últimos mensajes deseados en lugar de ir llenándolo con la acumulación de mensajes antiguos. La cantidad de días a los que hayamos configurado texpire variará el nivel de limpieza de artículos viejos. Texpire es automáticamente ejecutado por "cron" (la parte de Linux que se encarga de ejecutar procesos a determinadas horas), pero para que cron tenga utilidad es necesario tener conectado el ordenador todo el dia (cron hace las cosas a unas determinadas horas), cosa que viene muy bien en las estaciones de trabajo pero que a nosotros no obliga a usar el "anacron" (no necesita tener el ordenador permanentemente conectado) o a hacerlo manualmente (la forma más sencilla, simplemente llamando a texpire cada 15 días, ejecutándolo en la línea de comandos del sistema).

Normalmente a texpire le costará cerca de un mes de uso empezar a borrar artículos, de modo que aunque inicialmente veamos que al llamarlo no borra los artículos antiguos, debemos dejarlo porque eso quiere decir que ninguno de los artículos ha expirado aún (o que hemos puesto un tiempo de expiración muy grande. Un tiempo razonable es 5 dias, pero eso depende fundamentalmente del tráfico del grupo en cuestión). Además texpire está basado en detectar TEMAS caducados (no artículos). Esto implica que un TEMA caduca cuando no se postee ningún mensaje sobre él (o respuesta) en el tiempo especificado, tras el cual será borrado. Estar basado en temas hace que se tarde más (inicialmente) en comenzar a borrar artículos viejos, pero que a partir de la primera expiración de artículos el proceso sea contínuo y eficiente.

Por Internet es posible encontrar también un programa en PERL llamado texpire.pl el cual hace un borrado artículo por artículo (no basado en cuando un TEMA caduca sino en cuando un ARTICULO caduca) que también puede utilizarse para este fin. No obstante el uso de texpire es más adecuado ya que viene integrado con leafnode y su funcionamiento es excelente.

12.15 ¿Cómo hacer que leafnode no actualice la lista de grupos?

Por otra parte, si no queremos que leafnode trate de actualizar los grupos de news cada semana es posible modificar el código fuente del programa, aunque lo más sencillo es actualizar la fecha del fichero de grupos para que leafnode lo trate como si se acabara de actualizar. Esto se hace mediante la siguiente orden, que podemos poner en cualquier fichero del sistema (por ejemplo en /etc/rc.d/rc.local):

  touch -m /var/spool/news/active.read
Este fichero (active.read) lo usa leafnode para saber cuándo fue la última vez que buscó nuevos grupos de news en el servidor. Cuando pasa una semana (fetch mirará para ello la fecha del fichero), leafnode tratará de bajarse de nuevo la lista de grupos para ver si hay grupos nuevos (proceso que suele tardar bastante). Para evitar esto, touch actualiza la fecha del archivo y fetch nunca detecta que haya pasado una semana, no actualizando la lista de grupos y descripciones.

En las últimas versiones, posiblemente podamos forzar a leafnode a no leer la lista de grupos o a releerla de nuevo usando algún switch de línea de comandos (al estilo fetch -n), para lo cual siempre es aconsejable la lectura de la página man correspondiente (man fetch).

12.16 Problemas de acceso con Leafnode

Si al recoger las news con Netscape o cualquier otro cliente de news obtenemos el siguiente mensaje de error:

  "An error occurred with the News server.
  If you are unable to connect again, contact the
  administrator for this server."
Lo primero que deberemos hacer será comprobar si leafnode está correctamente funcionando en el puerto 119 de nuestra máquina, haciendo un telnet localhost 119:
  [root@compiler]  telnet localhost 119
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
  Connection closed by foreign host.
En ese caso, debemos modificar los ficheros /etc/hosts.allow y /etc/hosts.deny para permitir a nuestros usuarios que tengan acceso a leafnode. Una manera es dejar vacíos ambos ficheros (así es como lo tengo yo) permitiendo a cualquier el acceso a leafnode, y otra es modificar el hosts.deny (nunca he necesitado realizarlo así pero es otra manera de solucionarlo) es dejar el siguiente contenido en el fichero /etc/hosts.deny:
  # /etc/hosts.deny
  # The PARANOID wildcard matches any host whose name does not
  # match its address.
  ALL: PARANOID
  #-- leafnode begin
  leafnode: ALL
  #-- leafnode end
Una salida de "telnet localhost 119" correcta debería ser:
  [root@compiler]  telnet localhost 119
  Trying 127.0.0.1...
  Connected to localhost
  Escape character is '^]'.
  200 Leafnode NNTP Daemon, version 1.4 running at localhost

13. IRC

13.1 ¿Qué es el IRC?

El IRC, acrónimo de Internet Relay Chat, es un sistema de conversación en línea para usuarios de Internet Si disponemos de una conexión a Internet que ofrezca este servicio (cosa muy común en todos los distribuidores de Internet), será posible disfrutar de charlas en tiempo real sobre cualquier tema (de entre los cientos e incluso miles de canales que tendremos disponibles) con una gran cantidad de usuarios.

Para ello tan sólo necesitaremos un cliente de IRC, como ircII (incluido con Linux en casi todas las distribuciones) o, como veremos, con variantes más visuales como BitchX, Zircon, cIRCus o Kirc. Mediante la simple ejecución de nuestro cliente IRC entraremos en nuestro servidor de IRC (previa configuración del programa cliente para que busque en la dirección correcta) y se nos dará la posibilidad de entrar en cualquiera de los canales (channels, agrupaciones temáticas), descritos por sus títulos (topics o títulos «del dia») donde encontraremos otros usuarios y algunos operadores (ops). También existe la posibilidad de hablar en privado con otro usuario, de enviar y recibir ficheros (vía DCC) así como unos usuarios especiales (que llevan una arroba (@) delante de su nombre) llamados operadores del canal (que han sido nombrados operadores por estar registrados en el canal o por otros operadores), que suelen estar ahi para controlar que la conversación gire en torno al tema establecido en el canal, aunque por desgracia en algunas ocasiones (en determinados canales) se dediquen a tirar gente del canal (acciones conocidas como ban o kick).

Los programas clientes de IRC suelen constar de una celdilla de texto en la parte inferior de la pantalla donde el usuario (nosotros) introduce el texto que tras pulsar ENTER es enviado al canal, apareciendo en la ventana de la conversación (prácticamente el resto de la pantalla), donde se pueden leer las frases escritas por todos los contertulios del canal en el orden en que éstas llegaron al servidor. Esto permite tener conversaciones, disputas y cooperaciones entre los diferentes miembros del canal (a veces apareciendo en una ventana en la parte derecha de la pantalla).

Mediante lo que el usuario escribe (que leen los demás) y mediante lo escrito por los demas (leído por nosotros), se forma una discusión que va desde las conversaciones sobre linux en el canal #linux hasta las discusiones sobre DirectX u OpenGL en el canal #programacion.

El aspecto de una conversación en el IRC es similar al siguiente:

  -----------------------------------------------------------
  TALKING on #programacion:
  <Gans> y yo, y yo
  <blad> ese log es oro
  <Gans> yo quiero que volverá para despedirse
  <iXnay_> perar que lo pase a tos los que quieran XDD
  <Surf_> yo mismo ixnay
  <iCorreca_> bueno, me voy pa #linux :-)
  <iCorreca_> alli nos vemos... :-)
  <iXnay_> esperar un poco 

  >>> _
  -----------------------------------------------------------
El IRC constituye pues un medio más rápido de comunicación (y por tanto muy útil) que las news o el email, donde necesitaremos algunas horas (tal vez 1 ó 2 días) para recibir respuesta a nuestra pregunta Lo primero que debemos averiguar es el nombre de nuestro servidor de IRC, tal como lo es irc.arrakis.es, el servidor irc de arrakis (consultar con nuestro proveedor de Internet). La mayoría de IRCs de España están interconectados dando lugar a lo que se conoce como el IRC Hispano, que será nuestro punto de encuentro con otros usuarios del IRC Español

Si entre nuestras necesidades de utilización de Internet está la de mantener conversaciones (escritas) con varios interlocutores organizándolas por canales aludiendo a diferentes temas, entonces el Internet Relay Chat (IRC) es nuestro servicio.

13.2 El cliente de IRC IRCII (o EPIC)

IrcII es uno de esos programas pequeños y sencillos que proporcionan gran efectividad para su tarea, tal y como lo es ftp para la transferencia de ficheros. IrcII es un cliente de IRC que de nuevo es casi parte del S.O. Linux, ya que lo encontraremos en cualquier distribución de GNU/Linux existente. Muchos de los que están leyendo esto probablemente habrán utilizado ya el IRC mediante el programa MIRC (o PIRCH) de Windows95... pues hay que decir ante todo que IRCii es la antítesis de MIRC; es decir: ircII es en modo texto, en principio no soporta colores, y todo funciona a base de comandos (aunque con la posibilidad de crear menúes y alias), pero es uno de esos programas que resultan esenciales, sobre todo en sistemas pequeños (como la gente que se lleva un diskette de arranque de Linux con soporte para redes y con el ircII para disfrutar del IRC en las Universidades, donde no todo el mundo dispone de una cuenta Unix, o donde no se suele permitir la instalación de clientes de IRC ni juegos de rol). Lo más probable es que ya se disponga de él en el sistema, aunque siempre puede buscarse en el ftp de programas Linux habitual

La instalación en formato rpm o deb no necesita comentarios, mientras que para los ficheros .tar.gz suele haber (una vez descomprimidos con tar xvzf nombre_fichero) un script de instalación (easyinst) que realizará el proceso de copia de los ficheros a sus directorios correspondientes. Una vez instalado, y si estamos conectados a Internet, basta con llamar al cliente de IRC ircII para tratar de conectar con un servidor de IRC, mediante la invocación del ejecutable irc:

  [root@localhost sromero]# irc
O mejor, especificando el nombre que tendremos dentro del IRC (nickname) y el servidor a utilizar:
  [root@localhost sromero]# irc SuperJuan irc.encomix.es
Al ejecutarlo tratará de conectarnos (si no le hemos especificado servidor en la línea de comandos) a cualquiera de los servidores de IRC que tiene establecidos por defecto (y que podremos cambiar editando el fichero /usr/lib/irc/ircII.servers), aunque también es posible especificarlo manualmente (tras ejecutar irc) mediante la siguiente orden:
  /server irc.ctv.es
Server es uno de los múltiples comandos de ircII (también disponibles en el resto de clientes de IRC, por supuesto), mediante el cual le indicamos al programa que conecte con un servidor determinado. El hecho de llevar una barra (/) antes del comando le indica al IRC que estamos tratando de ejecutar el comando server en vez de tratar de escribir la cadena "server irc.arrakis.es" en pantalla).Esto prentende ser una sencilla introducción a los distintos comandos del IRC, de manera que se puedan utilizar estos en cualquiera de los clientes de IRC visuales (con ventanitas y menúes) que podamos tener instalados en el sistema.

13.3 Como entrar en canales del IRC

Una vez conectados al IRC ya es posible entrar en un canal de conversación. Es posible listar los canales del IRC con el comando /list, aunque no es recomendable debido a la gran cantidad de ellos. Por contra es mejor conocer los canales a los que queremos entrar (como #linux, #programacion, #programacion_d_juegos, #hacking, #emuladores, o, si tenemos problemas, #ayuda_irc). Para entrar en un canal se utiliza el comando /join seguido del canal al que se desea entrar:

  /join  #linux
Tras ejecutar esto, nos encontraremos dentro de un canal muy poblado hablando sobre el mejor Sistema Operativo existente hasta el momento. Cualquier frase que tecleemos en este momento (es decir, cualquier cosa que no sea un comando, precedido por '/'), será enviado al canal y leido por el resto de usuarios del canal. Si es nuestra primera sesión de IRC, mejor algo de nettiquete y una sencilla presentación y saludo al canal, seguido de cualquier duda o ayuda que se quiera dar al resto de usuarios. Para saber quien está conectado en un determinado canal, entramos en él y ejecutamos el comando /who * (aunque también puede hacerse mediante el comando /names #canal, en este caso, /names #linux) Si en cualquier momento deseamos salir del canal, basta con ejecutar el comando /part (o /leave) para abandonar el canal actual, (o part #canal) ya que, como veremos a continuación, no se está limitado a hablar en un sólo canal temático

13.4 Multiventana con IRCII

El IRC no está diseñado para hablar en un único canal. Mediante /join podemos entrar en más de un canal, aunque en principio los textos provenientes de uno u otro se mezclarán en la misma pantalla (con una indicación acerca de cuál es el canal de procedencia), además de que para hablar en uno u otro canal se necesitará utilizar el comando /msg (con lo cual dirigiremos los mensajes a un canal u otro):

  /join #linux
  /join #emuladores
  /msg #linux Hola a los usuarios de Linux!
  /msg #emuladores Hola! Ha salido algun emulador hoy?
  /msg pepe Hola Juan!
Con IRCii no estamos obligados a leer todo el texto en la misma ventana, sino que es posible crear diferentes ventanas virtuales (escondidas, de manera que sólo vemos una en pantalla, o partidas en la misma pantalla), mediante el comando /window new, y cerrar la ventana actual mediante /window kill. Podemos cambiar entre ventanas mediante las teclas Ctrl+x p (ventana anterior o previous, mediante Ctrl+x simultáneamente, soltar, y luego pulsar 'p') y Ctrl+x n (siguiente o next). Veamos como cambia la cosa:
  /join #linux
  /window new
  /join #emuladores
  (ctrl+x p -> estamos en #linux)
  Hola a los usuarios de Linux!
  (ctrl+x n -> estamos en #emuladores)
  Hola! Ha salido algun emulador hoy?
  /window new
  /query Juan
  Hola Juan!
Tras esto dispondremos de 3 ventanas entre las que podremos cambiar en cualquier momento, una en la que se habla en #linux, la de #emuladores, y una tercera donde se mantiene una conversación privada con Juan (mediante el comando /query). Mediante /window hide es posible hacer una ventana oculta (en vez de partir la ventana actual). Es muy recomendable tener instalado el paquete screen para el soporte multiventana, o trabajar en xterms, donde este soporte también se da. De otro modo, el soporte multiventana se dará en pantalla partida (tantas secciones como ventanas dispongamos).

13.5 Resumen de comandos del IRC

Entre los comandos más habituales del IRC están aquellos que podemos ver en el cuadro siguiente (donde lo denotado entre corchetes [ y ] especifica que dicho parámetro es opcional).

  /help [comando]             Proporciona ayuda en línea sobre el
                              comando especificado.

  /join #canal                Entra en el canal especificado
                              Ej: /join #linux).

  /list [#cadena]             Lista los canales disponibles en el
                              servidor, con la posibilidad de especificar
                              una cadena de búsqueda. (#cadena).
  
  /whois [usuario]            Proporciona datos acerca del usuario que
                              se le especifique, como su nombre (si configuró
                              correctamente su cliente de IRC), dirección
                              email o dirección IP.
                              Ej: /whois NoPito

  /me [frase]                 Indica al resto del canal lo que piensas,
                              resaltándolo. Es el responsable de leer frases como:
                              «_Juan_ piensa que esta conversación es muy tonta.».
                              (Ejemplo: /me esta aburrido!).
  
  /part [#canal]              Abandona un canal (o el canal actual si no se
                              especifica otro).

  /msg [usuario] [mensaje]    Envía el mensaje especificado al usuario que se le
                              indique (ej: /msg juan Hasta luego!).

  /dmsg [usuario] [mensaje]   Similar a msg, pero para un chat dcc.
  
  /query [usuario] [mensaje]  Permite iniciar una conversación privada
                              (un query) con otro usuario.
                              Ej: /query NoPete

  /query                      Cierra la conversación privada actual.

  /nick [nombre]              Permite cambiar nuestro nickname al especificado.

  /dcc send [usuario] [fichero]
                              Permite el envío de un fichero al
                              usuario especificado
                              Ej: /dcc send Juan /etc/dosemu.conf
 
  /dcc get [usuario] [fichero]
                              Permite recibir un fichero de un usuario.

  /dcc chat [usuario]         Permite iniciar un chat (conversación directa)
                              con un usuario.

  /dcc close chat [usuario]   Cerrar el chat previamente abierto.

  /quit [razon]               Sale del programa y, opcionalmente, muestra un mensaje
                              con la razón del abandono
                              Ej: /quit Me tengo que ir!

  /away [razon]               Avisa al resto de usuarios de que nos vamos a ausentar
                              momentáneamente del IRC.
                              Ej: /away El telefono!

  /invite [usuario] [#canal]  Invita al usuario especificado al canal que se le indica.

  /who *                      Muestra los nombres de los usuarios del canal actual.

  /clear                      Limpia la ventana de texto actual.

  /date o /time               Muestran la fecha u hora actual.

  /exec -out [comando]        Ejecuta el comando especificado (por ejemplo, ls),
                              y saca los resultados por la pantalla del canal.

  /flush                      Hace parar la salida obtenida desde el servidor.
                              Muy util para teclearlo, por ejemplo, ante un /list.

  /ignore [usuario] [tipo_de_mensaje]:
                              Ignora los mensajes enviados por determinados
                              usuarios (es decir, no aparecen sus frases en
                              pantalla). En él usuario pueden especificarse
                              comodines (*), mientras que el tipo de mensaje
                              puede ser ALL (todos), NOTICES (notificaciones),
                              PUBLIC (conversación normal del canal),
                              INVITES (invitaciones) o NONE (ninguno).
                              Ejemplo: /ignore Pepe ALL -PUBLIC
                              (ignorar todos los mensajes de Pepe excepto
                              (-) los que vayan al canal (publicos)).

  /leave [#canal]             Deja el canal especificado o el actual si no
                              se especifica ninguno.

  /mode                       Permite a los operadores cambiar modos (ver /help mode).

  /names [#canal]             Muestra los nombres de los usuarios del canal
                              especificado (o de todos si no se especifica).

  /notice [#canal] [mensaje]  Envía un mensaje privado a todos los usuarios
                              de un canal.

  /notify [usuario]           Permite especificar una lista de usuarios para que al
                              entrar al IRC se nos avise de si estos están presentes,
                              o de si entran o salen del IRC (para encontrar siempre al
                              amiguete de turno). Ej: /notify pepito.

  /ping [usuario]             Envía un ping (una señal con la hora actual) a un
                              usuario para que este la devuelta y podamos saber (por el
                              tiempo transcurrido) la velocidad de respuesta de la red
                              (si está lenta, rápida...).

  /save [opciones] [fichero]  Salva las opciones actuales del IRC en un fichero
                              (ver /help save).

  /say y /send +texto         Imprime el texto especificado en el canal, permitiendo
                              alias, binds, etc.

  /set log on                 Permite guardar en un fichero de texto lo hablado en
                              las sesiones.

  /set logfile [fichero]      Permite especificar el fichero a usar
                              (ej: /set logfile /home/somero/milog.txt).

  /window log on              Permite guardar en un fichero de texto lo hablado
                              en la ventana actual.

  /window logfile [fichero]   Permite especificar el fichero a usar
                              (ej: /set logfile /home/somero/milog.txt).

  /alias [comandos]           Crea un alias para [comandos].
                              También permite parámetros.
Aparte de los comandos especificados, otro comando muy útil es /alias, que nos permitirá crear atajos a órdenes habituales:
  /ALIAS  Hola  MSG #linux Hola a todos los usuarios del canal!
  /ALIAS  Hola  MSG  $0  Hola, $0! $1
Para este último alias, tras ejecutarlo, si tecleamos «/Hola Juan Que tal?», será expandido a «/msg Juan Hola, Juan! Que tal?», con lo que dicho saludo aparecerá en la pantalla de Juan como mensaje privado dirigido a él. Otros comandos interesantes (ver lista) son los comandos de DCC, que nos permitirán enviar y recibir ficheros a/de otros usuarios del IRC El resto de comandos del IRC (y una ayuda y descripción de todos ellos), puede encontrarse en el propio programa (/help comando), o en el subdirectorio /usr/lib/irc/help, de donde cuelga toda una estructura de directorios con ficheros de ayuda en texto puro (editables con cualquier procesador de textos o listables con cat o less) con el nombre de los distintos comandos. Todas estas opciones se suelen incluir en scripts (similares a ficheros de comandos) que son cargados durante el arranque y añaden nuevas opciones y funcionalidades al programa. Otra referencia es /usr/doc/irc*, donde hay ejemplos de menúes, la página man de ircII y los cambios que han ido habiendo en el programa desde su versión inicial

13.6 Resumen de teclas de IRCII

Las teclas más utilizadas en ircII son las siguientes:

  Ctrl+x p      :   ir a la ventana virtual anterior
                    (o comando /window previous).
  Ctrl+x s      :   ir a la ventana virtual siguiente
                    (o comando /window next).
  Ctrl+x [nº]   :   abrir N ventanas
                    (o comando /window add N>.
  Ctrl+x c      :   crea una nueva ventana
                    (o comando /window add).
  Ctrl+x a      :   va a la última ventana.
  Ctrl+x k      :   cierra la ventana actual.
  Alt+p         :   subir por la pantalla actual.
  Alt+n         :   bajar por la pantalla actual.
  Ctrl+b        :   escribir en negrita.
  Ctrl+_        :   escribir en subrayado.
Además disponemos de Ctrl+c para interrumpir el programa.

13.7 Clientes graficos de IRC

Como veremos en la próxima entrega, existen otros clientes de IRC para X Window con un sistema de manejo más sencillo: soportando multiventana, autoraise (es decir, que cuando cambia el contenido de una ventana esta cambia a primer plano), colores, menúes para los comandos más habituales, etc. Los veremos en versiones X Window, de txto (aunque más avanzados que ircII, como BitchX) e incluso específicos para KDE (kirc, kvirc), y nos harán la comunicación en el IRC mucho más sencilla, sin olvidar los comandos que hemos aprendido hoy, que complementarán todo lo que les falte a estos clientes (al disponer de unas opciones determinadas se nos limita el control a lo dispuesto por el programa, mientras que mediante los comandos IRC, comentados hoy, podremos suplir cualquier necesidad que no esté disponible en los menúes).

TkIRC no es un cliente de IRC en sí mismo, sino que utiliza como programa de IRC el famoso ircII, proporcionando un front-end gráfico (una especie de menúes encargados de interactuar con el propio ircII), facilitando enormemente las tareas más habituales en el IRC. El programa puede obtenerse desde la página Web de sus creadores, www.north.de/ atte/tkirc, y ocupa apenas unos 100Kb. Para su utilización es necesario tener instalado el propio programa ircII, y el intérprete de Tcl/Tk, que es el lenguaje con el que está programado este front-end para XWindow. Además es posible añadirle scripts (ficheros con nuevos comandos y opciones) en tcl, lo cual le quita muchas limitaciones al programa (siempre puede ser ampliado por el usuario).

Kirc y Ksirc son 2 clientes de IRC para el Window Manager KDE. Son bastante visuales y disponen de interesantes opciones. Pueden obtenerse versiones estables de los mismos en www.kde.org, en la página de aplicaciones de KDE.

KvIRC es uno de los clientes de IRC más visuales y sencillos de manejar de todos: soporta colores, nick-completion (relleno de los nombres de las personas a las que hablamos cuando sólo escribimos las letras iniciales de los mismos), imágenes de fondo, configuración por medio de menúes, acceso sencillo a los comandos básicos del IRC por medio de una barra de iconos, integración con KDE, capacidad de lanzar netscape (o cualquier otro navegador) pinchando sobre cualquier dirección que aparezca en la conversación, sencilla instalación, mantenimieno y configuración, y un aspecto muy amigable (bastante similar al programa Mirc de Windows en cuanto a funcionamiento). Puede obtenerse en www.kvirc.org.

cIRCus es uno de los más sencillos clientes de IRC de Linux. Puede obtenerse en diferentes formatos (tar.gz y rpm) en la página Web de sus creadores, http://www.nijenrode.nl/ ivo/circus_data/download.html. En tiene características multiventana (al estilo de mIRC para Windows), la utilización de colores distintos para nuestros comentarios y los del resto de participantes en el IRC, así como la posibilidad de activar autoraise en las ventanas que deseemos. Autoraise es una propiedad que hace que cuando el contenido de una ventana cambia, ésta pase al primer plano, y sepamos que quien está hablando con nosotros ha dicho una nueva frase. Además soporta correctamente todos los acentos y carácteres españoles, y permite copiar/pegar con el mouse, sin olvidar que puede usarse arriba y abajo en los cursores para ir adelante y atrás en el historial de órdenes, pudiendo repetir así cualquier frase dicha en el pasado. Por otra parte, cIRCus tiene un sencillo menú en la parte superior con botones que sustituyen a las opciones de conexión, desconexión, entrada en canales (join), dar op, quitar op, dejar un canal, o salir del programa, pudiendo ejecutar además los comandos de IRC aprendidos el mes pasado, con lo que se puede decir que este programa aporta sencillez y funcionalidad a la potencia de los comandos del IRC. Su configuración se realiza editando un fichero de texto llano en nuestro directorio HOME (/home/nombre/.circusrc), desde donde podemos cambiar cualquier aspecto del programa: fuentes, menúes o identidades (al final del fichero, secciones Nick, IRCNAME, notify y Server List, las cuales nos permitirán especificar nuestro nick, nombre del cliente, lista de notificaciones y lista de servidores de IRC por defecto).

Zircon (http://catless.ncl.ac.uk/Programs/Zircon/) es otro cliente de IRC basado en Tcl/Tk (aunque este no necesita ircII para funcionar sino que utiliza las propias facilidades de red de este lenguaje). Necesitaremos al menos la versión 8.0.3 de este intérprete para su instalación, que se realiza desde un script de Tcl/Tk llamado installZircon quien se encargará de la correcta ubicación del programa en nuestro disco duro, además de permitirnos la lectura de documentos de ayuda y FAQs sobre Zircon.

Existen multitud de clientes de IRC gráficos y de texto para Linux. Una manera de ir directamente a un listado de clientes para poder seleccionar el que más nos interese es mediante www.freshmeat.net, tecleando irc en la celdilla de texto de búsqueda y pulsando Intro. Freshmeat nos mostrará toda la lista de programas relacionados con el IRC (muchos de ellos clientes) que haya en su base de datos, así como las direcciones de download y páginas de los mismos. Otro repositorio de clientes IRC para Linux está disponible en www.linuxberg.com, en la sección Software.

13.8 El cliente de IRC, BitchX

Uno de los clientes de IRC más potentes de los comentados aquí es BitchX, que trabaja en consolas de texto pero con facilidades propias de los clientes gráficos. Incluye gran cantidad de comandos y scripts, de tal modo que los más usados scripts de ircII han sido incluidos en este cliente como comandos del mismo. Es posible obtenerlo de ftp://ftp.bitchx.org (aunque también hay disponibles versiones rpm en el ftp de redhat). Asimismo, podemos obtener scripts y opciones adicionales para BitchX en http://www.phantasy.com/ markm/bitchx y http://scripts.bitchx.com. Está disponible tanto en rpm como en deb, tgz y código fuente, siendo éste último el más recomendable si deseamos habilitar el soporte para la fuente con caracteres en castellano o LATIN1.

Aunque por su nombre y la X final del mismo pudiera parecer que es un programa para XWindow, en realidad BitchX funciona en consolas de tipo texto o xterm, con lo que no necesitaremos el entorno de ventanas X para hacerlo funcionar (lo cual lo hace ideal para muchos usuarios). BitchX incluye una serie de características que lo hacen generalmente apreciado como cliente de IRC, gracias a opciones como NickCompletion, inclusión de los scripts más utilizados como comandos estándar del mismo, soporte multiventana (tanto partida como en ventanas virtuales), soporte de colores para distinguir los textos dirigidos a nosotros del resto de frases, modo historia de todo lo escrito (es decir, que se puede recorrer todo lo escrito mediante las teclas del cursor arriba y abajo, pudiendo reentrar cualquier frase al canal), tratamiento de la ventana como un buffer (con lo cual se puede subir y bajar por la misma con AvPág y RePág), etc.

Otra de sus principales características es que cuando alguien trata de floodearnos (es decir, enviarnos mucho texto muy rápidamente, tal vez tratando de molestarnos o estropear nuestra conexión), BitchX lo tira automáticamente de la conversación, además de incluir opciones de autoentrada en canales si alguien nos tira del mismo.

Asi pues, debe quedar claro que BitchX es uno de los clientes de IRC más completos y funcionales, con muchos seguidores (aunque también hay gente que no le gusta). Para iniciar BitchX se hace, pues, desde la línea de comandos, indicándole en esta el nickname que deseemos usar en el IRC, el servidor de IRC y el puerto (esto último opcional), todo ello en formato BitchX Nick Server:Puerto. Ejemplo:

  [sromero@compiler BitchX]$ BitchX  Juan  irc.arrakis.es
Si no queremos especificar esto desde la línea de comandos es posible utilizar variables de entorno que definan el Nick, Servidor, y nombre del usuario para poder invocar al cliente de IRC simplemente mediante BitchX. Para ello BitchX proporciona al usuario la posibilidad de incluir estos datos en las variables de entorno IRCNAME, IRCNICK e IRCSERVER, tanto en ficheros de inicialización (.bashrc, .profile) como en la línea de comandos, tal y como puede verse en el siguiente ejemplo:
  [sromero@compiler BitchX]$  export IRCNAME="Juan Sanchis"
  [sromero@compiler BitchX]$  export IRCNICK="JuanChis"
  [sromero@compiler BitchX]$  export IRCSERVER="irc.arrakis.es"
Además hay otros parámetros que podemos consultar en la página man de BitchX, como la autoentrada en canales:
  BitchX -c \#linux

13.9 Como obtener el teclado en castellano en BitchX

Si el BitchX que estamos usando no dispone de soporte para caracteres latinos (acentos, eñes, etc.), podemos forzar a BitchX a que los visualice correctamente editando el fichero config.h de los fuentes del programa, habilitando (como pone en el README del programa) la opción para LATIN1, y recompilando el programa.

13.10 Comandos de BitchX

Con BitchX es perfectamente posible utilizar los comandos básicos del IRC vistos el mes pasado mediante ircII, es decir, /server, /quit, /join, /part, /query, etc.

Aparte de estos, ahora sí que es posible la utilización del comando /list para listar los canales del servidor de IRC. Recordemos que este comando también estaba disponible en ircII, pero la salida por pantalla era tan rápida que era imposible ver los canales disponibles. En BitchX la salida es igual de rápida, pero disponemos de las teclas AvPág y RePág para subir y bajar en el buffer de la ventana, y por tanto ver los canales una vez listados (o leer textos anteriormente escritos en un canal, consultar algo que dijimos, etc.).

Una vez se entra a un canal (con /join #canal), es posible ver la lista de operadores del canal mediante la tecla F2, y la lista de usuarios mediante F3 (aunque sigue pudiendo usarse el comando /names #canal).

Por último, y en cuanto a texto se refiere, cabe nombrar el soporte de colores y estilos de BitchX. Por ejemplo, para escribir un texto en negrita, basta con pulsar Ctrl+b (de bold, resaltado), y despues escribir el texto en cuestión, que aparecerá en negrita (ojo con esto pues los usuarios de ircII no lo verán así), y para escribir frases en colores, en cualquier punto de la frase puede utilizarse Ctrl+C y a continuación introducir en la frase el número de color (soltando Ctrl+C), con lo que aparecerá en el color correspondiente. Ejemplo:

  > Hola a <CTRl+C>2todos!
Hará que aparezca "todos" en azul. Otros comandos que pueden. utilizarse en BitchX son /shell (para ejecutar copias de nuestra shell de comandos) /telnet (para hacer telnet a cualquier servidor desde dentro de BitchX), y /ftp (para hacer ftp desde el IRC), comandos no habituales en los restantes clientes de IRC

En BitchX también es posible la transferencia de ficheros vía DCC, para ello se disponen del típico comando /dcc send "nick fichero", del que ya disponíamos en ircII. La novedad de BitchX es que incluye por defecto la opción de aceptar todos los ficheros que te sean enviados, opción que se puede cambiar mediante /dcc auto off, de tal modo que cuando se nos envie un fichero, en lugar de ser aceptado automáticamente se nos informará de esto y mediante la tecla F5 se podrá obtener la lista de ficheros que nos son enviados, para aceptar cualquiera de ellos si nos interesa.

Otro comando importante es /set, que nos permitirá cambiar parámetros de configuración de BitchX, como por ejemplo desactivar el pitido que suena cuando nos hacen un Query en otra ventana (/set beep off). Más información mediante /help set o en la documentación del programa.

13.11 Nick Completion en BitchX

Una de las cosas más molestas en el IRC al haber diferentes personas en un canal y querer referirnos a una de ellas suele ser escribir el nombre del mismo, pues la mayoría de nombres en el IRC contienen carácteres extraños, son combinaciones de mayúsculas y minúsculas, o simplemente, puede apetecernos no escribir dicho nombre pero que esa persona sepa que le hablamos a ella. Para ello BitchX incorpora una funcionalidad conocida como Nick Completion, o completado de nicks, que consiste en que al pulsa la combinación de teclas CTRL+R, BitchX tratará de completar el nick que hayamos comenzado a escribir en la línea de comandos, esta tecla puede usarse en cualquier momento de la frase, y sus efectos se pueden observar en el siguiente ejemplo. Supongamos que existe un usuario en el IRC llamado AvIaToR, al cual queremos contestar o comentarle algo:

  > Av<CTRL+R>: Como estas?
  > Ya te lo he dicho antes, Av<CTRL+R>...
Estas 2 frases se expanderán automáticamente a:
  > AvIaToR: Como estas?
  > Ya te lo he dicho antes, AvIaToR...
Otra posibilidad es utilizar la combinación de teclas Control más la tecla de '+' (Ctrl+'+'), que al principio de una frase completa el nick que hayamos comenzado a escribir y lo completa con 2 puntos (:), para dirigir frases directamente a cualquier usuario:
  > Av<CTRL+'+'> lo estoy buscando...
Se expande a:
  > AvIaToR: lo estoy buscando...
Una última posibilidad es la utilización de la tecla TAB al principio de una frase, que se expanderá a un /msg Nick, donde Nick será uno de los usuarios del canal y cambiará dependiendo del número de veces que sea pulsada (una vez, aparece el primer usuario, otra vez, el segundo, etc.). Esto nos permitirá enviar mensajes con relativa facilidad a cualquier usuario del canal.

13.12 BitchX: Soporte multiventana

Una de las características principales de BitchX es el soporte multiventana nativo. Al igual que en ircII, es posible entrar en varios canales o conversaciones simultáneamente, y que aparezcan todos ellos en la ventana principal de BitchX, con una indicación al principio de cada uno de ellos que nos indique de qué canal viene cada frase. Esto es muy molesto y bastante inviable, y además solo hay un canal activo (al que va el texto que escribimos) que podemos cambiar mediante la tecla CTRL+X (con lo que irá cambiando entre los diferentes canales a cada pulsación de la misma).

Para evitar esto BitchX incluye soporte multiventana tanto en pantalla partida como en ventanas virtuales, es decir, es posible partir la pantalla en diferentes secciones y disponer de un canal o un query en cada una de ellas, así como crear diferentes pantallas virtuales (de la que sólo vemos una, la visible) y cambiar entre ellas, con lo que dispondríamos de una ventana aislada para cada canal, y el texto no se mezclaría.

Para partir la pantalla es posible utilizar el comando /window new, y para crear una pantalla virtual (mucho más recomendable) se utiliza el comando /window new hide. Este comando puede ser utilizado tantas veces como pantallas virtuales se deseen, de tal modo que irán siendo numeradas desde el 2 (la 1 es la pantalla que aparece por defecto) hasta n (donde n es el número de pantallas creadas). Una vez se han creado las diferentes ventanas es posible cambiar entre ellas mediante ALT+nº (ALT+1, ALT+2, etc.) en la consola de texto o mediante ESC-nº si estamos en XWindow (en este último caso, no consiste en pulsar ambas teclas simultáneamente sino en pulsar ESC, liberar la tecla y pulsar un número de la fila superior de números, no del teclado numérico).

De esta forma, si deseamos disponer de 3 ventanas virtuales, con el canal #linux en la primera, #programación en la segunda, y una conversación privada en la tercera, es posible hacer lo siguiente:

  > /window new hide
  > /window new hide
  > /join #linux
  > ALT+2 o ESC-2
  > /join #programacion
  > ALT+3 o ESC-3
  > /query JuanChis
Una vez hecho esto dispondremos de las 3 ventanas creadas y ya podremos ir a cualquiera de ellas a decir las frases relativas a cada canal, sin que las salidas se mezclen en pantalla ya que BitchX nos separará la salida de las mismas a cada canal. Se puede decir, pues, que cada comando /join, /part o /query se aplica a la pantalla virtual que tengamos activa en ese momento. A continuación se ofrece un extracto de la ayuda en línea proporcionada por BitchX para el uso de combinaciones de teclas y la diferentes opciones relativas a ventanas (tanto secciones de pantallas partidas como ventanas virtuales):
  > Control+W+'-' = Hace la sección actual una línea más estrecha.
  > Control+W+'+' = Hace la sección actual una línea más ancha.
  > Control+W+l     = Lista las ventanas disponibles.
  > Control+W+k    = Elimina la ventana/sección actual.
  > Control+W+h    = Oculta la ventana/sección actual.
  > Control+W+b    = Iguala el tamaño de las secciones.
  > Control+W+n    = Cambia a la ventana siguiente.
  > Control+W+p    = Cambia a la ventana anterior.
Aparte de estas teclas, están disponibles AvPág y RePág para moverse por el buffer de cualquier ventana y los cursores arriba y abajo para recuperar frases anteriormente escritas.

13.13 Como utilizar scripts en BitchX

Para utilizar scripts en BitchX (funciones y comandos nuevos para un cliente de IRC), tan sólo hay que copiarlos en el directorio .BitchX y cargarlos luego en el programa mediante /load script, teniendo el comando disponible a partir de ese momento. Lo importante de BitchX es que los scripts pueden proporcionar un aspecto diferente al entorno del programa, al ser este totalmente programable, con lo que las posibilidades de BitchX son realmente ilimitadas.

Los scripts se pueden obtener a partir de la página Web del propio programa, http://www.bitchx.com o en http://scripts.bitchx.com.

13.14 Instalar un servidor de IRC

Mediante Linux no sólo podemos conectarnos a los IRC existentes (como el IRC Hispano, por ejemplo) utilizando clientes de irc, sino que también es posible obtener *servidores* de IRC para convertir nuestra máquina en punto de encuentro de amiguetes o usuarios varios. Para ello simplemente hay que obtener, instalar y configurar un servidor de IRC en nuestra máquina, como ircd. La versión que utiliza el autor es la 10.02, (fichero ircu2.10.02-LinuxELF.tar.gz, ver http://www.argo.es/ jcea/irc/ircd.html, una estupenda página sobre redes e IRC), que consiste en un fichero tar.gz descomprimible con «tar -xvzf ircu2.10.02-LinuxELF.tar.gz», con los siguientes ficheros:

  [sromero@compiler ircd]$ ls
  Authors       LICENCE       config.h      ircd*
  ircd.motd     ircd.rehash*  INDEX         README
  example.conf  ircd.conf     ircd.off*     remote.motd
(pueden cambiar según versiones, y también está disponible en formato deb y rpm en los sites correspondientes).

Una vez descomprimido (aunque también están disponibles las fuentes para compilar el programa adaptándolo a nuestras necesidades), y como se comenta en el README del programa, basta con editar el fichero de configuración ircd.conf y adaptarlo a las funcionalidades necesarias, para luego ejecutar el daemon ircd. Esto se hace mediante la ejecución del programa con el comando./ircd, y como un usuario que no sea root, preferentemente llamado irc) para realizar la inicialización del daemon, y así permitir hasta 252 conexiones a nuestro sistema. Lo más recomendable es instalar la versión rpm (o deb, conviertiendola mediante alien) creando previamente un usuario llamado irc (con adduser) y cambiando su password a nada (a una cadena vacía, editando /etc/passwd o mediante el comando passwd), haciendo lo siguiente:

  [sromero@compiler ircd]$  adduser irc
  [sromero@compiler ircd]$  rpm -i  ircd.rpm
Para finalizar el uso del daemon de irc basta con ejecutar el script ircd.off. Este rpm (creado por Pablo Saratxaga, habitual de es.comp.os.linux) puede obtenerse de la Web de S.u.S.E (www.suse.com), entrando en su FTP, o desde cualquiera de sus mirrors: ftp://ftp.tu-chemnitz.de/pub/linux/suse/5.3/i386.de/suse/n1/ (fichero ircd.rpm), así como en los FTPs de las otras distribuciones Linux (Redhat, Debian, etc.). La versión empaquetada por Pablo Saratxaga dispone además del fichero ircd.conf correctamente configurado para el servidor de IRC, y tan sólo habremos de modicarlo si queremos que ircd corra en una red de servidores. Otro fichero interesante es ircd.motd, que nos permitirá variar el mensaje a la entrada de nuestro IRC. Una vez instalado el daemon/servidor de irc, es posible testear nuestro servidor accediendo a nuestra propia máquina:
  [sromero@compiler ircd]$  irc  Juan  localhost:6667
Si todo está correctamente instalado será posible entrar en diferentes consolas virtuales y repetir el proceso para tener varios usuarios en nuestro IRC. Ya sólo nos falta, pues, editar el fichero ircd.conf para dotar a nuestro irc de los canales, comandos y datos que tengamos pensados para él, y dar nuestra dirección IP a las personas que queramos que se conecten al mismo.

14. Bash shell/Comandos básicos

14.1 ¿Qué es un shell? / Historia sobre Bash

¿Qué es un shell?

Lo que ocurre internamente en tu ordenador cuando este ejecuta una acción, tal como, leer un fichero, grabar un documento, acceder al CD-Rom o ejecutar un programa, es un proceso bastante complicado y que requiere una serie de acciones por parte de tu sistema operativo. Por si esto no es suficiente, necesitamos también, una manera de poder comunicarnos con nuestro sistema operativo para decirle que es lo que queremos hacer. Es aqui donde un intérprete de comandos (shell) hace su trabajo.

Un shell o intérprete de comandos es el proceso encargado de traducir los comandos que los usuarios introducen, a instrucciones que el sistema operativo entiende. Es el programa que se encuentra entre el sistema operativo y el usuario ,el cual nos hace la vida mas fácil.

Todo usuario que quiera profundizar en un sistema Unix/linux tendrá más tarde ó temprano que familiarizarse con el shell de su sistema, el cual se convertirá en una herramienta imprescindible en la administración diaria del sistema, tanto por su potencia como versatilidad.

NOTA: En esta sección nos centraremos en el intérprete de comandos llamado BASH, por ser uno de los más extendidos, usado por defecto en muchas distribuciones linux, así como potente y fiable (Puede que esta afirmación, no sea compartida por algunos usuarios ;-). Si tú eres uno de ellos, colabora con esta Faq y mándame una sección, con por ejemplo, informacion sobre C-shell (csh/tcsh) ó Korn-shell (ksh), te aseguro que será publicada).

Historia sobre bash

El "Bourne Again shell" (Bash) fue creado para usarlo en el proyecto GNU. La intención fue que fuese el intérprete de comandos estandar en el sistema GNU. "Nació" oficialmente el domingo, 10 de enero de 1988. Brian Fox fué quien programó las primeras versiones de Bash y continuó actualizándolo hasta 1993. A principios de 1989, Chet Ramey empezó a ayudar a Brian y fué el responsable de muchos arreglos en el código y nuevas características.

Chet Ramey es ahora el mantenedor oficial del shell bash sindo la última versión la 2.x.

14.2 /etc/profile, .bash_profile, .bashrc, .bash_logout

Existen tres ficheros en el directorio de un usuario que tienen un significado especial para el shell Bash. Estos ficheros permiten al usuario configurar el entorno de su cuenta automaticamente cuando entra en el sistema, cuando arranca un subshell o ejecutar comandos cuando sale del sistema.

Los nombres de estos ficheros son .bash_profile, .bashrc y .bash_logout. Si ninguno de estos ficheros existe en el directorio del usuario, /etc/profile es utilizado por el sistema como fichero de configuracion de bash.

.bash_profile es el el mas importante de los tres. Es leido y los comandos incluidos en el, ejecutados, cada vez que el usuario entra en el sistema. Cualquier cambio hecho en este fichero no tendra efecto hasta que salgamos y entremos en el sistema de nuevo. Una alternativa para no tener que salir del sistema es ejecutar el comando source .bash_source.

Bash permite dos sinonimos para este fichero, .bash_login (derivado del C shell) y .profile (derivado del Bourne y Korn shell). Si .bash_profile no existe, el sistema buscara primero .bash_login y luego .profile. Solamente uno de estos ficheros es leido, en el caso que existan simultaneamente.

   # .bash_profile

   # Get the aliases and functions
   if [ -f ~/.bashrc ]; then
           . ~/.bashrc
   fi

   # User specific environment and startup programs

   BASH_ENV=$HOME/.bashrc
   USERNAME=""
   PATH=$PATH:/usr/local/pgsql/bin
   MANPATH=$MANPATH:/usr/local/pgsql/man
   PGLIB=/usr/local/pgsql/lib
   PGDATA=/usr/local/pgsql/data

   export USERNAME BASH_ENV PATH MANPATH PGLIB PGDATA

.bashrc es leido cuando el usuario arranca un subshell, escribiendo por ejemplo bash en la linea de comandos. Esto nos permite ejecutar diferentes comandos para la entrada al sistema o para la ejecucion de un subshell. Si el usuario necesita los mismos comandos tanto a la entrada como en subshells, podemos incluir la siguiente linea en .bash_profile:

    source .bashrc

   # .bashrc

   # User specific aliases and functions

   alias ll="ls -l --color"
   alias lal="ls -la --color"
   alias faq="cd /home/rafael/EL_RINCON/FAQ/"
   alias php="cd /home/rafael/EL_RINCON/PHP/"

   # Source global definitions
   if [ -f /etc/bashrc ]; then
           . /etc/bashrc
   fi

.bash_logout es el fichero leido por Bash, cuando salimos del sistema. Podemos definir, por ejemplo que se borren los ficheros temporales creados en nuestra ultima sesion o registrar el tiempo que hemos estado utilizando el sistema. Si .bash_logout no existe, ningun comando sera ejcutado a nuestra salida.

   # ~/.bash_logout

   clear

14.3 ¿Pero hay que saber comandos?

La respuesta a esta pregunta es sencilla, todo depende de como vayas a utilizar el sistema, de las ganas de aprender que tengas y de lo que quieras profundizar en el sistema.

Hay que diferenciar entre tareas de administración y uso habitual del sistema.

Si vas a realizar tareas de administración del sistema, deberias saber, o mejor dicho, tendrás que aprender una serie de comandos para realizar estas tareas. Si vas a utilizar el sistema a nivel usuario, no necesitaras saber ningún comando, solamente tendras que aprender a utilizar los programas que uses.

Lo que ocurre habitualmente es que el usuario de la máquina y el administrador, son la misma persona, con lo cual tendrán que saber una serie de comandos mínimos.

Como anecdota, os puedo contar que en lugar donde trabajo, hay usuarios que utilizan Linux y no tienen ni idea de administración del sistema (y no solo en linux), no saben comandos y tampoco los necesitan. Trabajan en modo gráfico, saben utilizar los programas que necesitan y tienen a alguien (yo en este caso ;-)) que se hace cargo de las tareas de administración/configuración del sistema.

14.4 ¿Esto no lo puedo hacer en modo gráfico?

Como regla general, se podriía decir lo siguiente: "Todo lo que se puede hacer en modo gráfico, se puede hacer también en modo texto, a base de comandos. Pero no todo lo que se puede hacer en modo texto, se puede hacer en modo gráfico".

Cada día aparecen más y más programas, que permiten hacer en modo gráfico, a golpe de ratón y ventanas, lo que se hace en modo texto a base de comandos. Es mas, lo único que estos programas hacen, es crear una versión gráfica que hace uso de los comandos que se utilizan en modo texto. Gestores de vaentanas como Gnome y Kde, vienen con una serie de programas gráficos que hacen esto.

Para terminar esta sección, solo decir a aquellos que quieran profundizar en el sistema, que hasta el momento, ningun programa gráfico, supera en versatilidad y potencia, a una consola de texto donde ejecutar comandos directamente.

14.5 Combinaciones especiales de teclas

14.6 Lista de comandos mas usados

Todos los comandos citados en este apartado, pueden usarse con multitud de opciones. Para conseguir información detallada de cada comando utilizar man comando. A continuación teneis la manera mas sencilla de utilización.

Información del sistema

Administracion

15. ¿Problemas diversos?

15.1 ¿Quien me puede ayudar a resolver un problema?

Lo mejor que se puede hacer para encontrar solución a un problema con linux es leer, leer la documentación existente. En la siguiente subsección teneis información sobre donde encontrar documentación.

Si despues de leer la documentación, sigues sin poder solucionar tu problema, te aconsejamos que mandes un mensaje a alguna lista de correos o a un grupo de noticias, que trate sobre linux.

Como nota adicional decir que, si has comprado una distribución de Linux, existen varias (RedHat, SuSE, OpenLinux, Hispafuentes ...) que dan soporte de instalación por un periodo de tiempo determinado.

15.2 ¿Dónde encuentro documentación sobre linux?

Existe un proyecto de documentación de Linux (LDP), que se encarga de coordinar/distribuir todos los documentos existentes sobre linux y temas relacionados, los famosos manuales, Howtos y Mini-Howtos.

15.3 Mi ordenador usa siempre toda la memoria disponible ¿Qué es lo que ocurre?

Una pregunta habitual de los que comienzan a usar Linux, es ¿Porqué mi equipo usa siempre toda la memoria disponible incluso cuando solamente estoy usando unos pocos programas?.

En un principio, puede parecer un fallo del sistema, el cual esta usando toda la memoria, cuando no estamos usando muchos programas. Pero la respuesta a esta pregunta es sencilla, Linux aprovecha al maximo el harware de tu ordenador, y no existe ningún problema cuando siempre estas usando toda la memoria. ¿Pórque desperdiciar memoria libre que se puede utilizar para hacer funcionar tu sistema mas rápido?.

Un pequeño ejemplo nos aclarara las cosas. Si tienes 96MB y solo necesitas usar 32MB para los programas que estas ejecutando, Linux utilizará la memoria restante como buffers y caché para que las cosas funcionen mas rápidas y automáticamente y reducirá/ajustará los valores "buff", "shared" y "cached" cuando necesitemos mas memoria para ejecutar nuestros programas.

Aquí teneis un ejemplo conseguido con top despues de un rato de uso en un ordenador con X, un par de terminales en uso, Netscape y Emacs:

   Mem:   95568K av,  93208K used,   2360K free,  21368K shrd,   8300K buff
   Swap: 136512K av,   5716K used, 130796K free                 60364K cached
Unos momentos despues, cerramos Netscape:
   Mem:   95568K av,  87884K used,   7684K free,  10544K shrd,   8308K buff
   Swap: 136512K av,   5704K used, 130808K free                 60528K cached
y para terminar, abrimos netscape y Acrobad reader:
   Mem:   95568K av,  93176K used,   2392K free,  26328K shrd,   3336K buff
   Swap: 136512K av,   5340K used, 131172K free                 64064K cached
Como podeis observar, los valores "buff", "shared" y "cached" se van ajustando automáticamente a las necesidades de memoria del momento. Asi que no preocuparos si veis que la memoria en uso es practicamente la totalidad de la memoria disponible.

15.4 Fatal signal 11

No es la primera vez que un usuario recibe este mensaje de error "Fatal signal 11", al intentar instalar Linux o compilar un programa grande (kernel, gcc, glibc, ...).

Las consecuencias de este error suelen ser graves, si te ocurre en la instalacion, no podras terminar de instalar el sistema y si te ocurre compilando un programa, no podras terminar de compilarlo y consecuentemente, no podras utilizarlo. A veces puede ser el causante de una caida del sistema y que el sistema se cuelgue.

La causa de este error suele ser un fallo del hardware de tu sistema, memoria, caché, CPU, disco, las causas pueden ser muchas y variadas. Existe un documento excelente y muy extenso sobre este problema, eso si en ingles. Lo podeis encontrar en http://www.bitwizard.nl/sig11/.

16. Glosario de terminos

Esta sección tiene un pequeño glosario de terminos informaticos usados habitualmente por usuarios de Linux.

16.1 Glosario A-D

16.2 Glosario E-H

16.3 Glosario I-L

16.4 Glosario M-O

16.5 Glosario P-S

16.6 Glosario T-W

16.7 Glosario X-Z

17. Servidores FTP

Aqui teneis una selección de servidores FTP, en donde es posible encontrar casi todo lo referente a Linux, programas, aplicaciones, distribuciones, documentacion, ....

Europa

America

Asia

Africa

Otros

18. Colaboradores

Ante todo dar las gracias a todos los colaboradores que han participado en la creación de este documento. Sin su ayuda, sin sus conocimientos y sin el tiempo que han dedicado, no hubiese sido posible crearlo. Mas adelante teneis una lista de las personas que han participado activamente en la redacción/creación de la FAQ sobre linux en castellano.

Gracias a Hispafuentes ( http://www.hispafuentes.com) y a César Ballardini por la aportación del glosario de terminos de la FAQ, y a Ignacio Arenaza por su aportación a la sección sobre RSDI.

Por último, gracias a B-52, U2, Aretha, B.B.King y Eric Clapton por haberme acompañado con su musica durante la creación/montaje de esta Faq.

19. Cambios / Por hacer

Cambios de la versión 2.0.1 a la version 2.0.2:

Cambios de la versión 2.0 a la version 2.0.1:

Cambios de la versión 1.0 a la version 2.0:

Por hacer:

Aquí teneis una lista con las secciones e ideas que tenemos pensado incluir en futuras versiones de este documento:

20. Copyright

Este documento se distribuye "tal como es" (as is). La información incluida en el mismo no esta garantizada por sus autores, aunque se ha realizado un gran esfuerzo para comprobar la información contenida en el mismo. Muchas de las operaciones que se describen en este documento son necesarias hacerlas con permisos "root" (administrador), con el riesgo que esto supone para las personas que no tengan claros ciertos conceptos de seguridad y forma de trabajo en sistemas Unix/Linux.

La "FAQ sobre Linux para principiantes" es Copyright (c) 1999-2000 por Rafael Martínez-rafael@viewpoint.no y los colaboradores de la FAQ, bajo los terminos de Licencia del Proyecto de documentación de Linux (LPD). En http://metalab.unc.edu/pub/Linux/docs/LDP/LDP-COPYRIGHT, teneis el texto de este copyright.

La "FAQ sobre Linux para principiantes" puede ser reproducida y distribuida total o parcialmente, siempre que no se cobre por el documento en si, sin la autorización del autor/es y se cumplan los terminos de Licencia bajo la que se distribuye. Esta restricción no prohibe el cobro por servicios de impresion o copia del documento.