Guía de referencia Debian
                         -------------------------

                       Osamu Aoki <osamu@debian.org>

Coordinador de la traducción al español: Walter O. Echarri
                         <wecharri@infovia.com.ar>

                          Sección A.1, `Autores'

                     CVS, lun abr 3 22:57:45 UTC 2005


-------------------------------------------------------------------------------


Resumen
-------

     Esta Guía de referencia Debian (http://qref.sourceforge.net/) intenta
     proporcionar un repaso amplio del sistema Debian al igual que una
     _guía de usuario post-instalación_ Abarca diversos aspectos de la
     administración del sistema mediante ejemplos que utilizan comandos de
     la shell.  Se brindan tutoriales, trucos e información sobre diversos
     temas: conceptos básicos del sistema Debian, consejos para la
     instalación del sistema, administración de paquetes Debian, el kernel
     de Linux en Debian, puesta a punto del sistema, creación de una puerta
     de enlace (gateway), editores de texto, CVS, programación y GnuPG para
     usuarios que _no son desarrolladores_.


Nota de Copyright
-----------------

     Copyright (C) 2001--2005 by Osamu Aoki <osamu@debian.org>
     Copyright (Chapter 2) (C) 1996--2001 by Software in the Public
     Interest.

     Este documento puede ser usado en los términos descritos en la
     Licencia Pública GNU versión 2 o posterior.
     (http://www.gnu.org/copyleft/gpl.html)

     Permission is granted to make and distribute verbatim copies of this
     document provided the copyright notice and this permission notice are
     preserved on all copies.

     Permission is granted to copy and distribute modified versions of this
     document under the conditions for verbatim copying, provided that the
     entire resulting derived work is distributed under the terms of a
     permission notice identical to this one.

     Permission is granted to copy and distribute translations of this
     document into another language, under the above conditions for
     modified versions, except that this permission notice may be included
     in translations approved by the Free Software Foundation instead of in
     the original English.


-------------------------------------------------------------------------------


Contenidos
----------

     1.        Prefacio
     1.1.      Documento oficial
     1.2.      Convenciones en los documentos
     1.3.      Scripts de ejemplo
     1.4.      Configuración básica
     1.5.      Fundamentos sobre las distribuciones Debian

     2.        Fundamentos de Debian
     2.1.      Los archivos Debian
     2.1.1.         Estructura de los directorios
     2.1.2.         Distribuciones Debian
     2.1.3.         La distribución `estable'
     2.1.4.         La distribución `de prueba'
     2.1.5.         La distribución `inestable'
     2.1.6.         La distribución `congelada'
     2.1.7.         Los nombres de versión de la distribución Debian
     2.1.8.         Nombres de versión usados en el pasado
     2.1.9.         El origen de los nombres de versión
     2.1.10.        El directorio `pool'
     2.1.11.        Algunas notas históricas sobre Sid
     2.1.12.        Transferencias de paquetes en `incoming/'
     2.1.13.        Recuperando una paquete antiguo
     2.1.14.        Distintas arquitecturas
     2.1.15.        El código fuente
     2.2.      Sistema de administración de paquetes Debian
     2.2.1.         Repaso sobre los paquetes Debian
     2.2.2.         Formato de los paquetes Debian
     2.2.3.         Convención usada para designar a los paquetes Debian
     2.2.4.         Preservando la configuración local
     2.2.5.         Scripts de mantenimiento de Debian
     2.2.6.         Prioridad de los paquetes
     2.2.7.         Paquetes virtuales
     2.2.8.         Dependencia entre paquetes
     2.2.9.         Significado de Pre-depends
     2.2.10.        Estado de un paquete
     2.2.11.        Evitando la actualización de un paquete
     2.2.12.        Paquetes fuente
     2.2.13.        Construir un paquete binario a partir de un paquete
                    fuente
     2.2.14.        Creando paquetes Debian nuevos
     2.3.      Actualizando un sistema Debian
     2.3.1.         Métodos para actualizar un sistema Debian
     2.3.2.         Repaso de las herramientas de administración de
                    paquetes
     2.3.3.         `dpkg'
     2.3.4.         APT
     2.3.5.         `dselect'
     2.3.6.         Actualizando un sistema en funcionamiento
     2.3.7.         Archivos `.deb' descargados y en caché
     2.3.8.         Mantener un registro de las actualizaciones
     2.4.      El proceso de arranque de Debian
     2.4.1.         El programa `init'
     2.4.2.         Niveles de ejecución
     2.4.3.         Personalizando el proceso de arranque
     2.5.      En apoyo a la diversidad
     2.6.      Internacionalización
     2.7.      Debian y el kernel
     2.7.1.         Compilando un kernel desde un fuente no perteneciente a
                    Debian
     2.7.2.         Herramientas para crear núcleos personalizados
     2.7.3.         Cargadores de arranque alternativos
     2.7.4.         Discos de arranque personalizados
     2.7.5.         Cuidados especiales para tratar con módulos
     2.7.6.         Desinstalando el paquete de un kernel antiguo

     3.        Consejos para la instalación de un sistema Debian
     3.1.      Consejos generales para la instalación de un sistema Linux
     3.1.1.         Fundamentos sobre la compatibilidad del hardware
     3.1.2.         Determinando el hardware del PC
     3.1.3.         Determinando el hardware del PC mediante Debian
     3.1.4.         Determinando el hardware del PC mediante otros SOs
     3.1.5.         El mito sobre Lilo
     3.1.6.         GRUB
     3.1.7.         Elección de los discos de arranque
     3.1.8.         Instalación
     3.1.9.         Máquinas IP para usar en una LAN
     3.1.10.        Cuentas de usuarios
     3.1.11.        Creando sistema de archivos
     3.1.12.        Lineamientos para la memoria DRAM
     3.1.13.        Espacio de intercambio
     3.2.      Configuración del bash
     3.3.      Configuración del ratón
     3.3.1.         Ratón PS/2
     3.3.2.         USB mice
     3.3.3.         Touch pad
     3.4.      Configuración NFS
     3.5.      Configuración de Samba
     3.6.      Configuración de la impresora
     3.6.1.         `lpr'/`lpd'
     3.6.2.         CUPS(TM)
     3.7.      Otros consejos de instalación
     3.7.1.         Instalación adicional de paquetes
     3.7.2.         Módulos
     3.7.3.         Configuración básica de una grabadora de CDs
     3.7.4.         Gran cantidad de memoria y apagado automático
     3.7.5.         Problemas extraños al acceder a ciertos sitios de
                    Internet
     3.7.6.         Configuración de una conexión telefónica con PPP
     3.7.7.         Otros archivos de configuración files para modificar en
                    `/etc'

     4.        Tutoriales de Debian
     4.1.      Fuentes de información
     4.2.      La consola Linux
     4.2.1.         Entrando al sistema
     4.2.2.         Añadir una cuenta de usuario
     4.2.3.         Cómo apagar el sistema
     4.2.4.         Edición en línea de comandos
     4.2.5.         Comandos básicos que se deben tener presente
     4.2.6.         Sistema X Window
     4.2.7.         Combinaciones de teclas habituales
     4.3.      Midnight Commander (MC)
     4.3.1.         Instalar MC
     4.3.2.         Iniciar MC
     4.3.3.         Administrador de archivos
     4.3.4.         Trucos para la línea de comandos:
     4.3.5.         Editor
     4.3.6.         Visor
     4.3.7.         Inicio automático de programas
     4.3.8.         Sistema de archivos virtuales FTP
     4.4.      Para saber más

     5.        Actualizando una distribución
     5.1.      Transición a la versión Woody de APT
     5.2.      Preparación para la transición (`stable' a `testing')
     5.3.      Actualizar el sistema Debian
     5.3.1.         Mejor método de actualización usando `dselect'
     5.3.2.         Método obsoleto de actualización usando `apt-get'

     6.        Administración de paquetes Debian
     6.1.      Introducción
     6.1.1.         Herramientas principales
     6.1.2.         Herramientas prácticas
     6.2.      Fundamentos de la administración de paquetes Debian Debian
     6.2.1.         Instalación de <tareas> con `tasksel'
     6.2.2.         Configurar el sistema APT
     6.2.3.         `dselect'
     6.2.4.         `aptitude'
     6.2.5.         Los comandos `apt-cache' y `apt-get'
     6.2.6.         Permanecer en una versión de la distribución Debian
     6.2.7.         Volver todos los paquetes a su versión `estable'
     6.2.8.         Repaso de `/etc/apt/preferences'
     6.3.      Comandos de supervivencia de Debian
     6.3.1.         Búsqueda de fallos y ayuda en Debian
     6.3.2.         Resolución de problemas al actualizar con APT
     6.3.3.         Rescate usando `dpkg'
     6.3.4.         Recuperar los datos de la selección de paquetes
     6.3.5.         Recuperando un sistema luego de borrar `/var'
     6.3.6.         Instalar un paquete en un sistema que no arranca
     6.3.7.         Qué hacer si el comando `dpkg' se encuentra dañado
     6.4.      Comandos 'nirvana' de Debian
     6.4.1.         Información sobre un archivo
     6.4.2.         Información sobre un paquete
     6.4.3.         Instalación automática con APT
     6.4.4.         Reconfigurar paquetes instalados
     6.4.5.         Desinstalar y purgar paquetes
     6.4.6.         Conservar paquetes antiguos
     6.4.7.         Sistema mixto `estable'/`de prueba'/`inestable'
     6.4.8.         Eliminar paquetes del caché
     6.4.9.         Grabar/copiar la configuración del sistema
     6.4.10.        Portar un paquete a la rama `stable'
     6.4.11.        Archivo local de paquetes
     6.4.12.        Convertir o instalar un paquete que no pertenece a
                    Debian
     6.4.13.        Verificar los paquetes instalados
     6.4.14.        `sources.list' optimizado
     6.5.      Otras particularidades de Debian
     6.5.1.         El comando `dpkg-divert'
     6.5.2.         El paquete `equivs'
     6.5.3.         Comandos alternativos
     6.5.4.         `init' del System-V y niveles de ejecución
     6.5.5.         Servicios desactivados

     7.        El kernel de Linux en Debian
     7.1.      Recompilación del kernel
     7.1.1.         Método Debian estándar
     7.1.2.         Método clásico
     7.1.3.         Cabeceras del kernel
     7.2.      El kernel modular 2.4
     7.2.1.         PCMCIA
     7.2.2.         SCSI
     7.2.3.         Funciones de Red
     7.2.4.         Sistema de archivos EXT3 ( > 2.4.17)
     7.2.5.         Soporte Realtek RTL-8139 en el kernel 2.4
     7.2.6.         Soporte puerto paralelo
     7.3.      Poniendo a punto al kernel mediante el sistema de archivos
               proc
     7.3.1.         Demasiado archivos abiertos
     7.3.2.         Intervalos de vaciado de disco
     7.3.3.         Máquinas con memoria extremadamente lenta

     8.        Trucos para Debian
     8.1.      Arrancando el sistema
     8.1.1.         "¡Olvidé la contraseña de superusuario!" (1)
     8.1.2.         "¡Olvidé la contraseña de superusuario!" (2)
     8.1.3.         No puedo arrancar el sistema
     8.1.4.         "¡Permítanme desactivar X al arrancar!"
     8.1.5.         Otros trucos con el indicador de arranque
     8.1.6.         Configurando los parámetros de arranque (GRUB)
     8.2.      Registro de actividades
     8.2.1.         Registrando las actividades del intérprete de comandos
     8.2.2.         Registrando las actividades en X
     8.3.      Copiar y archivar un subdirectorio entero
     8.3.1.         Comandos básicos para copiar un subdirectorio entero
     8.3.2.         `cp'
     8.3.3.         `tar'
     8.3.4.         `pax'
     8.3.5.         `cpio'
     8.3.6.         `afio'
     8.4.      Respaldos diferenciales y sincronización de datos
     8.4.1.         Respaldos diferenciales con rdiff
     8.4.2.         Copias de respaldo diarias con `pdumpfs'
     8.4.3.         Respaldos diferenciales con RCS
     8.5.      Recuperar al sistema de un cuelgue
     8.5.1.         Mate el procesoi
     8.5.2.         Alt-SysRq
     8.6.      Algunos pequeños comandos útiles para tener en cuenta
     8.6.1.         Paginador
     8.6.2.         Memoria disponible
     8.6.3.         Configurar fecha y hora (BIOS)
     8.6.4.         Configurar hora (NTP)
     8.6.5.         Como controlar características de la consola tales como
                    el protector de pantalla
     8.6.6.         Búsqueda en la base de datos administrativa
     8.6.7.         Desactivar el sonido (bip)
     8.6.8.         Mensajes de error por pantalla
     8.6.9.         Configurar la consola
     8.6.10.        Volver la consola a su estado normal
     8.6.11.        Convertir un archivo de texto en formato DOS a formato
                    Unix
     8.6.12.        Sustitución de expresiones regulares
     8.6.13.        Editar un archivo con un script
     8.6.14.        Extraer diferencias y combinar actualizaciones entre
                    archivos fuente
     8.6.15.        Convertir un archivo grande en archivos más pequeños
     8.6.16.        Extraer datos de una tabla contenida en un archivo de
                    texto
     8.6.17.        Pequeños scripts que incluyen tuberías
     8.6.18.        Pequeños scripts para recorrer distintos archivos
     8.6.19.        La locura de los script cortos en Perl
     8.6.20.        Obtener el texto de una página web o del archivo de una
                    lista de correos
     8.6.21.        Impresión de una página web
     8.6.22.        Impresión de la página una página del manual
     8.6.23.        Combinar dos archivos PostScript o PDF
     8.6.24.        El tiempo de un comando
     8.6.25.        El comando `nice'
     8.6.26.        Planificar una actividad (`cron', `at')
     8.6.27.        Intercambiando consolas con `screen'
     8.6.28.        Probando la red
     8.6.29.        Eliminar mensajes de la cola local
     8.6.30.        Eliminar mensajes bloqueados de la cola local
     8.6.31.        Redistribuir los contenidos de `mbox'
     8.6.32.        Borrar el contenido de un archivo
     8.6.33.        Archivos fantasma
     8.6.34.        `chroot'
     8.6.35.        Cómo verificar los enlaces duros
     8.6.36.        Montar una imagen del disco duro
     8.6.37.        Samba
     8.6.38.        Utilidades para otros sistemas de archivos
     8.7.      Errores típicos a tener presente
     8.7.1.         `rm -rf .*'
     8.7.2.         `rm /etc/passwd'

     9.        Puesta a punto del sistema Debian
     9.1.      Trucos para la inicialización del sistema
     9.1.1.         Personalizando los scripts init
     9.1.2.         Personalizando el sistema de registro
     9.1.3.         Optimización del acceso al hardware
     9.2.      Control de acceso
     9.2.1.         Control de acceso mediante PAM y login
     9.2.2.         "Por qué el `su' GNU no soporta el grupo `wheel'"
     9.2.3.         Significado de los distitos grupos
     9.2.4.         `sudo' -- un entorno de trabajo más seguro
     9.2.5.         Control de accesos a los demonios
     9.2.6.         Lightweight Directory Access Protocol
     9.3.      Grabadora de CDs
     9.3.1.         Introducción
     9.3.2.         Primer enfoque: módulos + `lilo'
     9.3.3.         Segundo enfoque 2: recompile el kernel
     9.3.4.         Etapas post-configuración
     9.3.5.         Imagen en CD (arrancable)
     9.3.6.         Grabar un CD (R, R/W):
     9.3.7.         Crear la imagen de un CD
     9.3.8.         Imágenes de CD Debian
     9.3.9.         Hacer una copia de respaldo del sistema en un CD-R
     9.3.10.        Grabar un CD de música a un CD-R
     9.4.      El programa X
     9.4.1.         Paquetes del sistema X
     9.4.2.         Paquetes de detección de hardware para el servidor X
     9.4.3.         El servidor X
     9.4.4.         El cliente X
     9.4.5.         Sesión X
     9.4.6.         Conexión TCP/IP en X
     9.4.7.         Conexión X remota: `xhost'
     9.4.8.         Conexión X remota: `ssh'
     9.4.9.         `xterm'
     9.4.10.        Base de datos de recursos de X
     9.4.11.        Adquirir privilegios de superusuario en X
     9.4.12.        Fuentes trueType en X
     9.4.13.        Navegador web (gráfico)
     9.5.      SSH
     9.5.1.         Fundamentos
     9.5.2.         Reenvío de puertos -- túnel SMTP/POP3
     9.5.3.         Conectarse con pocas contraseñas
     9.5.4.         Otro clientes SSH
     9.5.5.         Agente SSH
     9.5.6.         Resolución de problemas
     9.6.      Programas de correo
     9.6.1.         Agente de transporte de correo (MTAs)
     9.6.2.         Utilidad de correo (Fetchmail)
     9.6.3.         Utilidad de correo (Procmail)
     9.6.4.         Agente de usuario de correo (Mutt)
     9.7.      Localización y soporte de idiomas
     9.7.1.         Personalización básica
     9.7.2.         Locales
     9.7.3.         Activar el soporte de locales
     9.7.4.         Activar un local determinado
     9.7.5.         Formato de la fecha del local ISO 8601
     9.7.6.         Ejemplo para los Estados Unidos (ISO-8859-1)
     9.7.7.         Ejemplo para Francia con el signo euro (ISO-8859-15)
     9.7.8.         Ejemplo para un sistema bilingüe (EUC japonés e
                    ISO-8859-1)
     9.7.9.         Ejemplo de UTF-8 en X
     9.7.10.        Ejemplo de UTF-8 en una consola FB
     9.7.11.        Más allá de los locales

     10.       Configuración de la red
     10.1.     Fundamentos de redes IP
     10.2.     Configuración de la red a bajo nivel
     10.2.1.        Configuración de la red a bajo nivel -- `ifconfig' y
                    `route'
     10.2.2.        Configuración de la red a bajo nivel -- `ip'
     10.2.3.        Configurando una interfaz Wi-Fi
     10.2.4.        Configurando una interfaz PPP
     10.3.     Asignando un nombre a la máquina
     10.3.1.        Nombre de la máquina
     10.3.2.        Nombre para el correo
     10.4.     Servicio de Nombres de Dominio (DNS)
     10.4.1.        El sistema de resolución
     10.4.2.        Administrando la información del servidor de nombres --
                    `resolvconf'
     10.4.3.        Guardar en memoria los nombres resueltos -- `dnsmasq'
     10.4.4.        Proveyendo un Servicio de Nombres de Dominio -- `bind'
     10.5.     Configurando las interfaces de red usando DHCP
     10.6.     Configuración de la red de alto nivel en Debian
     10.6.1.        Configurando una interfaz con una dirección IP
                    estática.
     10.6.2.        Configurando una interfaz usando DHCP
     10.6.3.        Configurando una interfaz Wi-Fi
     10.6.4.        Configurando una interfaz PPP
     10.6.5.        Configurando una interfaz PPPoE
     10.6.6.        Configurando múltiples interfaces Ethernet para una
                    puerta de enlace
     10.6.7.        Configurando interfaces virtuales
     10.7.     _Re_configuración de la red
     10.8.     Reconfiguración mágica de la red
     10.8.1.        guessnet
     10.8.2.        laptop-net
     10.9.     Activando la reconfiguración de la red
     10.9.1.        Activando la configuración de la red durante el
                    arranque
     10.9.2.        Activando la configuración de la red -- `hotplug'
     10.9.3.        Activando la configuración de la red -- `ifplugd'
     10.9.4.        Activando la configuración de la red -- `waproamd'
     10.9.5.        Configuración de la red y PCMCIA
     10.10.    Configuración de los servicios de red
     10.11.    Resolución de problemas en la red
     10.12.    Configurando una puerta de enlace
     10.12.1.       Configuración de netfilter
     10.12.2.       Administrando múltiples conexiones de red

     11.       Editores
     11.1.     Editores populares
     11.2.     Editores de rescate
     11.3.     Emacs y Vim
     11.3.1.        Comandos útiles en Vim
     11.3.2.        Comandos útiles en Emacs
     11.3.3.        Ejecutando el editor
     11.3.4.        Resumen de los comandos del editor (Emacs, Vim)
     11.3.5.        Configuración de Vim
     11.3.6.        Ctags
     11.3.7.        Convertir un porción de texto seleccionado en código
                    HTML
     11.3.8.        Dividir la pantalla con `vim' puede editar múltiples
                    archivos en un entorno de múltiples ventanas. Escriba
                    ":help usr_08.txt" para más detalles.

     12.       Sistemas de control de versiones
     12.1.     Sistema de versiones concurrentes (CVS)
     12.1.1.        Instalar el servidor CVS
     12.1.2.        Sesiones CVS de ejemplo
     12.1.3.        Resolución de problemas
     12.1.4.        Comandos del CVS
     12.2.     Subversion
     12.2.1.        Instalando el servidor Subversion
     12.2.2.        Migrando un repositorio CVS a Subversion
     12.2.3.        Ejemplos de uso de Subversion

     13.       Programación
     13.1.     Dónde empezar
     13.2.     Shell
     13.2.1.        Bash -- el intérprete de comandos interactivo estándar
                    de _GNU_
     13.2.2.        Intérpretes de comandos POSIX
     13.2.3.        Parámetros del intérprete de comandos
     13.2.4.        Redireccionamiento del shell
     13.2.5.        Operadores condicionales del shell
     13.2.6.        Tratamiento de la línea de comandos
     13.3.     Awk
     13.4.     Perl
     13.5.     Python
     13.6.     Make
     13.7.     C
     13.7.1.        Programa sencillo en C (`gcc')
     13.7.2.        Depurar
     13.7.3.        Flex -- un Lex mejorado
     13.7.4.        Bison -- un Yacc mejorado
     13.7.5.        Autoconf
     13.8.     Preparación de documentos
     13.8.1.        Tratamiento de texto `roff'
     13.8.2.        SGML
     13.8.3.        TeX/LaTeX
     13.8.4.        Programación ilustrada
     13.9.     Creación de paquetes Debian
     13.9.1.        Empaquetar un único binario
     13.9.2.        Empaquetando con herramientas

     14.       GnuPG
     14.1.     Instalar Gnu PG
     14.2.     Usar GnuPG
     14.3.     Administrar GnuPG
     14.4.     Usando GnuPG con aplicaciones
     14.4.1.        Usando GnuPG con Mutt
     14.4.2.        Usando GnuPG con Vim

     15.       Suporte para Debian
     15.1.     Referencias
     15.2.     Encontrar el significado de una palabra
     15.3.     Conocer la popularidad de un paquete Debian
     15.4.     Sistema de seguimiento de fallos de Debian
     15.5.     Listas de Correo
     15.6.     IRC
     15.7.     Motores de Búsqueda
     15.8.     Páginas en Internet

     A.        Apéndice
     A.1.      Autores
     A.2.      Garantías
     A.3.      Comentarios
     A.4.      Formato del documento
     A.5.      El laberinto de Debian
     A.6.      Citas de Debian


-------------------------------------------------------------------------------


1. Prefacio
-----------

     Esta Guía de referencia Debian (http://qref.sourceforge.net/) intenta
     proporcionar un amplio repaso del sistema Debian al igual que _una
     guía de usuario post-instalación_.  El lector a quien va dirigida es
     todo aquel dispuesto a leer scripts de shell.  Supongo que además
     adquirió ciertas habilidades básicas en sistemas tipo UNIX.

     He tomado la decisión de _no_ explicar todo en detalle como si se
     tratara de una _página del manual_, una _página info_ o un _documento
     HOWTO_.  En vez de explicaciones detalladas, intento proporcionar
     información práctica dando la _secuencia exacta de comandos_ en el
     texto principal o en los _scripts de ejemplo_ situados en
     http://www.debian.org/doc/manuals/debian-reference/examples/.  Debe
     comprender el contenido de los ejemplos antes de usar cualquier
     comando.  Su sistema puede requerir de una secuencia de comandos
     ligeramente diferente.

     Gran parte de la información incluida consiste en enlaces hacia
     referencias oficiales listadas en Sección 15.1, `Referencias'.  Esto
     es en parte así porque inicialmente este documento se originó como una
     "_referencia rápida_".

     _Resúmalo y simplifíquelo_ es mi principio rector.

     Para obtener ayuda para un sistema en emergencia vaya directamente a
     Sección 6.3, `Comandos de supervivencia de Debian'.


1.1. Documento oficial
----------------------

     La última versión oficial de este documento se encuentra en los
     archivos Debian en el paquete `debian-reference-es'.  También se
     encuentra disponible en
     http://www.debian.org/doc/manuals/debian-reference/.

     La última versión en desarrollo se encuentra en
     http://qref.sourceforge.net/Debian/.  El proyecto se hospeda en
     http://qref.sourceforge.net/ donde este documento se encuentra
     disponible para descargar en los formatos de texto, HTML, PDF, SGML y
     PostScript.


1.2. Convenciones en los documentos
-----------------------------------

     La "Guía de referencia Debian" proporciona información mediante
     comandos del shell Bash.  Veamos las convenciones utilizadas:

          # comando en la cuenta de superusuario
          $ comando en la cuenta de usuario normal
          ... descripción de la acción

     Estos ejemplos utilizan `PS2=" "' para evitar `>'.  Véase Sección
     13.2.1, `Bash -- el intérprete de comandos interactivo estándar de
     _GNU_' para más información.

     Una referencia:
        * en una página del _manual_ se muestra así bash(1).
        * en una página _TEXINFO GNU_ se muestra así `info libc'.
        * en un _libro_ se muestra así _El Lenguaje de Programación C_.
        * en una _URL_ se muestra así
          http://www.debian.org/doc/manuals/debian-reference/.
        * en un _archivo_ del sistema se muestra así
          `/usr/share/doc/Debian/reference/'.

     Se utilizaron las siguientes abreviaturas:

        * _LDP_: Proyecto de Documentación de Linux (http://www.tldp.org/)
        * _DDP_: Proyecto de Documentación de Debian
          (http://www.debian.org/doc/)

     Si bien únicamente se proporcionan las URLs de los documentos del LDP,
     también se pueden obtener en paquetes e instalarse en
     `/usr/share/doc/HOWTO/'.  Véase Sección 15.1, `Referencias'.


1.3. Scripts de ejemplo
-----------------------

     Los scripts de ejemplo se encuentran en el subdirectorio de ejemplos
     (http://www.debian.org/doc/manuals/debian-reference/examples/) ubicado
     en `/usr/share/doc/Debian/reference/'; en el caso de archivos ocultos
     el '.'  que precede al nombre del archivo se reemplaza por un guión de
     subrayado "_".  Se ha añadido un sufijo extra cuando existen diversos
     scripts de ejemplo para un mismo tema.


1.4. Configuración básica
-------------------------

     Si el sistema ha sido instalado con la cantidad mínima de paquetes,
     asegúrese de ejecutar el siguiente comando para instalar algunos
     paquetes esenciales y documentos claves:

# apt-get install info man-db doc-base dhelp apt apt-utils auto-apt \
                  dpkg less mc ssh nano-tiny elvis-tiny vim sash \
                  kernel-package \
                  manpages manpages-dev doc-debian doc-linux-text \
                  debian-policy developers-reference maint-guide \
                  apt-howto harden-doc install-doc \
                  libpam-doc glibc-doc samba-doc exim-doc cvsbook \
                  gnupg-doc
# apt-get install debian-reference # en el caso de Sarge, haga esto también :)

     Para Woody, añada `exim-doc-html' a la lista anterior.  Para Sarge,
     reemplace `exim-doc' por `exim4-doc-html' y `exim4-doc-info'.


1.5. Fundamentos sobre las distribuciones Debian
------------------------------------------------

     Debian viene en 3 versiones o "sabores":

        * `estable': conveniente para un servidor.  Poco interesante para
          una estación de trabajo.  Véase Sección 2.1.3, `La distribución
          `estable''.

        * `de prueba': conveniente para una estación de trabajo.  Véase
          Sección 2.1.4, `La distribución `de prueba''.

        * `inestable': úsela con cierta prudencia.  Véase Sección 2.1.5,
          `La distribución `inestable''.

     Lea por lo menos la lista de correo
     `debian-devel-announce@lists.debian.org' para estar al tanto sobre las
     novedades de Debian.

     En el mes de marzo del 2002, estas tres versiones correspondían a
     Potato (calidad de producción), Woody (versión beta, muy estable ya
     que su lanzamiento era inminente) y Sid (versión alfa).  En agosto del
     2002, justo después del lanzamiento de Woody, estas correspondían a
     Woody (calidad de producción), Sarge (versión beta, será un poco
     difícil durante cierto tiempo) y Sid (siempre es la versión alfa).
     Cuando los paquetes de la rama `inestable' no poseen fallos críticos
     (RC) dados a conocer durante la primera semana de pruebas,
     automáticamente se transfieren a la rama `de prueba'.  See Sección
     2.1, `Los archivos Debian'.

     En teoría, existen dos cosas que puede hacer para obtener las últimas
     versiones de los programas.
        * Sección 6.2, `Fundamentos de la administración de paquetes Debian
          Debian' (principalmente para estaciones de trabajo)
        * Sección 6.4.10, `Portar un paquete a la rama `stable''
          (principalmente para servidores)

     Permanecer en la versión `de prueva' deDebian tiene como efecto
     colateral la lenta solución de los fallos de seguridad.  Queda
     debidamente advertido.

     Si mezcla versiones de Debian, usando paquetes de la rama `de prueba'
     o `inestable' en la rama `estable', es muy probable que sin querer
     descargue diversos paquetes de la rama `de prueba' o `inestable' que
     pueden tener errores.  Queda debidamente advertido.

     Utilizar la versión `de prueba' o `inestable' de Debian conlleva el
     riesgo creciente de encontrarse con fallos graves.  Esto puede
     evitarse, creando un esquema multi-arranque con versiones más estables
     de Debian, o utilizando un truco interesante con `chroot' con la
     versión más estable como se explica en Sección 8.6.34, ``chroot''.
     Esta última opción nos permitirá ejecutar diferentes versiones de
     Debian simultáneamente en diferentes consolas.

     Luego de explicar algunos fundamentos de la distribución Debian en
     Capítulo 2, `Fundamentos de Debian', presentaré cierta información
     básica para ayudarle a vivir tranquilamente con los programas más
     actuales, aprovechando las ventajas de las distribuciones Debian `de
     prueba' e `inestable'.  Los impacientes deberían ir directamente a
     Sección 6.3, `Comandos de supervivencia de Debian'.  ¡Feliz
     actualización!


-------------------------------------------------------------------------------


2. Fundamentos de Debian
------------------------

     Este capítulo proporciona información fundamental sobre el sistema
     Debian para aquellos que no son desarrolladores.  Para información
     autorizada, consulte:i

        * Manual de Normativa de Debian
        * Referencia para los Desarrolladores de Debian
        * Guía para Nuevos Encargados de Paquetes de Debian
     listada en la sección Sección 15.1, `Referencias'.

     Si está buscando explicaciones menos detalladas, vaya directamente a
     la Capítulo 6, `Administración de paquetes Debian' o a los capítulos
     adecuados.

     Este capítulo se basa en información obtenida de las "FAQ de Debian"
     reorganizada totalmente a fin de permitir dar sus primeros pasos a los
     administradores de sistemas Debian.


2.1. Los archivos Debian
------------------------

2.1.1. Estructura de los directorios
------------------------------------

     El software que ha sido empaquetado para Debian está disponible en
     alguno de los diversos árboles de directorios situados en cada sitio
     réplica Debian (http://www.debian.org/mirror/) a través de FTP o HTTP.

     En cada sitio réplica de Debian, bajo el directorio `debian' se pueden
     encontrar los siguientes directorios:

     `dists/':
          Este directorio contiene las "distribuciones" y se utilizan para
          acceder a los paquetes actualmente disponibles en las versiones y
          pre-versiones de Debian.  Aún se pueden encontrar aquí algunos
          paquetes antiguos, archivos `Contents-*.gz', y archivos
          `Packages.gz'.

     `pool/':
          La nueva ubicación de todos los paquetes de todas las versiones y
          versiones previas de Debian.

     `tools/':
          Utilidades del DOS para crear discos de arranque, particionar su
          unidad de disco, comprimir/descomprimir archivos y arrancar
          Linux.

     `doc/':
          La documentación básica de Debian: FAQ, instrucciones para dar a
          conocer un fallo, etc.

     `indices/':
          El archivo Maintainers y los archivos override.

     `project/':
          principalmente recursos para el desarrollador, tales como:

          `project/experimental/':
               Este directorio contiene paquetes y herramientas que aún
               están en desarrollo y en la etapa alfa de prueba.  Los
               usuarios no deberían usar estos paquetes ya que pueden
               resultar peligrosos y perjudicial incluso para los más
               experimentados.

          `project/orphaned/':
               Paquetes que han sido abandonados por las personas los
               tenían a cargo y que han sido retirados de la distribución.

2.1.2. Distribuciones Debian
----------------------------

     Normalmente existen tres distribuciones Debian en el directorio
     `dists': la distribución `estable' (stable) , la distribución `de
     prueba' (testing) y la distribución `inestable' (unstable).  A veces
     existe una distribución `congelada' (véase Sección 2.1.6, `La
     distribución `congelada'').  Cada distribución viene definida por un
     enlace simbólico al directorio real, utilizando un nombre de código en
     el directorio `dists'

2.1.3. La distribución `estable'
--------------------------------

     Los paquetes de la versión `estable', Debian Woody (3.0r0), se
     encuentran en el directorio `stable' (enlace simbólico a `woody'):

        * `stable/main/': Este directorio contiene los paquetes que
          formalmente constituyen la versión más reciente del sistema
          Debian.

          Todos estos paquetes están de acuerdo con Las directivas del
          Software Libre de Debian (DFSG)
          (http://www.debian.org/social_contract#guidelines) (también
          disponible como `/usr/share/doc/debian/social-contract.txt' que
          se instala mediante `debian-doc'), y todos se pueden usar y
          distribuir libremente.

        * `stable/non-free/': este directorio contiene paquetes cuya
          distribución está restringida y necesita que los distribuidores
          tomen cuidadosamente en cuenta las exigencias especificadas por
          la licencia.

          Por ejemplo, algunos paquetes tienen licencias que prohiben su
          distribución comercial.  Otros pueden ser redistribuidos pero, de
          hecho, son shareware y no software libre.  La licencia de cada
          uno de estos paquetes debe analizarse y, quizás, negociarse antes
          de incluirse en cualquier forma de redistribución (por ejemplo,
          en un CD-ROM).

        * `stable/contrib/': este directorio contiene paquetes que son
          libres de acuerdo con la definición de software libre de Debian
          y, en sí mismos, _de libre distribución_, pero que dependen de
          algún modo de otro paquete que _no_ es de distribución libre y,
          por lo tanto, disponible únicamente en la sección non-free.

     Actualmente, además de las ubicaciones anteriores, los paquetes nuevos
     se encuentran físicamente en el directorio `pool' (Sección 2.1.10, `El
     directorio `pool'').

     El estado actual de los fallos de la distribución `estable' se puede
     consultar en la página web Stable Problems
     (http://ftp-master.debian.org/testing/stable_probs.html).

2.1.4. La distribución `de prueba'
----------------------------------

     Los paquetes de la versión `de prueba', Debian Sarge, se encuentran en
     el directorio `testing' (enlace simbólico a `sarge') tras haber sido
     probados durante cierto tiempo en la rama `inestable'.  Actualmente,
     además de las ubicaciones anteriores, los paquetes nuevos se localizan
     en el directorio `pool' (Sección 2.1.10, `El directorio `pool'').
     Asimismo, también están los subdirectorios `main', `contrib' y
     `non-free' que cumplen las mismas funciones que en la rama `estable'.

     Estos paquetes deben estar en sintonía con todas las arquitecturas
     para las cuales fueron construidos y no deben tener dependencias que
     impida su instalación; además, deben tener menos fallos críticos que
     las versiones que se encuentran en la rama `inestable'.  De esta
     manera, es de esperar que la rama `de prueba' sea la posible candidata
     de la próxima versión.  Más detalles sobre este mecanismo en:
     http://www.debian.org/devel/testing.

     El estado final de la distribución `de prueba' se puede consultar en
     los siguientes sitios:
        * update excuses
          (http://ftp-master.debian.org/testing/update_excuses.html)
        * testing problems
          (http://ftp-master.debian.org/testing/testing_probs.html)
        * release-critical bugs (http://bugs.debian.org/release-critical/)
        * base system bugs (http://bugs.qa.debian.org/cgi-bin/base.cgi)
        * bugs in standard and task packages
          (http://bugs.qa.debian.org/cgi-bin/standard.cgi)
        * other bugs and bug-squashing party notes
          (http://bugs.qa.debian.org/)

2.1.5. La distribución `inestable'
----------------------------------

     Los paquetes de la versión `inestable', denominada siempre "Sid", se
     encuentran en el directorio `unstable' (enlace simbólico a `sid') tras
     haber sido transferidos al archivo Debian y permanecer allí hasta su
     translado a la rama `de prueba' Actualmente, además de las ubicaciones
     anteriores, los paquetes nuevos se ubican en el directorio `pool'
     (Sección 2.1.10, `El directorio `pool'').  Asimismo, también están los
     subdirectorios `main', `contrib' y `non-free' que cumplen las mismas
     funciones que en la rama `estable'.

     La distribución `inestable' contiene la imagen más reciente del
     sistema en desarrollo.  Se alienta a los usuarios a usar y probar
     estos paquetes pero se les advierte sobre su estado.  La ventaja de
     usar la distribución `inestable' es que uno siempre está actualizado
     con lo último del proyecto Debian--- pero si deja de funcionar deberá
     conservar ambas partes :-)

     El estado actual de los fallos de la distribución `inestable' se puede
     consultar en la página web Problemas de la rama inestable
     (http://ftp-master.debian.org/testing/unstable_probs.html).

2.1.6. La distribución `congelada'
----------------------------------

     Cuando la distribución `de prueba' está suficientemente madura se
     "congela", es decir, ya no se aceptan programas nuevos y -de ser
     necesario- sólo se eliminan fallos.  Asimismo, en el directorio
     `dists' se crea un nuevo árbol "de prueba" al que se le asigna un
     nuevo nombre.  La distribución congelada está durante algunos meses de
     prueba con actualizaciones continuas y congelaciones totales
     denominadas `ciclos de prueba (el reciente lanzamiento de Woody no
     incluía un enlace simbólico a la versión `congelada', por lo tanto
     ésta no era una distribución sino una etapa de desarrollo de la
     distribución `de prueba')

     En la distribución congelada se mantiene un registro de fallos que
     pueden retrasar la liberación de un paquete o de la distribución
     completa.  Una vez que los fallos están por debajo de los valores
     máximos aceptables, la distribución congelada se transforma en la
     distribución estable, es liberada y la versión estable anterior se
     vuelve obsoleta (y se archiva).

2.1.7. Los nombres de versión de la distribución Debian
-------------------------------------------------------

     Los nombres de los directorios situados en el directorio `dists',
     tales como `woody' y `sarge', son simplemente los "nombres de
     versión".  Cuando una distribución Debian se encuentra en la etapa de
     desarrollo, no tiene número de versión sino un "nombre de versión".
     El propósito de estos nombres es facilitar la replicación de la
     distribuciones Debian (si un directorio como `unstable' cambia de
     repente su nombre a `stable', sin ser necesario, se tendrían que
     descargar un montón de cosas nuevamente).

     Actualmente, `stable/' es un enlace simbólico a `woody' y `testing/'
     es un enlace simbólico a `sarge'.  Esto significa que `Woody' es la
     distribución estable y `Sarge' la distribución de prueba actuales.

     `unstable' es un enlace simbólico permanente a `sid/', ya que Sid
     siempre es la distribución inestable.

2.1.8. Nombres de versión usados en el pasado
---------------------------------------------

     Nombres de versión que ya han sido usados: "Buzz" para la versión 1.1,
     "Rex" para la versión 1.2, "Bo" para la versión 1.3.x, "Hamm" para la
     versión 2.0, "Slink" para la versión 2.1, "Potato" para la versión
     2.2, "Woody" para la versión 3.0, y "Sarge" para la versión 3.1.

2.1.9. El origen de los nombres de versión
------------------------------------------

     Hasta aquí han sido tomados de la película _Toy Story_ de Pixar.
        * _Buzz_ (Buzz Lightyear) era el cosmonauta,
        * _Rex_ era el tiranosaurio,
        * _Bo_ (Bo Peep) era la niña que cuidaba la oveja,
        * _Hamm_ era el cerdito alcancía,
        * _Slink_ (Slinky Dog) era el perro de juguete,
        * _Potato_ era, por supuesto, el Sr. Potato,
        * _Woody_ era el vaquero.
        * _Sarge_ era el líder del ejército de plástico verde,
        * _Etch_ (Etch-a-Sketch) era el blackboard,
        * _Sid_ era el vecinito que destruyó los juguetes.

2.1.10. El directorio `pool'
----------------------------

     Históricamente, los paquetes se guardaban en el subdirectorio `dists'
     correspondiente a una determinada distribución.  Esto ocasionaba
     diversos problemas, como -por ejemplo- un gran consumo del ancho de
     banda de los sitios réplicas cuando se realizaban grandes cambios.

     Actualmente, los paquetes se guardan en un gran `depósito',
     estructurado según el nombre del paquete fuente.  Para facilitar su
     uso, el depósito está subdividido en secciones (`main', `contrib' y
     `non-free') y por la primer letra del nombre del paquete fuente.
     Estos directorios contienen diversos archivos: los paquetes binarios
     para cada arquitectura y los paquetes fuentes a partir de los cuales
     se han generado los mismos.

     Puede averiguar el lugar donde se encuentra un paquete ejecutando el
     comando `apt-cache showsrc <nombre_paquete>' y leyendo la línea que
     dice `Directory:'.  Por ejemplo, los paquetes de `apache' se
     encuentran en `pool/main/a/apache/'.  Puesto que existen tantos
     paquetes `lib*' estos son tratado de una manera especial: por ejemplo,
     los paquetes `libpaper' se encuentran en `pool/main/libp/libpaper/'.

     Los directorios `dists' aún se siguen utilizando para los archivos
     índice usados por programas como `apt'.  De todas maneras, al momento
     de escribir este doucmento, las distribuciones antiguas no han sido
     modificadas para usar estos 'depósitos' por lo que verá rutas que
     contienen nombres de distribuciones tales como `potato' o `woody' en
     el campo de cabecera "Directory".

     Normalmente, no se debe preocupar por nada de esto ya que la reciente
     `apt' y probablemente la antigua `dpkg-ftp' (véase Sección 2.3.1,
     `Métodos para actualizar un sistema Debian') se harán cargo en forma
     totalmente transparente.  Si desea más información, consulte las RFC:
     implementación de las herramientas de paquetes
     (http://lists.debian.org/debian-devel-announce/2000/debian-devel-announce-200010/msg00007.html).

2.1.11. Algunas notas históricas sobre Sid
------------------------------------------

     Cuando la actual Sid no existía, la organización del archivo Debian
     adolecía de un grave inconveniente: se suponía que cuando una
     arquitectura era creada en la rama `inestable', iba a ser liberada
     cuando la distribución se transformara en la nueva versión `estable'.
     Para muchas arquitecturas éste no era el caso con lo cual los
     correspondientes directorios debían desplazarse ante un nuevo
     lanzamiento.  Esto no resultaba práctico ya que esta acción consumía
     ingentes cantidades de ancho de banda.

     Los administradores del archivo evitaron el problema durante muchos
     años ubicando los binarios de las arquitecturas no liberadas en un
     directorio especial llamado `sid'.  Cerca del lanzamiento de estas
     arquitecturas se creaba un enlace entre la versión `estable' y `sid' y
     a partir de allí eran creadas dentro de la rama `inestable' de manera
     normal.  Esta disposición era un tanto confusa para los usuarios.

     Con la llegada de los repositorios de paquetes (véase Sección 2.1.10,
     `El directorio `pool'') durante el desarrollo de la distribución
     Woody, los paquetes binarios comenzaron a guardarse en un lugar
     estándar del depósito, independientemente de la distribución, de modo
     que al liberar una distribución no se produciera un gran consumo de
     ancho de banda en los sitios réplica (existe, no obstante, un consumo
     gradual del ancho de banda durante el proceso de desarrollo).

2.1.12. Transferencias de paquetes en `incoming/'
-------------------------------------------------

     Los paquetes transferidos primero se ubican en
     http://incoming.debian.org/ luego de haber sido analizados para
     asegurar que realmente provienen de un desarrollador de Debian (y son
     ubicados en el subdirectorio `DELAYED' en el caso de una transferencia
     de una persona que no es encargada: Non-Maintainer Upload (NMU)).  Una
     vez por día, se transladan de `incoming/' a `unstable/'.

     En una emergencia, si desea instalar paquetes desde `incoming/' antes
     de ir a `unstable/'.

2.1.13. Recuperando una paquete antiguo
---------------------------------------

     Mientra que las distribuciones de Debian más recientes se encuentran
     en el directorio `debian' de cada sitio réplica
     (http://www.debian.org/mirror/), los archivos de las antiguas
     distribuciones de Debian tales como Slink se guardan en
     http://archive.debian.org/ o en el directorio `debian-archive' de cada
     sitio réplica de Debian.

     Los paquetes antiguos de la rama `de prueba' e `inestable' se pueden
     localizar en http://snapshot.debian.net/.

2.1.14. Distintas arquitecturas
-------------------------------

     Dentro de cada uno de los árboles de directorios principales
     (`dists/stable/main', `dists/stable/contrib', `dists/stable/non-free',
     `dists/unstable/main/', etc.) las entradas de los paquetes binarios
     residen en subdirectorios cuyos nombres indican la arquitectura para
     la cual fueron compilados.

        * `binary-all/' para paquetes no dependen de la arquitectura.  Aquí
          se incluyen, por ejemplo, scripts escritos en Perl o
          documentación.

        * `binary-<platform>/' para paquetes que se ejecutan en una
          plataforma determinada.

     Por favor, observe que los paquetes binarios para la versión `de
     prueba' y la versión `inestable' ya no residen en estos directorios
     sino en el directorio de nivel superior `pool'.  No obstante, por
     cuestiones de compatibilidad hacia atrás se siguen conservando los
     archivos índice (`Packages' y `Packages.gz').

     Para las arquitectura binarias actualmente soportadas, consulte las
     Release Notes de cada distribución.  Se pueden ubicar en los sitios de
     Notas de versión para stable
     (http://www.debian.org/releases/stable/releasenotes) y testing
     (http://www.debian.org/releases/testing/releasenotes).

2.1.15. El código fuente
------------------------

     En el sistema Debian se incluye el código fuente para todo.  Por otra
     parte, los términos de la licencia de la mayoría de los programas del
     sistema _exigen_ que se distribuyan junto con su código fuente o que
     proporcionen una manera de obtenerlo.

     Normalmente el código fuente se distribuye a través de los directorios
     `source', que son paralelos a todos los directorios que contienen los
     binarios correspondiente a una arquitectura específica o, más
     recientemente, en el directorio `pool' (véase Sección 2.1.10, `El
     directorio `pool'').  Para obtener el código fuente sin estar
     familiarizado con la estructura del archivo Debian, pruebe hacer
     `apt-get source <nombre_paquete>'.

     Algunos paquetes, en especial `pine', se distribuyen únicamente como
     código fuente debido a las limitaciones impuestas por su licencia
     (hace poco se ha incluido el paquete `pine-tracker' para facilitar la
     instalación de Pine).  El procedimiento descrito en Sección 6.4.10,
     `Portar un paquete a la rama `stable'' y Sección 13.9, `Creación de
     paquetes Debian' describe la manera de contruir un paquete en forma
     manual.

     Para los paquetes de los directorios "contrib" y "non-free", que
     formalmente no forman parte del sistema Debian, el código fuente puede
     o no estar disponible.


2.2. Sistema de administración de paquetes Debian
-------------------------------------------------

2.2.1. Repaso sobre los paquetes Debian
---------------------------------------

     Los paquetes contienen generalmente todos los archivos necesarios para
     implementar un conjunto de comandos relacionados o características.
     Existen dos tipos de paquetes Debian:

        * _Paquetes binarios_, que contienen ejecutables, archivos de
          configuración, páginas man/info, información sobre derechos de
          autor y otra documentación.  Estos paquetes se distribuyen en un
          formato de archivo específico de Debian (véase Sección 2.2.2,
          `Formato de los paquetes Debian'); que se distinguen por tener a
          `.deb' como extensión de archivo.  Los paquetes binarios se
          pueden desempaquetar usando la utilidad de Debian `dpkg'; se
          brindan más detalles en la página del manual.

        * _Paquetes fuentes_, que consisten en un archivo `.dsc' que
          describe el paquete (incluyendo el nombre de los archivos que
          siguen), un archivo `.orig.tar.gz' que contiene el código fuente
          original sin modificar en formato tar comprimido con gzip y,
          generalmente, un archivo `.diff.gz' que contiene los cambios del
          código fuente original específicos de Debian.  La utilidad
          `dpkg-source' empaqueta y desempaqueta los archivos fuentes de
          Debian; se brindan más detalles en la página del manual.

     La instalación de software mediante el sistema de paquetes utiliza
     "dependencias" que fueron cuidadosamente concebidas por las personas a
     cargo de los paquetes.  Estas dependencias están documentadas en el
     archivo `control' asociado a cada paquete.  Por ejemplo, el paquete
     que contiene el compiladodr C GNU (`gcc') "depende" del paquete
     `binutils' que incluye el enlazador y ensamblador.  Si un usario
     intenta instalar `gcc' sin haber previamente instalado `binutils', el
     sistema de administración de paquetes (dpkg) mostrará un mensaje de
     error diciendo que necesita también a `binutils' y abortará la
     instalación de `gcc' (no obstante, el usuario insistente puede hacer
     caso omiso, véase dpkg(8)) Para más detalles, véase Sección 2.2.8,
     `Dependencia entre paquetes' más abajo.

     Las herramientas de los paquetes de Debian se pueden usar para:

        * manipular y administrar paquetes o partes de paquetes,

        * ayudar al usuario a dividir paquetes que deben distribuirse a
          través de medios de tamaño limitado como, por ejemplo, disketes

        * asistir a los desarrolladores en la construcción de paquetes y

        * ayudar a los usuarios a instalar paquetes que se encuentran en
          sitios Debian remotos.

2.2.2. Formato de los paquetes Debian
-------------------------------------

     Un "paquete" Debian o un archivo Debian contiene los archivos
     ejecutables, bibliotecas y la documentación asociada con un programa
     particular o con un conjunto de programas relacionados.  Normalmente,
     un archivo Debian tiene ua extensión de archivo que termina en `.deb'.

     La estructura interna del formato de paquetes binarios de Debian se
     describen en la página del manual deb(5).  Puesto que el formato
     interno está sujeto a cambios (entre los lanzamientos principales de
     Debian), siempre utilice dpkg-deb(8) para manipular archivos `.deb'.
     [1]

     Los detalles internos de este formato de paquete binario de Debian se
     describen en la página del manual deb(5).  Puesto que este formato
     está sujeto a cambios (entre los lanzamientos principales de Debian),
     siempre utilice dpkg-deb(8) para manipular archivos `.deb'.

     Por lo menos en la distribución Sarge, todos los archivos del
     repositorio de Debian son manipulables por los comandos estándar Unix
     `ar' y `tar', incluso cuando los comandos de `dpkg' no se encuentran
     disponibles.

[1]  El proyecto `debian-installer' introdujo paquetes con nombres que
     terminan en `.udeb'.  En pocas palabras, es un formato micro-`.deb'
     que no necesita seguir estrictamente la política de Debian, carece de
     ciertos contenidos como, por ejemplo, documentación y está destinado a
     ser usado únicamente por el `debian-installer', el nuevo instalador de
     Debian que está siendo desarrollado para el lanzamiento de Sarge.  El
     formato de archivo de `.deb' y `.udeb' son idénticos.  El programa
     `udpkg' utilizado para manipular paquetes `.udeb' tiene una capacidad
     inferior que el estándar `dpkg' y soporta pocas relaciones entre
     paquetes.  La diferencia en el nombre es debido a que los encargados
     del archivo de Debian no estaban contentos con los `.deb's del archivo
     que no seguían con la política de Debian, por lo que fue elegido un
     nombre diferente para acentuar esta diferencia y para hacer menos
     probable que la gente inconcientemente los instale en sistemas reales.
     Los `.udeb's son utilizados en el disco ram inicial durante la
     instalación base para crear únicamente un sistema Debian muy
     restringido.

2.2.3. Convención usada para designar a los paquetes Debian
-----------------------------------------------------------

     Los nombres de los paquetes Debian siguen la siguiente convención:

          <loquesea>_<número_de_versión>-<número_de_revisión_Debian>.deb

     donde <loquesea> es el nombre del paquete.  A modo de verificación,
     uno puede determinar el nombre del paquete asociado a un archivo
     Debian determinado (archivo `.deb') mediante una de las siguientes
     maneras:

        * consultar el archivo "Packages" del directorio del sitio Debian
          donde fue almacenado dicho archivo.  Este archivo contiene una
          descripción de cada paquete; el primer campo de cada párrafo es
          el nombre formal del paquete.

        * usar el comando `dpkg --info <loquesea_VVV-RRR>.deb' (siendo
          <VVV> y <RRR> la versión y la revisión del paquete en cuestión,
          respectivamente).  Esto muestra, entre otras cosas el nombre del
          paquete correspondiente al archivo desempaquetado.

     La parte <VVV> indica el número de versión especificada por el
     desarrollador original.  No hay un estándar que regule los números de
     versión, por lo tanto pueden tener formatos diferentes tales como
     "19990513" y "1.3.8pre1".

     La parte <RRR> indica el número de revisión y es asignado por el
     desarrollador Debian (o por un usuario particular si decide crear el
     paquete por sí mismo).  Este número corresponde al nivel de revisión
     del paquete Debian; de esta manera, un nivel de revisión nuevo implica
     generalmente cambios en el Makefile de Debian (`debian/rules'), en el
     archivo de control (`debian/control'), en los guiones de instalación y
     desinstalación (`debian/p*') o en los archivos de configuración
     utilizados por el paquete.

2.2.4. Preservando la configuración local
-----------------------------------------

     La preservación de los archivos configuración del usuario se activa a
     través del mecanismo "conffiles" de Debian.  Los archivos de
     configuración del usuario (generalmente localizados en `/etc/') son
     especificados en el archivo `conffiles' del sistema de paquetes
     Debian.  El sistema de administración de paquetes evita que estos
     archivos sean reescritos al actualizar un paquete.

     En lo posible configurar el sistema sin modificar los archivos que
     pertenecen a distintos paquetes Debian.  También resulta generalmente
     una buena idea no modificarlos incluso si son archivos de
     configuración.  Esto asegura que las operaciones de actualizaciones
     sean rápidas y sin problemas.

     Para determinar con exactitud qué archivos serán preservados durante
     una actualización, ejecute:

          dpkg --status package

     y consulte la línea "Conffiles:".

     Los detalles del contenido de un archivo `conffiles' son
     proporcionados por el Manual de Normativa de Debian, sección 11.7
     (véase Sección 15.1, `Referencias').

2.2.5. Scripts de mantenimiento de Debian
-----------------------------------------

     Los scripts de mantenimiento de Debian son scripts ejecutables que se
     ejecutan automáticamente antes o después de la instalación de un
     paquete.  Todos estos archivos, junto con otro llamado `control', son
     parte de la sección "control" de un archivo Debian.

     Los archivos individuales son:

     preinst
          Este script se ejecuta antes que su paquete sea desempaquetado de
          su archivo Debian (`.deb').  Muchos scripts "preinst" detienen
          los servicios de los paquetes que están siendo actualizados hasta
          que la actualización o instalación de los mismos haya finalizado
          (luego de la ejecución exitosa del script "postinst").

     postinst
          Generalmente este script completa la configuración requerida por
          un paquete una vez desempaquetado de su archivo Debian (`.deb').
          A menudo, los scripts 'postinst' le piden al usuario ciertos
          datos y/o le advierte que si acepta los valores predeterminados
          deberá volver a reconfigurar el paquete cuando la situación lo
          requiera.  Muchos scripts "postinst" a continuación ejecutan los
          comandos necesarios para reiniciar el servicio una vez que el
          paquete nuevo correspondiente haya sido instalado o actualizado.

     prerm
          Generalmente, este script detiene los demonios asociados a un
          paquete.  Es ejecutado antes de la eliminación de los archivos
          relacionados con el mismo.

     postrm
          Generalmente, este script modifica los enlaces u otros archivos
          asociados a un paquete y/o elimina los archivos creados por él
          (véase, también Sección 2.2.7, `Paquetes virtuales'.)

     Actualmente, todos los archivos de control se pueden encontrar en el
     directorio `/var/lib/dpkg/info'.  Los archivos asociados al paquete
     `loquesea' comienzan con la palabra "loquesea" y llevan las
     extensiones "preinst", "postinst", etc., según corresponda.  El
     archivo `loquesea.list' de este directorio lista todos los archivos
     que fueron instalados con el paquete `loquesea' (obsérvese, que la
     ubicación de estos archivos es interno a `dpkg' y puede estar sujeto a
     cambios)

2.2.6. Prioridad de los paquetes
--------------------------------

     Los encargados de la distribución, asignan a cada paquete Debian una
     _prioridad_ para ayudar al sistema de administración de paquetes.  Las
     prioridades son:

        * Los paquetes _requeridos_ son necesarios para el correcto
          funcionamiento del sistema.

          Esto incluye todas las herramientas necesarias para reparar
          inconvenientes en el sistema.  Nunca debería eliminar estos
          paquetes ya que podría inutilizar su sistema e incluso podría ser
          incapaz de poder usar `dpkg' para recuperarlo.  Los sistemas con
          únicamente con paquetes requeridos probablemente no sean
          utilizables, pero tienen la funcionalidad suficiente como para
          permitir al administrador del sistema arrancar e instalar más
          programas.

        * Los paquetes _Importantes_ son los que habitualmente se
          encuentran en cualquier sistema tipo Unix.

          Son otros paquetes sin los que el sistema no funcionará
          correctamente o no será totalmente utilizable.  _No_ incluye a
          Emacs, a X11, a Tex o cualquier otra aplicación grande.  Estos
          paquetes sólo constituyen la infraestructura básica.

        * Los paquetes _Estándar_ son aquellos que están en todo sistema
          Linux e incluyen un sistema en modo texto razonablemente pequeño
          pero no por eso demasiado limitado.

          Esto es lo que se intalará por defecto si el usuario no
          selecciona otra cosa más.  No incluye aplicaciones demasiado
          grandes, pero incluye Emacs (que es más una parte de la
          infraestructura que una aplicación) y un subconjunto razonable de
          TeX y LaTeX (si resulta ser posible sin X).

        * Los paquetes _Opcionales_ incluye a todos los paquetes que
          probablemente desearía instalar incluso si no está familiarizados
          con ellos y no tiene requerimientos específicos.

          Esto incluye a X11, a la distribución completa de TeX y a un
          montón de aplicaciones.

        * Los paquetes _Extra_ son aquellos que entran en conflicto con
          otros de mayor importancia, y que carecen de utilidad para los
          usuarios que no están familiarizados con ellos, o que necesitan
          de requerimientos específicos como para incluirlos como
          "Opcionales".

     En la descripción del paquete nótese las diferencias entre "Prioridad:
     requerida", "Sección: base" y "Esencial: sí".  "Sección: base"
     significa que el paquete se instalará antes que cualquier otro en un
     sistema nuevo.  La mayoría de los paquetes de la "Sección: base" posee
     una "Prioridad requerida" o por lo menos una "Prioridad: importante" y
     muchos de ellos están marcados con la etiqueta "Esencial: sí".
     "Esencial: sí" significa que para que el sistema de administración de
     paquetes tal como `dpkg' pueda eliminarlo del mismo necesita de una
     opción extra para forzar su desinstalación.  Por ejemplo, `libc6',
     `mawk' y `makedev' tienen una "Prioridad: requerida" y una "Sección:
     base" pero no llevan la etiqueta "Esencial: sí".

2.2.7. Paquetes virtuales
-------------------------

     Un paquete virtual es un nombre genérico que se le asigna a cualquier
     paquete de un grupo de paquetes que básicamente proporcionan la misma
     funcionalidad.  Por ejemplo, tanto `tin' como `trn' son lectores de
     noticias y, por lo tanto, deberán satisfacer cualquier dependencia
     exigida por un programa que requiera de un lector de noticias a fin de
     que éste funcione correctamente o resulte útil.  Se dice que ambos
     proporcionan el "paquete virtual" llamado `news-reader'.

     De manera similar, muchos paquetes tales como `exim', `exim4',
     `sendmail' y `postfix' proporcionan la funcionalidad de un agente de
     transporte de correo.  Por lo tanto, se dice que proporcionan el mismo
     paquete virtual `mail transport agent'.  Si se instala alguno de los
     dos, cualquier programa que dependa de la instalación de un agente de
     transporte de correo se ejecutará sin problemas debido a la existencia
     de este paquete virtual.

     Debian posee un mecanismo de modo que, si se instala en un sistema más
     de un paquete que proporciona el mismo paquete virtual, el
     administrador puede configurar uno de los dos como paquete preferido.
     El comando utilizado se llama `update-alternatives' y se describe mas
     adelante en Sección 6.5.3, `Comandos alternativos'.

2.2.8. Dependencia entre paquetes
---------------------------------

     El sistema de paquetes Debian tiene un rango de "dependencias" entre
     paquetes que fue concebido para señalar (mediante un simple indicador)
     el nivel en el que el Programa A puede operar en forma independiente
     de la existencia del Programa B en un sistema determinado:

        * El Paquete A _depende_ del Paquete B si B debe instalarse sí o sí
          para poder ejecutar A.  En algunos casos A depende no sólo de B,
          sino de una versión específica de B.  En este caso, la
          dependencia de versión constituye un límite inferior, es decir, A
          dependerá de cualquier versión de B más reciente que la versión
          especificada.

        * El Paquete A _recomienda_ al Paquete B si el encargado del mismo
          considera que la mayoría de los usuarios no querrán a A sin tener
          también la funcionalidad proporcionada por B.

        * El Paquete A _sugiere_ al Paquete B si B contiene archivos que
          están relacionados con (y generalmente mejoran) la funcionalidad
          de A.

        * El Paquete A _está en conflicto_ con el Paquete B cuando A no
          funciona si se instala B en el sistema.  La mayoría de los casos,
          el conflicto surge cuando A contiene archivos que son mejoras de
          los de B.  A menudo los "conflictos" están relacionados con
          "reemplazos".

        * El Paquete A _reemplaza_ el Paquete B cuando los archivos
          instalados por B se eliminan y (en algunos casos) se
          sobreescriben por los archivos de A.

        * El Paquete A _proporciona_ el Paquete B cuando todos los archivos
          y funcionalidad de B están incorporados en A.  Este mecanismo
          brinda la posibilidad a los usuarios con poco espacio en disco
          obtener sólamente la parte de paquete A que realmente se
          necesita.

     Información más detallada sobre el uso de cada uno de estos términos
     se puede encontrar en el _Manual para la creación de paquetes_ y el
     _Manual de Normativa_.

     Obsérvese que `dselect' tiene un mayor control sobre los paquetes
     considerados como _recomendados_ y _sugeridos_ que `apt-get', el cual
     simplemente obtiene todos los paquetes considerados como
     _dependientes_ y deja todos los paquetes considerados como
     _recomendados_ y _sugeridos_.  En sus versiones modernas ambos
     programas usan APT como interfaz.

2.2.9. Significado de Pre-depends
---------------------------------

     "Pre-depends" es una dependencia especial.  En el caso de un paquete
     común y corriente, `dpkg' desempaquetará sus archivos (es decir, su
     archivo `.deb') estén o no en el sistema los archivos de los cuales
     dependen.  Simplificando, desempaquetar significa que `dpkg' extraerá
     los archivos del archivo .deb que iba a ser instalado en el sistema y
     los coloca en su lugar.  Si el paquete _depende_ de la existencia de
     otros paquetes en el sistema, `dpkg' se negará a completar la
     instalación (ejecutando su acción "configure") hasta que dichos
     paquetes sean instalados.

     No obstante, en el caso de algunos paquetes, `dpkg' se negará incluso
     a desempaquetarlos hasta que se resuelvan ciertas dependencias.  Se
     dice que estos paquetes "pre-dependen" de la presencia de
     algún(algunos) otro(s) paquete(s).  El proyecto Debian proporcionó
     este mecanismo para realizar actualizaciones del sistema seguras del
     formato `a.out' al formato `ELF' en donde el _orden_ en que se
     desempaquetaban los paquetes era crítica.  Existen otras situaciones
     con actualizaciones masivas donde este método resulta útil, por
     ejemplo cuando los paquetes con prioridad "requerida" y su depencencia
     con libc.

     Nuevamente, información más detallada se puede encontrar en el _Manual
     de creación de Paquetes_.

2.2.10. Estado de un paquete
----------------------------

     El estado de un paquete puede ser "unknown" (desconocido), "install"
     (para instalar), "remove" (para eliminar), "purge" (para purgar), o
     "hold" (en espera).  Estas banderas indican lo que el usuario quiere
     hacer con un paquete (como viene indicado por las acciones del usuario
     en la sección "Select" de `dselect' o por la invocación directa de
     `dpkg' por parte del mismo).

     Significados:

        * _unknown_ (desconocido) - el usuario nunca indicó si deseaba el
          paquete.

        * _install_ (para instalar) - el usuario desea instalar o
          actualizar el paquete.

        * _remove_ (para eliminar) - el usuario desea eliminar el paquete
          pero no sus archivos de configuración ya existentes.

        * _purge_ (para purgar) - el usuario desea eliminar completamente
          el paquete incluyendo sus archivos de configuración.

        * _hold_ (para conservar) - el usuario no desea que el paquete sea
          procesado, es decir, quiere conservar la versión actual con su
          estado independientemente de cual sea.

2.2.11. Evitando la actualización de un paquete
-----------------------------------------------

     Existen dos mecanismos para evitar la actualización de un paquete,
     mediante `dpkg' o, comenzando con Woody, mediante APT.

     Con `dpkg', exporte primero la lista de las selecciones de paquetes:

            dpkg --get-selections > <selections.txt>

     A continuación, edite el archivo resultante `<selecciones.txt>',
     cambiando la línea que contiene el paquete que se desea conservar, por
     ejemplo `libc6', de:

          libc6                       install

     a:

          libc6                       hold

     Guárdelo y actualice la base de datos de `dpkg' haciendo:

          dpkg --set-selections <selectiones.txt>

     O, si conoce el nombre del paquete que desea conservar, simplemente
     escriba:

          echo libc6 hold | dpkg --set-selections

     Este proceso conserva los paquetes durante el proceso de instalación
     de cada paquete.

     El mismo efecto se puede obtener mediante `dselect'.  Simplemente
     entre a la pantalla [S]elect, busque el paquete cuyo estado desea
     conservar y presione la tecla `=' (o la tecla `H').  Los cambios se
     producirán inmediatamente al salir de la pantalla.

     En la distribución Woody el sistema a APT pose un mecanismo nuevo
     alternativo para conservar paquetes durante el proceso de obtención de
     archivos .deb usando `Pin-Priority'.  Véase la página del manual
     apt_preferences(5) junto con
     http://www.debian.org/doc/manuals/apt-howto/ o el paquete `apt-howto'.
     Sección 6.2.8, `Repaso de `/etc/apt/preferences'' también contiene una
     breve explicación.

2.2.12. Paquetes fuente
-----------------------

     Los paquetes fuente se distribuyen en un directorio denominado
     `source' y se pueden descargar manualmente o usar

          apt-get source loquesea

     para conseguirlos (consulte la página del manual apt-get(8) para saber
     cómo configurar APT para que haga esto).

2.2.13. Construir un paquete binario a partir de un paquete fuente
------------------------------------------------------------------

     Para un paquete `loquesea', necesitará los archivos `loquesea_*.dsc',
     `loquesea_*.tar.gz' y `loquesea_*.diff.gz' para compilar los fuentes
     (observación: para un paquete Debian nativo el paquete `.diff.gz' no
     existe).

     Una vez que los tiene a todos, y si tiene instalado el paquete
     `dpkg-dev' , el comando

          dpkg-source -x <loquesea_version-revision>.dsc

     extraerá el paquete en un directorio llamado `<loquesea-version>'.

     Ejecutar el siguiente comando para construir el paquete binario:

          $ cd loquesea-version
          $ su -c "apt-get update ; apt-get install fakeroot"
          $ dpkg-buildpackage -rfakeroot -us -uc

     Finalmente haga,

          # su -c "dpkg -i ../<loquesea_version-revision_arch>.deb"

     para instalar el paquete recientemente construido.  Véase Sección
     6.4.10, `Portar un paquete a la rama `stable''.

2.2.14. Creando paquetes Debian nuevos
--------------------------------------

     Para una información más detallada, consulte la Guía para Nuevos
     Encargados de Paquetes de Debian disponible en el paquete
     `maint-guide' o en http://www.debian.org/doc/manuals/maint-guide/.


2.3. Actualizando un sistema Debian
-----------------------------------

     Uno de los objetivos de Debian es proporcionar una manera de
     actualizar el sistema en forma consistente y segura.  Siempre hacemos
     todo lo posible para que una nueva versión se pueda actualizar
     fácilmente a partir de las anteriores.  Durante el proceso de
     actualización, los paquetes alertan a los usuarios sobre posibles
     inconvenientes y a menudo proporcionan una solución al posible
     problema.

     También debería leer las Release Notes, el documento que describe los
     detalles sobre actualizaciones específicas, que acompañan a todos los
     CDs de Debian y disponibles en la WWW en
     http://www.debian.org/releases/stable/releasenotes o
     http://www.debian.org/releases/testing/releasenotes.

     En Capítulo 6, `Administración de paquetes Debian' se proporciona una
     guía práctica sobre actualizaciones.  Esta sección describe los
     detalles básicos.

2.3.1. Métodos para actualizar un sistema Debian
------------------------------------------------

     Uno podría simplemente ejecutar un FTP anónimo o una llamada a `wget'
     a un repositorio Debian, recorrer los distintos directorios hasta
     encontrar el archivo deseado, obtenerlo y, finalmente, instalarlo
     usando `dpkg'.  Obsérvese que `dpkg' instalará los archivos de
     actualización en el momento, incluso en un sistema andando.  A veces,
     no obstante, la versión nueva de un paquete requerirá de la versión
     nueva de otros en cuyo caso la instalación no tendrá éxito hasta/salvo
     que se instalen dichos paquetes.

     Mucha gente encuentra que este enfoque insume gran cantidad de tiempo,
     ya que Debian evoluciona muy rápidamente ---en general, cada semana se
     agregan una docena o más de paquetes nuevos.  Este número es más
     grande justo antes de la salida de una nueva versión.  Para poder
     hacer frente a esta avalancha, muchas personas prefieren usar un
     programa automatizado.  Para este fin, existen diversas herramientas
     de administración de paquetes especializadas.

2.3.2. Repaso de las herramientas de administración de paquetes
---------------------------------------------------------------

     El sistema de administración de paquetes Debian tiene dos objetivos:
     la manipulación del propio paquete y la obtención de los archivos del
     paquete desde un repositorio Debian.  `dpkg' realiza la primer tarea,
     APT y `dselect' la segunda.

2.3.3. `dpkg'
-------------

     Este es el programa principal para manipular los archivos de un
     paquete ; consulte dpkg(8) para una descripción completa.

     `dpkg' viene acompañado con diversos programas suplementarios
     primitivos.

        * `dpkg-deb': Manipula los archivos `.deb'.  dpkg-deb(1)

        * `dpkg-ftp': un antiguo comando para la obtención de paquetes.
          dpkg-ftp(1)

        * `dpkg-mountable': un antiguo comando para la obtención de
          paquetes.  dpkg-mountable(1)

        * `dpkg-split': divide un paquete grande en archivos más pequeños.
          dpkg-split(1)

     `dpkg-ftp' y `dpkg-mountable' han quedado obsoletos luego de la
     introducción del sistema APT.

2.3.4. APT
----------

     APT (Advanced Packaging Tool) es una interfaz avanzada del sistema de
     paquetes de Debian que consiste en diversos programas cuyos nombres
     generalmente comienzan con "apt-".  `apt-get', `apt-cache' y
     `apt-cdrom' son herramientas de la línea de comandos para el manejo de
     paquetes.  Estos también funcionan como frontales de usuario para
     otras herramientas tales como `dselect' y `aptitude'.

     Para más información, instale el paquete `apt' y lea apt-get(8),
     apt-cache(8), apt-cdrom(8), apt.conf(5), sources.list(5),
     apt_preferences(5) (Woody) y
     `/usr/share/doc/apt/guide.html/index.html'.

     Una fuente alternativa de información es el APT HOWTO
     (http://www.debian.org/doc/manuals/apt-howto/).  Éste se puede
     instalar mediante `apt-howto' en
     `/usr/share/doc/apt-howto/en/apt-howto-en.html/index.html'.

     `apt-get upgrade' y `apt-get dist-upgrade' tienden a obtener todos los
     paquetes situados bajo "Dependen:" y descarta todos los paquetes
     listados en "Recomendados:" y "Sugeridos:".  Para evitar esto, use
     `dselect'.

2.3.5. `dselect'
----------------

     Este programa es una interfaz de usuario con menús para el sistema de
     administración de paquetes Debian.  Particularmente resulta útil para
     las primeras instalaciones y actualizaciones a gran escala.  Véase
     Sección 6.2.3, ``dselect''.

     Para más información, instale el paquete `install-doc' y lea
     `/usr/share/doc/install-doc/dselect-beginner.en.html' o Documentación
     dselect para principiantes
     (http://www.debian.org/releases/woody/i386/dselect-beginner).

2.3.6. Actualizando un sistema en funcionamiento
------------------------------------------------

     El kernel (el sistema de archivos) en los sistemas Debian admite el
     reemplazo de archivos incluso cuando están siendo usados.

     Asimismo se cuenta con un programa llamado `start-stop-daemon' que se
     utiliza para arrancar demonios en tiempo de arranque o para detenerlos
     cuando se cambian el nivel de ejecución del kernel (por ejemplo, de
     modo multiusuario a monousuario, para detener el sistema, etc.).  Los
     scripts de instalación utilizan el mismo programa cuando se instala un
     nuevo paquete que contenga un demonio para detener los demonios en
     ejecución y rearrancarlos si fuese necesario.

     Obsérvese que Debian no exige usar el modo monousuario para actualizar
     el sistema en funcionamiento.

2.3.7. Archivos `.deb' descargados y en caché
---------------------------------------------

     Si ha descargado manualmente los paquetes a su disco (lo cual no es en
     absoluto necesario, véase arriba para la descripción de `dpkg-ftp' o
     APT), entonces después de haber instalados puede eliminarlos de su
     sistema.

     Si utiliza APT, los archivos se guardan en el caché situado en el
     directorio `/var/cache/apt/archives'.  Tras la instalación puede
     eliminarlos (`apt-get clean') o copiarlos al directorio
     `/var/cache/apt/archives' de otra máquina para economizar el tiempo de
     descarga para instalaciones posteriores.

2.3.8. Mantener un registro de las actualizaciones
--------------------------------------------------

     `dpkg' mantiene un registro de los paquetes que han sido
     desempaquetados, configurados, eliminados y/o purgados pero (hasta el
     momento) no mantiene un registro de la actividad del terminal que
     tiene lugar cuando el paquete está siendo manipulado.

     La manera más sencilla de superar este inconveniente consiste en
     ejecutar las sesiones de `dpkg', `dselect', `apt-get', etc., con el
     programa script(1).


2.4. El proceso de arranque de Debian
-------------------------------------

2.4.1. El programa `init'
-------------------------

     Al igual que todos los sistemas Unix, Debian arranca ejecutando el
     programa `init'.  El archivo de configuración de `init' (que es el
     `/etc/inittab') indica que el primer script que se debe ejecutar es el
     `/etc/init.d/rcS'.

     Lo que ocurre a continuación depende de si se encuentra instalado el
     paquete `sysv-rc' o el `file-rc'.  A continuación, supondremos que se
     encuentra instalado el paquete `sysv-rc' (`file-rc' contiene su propio
     script `/etc/init.d/rcS' y utiliza un archivo en vez de enlaces
     simbólicos en los directorios rc para controlar qué servicios se
     inician en los diferentes niveles de ejecución)

     El archivo `/etc/init.d/rcS' del paquete `sysv-rc' ejecuta todos los
     scripts situados en `/etc/rcS.d/' para realizar inicializaciones tales
     como la comprobación y montaje de los sistemas de archivos, la carga
     de módulos, la inicialización de los servicios de red, la
     configuración del reloj, etc.  Luego, y por compatibilidad, también
     ejecuta todos los archivos (excepto aquellos con un `.'  en su nombre)
     situados en `/etc/rc.boot/'.  Este último directorio está reservado
     para el administrador del sistema y su utilización ha caído en desuso.
     Véase Sección 9.1, `Trucos para la inicialización del sistema' y el
     Sistema de niveles de ejecución y scripts init.d
     (http://www.debian.org/doc/debian-policy/ch-opersys#s-sysvinit) en el
     Manual de Normativa de Debian para más información.

     Debian no utiliza el directorio `rc.local' del tipo BSD.

2.4.2. Niveles de ejecución
---------------------------

     Luego de completar el proceso de arranque, `init' inicia todos los
     servicios que han sido configurados para ejecutarse en el nivel de
     ejecución predeterminado.  Este último viene indicado por una entrada
     `id' en el `/etc/inittab'.  Debian viene con `id=2'.

     Debian utiliza 7 niveles de ejecución:
        * 0 (apagar el sistema),
        * 1 (modo monousuario),
        * 2 al 5 (diversos modos multiusuario) y
        * 6 (reiniciar el sistema).
     Tambien puede utilizarse los niveles de ejecución 7, 8 y 9 pero sus
     directorios rc no se van llenando a medida que son instalados los
     paquetes.

     Cambie los niveles de ejecución utilizando el comando `telinit'.

     Si está instalado el paquete `sysv-rc' entonces para entrar al nivel
     de ejecución predeterminado se ejecutan todos los scripts de inicio
     situados en `/etc/rc<nivel_de_ejecución>.d/' (donde
     <nivel_de_ejecución> es el nivel de ejecución predeterminado).  Los
     scripts situados en `/etc/rc<nivel_de_ejecución>.d' son, de hecho,
     enlaces simbólicos que apuntan a los scripts ubicados en
     `/etc/init.d/'.  No obstante, la primera letra del nombre del enlace
     simbólico determina la _manera_ en que se ejecuta el script de
     `/etc/init.d/'.  Para ser más precisos, antes de entrar a cualquier
     nivel de ejecución, se ejecutan todos los scripts que comienzan con
     `K'; estos scripts detienen servicios.  Luego se ejecutan todos los
     scripts que comienzan con `S'; estos scripts inician servicios.  Los
     números de dos dígitos que preceden a `K' o a `S' determinan el orden
     en que se ejecutarán los scripts: aquellos con las numeraciones más
     bajas se ejecutarán primero.

     Este enfoque funciona porque cada script de `/etc/init.d/' toma un
     argumento "start" o "stop" y actúa en consecuencia.  Cada script
     también acepta "restart" y "force-reload"; estos métodos se pueden
     utilizar para reiniciar los servicios una vez que haya sido arrancado
     el sistema o forzarlos para que vuelvan a cargar sus archivos de
     configuración.

     Por ejemplo:

          # /etc/init.d/exim4 force-reload

2.4.3. Personalizando el proceso de arranque
--------------------------------------------

     Supongamos que desea añadir el servicio `loquesea' al conjunto de
     aquellos servicios que fueron iniciados tras el arranque.  Siga los
     siguientes pasos:

     1.   Instale el script init `/etc/init.d/loquesea'.

     2.   Ejecute `update-rc.d' con los argumentos adecuados.


2.5. En apoyo a la diversidad
-----------------------------

     Debian ofrece diversas alternativas para satisfacer los deseos del
     administrador del sistema sin dañar al sistema.

        * `dpkg-divert', véase Sección 6.5.1, `El comando `dpkg-divert''.

        * `equivs', véase Sección 6.5.2, `El paquete `equivs''.

        * `update-alternative', véase Sección 6.5.3, `Comandos
          alternativos'.

        * `make-kpkg' puede alojar distintos cargadores de arranque.  Véase
          make-kpkg(1).

     Cualquier archivo situado en `/usr/local/' pertenece al administrador
     del sistema y Debian no los va a tocar.  La mayoría los archivos
     situados en `/etc/' son `conffiles' (archivos de configuración) y
     Debian no los sobreescribirá durante una actualización salvo que el
     administrador del sistema los solicite en forma explícita.


2.6. Internacionalización
-------------------------

     El sistema Debian se encuentra internacionalizado y provee soporte
     para la visualización y entrada de caracteres en diversos idiomas,
     tanto en la consola como en X.  Diversos, documentos, páginas del
     manual y mensajes del sistema han sido traducidos en un número
     creciente de idiomas.  Durante la instalación, Debian le pide al
     usuario elegir el idioma de instalación ( y a veces una variante local
     del idioma)

     Si el sistema que ha instalado no soporta todas las características
     que necesita de su idioma, si necesita cambiar de idioma o instalar un
     teclado diferente que soporte su idioma, consulte Sección 9.7,
     `Localización y soporte de idiomas'.


2.7. Debian y el kernel
-----------------------

     Véase Capítulo 7, `El kernel de Linux en Debian'.

2.7.1. Compilando un kernel desde un fuente no perteneciente a Debian
---------------------------------------------------------------------

     Uno tiene que comprender la política de Debian en relación a las
     cabeceras.

     Las bibliotecacs C de Debian se construyen con las versiones más
     reciente de las cabeceras del _kernel_ de la rama _estable_.

     Por ejemplo, la versión Debian-1.2 usaba la versión 5.4.13 de las
     cabeceras.  Esta práctica contrasta con los paquetes fuentes del
     kernel de Linux distribuidos por todos los sitios de archivos FTP de
     Linux que usan incluso versiones más recientes de las cabeceras.  Los
     archivos de cabecera del kernel distribuidos con los fuentes del mismo
     están ubicados en `/usr/include/linux/include/'.

     Si necesita compilar un programa con las cabeceras del kernel que son
     más nuevas que las proporcionadas por `libc6-dev' debe incluir al
     compilar `-I/usr/src/linux/include/' en la línea de comando.  Esto me
     ocurrió una vez con el empaquetado del demonio automounter (`amd').
     Cuando los nuevos núcleos cambiaron algunos detalles internos
     relacionados con el NFS, `amd' necesitaba saber de ellos.  Esto me
     obligó a incluir las cabeceras de los últimos núcleos.

2.7.2. Herramientas para crear núcleos personalizados
-----------------------------------------------------

     A los usuarios que desean (o deben) crear un núcleo personalizado se
     les recomienda descargar el paquete `kernel-package'.  Este paquete
     contiene el script para crear el paquete del kernel y proporciona la
     posibilidad de crear un paquete Debian kernel-image ejecutando el
     comando

          # make-kpkg kernel_image

     en el directorio principal de los fuentes del kernel.  La ayuda
     disponible se obtiene ejecutando el comando

          # make-kpkg --help

     o mediante la página del manual make-kpkg(8).  y Capítulo 7, `El
     kernel de Linux en Debian'.

     Los usuarios deben descargar por cuenta propia el código fuente más
     reciente del núcleo (o del núcleo de su preferencia) de su sitio Linux
     favorito a menos que se encuentre disponible un paquete
     kernel-source-<version> (donde <version> hace referencia a la versión
     del kernel).  El script de arranque `initrd' de Debian requiere de un
     parche especial para el kernel llamado `initrd'; véase
     http://bugs.debian.org/149236.

     En el archivo `/usr/doc/kernel-package/README' se dan instrucciones
     detalladas para el uso del paquete `kernel-package'.

2.7.3. Cargadores de arranque alternativos
------------------------------------------

     Para usar cargadores de arranque alternativos tales como `grub' o
     `loadlin', copie el kernel de Linux compilado `bzimage' a otras
     ubicaciones (por ejemplo, a `/boot/grub' o a una partición MS-DOS).

2.7.4. Discos de arranque personalizados
----------------------------------------

     La tarea de crear discos de arranque personalizados se vió grandemente
     facilitada por el paquete Debian `boot-floppies' que solía estar en la
     en la sección `admin' del archivo FTP Debian para Potato y versiones
     anteriores.  Los scripts de shell de este paquete crean discos de
     arranque en formato `syslinux'.  Se tratan de discos formateados en
     MS-DOS cuyos sectores de arranque han sido alterados de modo de poder
     arrancar Linux directamente (o cualquier otro sistema operativo que
     haya sido definido en el archivo `syslinux.cfg' del disquete).  Otros
     scripts de este paquete crean discos de arranque de emergencia e
     incluso crean los discos básicos.

     Encontrará más información sobre esto en el archivo
     `/usr/doc/boot-floppies/README' luego de instalar el paquete
     `boot-floppies'.

2.7.5. Cuidados especiales para tratar con módulos
--------------------------------------------------

     El paquete `modconf' de Debian proporciona un script de shell
     (`/usr/sbin/modconf') que se puede usar para personalizar la
     configuración de los módulos.  Este script presenta una interfaz
     basada en menús en donde el usuario puede elegir los distintos
     controladores de dispositivos que se pueden cargar en el sistema.  Las
     respuestas se utilizan para personalizar el archivo
     `/etc/modules.conf' (que contiene los alias y demás argumentos que se
     deben usar para los diferentes módulos) gracias a los archivos
     `/etc/modutils/' y `/etc/modules' (que contiene los módulos que se
     deben cargar durante el arranque).

     Al igual que los archivos (nuevos) `Configure.help' que ahora están
     disponibles para admitir la construcción de núcleos personalizados, el
     paquete `modconf' package viene con una serie de archivos de ayuda (en
     `/usr/share/modconf/') que proporcionan información detallada sobre
     los argumentos apropiados para cada uno de los módulos.  Véase Sección
     7.2, `El kernel modular 2.4' para algunos ejemplos.

2.7.6. Desinstalando el paquete de un kernel antiguo
----------------------------------------------------

     El script `kernel-image-<NNN>.prerm' comprueba si el kernel que está
     actualmente ejecutando es el mismo que el que está intentando
     desinstalar.  Por lo tanto, puede eliminar de manera segura los
     núcleos que no desea seguir usando con el siguiente comando:

          # dpkg --purge --force-remove-essential kernel-image-<NNN>

     (obviamente, hay que reemplazar <NNN> por el número de versión y
     revisión de su kernel)


-------------------------------------------------------------------------------


3. Consejos para la instalación de un sistema Debian
----------------------------------------------------

     La documentación oficial para instalar Debian se encuentra en
     http://www.debian.org/releases/stable/ y
     http://www.debian.org/releases/stable/installmanual.

     Las versiones de desarrollo se encuentran en
     http://www.debian.org/releases/testing/ y
     http://www.debian.org/releases/testing/installmanual (en preparación,
     a veces puede no existir).

     Aunque este capítulo fue escrito durante la época del instalador
     Potato, la mayoría de su contenido ha sido actualizado para el
     instalador Woody.  Ambos instaladores son muy similares.  Puesto que
     Sarge utilizará un instalador totalmente diferente, por favor
     considere lo siguiente como punto referencia para el instalador Sarge.
     Asimismo algunos paquetes claves han cambiado su nombre y prioridades.
     Por ejemplo, el MTA predeterminado de Sarge es `exim4' en vez de
     `exim' y ha sido incluido `coreutils' para reemplazar diversos
     paquetes.  Puede que necesite realizar algunas modificaciones.


3.1. Consejos generales para la instalación de un sistema Linux
---------------------------------------------------------------

     No se olvide visitar http://www.debian.org/CD/netinst/ si está buscado
     la imagen del instalador Debian en CD.

     Utilizar la versión `de prueba' o `inestable' de Debian conlleva el
     riesgo creciente de encontrarse con fallos graves.  Esto puede
     evitarse, creando un esquema multi-arranque con versiones más estables
     de Debian, o utilizando un truco interesante proporcionado por
     `chroot' en la versión más estable como se explica en Sección 8.6.34,
     ``chroot''.  Esta última opción nos permitirá ejecutar diferentes
     versiones de Debian simultáneamente en diferentes consolas.

3.1.1. Fundamentos sobre la compatibilidad del hardware
-------------------------------------------------------

     Linux es compatible con la mayoría del hardware de PC y se puede
     instalar en prácticamente cualquier sistema.  Para mí, fue tan fácil
     como instalar Windows 95/98/Me.  La lista de compatibilidad de
     hardware parece que no deja de crecer.

     Si posee una PC portátil, consulte Linux on Laptops
     (http://www.linux-laptop.net/) para consejos sobre instalación según
     marca y modelo.

     Mi recomendación para el hardware de una PC de escritorio es:
     "simplemente sea conservador":
        * SCSI en vez de IDE para trabajar, disco duro IDE/ATAPI para uso
          personal.
        * CD-ROM IDE/ATAPI CD-ROM (o CD-RW).
        * PCI en vez de ISA, en especial para las tarjetas de red (NIC).
        * Use un NIC económico.  Tulip para PCI, NE2000 para ISA es
          suficiente.
        * Evite PCMCIA (portátiles) en su primera instalación de Linux.
        * No utilice teclados o ratones USB ...  a menos que le gusten los
          desafíos.

     Si posee una máquina lenta, extraer el disco duro y conectarlo a otra
     máquina más rápida para la instalación es muy buena idea.

3.1.2. Determinando el hardware del PC
--------------------------------------

     Durante la instalación, se le pedirá que identifique el hardware o
     chipset del PC.  A menudo, esta información no resulta fácil de
     encontrar.  Veamos un método
     1.   Abra el gabinete de su PC y mire su interior.
     2.   Anote los números de los chips más grandes de la tarjeta de
          video, la tarjeta de red, los chips situados cerca de los puertos
          seriales y puertos IDE.
     3.   Anote los nombres impresos en la parte posterior de las tarjetas
          PCI e ISA.

3.1.3. Determinando el hardware del PC mediante Debian
------------------------------------------------------

     En un sistema Linux, los siguientes comandos deberían brindarle cierta
     idea sobre su hardware actual y su configuración.

          $ pager /proc/pci
          $ pager /proc/interrupts
          $ pager /proc/ioports
          $ pager /proc/bus/usb/devices

     Estos comandos se pueden ejecutar durante el proceso de instalación
     desde la pantalla de la consola presionando Alt-F2.

     Finalizada la primer etapa de instalación e instalando los paquetes
     opcionales `pciutils', `usbutils' y `lshw', puede obtener información
     más detallada del sistema:

          $ lspci -v |pager
          $ lsusb -v |pager
          # lshw  |pager

     Usos típico de las interrupciones:
        * IRQ0: salida del temporizador (reloj del sistema)(8254)
        * IRQ1: controlador del teclado
        * IRQ2: cascada para IRQ8--IRQ15 en una PC-AT
        * IRQ3: puerto serie secundario (io-port=0x2F8) (`/dev/ttyS1')
        * IRQ4: puerto serie primario (io-port=0x3F8) (`/dev/ttyS0')
        * IRQ5: libre [tarjeta de sonido (SB16: io-port=0x220, DMA-low=1,
          DMA-high=5)]
        * IRQ6: controlador de la disquetera (io-port=0x3F0) (`/dev/fd0',
          `/dev/fd1')
        * IRQ7: puerto paralelo (io-port=0x378) (`/dev/lp0')
        * IRQ8: rtc
        * IRQ9: interrupción por software (int 0x0A), se redirige a IRQ2
        * IRQ10: libre [interfaz de la tarjeta de red (NE2000:
          io-port=0x300)]
        * IRQ11: libre [(SB16-SCSI: io-port=0x340, SB16-IDE:
          io-port=0x1E8,0x3EE)]
        * IRQ12: ratón PS/2
        * IRQ13: libre (era el coprocesador matématico 80287)
        * IRQ14: controlador IDE primario (`/dev/hda', `/dev/hdb')
        * IRQ15: controlador IDE secundario (`/dev/hdc', `/dev/hdd')
     Para antiguas tarjeta ISA que no son del tipo PnP puede que desee
     configurar IRQ5, IRQ10 y IRQ11 como no-PnP desde la BIOS.

     Para los dispositivos USB, las clases de dispositivos se encuentran en
     `/proc/bus/usb/devices' como `Cls=<nn>':
        * Cls=00 : Sin usar
        * Cls=01 : Audio (parlante, etc.)
        * Cls=02 : Comunicación (MODEM, NIC, ...)
        * Cls=03 : HID (Human Interface Device: teclado, ratón, palanca de
          juegos)
        * Cls=07 : Impresora
        * Cls=08 : Almacenamiento (disquetera, lectora CD/DVD, disco duro,
          Flash, ...)
        * Cls=09 : Hub (hub USB)
        * Cls=255 : Específico del vendedor
     Si la clase del dispositivo es diferente a 255, Linux lo soporta.

3.1.4. Determinando el hardware del PC mediante otros SOs
---------------------------------------------------------

     La información de hardware se puede también obtener mediante mediante
     otros SOs:

     Instale otra distribución Linux comercial.  La detección de hardware
     suele ser mejor que en Debian por el momento (esta situación debería
     cambiar una vez `debian-installer' forme parte de Sarge).

     Instale Windows.  La configuración del hardware se puede obtener
     pulsando con el botón derecho del ratón sobre "Mi PC" yendo a
     Propiedades / Administración de Dispositivos.  Anote toda la
     información disponible, tales como IRQ, direcciones de los puertos de
     E/S y DMA.  Algunas tarjetas ISA antiguas puede necesitar ser
     configuradas en DOS y usadas en consecuencia.

3.1.5. El mito sobre Lilo
-------------------------

     "Lilo está limitado a los 1024 cilindros."  ¡ INCORRECTO !

     El nuevo `lilo' que se usa a partir de Debian Potato tiene soporte
     lba32.  Si la BIOS de su placa madre es lo suficientemente reciente
     para admitir lba32, `lilo' debería ser capaz de cargarse más allá de
     la antigua limitación de los 1024 cilindros.

     Sólo asegúrese de añadir una línea que diga "lba32" en algún lugar
     cerca del comienzo de su archivo `lilo.conf' si conserva una versión
     antigua de él.  Véase `/usr/share/doc/lilo/Manual.txt.gz'

3.1.6. GRUB
-----------

     El nuevo cargador `grub' del projecto Hurd GNU se puede instalar en un
     sistema Woody Debian:

          # apt-get update
          # apt-get install grub-doc
          # mc /usr/share/doc/grub-doc/html/
          ... lea los contenidos
          # apt-get install grub
          # pager /usr/share/doc/grub/README.Debian
          ... léalo :)

     Para modificar el menú de GRUB, edite `/boot/grub/menu.lst'.  Véase
     Sección 8.1.6, `Configurando los parámetros de arranque (GRUB)' para
     ver cómo configurar los parámetros de arranque durante el proceso de
     arranque ya que es ligeramente diferente al de la configuración de
     `lilo'.

3.1.7. Elección de los discos de arranque
-----------------------------------------

     Para Potato, preferí el conjunto de discos IDEPCI para una instalación
     normal en una PC de escritorio.  Para Woody, prefiero el conjunto de
     discos bf2.4.  Ambos utilizan una versión `boot-floppies' para crear
     los discos de arranque.

     Si posee una tarjeta de red PCMCIA, necesita usar el conjunto de
     discos del arranque estándar (el conjunto más grande de disketes pero
     con todos los módulos de controladores disponibles) y configurar el
     NIC en el diálogo PCMCIA; no intente configurarla en el diálogo de
     configuración de la red estándar.

     Para sistemas especiales, puede que necesite crear un disco de
     arranque personalizado.  Esto puede realizarse reemplazando la imagen
     del kernel denominado "linux" en el disco de rescate de Debian por
     otra imagen del kernel comprimida, compilada en otro lugar de la
     máquina.  Los detalles se encuentran documentados en el archivo
     `readme.txt' del disco de rescate.  El disco de rescate utiliza el
     sistema de archivos MS-DOS, de modo que puede usar cualquier sistema
     para leerlo y editarlo.  Esto debería facilitar las cosas a las
     personas con una tarjeta de red particular, etc.

     Para Sarge, se espera que `debian-installer' y/o `pgi' se usen para
     crear los disketes de arranque.

3.1.8. Instalación
------------------

     Siga las instrucciones oficiales que se encuentran en
     http://www.debian.org/releases/stable/installmanual o
     http://www.debian.org/releases/testing/installmanual (en preparación,
     a veces puede no existir).

     Si está instalando un sistema usando los `discos de arranque' de la
     distribución `de prueba', puede que necesite abrir un terminal en la
     consola durante el proceso de instalación presionando `Alt-F2' y
     editar manualmente `/etc/apt/sources.list' para reemplazar las
     entradas "stable" por "testing" para ajustar las fuentes de APT.

     Tengo la costumbre de instalar `lilo' en lugares como `/dev/hda3',
     teniendo el `mbr' en `/dev/hda'.  Esto minimiza el riesgo de la
     sobreescritura de la información de arranque.

     Veamos lo que elegí durante el proceso de instalación.
        * MD5 passwords "yes"
        * shadow passwords "yes"
        * Instalación "advanced" (dselect **) y en la selección
             * Excluir emacs (si está seleccionado), nvi, tex, telnet,
               talk(d);
             * Incluir mc, vim y nano-tiny o elvis-tiny.
               Véase Sección 6.2.3, ``dselect''.  Aún si es un fanático de
               Emacs, evítelo por el momento y confórmese con nano durante
               la instalación.  Asimismo evite instalar paquetes grandes
               como TeX en esta etapa (Potato lo hacía).  Véase Sección
               11.2, `Editores de rescate' para conocer la razón de
               instalar nano-tiny o elvis-tiny.
        * A todas las preguntas de configuración = "y" (reemplazar el
          actual) durante cada diálogo de instalación de cada paquete.
        * `exim': seleccioné 2 por máquina ya que envío correo mediante el
          servidor SMTP de mi ISP.

     Para más información sobre dselect, véase Sección 6.2.3, ``dselect''.

3.1.9. Máquinas IP para usar en una LAN
---------------------------------------

     Ejemplo de configuración de una LAN (subred Ct: 192.168.1.0/24):

Internet
   |
   +--- ISP externo brinda servicio POP (que se accede mediante fetchmail)
   |
  Punto de acceso al ISP que brinda servicio DHCP y retransmición SMTP
   |                     :
  Cable módem         (Conexión telefónica)
   |                     :
Puerto externo de la puerta de enlace de la LAN: eth0 (IP dado por el DHCP del ISP)
 utilice una PC portátil antigua (IBM Thinkpad, 486 DX2 50 MHz, 20 MB RAM)
 ejecute el kernel 2.4 de Linux con sistema de archivos ext3.
 ejecute el paquete "ipmasq" (con protección, NAT y firewall)
 ejecute el paquete "dhcp-client" configurado para eth0 (no tiene en cuenta la
 configuración DNS)
 ejecute el paquete "dhcp" configurado para eth1
 ejecute "exim" como smarthost (modo 2)
 ejecute "fetchmail" con un intervalo largo (fallback)
 ejecute "bind" como servidor de nombres en caché para Internet desde la LAN
         como servidor de nombres oficial para el dominio de la red local
 ejecute "ssh" en el pueto 22 y 8080 (conexiones de cualquier lugar)
 ejecutar "squid" como servidor caché para el archivo Debian (para APT)
Puerto interno de la puerta de enlace de la LAN: eth1 (IP = 192.168.1.1, fija)
                         |
         +--Conector para LAN (100 base T)---+
         |                                  |
Algunos clientes de la LAN con IP fija   Algunos clientes DHCP de la LAN
(IP = 192.168.1.2-127, fija)            (IP = 192.168.1.128-200, dinámica)

     Véase Capítulo 10, `Configuración de la red' para detalles de cómo
     configurar una puerta de enlace de una LAN.  Véase Sección 10.12,
     `Configurando una puerta de enlace' para detalles de cómo configurar
     el servidor encaminador de una LAN.

3.1.10. Cuentas de usuarios
---------------------------

     A fin de lograr una organización coherente entre todas las máquinas,
     en mi sistema las primeras cuentas son siempre las mismas.

     Siempre creo una primer cuenta de usario con un nombre como "admin"
     (uid=1000).  Reenvío todos los mensajes del superusuario a ella.  Esta
     cuenta pertenece al grupo `adm' (véase Sección 9.2.2, `"Por qué el
     `su' GNU no soporta el grupo `wheel'"'), al que puede darse una buena
     cantidad de privilegios de superusuario mediante el comando `su'
     usando PAM o con `sudo'.  Véase Sección 4.2.2, `Añadir una cuenta de
     usuario' para más detalles.

3.1.11. Creando sistema de archivos
-----------------------------------

3.1.11.1. Partición del disco duro
----------------------------------

     Prefiero usar diferentes particiones para distintos árboles de
     directorios para limitar el daño luego de un cuelgue del sistema.  Por
     ejemplo,

          /          == (/ + /boot + /bin + /sbin)
                     == 50MB+
          /tmp       == 100MB+
          /var       == 100MB+
          /home      == 100MB+
          /usr       == 700MB+ con X
          /usr/local == 100MB

     El tamaño del directorio `/usr' depende sustancialmente de las
     aplicaciones X Window y de la documentación.  `/usr/' puede ser de
     unos 300MB si se ejecuta un sólo terminal en la consola, mientras que
     2GB--3GB no es un tamaño inusual si se tienen instaladas diversas
     aplicaciones Gnome.  Cuando `/usr/' crece demasiado, mover el
     directorio `/usr/share/' a otra partición es la cura más efectiva.
     Con los núcleos 2.4 de Linux preempaquetados, `/' puede requerir de
     más de 200MB.

     Por ejemplo, el estado actual de mi puerta de enlace Internet es el
     siguiente (salida del comando `df -h'):

          Filesystem            Size  Used Avail Use% Montado en
          /dev/hda3             300M  106M  179M  38% /
          /dev/hda7             100M   12M   82M  13% /home
          /dev/hda8             596M   53M  513M  10% /var
          /dev/hda6             100M  834k   94M   1% /var/lib/cvs
          /dev/hda9             596M  222M  343M  40% /usr
          /dev/hda10            596M  130M  436M  23% /var/cache/apt/archives
          /dev/hda11            1.5G  204M  1.2G  14% /var/spool/squid

     (El gran espacio destinado a `/var/spool/squid' es para el caché de un
     proxy para la descarga de paquetes)

     A continuación se muestra la salida de `fdisk -l' que proporciona una
     idea de la estructura de la partición:

          # fdisk -l /dev/hda # comentario
          
          /dev/hda1             1        41    309928+   6  FAT16 # DOS
          /dev/hda2            42        84    325080   83  Linux # (sin usar)
          /dev/hda3   *        85       126    317520   83  Linux # Principal
          /dev/hda4           127       629   3802680    5  Extended
          /dev/hda5           127       143    128488+  82  Linux swap
          /dev/hda6           144       157    105808+  83  Linux
          /dev/hda7           158       171    105808+  83  Linux
          /dev/hda8           172       253    619888+  83  Linux
          /dev/hda9           254       335    619888+  83  Linux
          /dev/hda10          336       417    619888+  83  Linux
          /dev/hda11          418       629   1602688+  83  Linux

     Existen algunas pocas particiones sin uso.  Éstas están para instalar
     una segunda distribución de Linux o como espacio para los árboles de
     directorios en expansión.

3.1.11.2. Montar los sistemas de archivos
-----------------------------------------

     El montaje correcto de los sistemas de archivos anteriores se lleva a
     cabo mediante `/etc/fstab':

# /etc/fstab: static file system information.
#
# sistema de    punto de        tipo    opciones            dump pass
# archivos      montaje
/dev/hda3       /               ext2    defaults,errors=remount-ro 0 1
/dev/hda5       none            swap    sw                      0 0
proc            /proc           proc    defaults                0 0
/dev/fd0        /floppy         auto    defaults,user,noauto    0 0
/dev/cdrom      /cdrom          iso9660 defaults,ro,user,noauto 0 0
#
# mantener particiones separadas
/dev/hda7       /home           ext2    rw                      0 2
/dev/hda8       /var            ext2    rw                      0 2
/dev/hda6       /var/lib/cvs    ext2    rw                      0 2
/dev/hda9       /usr            ext2    rw                      0 2
/dev/hda10      /var/cache/apt/archives ext2    rw              0 2

# una partición bien grande para el caché del proxy
/dev/hda11      /var/spool/squid ext2   rw                      0 2

# respaldo DOS arrancable
/dev/hda1       /mnt/dos        vfat    rw,noauto               0 0
# respaldo Linux arrancable (sin hacer)
/dev/hda2       /mnt/linux      ext2    rw,noauto               0 0
#
# montajes nfs
mickey:/        /mnt/mickey     nfs     ro,noauto,intr          0 0
goofy:/         /mnt/goofy      nfs     ro,noauto,intr          0 0
# minnie:/ /mnt/minnie smbfs ro,soft,intr,credentials={filename} 0 2

     Para NFS, utilizo `noauto,intr' combinado con la opción predeterminada
     `hard'.  De esta manera, es posible detener un proceso bloqueado por
     una desconexión usando Ctrl-C.

     Para una máquina Windows conectada con Samba (smbfs),
     `rw,auto,soft,intr' puede ser una buena idea.  Véase Sección 3.5,
     `Configuración de Samba'.

     Para una disquetera, usar `noauto,rw,sync,user,exec' para preevenir la
     corrupción de datos tras eyectar el diskette en forma accidental antes
     de desmontarlo.  Esto ralentiza el proceso de escritura.

3.1.11.3. Montaje autofs
------------------------

     Puntos claves para el montaje automático:
        * Cargue el módulo `vfat' para permitir que `/etc/auto.misc'
          contenga `-fstype=auto':
               # modprobe vfat # antes de intentar acceder al diskete
                ... o para automatizar esta configuración,
               # echo "vfat" >> /etc/modules
                ... y reinicie el sistema.
        * Escriba en el archivo `/etc/auto.misc' lo siguiente:
floppy -fstype=auto,sync,nodev,nosuid,gid=100,umask=000 :/dev/fd0
 ... donde gid=100 es "users".
        * Cree los enlaces `cdrom' y `floppy' en `/home/<user>' que apunten
          a `/var/autofs/misc/cdrom' y `/var/autofs/misc/floppy'
          respectivamente.
        * Añada <user> al grupo "users".

3.1.11.4. Montaje NFS
---------------------

     El servidor Linux NFS externo (goofy) se encuentra detrás de un
     firewall (puerta de enlace).  Tengo una política de seguridad bastante
     laxa en mi LAN ya que soy el único usuario.  Para activar el acceso
     NFS, del lado del servidor es necesario añadir lo siguiente al
     `/etc/exports':

# /etc/exports: la lista de control de acceso para los sistemas de
#               archivos que se puede exportar a los clientes NFS. Véase(5).
/       (rw,no_root_squash)

     Esto se necesita para activar el servidor NFS además de instalar y
     activar los paquetes cliente y servidor NFS.

     Por sencillez, generalmente creo una única partición de 2GB para una
     instalación experimental o secundaria de Linux.  Opcialmente comparto
     las particiones de intercambio y `/tmp' para estas instalaciones.  El
     esquema de particiones múltiples es demasiado complicado para estos
     usos.  Si se necesita un sistema sencillo de consola, 500MB puede ser
     más que suficiente.

3.1.12. Lineamientos para la memoria DRAM
-----------------------------------------

     A continuación se da a grandes rasgos indicaciones para la DRAM.

  4 MB:  Mínimo suficiente para hacer funcionar el kernel de Linux.
 16 MB:  Mínimo para un uso razonable de un sistema en modo consola.
 32 MB:  Mínimo para un sistema X sencillo.
 64 MB:  Mínimo para un sistema X con GNOME/KDE.
128 MB:  Comfortable para un sistema X system con GNOME/KDE.
256 MB (o más):  ¿Por qué no disponer de ella? La memoria DRAM es económica.

     Usando la opción de arranque `mem=4m' (o en lilo `append="mem=4m"') le
     mostrará como se comportaría el sistema con 4Mb de memoria instalada.
     Para un sistema con más de 64Mb de memoria con una BIOS antigua es
     necesario un parámetro de arranque para lilo.

3.1.13. Espacio de intercambio
------------------------------

     Uso las siguientes directrices para el espacio de intercambio:
        * Cada partición de intercambio es < 128 MB (para un núcleo 2.0
          antiguo), < 2 GB (para núcleos recientes)
        * Total = o bien 1 a 2 veces la RAM instalada o 128 MB para 2 GB
        * Asígnelas en diferentes unidades y móntelas a todas con las
          opciones `sw,pri=1' en el `/etc/fstab'.  Esto asegura que el
          kernel haga RAID por bandas en las particiones de intercambio y
          posibilita el máximo rendimiento de las mismas.
        * En lo posible utilice una porción central del disco duro.

     Incluso si nunca lo necesita, es conveniente contar con cierto espacio
     de intercambio (128MB) ya que el sistema se ralentizará antes que se
     cuelge debido a un programa que le falte memoria.


3.2. Configuración del bash
---------------------------

     Modifiqué los scripts de inicio del intérprete de comandos en todo el
     sistema de acuerdo con mis preferencias:

/etc/bash.bashrc        Reemplazar con una personalizada
/etc/profile            Conservar la que acompaña a lai
                        distibución ( \w -> \W)
/etc/skel/.bashrc       Reemplazar con una copia privada
/etc/skel/.profile      Reemplazar con una copia privada
/etc/skel/.bash_profile Reemplazar con una copia privada
~/.bashrc               Reemplazar con una copia privada para todas las cuentas
~/.profile              Reemplazar con una copia privada para todas las cuentas
~/.bash_profile         Reemplazar con una copia privada para todas las cuentas

     See details in my example scripts
     (http://www.debian.org/doc/manuals/debian-reference/examples/).  Me
     gusta un sistema transparente, por lo tanto fijé `umask' en 002 o 022.

     `PATH' viene determinado por los siguientes archivos de configuración
     en este orden:

          /etc/login.defs  - antes que el intérprete de comandos fije PATH
          /etc/profile     (puede llamar a /etc/bash.bashrc)
          ~/.bash_profile  (puede llamar a ~/.bashrc)


3.3. Configuración del ratón
----------------------------

3.3.1. Ratón PS/2
-----------------

     En el caso de un ratón con conector PS/2 en una placa madre ATX, el
     flujo de señales sería:

          mouse -> /dev/psaux -> gpm -> /dev/gpmdata = /dev/mouse -> X

     En este caso, se crea un enlace simbólico `/dev/mouse' que apunta a
     `/dev/gpmdata' para dejar conforme a algunas utilidades de
     configuración y permitir su fácil reconfiguración.  (si después de
     todo no decide usar el demonio `gpm', simplemente apunte el enlace
     simbólico `/dev/mouse' a `/dev/psaux' luego de haver eliminado el
     demonio `gpm'.)

     Este flujo de señales permite al teclado y al ratón ser desconectados
     y reinicializados lanzando `gpm' tras la reconexión.  ¡X permanecerá
     activa!

     El protocolo del flujo de señales entre la salida de `gpm' y la
     entrada de X se puede implementar de alguna de estas dos maneras, como
     "ms3" (protocolo de los ratones seriales de Microsoft de 3 botones) o
     como "raw" ( protocolo del ratón conectado) y esta elección impone la
     elección del protocolo usado en la configuración de X.

     Veamos a continuación algunos ejemplos de configuración para un ratón
     PS/2 Logitech de tres botones (ratón tipo UNIX tradicional).

     Si es uno de los desafortunados cuya tarjeta gráfica no está soportada
     por la nueva X4 y necesita usar la antigua X3 (algunas tarjetas de 64
     bits ATI), instale los paquetes X3 y configure `/etc/X11/X86Config' en
     vez de `/etc/X11/X86Config-4' en los siguientes ejemplos.

3.3.1.1. Usando el protocolo ms3
--------------------------------

          /etc/gpm.conf            | /etc/X11/X86Config-4
          =========================+======================================
          device=/dev/psaux        | Section "InputDevice"
          responsiveness=          |  Identifier "Configured Mouse"
          repeat_type=ms3          |  Driver     "mouse"
          type=autops2             |  Option     "CorePointer"
          append=""                |  Option     "Device"   "/dev/mouse"
          sample_rate=             |  Option     "Protocol" "IntelliMouse"
                                   | EndSection

     Si se utiliza este enfoque, el ajuste del tipo de ratón se realiza
     simplemente editando el archivo `gpm.conf' y la configuración X se
     deja sin modificar.  Véase my example scripts
     (http://www.debian.org/doc/manuals/debian-reference/examples/).

3.3.1.2. Usando el protocolo raw
--------------------------------

          /etc/gpm.conf            | /etc/X11/X86Config-4
          =========================+======================================
          device=/dev/psaux        | Section "InputDevice"
          responsiveness=          |  Identifier "Configured Mouse"
          repeat_type=raw          |  Driver     "mouse"
          type=autops2             |  Option     "CorePointer"
          append=""                |  Option     "Device"   "/dev/mouse"
          sample_rate=             |  Option     "Protocol" "MouseManPlusPS/2"
                                   | EndSection

     Si se utiliza este enfoque, el ajuste del tipo de ratón se realiza
     editando el archivo `gpm.conf' y ajustando la configuración de X.

3.3.1.3. Cómo adaptar los diferentes ratones
--------------------------------------------

     Se supone que el tipo de dispositivo `autops2' de `gpm' autodetecterá
     la mayoría de los ratones PS/2 del mercado.  Lamentablemente no
     siempre funciona y no se encuentra disponible en versiones anteriores
     a Woody.  En estos casos intentar usar `ps2' o `imps2' en el archivo
     `gpm.conf' en vez de `autops2'.  Para ver los tipos de ratones que
     reconoce `gpm' escriba: `gpm -t help'.  Véase gpm(8).

     Si se utiliza un ratón PS/2 de dos botones, configure el protocolo X
     para activar `Emulate3Buttons'.  La diferencia de protocolo entre un
     ratón de 2 botones y otro de 3 botones, es detectado y ajustado
     automáticamente por `gpm' luego de pulsar una sola vez el botón
     central.

     Para el protocolo X con Sección 3.3.1.2, `Usando el protocolo raw' o
     sin `gpm', use:
        * `IntelliMouse': puerto serial (repetidor `gpm' con "ms3")
        * `PS/2': puerto PS/2 (siempre pruebe este primero)
        * `IMPS/2': cualquier puerto PS/2 (2, 3, or scroll mice, better)
        * `MouseManPlusPS/2': puerto PS/2 Logitech
        * `...'
     Véase más en Mouse Support in XFree86
     (http://www.xfree86.org/current/mouse.html).

     En el caso de los ratones de rueda estándar de Microsoft, se ha
     informado que funcionan mejor con:

          /etc/gpm.conf            | /etc/X11/X86Config-4
          =========================+======================================
          device=/dev/psaux        | Section "InputDevice"
          responsiveness=          |  Identifier "Configured Mouse"
          repeat_type=raw          |  Driver     "mouse"
          type=autops2             |  Option     "CorePointer"
          append=""                |  Option     "Device"   "/dev/mouse"
          sample_rate=             |  Option     "Protocol" "IMPS/2"
                                   |  Option     "Buttons" "5"
                                   |  Option  "ZAxisMapping" "4 5"
                                   | EndSection

     Para algunas PC portátiles Toshiba, el activar `gpm' antes de PCMCIA
     en el script de inicio System-V puede ayudar a prevenir cuelgues del
     sistema.  Extraño pero cierto.

3.3.2. USB mice
---------------

     Make sure you have all required kernel functions activated through
     kernel compile time configuration or modules:
        * Under "Input core support":
             * "Input core support" (CONFIG_INPUT, `input.o'),
             * "Mouse support" (CONFIG_INPUT_MOUSEDEV, `mousedev.o'),
        * Under "USB support":
             * "Support for USB" (CONFIG_USB, `usbcore.o'),
             * "Preliminary USB device filesystem" (CONFIG_USB_DEVICEFS),
             * "UHCI" or "OHCI" (CONFIG_USB_UHCI || CONFIG_USB_UHCI_ALT ||
               CONFIG_USB_OHCI, `usb-uhci.o' || `uhci.o' || `usb-ohci.o'),
             * "USB Human Interface Device (full HID) support"
               (CONFIG_USB_HID, `hid.o'), and
             * "HID input layer support" (CONFIG_USB_HIDINPUT)
     Here, lower case names are module names.

     Si no está usando devfs, cree un nodo de dispositivo con
     `/dev/input/mice' major 13 y minor 63 de la siguiente manera:

          # cd /dev
          # mkdir input
          # mknod input/mice c 13 63

     Para un ratón _USB_ típico de tres botones, la configuración podría
     ser:

          /etc/gpm.conf            | /etc/X11/X86Config-4
          =========================+======================================
          device=/dev/input/mice   | Section "InputDevice"
          responsiveness=          |  Identifier "Generic Mouse"
          repeat_type=raw          |  Driver     "mouse"
          type=autops2             |  Option     "SendCoreEvents" "true"
          append=""                |  Option     "Device"   "/dev/input/mice"
          sample_rate=             |  Option     "Protocol" "IMPS/2"
                                   |  Option     "Buttons" "5"
                                   |  Option  "ZAxisMapping" "4 5"
                                   | EndSection

     Véase Linux USB Project (http://www.linux-usb.org/) para más
     información

3.3.3. Touch pad
----------------

     Aunque el comportamiento predeterminado del touch pad en una
     computadora portátil emula un ratón PS/2 de dos botones, el paquete
     `tpconfig' permite el control absoluto del dispositivo.  Por ejemplo,
     incluyendo `OPTIONS="--tapmode=0"' en `/etc/default/tpconfig'
     desactivará el comportamiento molesto de "pulsar mediante un
     golpecito".  Configure el `/etc/gpm.conf' de la siguiente manera para
     usar tanto el touch pad como el control USB externo en la consola:

          device=/dev/psaux
          responsiveness=
          repeat_type=ms3
          type=autops2
          append="-M -m /dev/input/mice -t autops2"
          sample_rate=


3.4. Configuración NFS
----------------------

     Configurar NFS en `/etc/exports'.

          # apt-get install nfs-kernel-server
          # echo "/ *.domainname-for-lan-hosts(rw,no_root_squash,nohide)" \
                  >> /etc/exports

     Véase mi script de ejemplo para más detalles
     (http://www.debian.org/doc/manuals/debian-reference/examples/).


3.5. Configuración de Samba
---------------------------

     Referencias:
        * http://www.samba.org/
        * paquete `samba-doc'

     Configurando Samba en modo "share" resulta más fácil ya que crea
     unidades compartidas de tipo WfW.  Pero es conveniente configurarlo en
     modo "user".

     Samba se puede configurar mediante `debconf' o `vi':

          # dpkg-reconfigure --priority=<low> samba # en Woody
          # vi /etc/samba/smb.conf

     Véase mi script de ejemplo para más detalles
     (http://www.debian.org/doc/manuals/debian-reference/examples/).

     Añadir un nuevo usuario al archivo smbpasswd puede hacerse mediante
     `smbpasswd':

          $su -c "smbpasswd -a nombre_usuario"

     Para una compatibilidad óptima, asegúrese de usar contraseñas
     encriptadas.

     Elija `el nivel del SO' según el siguiente sistema de equivalencias
     (cuanto más grande es el número, mayor es la prioridad del servidor):

0:      Samba con poca potencia (nunca se convertirá en un navegador principal)
1:      Wfw 3.1, Win95, Win98, Win/me?
16:     Win NT WS 3.51
17:     Win NT WS 4.0
32:     Win NT SVR 3.51
33:     Win NT SVR 4.0
255:    Samba con mucha potencia

     Asegúrese que los usuarios sean miembros del grupo propietario del
     directorio que brinda acceso compartido y que el bit de ejecución del
     directorio esté activado.


3.6. Configuración de la impresora
----------------------------------

     El método tradicional es mediante `lpr'/`lpd'.  Existe un nuevo
     sistema CUPS(TM) (Common UNIX Printing System).  PDQ constituye otro
     enfoque.  Consulte el Linux Printing HOWTO
     (http://www.tldp.org/HOWTO/Printing-HOWTO.html) para más información.

3.6.1. `lpr'/`lpd'
------------------

     Para los spoolers `lpr'/`lpd' (`lpr', `lprng' y `gnulpr'), configure
     el archivo `/etc/printcap' de la siguiente manera si están conectados
     a una impresora PostScript o de texto:

          <lp>|<alias>:\
                  :sd=/var/spool/lpd/<lp>:\
                  :mx#0:\
                  :sh:\
                  :lp=/dev/lp0:

     Significado de las líneas anteriores:
        * Cabecera: <lp> --- nombre de la cola, <alias> = alias
        * mx#0 --- tamaño máximo del archivo ilimitado
        * sh --- supresión de la impresión de la primera página de cabecera
        * lp=/dev/lp0 --- dispositivo de impresión local o port@host para
          impresión remota
     Esto es una buena configuración si está conectado a una impresora
     PostScript.  Asimismo, cuando imprima desde una máquina Windows
     mediante Samba, resulta ser una buena configuración para cualquier
     impresora compatible Windows (comunicación bidireccional no
     soportada).  Debe seleccionar la correspondiente configuración de la
     impresora bajo Windows.

     Si no posee una impresora PostScript, necesitará configurar un sistema
     de filtros usando `gs'.  Existe diversas herramientas de configuración
     automáticas para configurar el archivo `/etc/printcap'.  Cualquiera de
     estas combinaciones resulta ser una opción:
        * `gnulpr', (`lpr-ppd') y `printtool' --- El que utilizo.
        * `lpr' y `apsfilter'
        * `lpr' y `magicfilter'
        * `lprng' y `lprngtool'
        * `lprng' y `apsfilter'
        * `lprng' y `magicfilter'

     Para ejecutar herramientas de configuración gráficas, tales como
     `printtool', véase Sección 9.4.11, `Adquirir privilegios de
     superusuario en X' para adquirir derechos de superusuario.  Las
     impresoras creadas con `printtool' usan `gs' y se comportan como
     impresoras PostScript.  Por lo tando al acceder a ellas, utilizan los
     controladores de impresora PostScript.  En lo referente a Windows, la
     "Apple LaserWriter" es el estándar.

3.6.2. CUPS(TM)
---------------

     Instale el Common UNIX Printing System (o CUPS(TM)):

# apt-get install cupsys cupsys-bsd cupsys-client cupsys-driver-gimpprint
# apt-get install foomatic-db-engine foomatic-db-hpijs
# apt-get install foomatic-filters-ppds foomatic-gui

     Luego configure el sistema usando un navegador web:

          $ <mi_navegador> http://localhost:631

     Por ejemplo, para añadir una impresora en algún puerto usando la lista
     de impresoras accesibles:

        * Pulse "Printers" (Impresoras) en la página principal y, a
          continuación "Add Printer" (Añadir impresora),

        * escriba "root" como usuario e ingrese su contraseña,

        * proceda a añadir la impresora siguiendo los indicaciones,

        * vuelva a la página "Printers" y pulse "Configure Printer"
          (Configurar impresora) y

        * proceda a configurar el tamaño del papel, la resolución y otros
          parámetros.

     Véase más información en http://localhost:631/documentation.html y
     http://www.cups.org/cups-help.html.

     Para el kernel 2.4, ver también Sección 7.2.6, `Soporte puerto
     paralelo'.


3.7. Otros consejos de instalación
----------------------------------

3.7.1. Instalación adicional de paquetes
----------------------------------------

     Una vez llegado hasta este punto, posee un sistema Debian pequeño pero
     funcional.  Es tiempo de instalar paquetes más grandes.

        * Ejecute `tasksel'.  Veáse Sección 6.2.1, `Instalación de <tareas>
          con `tasksel''.

          Si los necesita, puede elegir los siguientes paquetes:
             * Usuario final --- sistema X window
             * Desarrollo --- C y C++
             * Desarrollo --- Python
             * Desarrollo --- Tcl/Tk
             * Otros --- entorno TeX/LaTeX
             * Para el resto --- prefiero usar `tasksel' como guía mirando
               en <Task Info> e instalarlos selectivamente mediante
               `dselect'.

        * Ejecute `dselect'.

          Aquí, lo primero que puede querer hacer es elegir su editor
          favorito y todos los programas que necesita.  Puede instalar
          diversas variantes de Emacs al mismo tiempo.  Véase Sección
          6.2.3, ``dselect'' y Sección 11.1, `Editores populares'.

          También puede reemplazar algunos paquetes predeterminados por
          otros con más opciones.
             * lynx-ssh (en vez de lynx)
             * ...

        * ...

     Generalmente edito `/etc/inittab' para apagar con facilidad mi
     máquina.

          ...
          # Qué hacer al presionar CTRL-ALT-DEL
          ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now
          ...

3.7.2. Módulos
--------------

     Los módulos para los controladores de dispositivos se configuran
     durante la instalación inicial.  `modconf' proporciona una interfaz
     con menús para la configuración posterior de los módulos.  Este
     programa resulta bastante útil cuando se olvida incluir algunos
     módulos durante la instalación inicial o se instala un nuevo kernel
     después de realizar la misma.

     Todos los módulos a cargar se encuentran en el archivo `/etc/modules'.
     También utilizo `lsmod' y `depmod' para controlarlos manualmente.

     Asimismo, asegúrese añadir algunas líneas en el `/etc/modules' para
     administrar el enmascaramiento ip (ftp, etc.) para núcleos 2.4.  Véase
     Sección 7.2, `El kernel modular 2.4' y, en especial, Sección 7.2.3,
     `Funciones de Red'.

3.7.3. Configuración básica de una grabadora de CDs
---------------------------------------------------

     Edite los siguientes archivos:

          /etc/lilo.conf  (agregue append="hdc=ide-scsi ignore=hdc",
                           y ejecute lilo para la activación)
          /dev/cdrom      (enlace simbólico # cd /dev; ln -sf scd0 cdrom)
          /etc/modules    (añada "ide-scsi" y "sg". Después de esto "sr" si se
                           necesita.)

     Véase Sección 9.3, `Grabadora de CDs' para más detalles.

3.7.4. Gran cantidad de memoria y apagado automático
----------------------------------------------------

     Edite el `/etc/lilo.conf' de la siguiente manera para grandes
     cantidades de memoria (para núcleos 2.2) y apagado automático (para
     apm):

          append="mem=128M apm=on apm=power-off noapic"

     Ejecutar `lilo' para reconocer la nueva configuración.
     `apm=power-off' es necesario para un núcleo SMP y `noapic' es
     necesario para minimizar los efectos de mi hardware defectuoso.  Lo
     mismo se puede hacer directamente escribiendo las opciones en el
     indicador de arranque.  Véase Sección 8.1.5, `Otros trucos con el
     indicador de arranque'.

     Si apm fue compilado como módulo, como ocurre con los núcleos
     predeterminados 2.4 de Debian, ejecute `# insmod apm power_off=1'
     después del arranque o configure `/etc/modules' haciendo:

          # echo "apm power_off=1" >>/etc/modules

     En forma alternativa, el compilar el soporte ACPI permite alcanzar el
     mismo objetivo con los núcleos nuevos y para ser más compatible con
     SMP (esto requiere de una placa madre nueva).  El núcleo 2.4 en placas
     madre deberían detectar grandes cantidades de memoria correctamente.

          CONFIG_PM=y
          CONFIG_ACPI=y
          ...
          CONFIG_ACPI_BUSMGR=m
          CONFIG_ACPI_SYS=m

     y añada las siguientes líneas en `/etc/modules' respetando el orden:

          ospm_busmgr
          ospm_system

     O recompile el núcleo con todas las opciones anteriores en "y".  En
     cualquier caso, con ACPI no se necesita ninguno de los parámetros del
     indicador de arranque.

3.7.5. Problemas extraños al acceder a ciertos sitios de Internet
-----------------------------------------------------------------

     Por defecto, los núcleos recientes de Linux activan ECN, que puede
     ocasionar problemas de acceso en algunos sitios web situados detrás de
     un enrutador mal configurado.  Para verificar el estado del ECN:

          # cat /proc/sys/net/ipv4/tcp_ecn
           ... o
          # sysctl net.ipv4.tcp_ecn

     Para desactivarlo, haga:

          # echo "0" > /proc/sys/net/ipv4/tcp_ecn
           ... o
          # sysctl -w net.ipv4.tcp_ecn=0

     Para desactivar TCP ECN en cada arranque, edite `/etc/sysctl.conf' y
     añada:

          net.ipv4.tcp_ecn = 0

3.7.6. Configuración de una conexión telefónica con PPP
-------------------------------------------------------

     Instale el paquete `pppconfig' para configurar un acceso telefónico
     mediante PPP.

          # apt-get install pppconfig
          # pppconfig
           ... siga las indicaciones para configurar PPP
          # adduser <usuario> dip
           ... permite al <usuario> acceder a Internet mediante PPP

     El acceso PPP puede ser iniciado por el usuario (<usuario>):

          $ pon <nombre_ISP>   # inicia el acceso PPP a su ISP
           ... disfrute Internet
          $ poff <nombre_ISP>  # detiene el acceso PPP, el <nombre_ISP>
          es opcional

     Véase `/usr/share/doc/ppp/README.Debian.gz' para más detalles.

     En forma alternativa, se puede usar el paquete `wvdial' para
     configurar el acceso telefónico mediante PPP.

     Todos los marcadores usan el demonio `pppd' que inicia los programas
     situados en `/etc/ppp/ip-up.d/' o `/etc/ppp/ip-down.d/' tras la
     conexión o desconexión.  Esto se utiliza para obtener y enviar
     mensajes de correo.

3.7.7. Otros archivos de configuración files para modificar en `/etc'
---------------------------------------------------------------------

     Puede que quiera añadir un archivo `/etc/cron.deny' que falta en la
     instalación estándar de Debian (puede copiar `/etc/at.deny').


-------------------------------------------------------------------------------


4. Tutoriales de Debian
-----------------------

     Esta sección proporciona una orientación al mundo Linux para aquellos
     que son realmente novatos.  Si ya hace tiempo que usa Linux,
     considérelo como un repaso.


4.1. Fuentes de información
---------------------------

     Visite el Proyecto de Documentación Debian (DDP)
     (http://www.debian.org/doc/) que tiene las referencias más importantes
     sobre Debian.  Muchos de estos documentos se encuentran instalados en
     `/usr/share/doc/'.  También consulte `/usr/share/doc-base/' que
     proporcionan enlaces a los documentos del sistema.  Añada `export
     CDPATH=.:/usr/share/doc:/usr/src/local' al `~/.bash_profile' para un
     acceso más cómodo a los directorios de documentación.

     El Proyecto de documentación Linux (LDP) (http://www.tldp.org/) tiene
     las referencias más importantes sobre Linux en general.  Los
     contenidos del LDP usualmente están instalados en
     `/usr/share/doc/HOWTO/'.

     Navegue por los documentos en forma local y en ftps remotos con la
     tecla `F9' del Midnight Commander (véase Sección 4.3, `Midnight
     Commander (MC)').


4.2. La consola Linux
---------------------

4.2.1. Entrando al sistema
--------------------------

     En un sistema Linux existen 6 seudo-terminales independientes.  Se
     puede pasar de una a otra presionando simultáneamente la tecla
     `Alt-izq' con la tecla `F1' - `F6'.  Cada seudo-terminal permite el
     ingreso al sistema en forma independiente a diferentes cuentas.  El
     sistema multi-usuario es una gran característca de los sistemas Unix y
     resulta muy adictiva.

     En Unix se considera un buen hábito acceder al sistema como usuario
     normal para realizar la mayoría de las tareas.  Debo reconocer que,
     por pereza, utilizo la cuenta del superusuario (root) más de lo
     necesario.

     Generalmente utilizo una cuenta normal con los comandos `sudo',
     `super' o `su -c' para obtener accesos limitados de root.

4.2.2. Añadir una cuenta de usuario
-----------------------------------

     Tras la instalación del sistema, añada un cuenta de usuario normal.
     Si el nombre de usuario es "penguin",

          # adduser penguin

     creará dicha cuenta.

     Utilice el comando `vigr' para editar el `/etc/group' de la siguiente
     manera:

          src:x:40:admin, debian, ...
          staff:x:50:admin
          ...

     Utilizo el grupo `staff' para usuarios que hacen tareas
     administrativas y tienen el privilegio exclusivo de `su' (véase
     Sección 9.2.2, `"Por qué el `su' GNU no soporta el grupo `wheel'"') y
     `src' para CVS (véase Sección 12.1, `Sistema de versiones concurrentes
     (CVS)').

     En la instalación predeterminada del sistema, el grupo `staff' poseé
     el directorio `/home', de modo que sus miembros pueden estar a cargo
     de las cuentas de usuario, mientras que el grupo `src' posée el
     directorio `/usr/src', que se utiliza para compilar el kernel, etc.

     Consulte `adduser', `addgroup', `vipw', `vipw -s', `vigr' y `vigr -s'
     para configurar correctamente a usuarios y grupos.

4.2.3. Cómo apagar el sistema
-----------------------------

     Al igual que muchos sistemas operativos modernos donde los archivos
     son almacenados en memoria, Linux necesita apagarse correctamentes
     antes de poder cortar el suministro eléctrico sin ningún peligro.
     Veamos el comando para el modo multiusuario:

          # shutdown -h now

     Y el siguiente para el modo monousuario:

          # poweroff -i -f

     Espere a que aparezca el mensaje "System halted" y a continuación
     apague la máquina.  Si apm está habilitado tanto en la BIOS como en
     Linux, el sistema se apagará por sí solo.  Véase Sección 3.7.4, `Gran
     cantidad de memoria y apagado automático' para más detalles.

4.2.4. Edición en línea de comandos
-----------------------------------

     El intérprete de comandos por defecto, `bash' tiene la capacidad de
     navegar por el histórico de comandos.  Simplemente utilize la tecla
     flecha-arriba para entrar en él.  Otras combinaciones de teclas
     importantes para tener en cuenta:

Ctrl-C:                      Finaliza un programa
Ctrl-D:                      Finaliza una entrada
Ctrl-S:                      Detiene la salida por pantalla
Ctrl-Q:                      Reactiva la salida por pantalla
Ctrl-Alt-Supr:               Reinicia/apaga el sistema (véase /etc/inittab)
Lt-pulsar-y-arrastrar-ratón: Selecciona y copia al portapapeles (gpm)
Ctrl-pulsar-ratón:           Pega el contenido del portapapeles en el lugar
                             donde se encuentra el cursor (gpm)

     En una consola Linux tipo únicamente funcionan correctamente las
     teclas `Ctrl' y `Alt' situadas a la izquierda del teclado.

4.2.5. Comandos básicos que se deben tener presente
---------------------------------------------------

     Los siguientes son comandos básicos de Unix:

          ls, ls -al, ls -d, pwd, cd, cd ~user, cd -,
          cat /etc/passwd, less, bg, fg, kill, killall,
          uname -a, type nombre_comando, sync, netstat,
          ping, traceroute, top, vi, ps aux, tar, zcat,
          grep, ifconfig, ...

     Averigüe su significado escribiendo el comando, usando `man' o `info'
     seguidos por el nombre del comando.  En Linux, muchos comandos
     muestran una breve ayuda informativa si se los invoca de una de las
     siguientes maneras:

          $ nombre_comando --help
          $ nombre_comando -h

     `whatis _nombre_comando_' brinda una resumen de cualquier comando del
     sistema que tenga una entrada en el manual.

4.2.6. Sistema X Window
-----------------------

     Para iniciar el Sistema X Window desde la consola:

          # exec startx

     Pulsando con el botón derecho del ratón sobre la ventana raíz
     aparecerá un menú desplegable.

4.2.7. Combinaciones de teclas habituales
-----------------------------------------

     Algunas combinaciones de teclas importantes para tener en cuenta
     cuando se está en la consola de Linux:

Alt-F1/F6:           Para cambiar a otra seudo-terminal
Ctrl-Alt-F1/ F6:     Para cambiar a otra seudo-terminal
                     (desde X-Window, DOSEMU, etc.)
Alt-F7:              Para volver a  X-Window
Ctrl-Alt-menos:      Cambiar la resolución de la pantalla en X-Window
Ctrl-Alt-más:        Cambiar la resolución de la pantalla en X-Window en
                     sentido opuesto
Ctrl-Alt-Retroceso:  Finalizar X-Window
Alt-X, Alt-C, Alt-V: En algunos programas como en 'Netscape Composer',
                     las combinaciones de teclas usadas con Ctrl
                     utilizados en Windows/Mac para Cortar, Copiar y
                     Pegar se reemplazan por las mismas combinaciones
                     pero usando la tecla Alt.


4.3. Midnight Commander (MC)
----------------------------

     Midnight Commander (MC) es la "navaja suiza" GNU para la consola de
     Linux y otros entornos de terminales.

4.3.1. Instalar MC
------------------

          # apt-get install mc

     A continuación añada la siguiente función al `~/.bashrc' (o al
     `/etc/bash.bashrc' que es llamado desde el `.bashrc').

          mc ()
          {
            mkdir -p ~/.mc/tmp 2> /dev/null
            chmod 700 ~/.mc/tmp
            MC=~/.mc/tmp/mc-$$
            /usr/bin/mc -P "$@" > "$MC"
            cd "$(cat $MC)"
            rm -f "$MC"
            unset MC;
          }

     Al salir, esto habilita al MC a cambiar al directorio de trabajo.

     Si utiliza una terminal como `kon' o `Kterm' para el idioma japonés
     que emplea determinados caracteres gráficos el agregar la opción `-a'
     a la línea de comando del MC puede ayudar a evitar problemas.

4.3.2. Iniciar MC
-----------------

          $ mc

     MC se encarga de todas las operaciones con archivos mediante menús
     requiriendo de un mínimo esfuerzo por parte del usuario.

4.3.3. Administrador de archivos
--------------------------------

     Por defecto, se tienen dos paneles con el listado de archivos de un
     directorio.  Otro modo útil consiste en configurar la ventana derecha
     para que muestre toda la información referente a los archivos:
     permisos, tamaño, etc.  Los siguientes son algunas teclas esenciales.
     Con el demonio `gpm' ejecutándose es posible también usar el ratón.
     Asegúrese de presionar la tecla Mayús para cortar y pegar en el MC.

        * `F1': Menú de ayuda

        * `F3': Visor de archivos interno

        * `F4': Editor interno

        * `F9': Activar menú desplegable

        * `F10': Salir del Midnight Commander

        * `Tab': Moverse entre las dos ventanas

        * `Insert': Marcar archivo para operaciones con múltiples archivos

        * `Supr': Borrar archivo (sea cuidadoso---configure MC para el modo
          de borrado seguro)

        * Teclas de desplazamiento: No necesita explicación alguna

4.3.4. Trucos para la línea de comandos:
----------------------------------------

        * Cualquier comando `cd' cambiará el directorio mostrado en los
          paneles.

        * `Control-Enter' o `Alt-Enter' copiará el nombre de un archivo en
          la línea del comandos.  Utilice este atajo con los comandos `cp'
          o `mv'.

        * `Alt-Tab' cumple el mismo rol que la tecla TAB en el shell.

        * Se puede especificar el directorio inicial para ambas ventanas
          ingresándolos como argumentos del MC; por ejemplo, `mc /etc
          /root'.

        * `Esc' + <número> == `Fn' (es decir, `Esc' + `1' = `F1,' etc.;
          `Esc' + `0' = `F10)'

        * Tecla `Esc' == tecla `Alt' (= `Meta', `M-'); es decir, escriba
          `Esc' + `c' para `Alt-c'

4.3.5. Editor
-------------

     El editor interno sigue un esquema de cortar-y-pegar muy interesante.
     Con `F3' se marca el comienzo de una selección, un segundo `F3' marca
     el fin de la misma y resalta el área elegida.  A continuación se puede
     mover el cursor.  Si pulsa `F6' el área seleccionada se ubicará donde
     está el cursor.  Presionando `F5' el área se copiará e insertará en
     dicha posición.  `F2' grabará el archivo.  Con `F10' se sale del
     editor.  La mayoría de las teclas de desplazamiento funcionan en forma
     intuitiva.

     Este editor se puede iniciar directamente junto con un archivo:

          $ mc -e nombre_archivo_a_editar
          $ mcedit nombre_archivo_a_editar

     Si bien no se trata de un editor multiventana se pueden usar múltiples
     consolas Linux para lograr el mismo efecto.  Para copiar entre
     ventanas, utilice las teclas `Alt-Fn' para alternar entre las consolas
     virtuales y use "Archivo->Insertar archivo" o "Archivo->Copiar a
     archivo" para mover una porción de un archivo en otro archivo.

     El editor interno se puede reemplazar por cualquier editor externo de
     su preferencia.

     Asimismo, muchos programas usan las variables de entorno `EDITOR' o
     `VISUAL' para decidir qué editor usar.  Si no se siente cómodo con
     vim, iguale estas variables a `mcedit' añadiendo las siguientes líneas
     al `~/.bashrc':

          ...
          export EDITOR=mcedit
          export VISUAL=mcedit
          ...

     En lo posible, es recomendable dejarlas en `vim'.  Acostumbrarse con
     los comandos de vi(m) es proceder de forma correcta pués es un editor
     de uso habitual en el mundo Linux/Unix.

4.3.6. Visor
------------

     Es un visor muy sofisticado.  Es una excelente herramienta para buscar
     palabras en un documento.  Siempre lo uso para los archivos del
     directorio `/usr/share/doc'.  Esta es la manera más rápida de navegar
     por la inmensa cantidad de información de Linux.  Este visor se puede
     arrancar directamente de la siguiente manera:

          $ mc -v nombre_archivo

     (Obsérvese que algunos paquetes no respetan esta convención y
     almacenan sus documentos en `/usr/doc')

4.3.7. Inicio automático de programas
-------------------------------------

     Pulse `Enter' sobre un archivo y el programa apropiado manejará el
     contenido del archivo.  Esta es una característica muy útil del MC.

ejecutable:           Ejecuta el programa
man, archivo html:    Deriva el contenido a un visor
tar, gz, archivo rpm: Permite ver su contenido incluyendo subdirectorios

     Para que esto funcione, los archivos no deben ser ejecutables.  Cambie
     su estado usando el comando chmod mediante el menú 'Archivo' del MC si
     fuese necesario.

4.3.8. Sistema de archivos virtuales FTP
----------------------------------------

     Se puede usar el MC para acceder a archivos que se encuentran en
     Internet via FTP.  Vaya al menú presionando `F9,' luego pulse `p' para
     activar el sistema de archivos virtual FTP.  Ingrese la URL de la
     siguiente manera
     `nombre_usuario:contraseña@nombre_servidor.nombre_dominio' y se verá
     al directorio remoto como si fuera local.


4.4. Para saber más
-------------------

     Existen muy buenas referencias de iniciación Unix sobre el tema.  Los
     libros de O'Reilly son, en general, excelentes guías para
     prácticamente cualquier tema de informática.  El documento del LDP
     Tips-HOWTO (http://www.tldp.org/HOWTO/Tips-HOWTO.html) es otro recurso
     a tener en cuenta.  Véase Capítulo 15, `Suporte para Debian' para más
     recursos.


-------------------------------------------------------------------------------


5. Actualizando una distribución
--------------------------------

     Las notas de versión oficiales para actualizar están en
     http://www.debian.org/releases/stable/releasenotes y
     http://www.debian.org/releases/testing/releasenotes (en preparación).

     Los pasos para actualizar el sistema a la versión `de
     prueba/inestable' son:

        * actualizar el APT del sistema a la versión de Woody si su sistema
          es Potato ya que el APT de Potato no posee las características
          descriptas en apt_preferences(5) de Woody.

        * modificar los archivos `/etc/apt/sources.list' y
          `/etc/apt/preferences', para incluir referencias a la sección
          "testing" ("de prueba") de los repositorios que utiliza.  Si lo
          desea, también puede incluir referencias a la sección "unstable"
          ("inestable")

        * actualizar la lista de paquetes e instalar aquellos paquetes que
          se pueden actualizar.


5.1. Transición a la versión Woody de APT
-----------------------------------------

     La actualización a través de la red del sistema APT y de algunos
     paquetes fundamentales a la versión se puede realizar de la siguiente
     manera luego de incluir repositorios de la rama `estable' en el
     `/etc/apt/sources.list' si aún desea usar Potato.

          # apt-get update
          # apt-get install libc6 perl libdb2 debconf
          # apt-get install apt apt-utils dselect dpkg


5.2. Preparación para la transición (`stable' a `testing')
----------------------------------------------------------

     Utilizar la versión `de prueba' de Debian tiene como efecto colateral
     la lenta solución de los fallos de seguridad.  Por lo tanto, tenga
     cuidado.

     La actualización a la versión `de prueba' (`testing') se puede
     realizar de la siguiente manera (ejecute el guión go-woody
     (http://www.debian.org/doc/manuals/debian-reference/examples/) para
     hacerlo todo mediante un sólo comando):

     Vacie el archivo `sources.list' actual:

          # cd /etc/apt
          # cp -f sources.list sources.anterior
          # :>sources.list

     Obtenga una lista reciente de repositorios para la versión `estable'
     (`stable')

          # cd /
          # apt-setup noprobe
              ... seleccione los repositorios, accesibles mediante HTTP o FTP

     Añada la sección `testing' a la lista nueva.  Las líneas `deb-src'
     están comentadas.

          # cd /etc/apt
          # grep -e "^deb " sources.list  >sources.deb
          # grep -e "^deb-" sources.list  >sources.src
          # sed -e "s/stable/testing/"  sources.deb \
               >>sources.list
          # sed -e "s/stable/testing/" sources.src | \
               sed -e "s/^deb-/#deb-/"  >>sources.list
          
          
          # apt-get update
          # apt-get install apt apt-utils
          # cat >preferences <<EOF
           Package: *
           Pin: release a=testing
           Pin-Priority: 600
          
           Package: *
           Pin: release a=unstable
           Pin-Priority: 50
          
           EOF

     Opcionalmente, añada la sección "unstable" de los archivos.

          # sed -e "s/stable/unstable/" sources.deb \
            >>sources.list
          # sed -e "s/stable/unstable/" sources.src | \
           sed -e "s/^deb-/#deb-/"  >>sources.list

     Véase Sección 6.2, `Fundamentos de la administración de paquetes
     Debian Debian' configurar inteligentemente `/etc/apt/sources.list' y
     `/etc/apt/preferences'.

     Ahora puede actualizar el sistema, usando uno de los métodos de la
     siguiente sección.


5.3. Actualizar el sistema Debian
---------------------------------

     Luego de configurar en forma adecuada los archivos
     `/etc/apt/sources.list' y `/etc/apt/preferences', el sistema se puede
     actualizar a la versión `de prueba' (testing).  Véase Capítulo 6,
     `Administración de paquetes Debian' para los fundamentos y Sección
     6.3.2, `Resolución de problemas al actualizar con APT' si tropieza con
     problemas.

5.3.1. Mejor método de actualización usando `dselect'
-----------------------------------------------------

     Si un sistema tiene muchos paquetes que incluye paquetes `-dev', etc.,
     se recomienda el siguiente método usando `dselect' para un control
     minucioso de paquetes.

          # dselect update # siempre hacer esto antes de actualizar
          # dselect select # seleccione los paquetes adicionales

     Todos los paquetes actuales serán seleccionados al arrancar `dselect'.
     `dselect' puede proponerle otros paquetes: `dependientes', `sugeridos'
     y `recomendados'.  Si no desea añadir ningún paquete, sólo pulse `Q'
     para abandonar `dselect'.

          # dselect install

     Deberá responder algunas preguntas para la configuración para esta
     parte del proceso, por lo tanto tome nota y dedique parte de su tiempo
     a esta parte.  Véase Sección 6.2.3, ``dselect''.

     Use `dselect'.  _Siempre funciona :)_

5.3.2. Método obsoleto de actualización usando `apt-get'
--------------------------------------------------------

     _El uso de `apt-get' que se describe a continuación está muy extendido
     pero _no_se recomienda para actualizaciones del sistema._ Si necesita
     actualizar sin `dselect' a partir de Woody, considere el uso de
     `aptitude' u otras opciones.

     Si un sistema no posee muchos paquetes o el archivo Debian no
     experimentó mayores cambios, lo siguiente puede ser -a veces-
     suficiente.

# apt-get update     # siempre hacer esto antes de actualizar
 ... para actualizar el sistema con selecciones "depends":
# apt-get upgrade    # siempre hacer esto antes de actualizar
 ... para actualizar todo el sistema con selecciones "depends":
# apt-get -u dist-upgrade
 ... o para actualizar y conservar la configuración actual de dselect (mejor
 solución):
# apt-get -u dselect-upgrade # utiliza las selecciones de dselect

     Puesto que este método de actualización utiliza `apt-get', el manejo
     de los paquetes _recomendados_ y _sugeridos_ es limitado.  Véase
     Sección 2.2.8, `Dependencia entre paquetes'.


-------------------------------------------------------------------------------


6. Administración de paquetes Debian
------------------------------------

     Para reducir el tráfico en los repositorios Debian, asegúrese de
     configurar un proxy HTTP local usando `squid' para los paquetes
     descargados mediante APT y, de ser necesario, configurar la variable
     de entorno `hhtp_proxy' o fijar el valor `http' en
     `/etc/apt/apt.conf'.  Esto mejora notablemente el rendimiento de las
     actualizaciones en una red, en especial en una LAN con una gran
     cantidad de sistemas Debian.

     Aunque el método de marcado (pinning) de apt_preferences(5) es
     poderoso, no resuelve la totalidad de temas sobre dependencias puesto
     que las definiciones de dependencias tienden a buscar las versiones
     más nuevas de otros programas fundamentales.

     El uso del método descripto en Sección 8.6.34, ``chroot'' es útil para
     asegurar, simultáneamente, tanto la estabilidad del sistema como el
     acceso a las últimas versiones de los programas.

     Este capítulo se basa en sistemas Woody pero la mayoría de la
     información se aplica también a sistemas Potato (con exepción de
     apt_preferences(5) y lo concerniente al archivo
     `/etc/apt/preferences').


6.1. Introducción
-----------------

     Si el leer toda la documentación del desarrollador es demasiado para
     Ud., lea primero este capítulo y empiece a disfrutar toda la potencia
     de Debian con `testing'/`unstable' :-)

6.1.1. Herramientas principales
-------------------------------

dselect   -- herramienta de administración de paquetes basada en menús
                  (alto nivel)
dpkg      -- instala paquetes (package-file centric)
apt-get   -- instala paquetes (package-archive centric, CLI APT)
tasksel   -- instala tareas (conjunto de paquetes)
aptitude  -- instala paquetes (paquetes y tareas, interfaz de APT basada en
                  ncurses)
deity     -- otra interfaz para APT basada en ncurses
synaptic, gsynaptic -- otras interfaces gráficas para APT

     Estas herramientas no están en un mismo nivel.  `dselect' se ejecuta
     encima de APT (`apt-get') y `dpkg'.

     APT utiliza `/var/lib/apt/lists/*' para el seguimiento de paquetes
     disponibles, mientras que `dpkg' usa `/var/lib/dpkg/available'.  Si
     instaló paquetes directamente usando `apt-get' o programas similares
     como, por ejemplo, `aptitude', asegúrese de actualizar el archivo
     `/var/lib/dpkg/available' mediante la opción `[U]pdate' del menú de
     `dselect' o desde la línea de comandos "`dselect update'" antes de
     ejecutar `dselect select', `tasksel' o `dpkg -l'.

     En cuanto a la dependencia entre paquetes, `apt-get' obtiene
     automáticamente los paquetes que dependen entre sí (_depends_) pero
     ignora los paquetes recomendados (_recommends_) y sugeridos
     (_suggests_).  `dselect', en cambio, ofrece un control más avanzado de
     los paquetes basado en menús que ofrece la posibilidad de elegir
     paquetes basándose en _depends_, _recommends_ y _suggests_.
     `aptitude' tiene la opción de descargar todos los paquetes
     automáticamente basándose en _depends_, _recommends_ y _suggests_.
     See Sección 2.2.8, `Dependencia entre paquetes'.

6.1.2. Herramientas prácticas
-----------------------------

apt-cache         - búsqueda de paquetes en el caché local
dpkg-reconfigure  - vuelve a configurar un paquete ya instalado (si utiliza
                    debconf)
dpkg-source       - se encarga de los archivos fuentes
dpkg-buildpackage - automatiza la creación de un paquete
...


6.2. Fundamentos de la administración de paquetes Debian Debian
---------------------------------------------------------------

     Puede instalar un conjunto de paquetes denominado _tarea_ o instalar
     paquetes individuales o actualizar el sistema usando las herramientas
     de administración de paquetes como se describe a continuación.  Also
     refer to Capítulo 3, `Consejos para la instalación de un sistema
     Debian', Capítulo 5, `Actualizando una distribución' y Sección 11.2,
     `Editores de rescate'.

6.2.1. Instalación de <tareas> con `tasksel'
--------------------------------------------

     `tasksel' es el _Instalador de Tareas de Debian_ que se ofrece durante
     la instalación como método de instalación "`sencillo'".

     Cuando uno necesita instalar una determinada función que requiere de
     múltiples paquetes, esta es la mejor manera de hacerlo.  Asegúrese de
     ejecutar los comandos en el siguiente orden:

          # dselect update
          # tasksel

     `aptitude' también ofrece acceso a las _tareas_.  No sólo permite
     seleccionar _tareas_ sino que permite eliminar paquetes de una _tarea_
     en forma selectiva mediante un menú.

6.2.2. Configurar el sistema APT
--------------------------------

     Para realizar actualizaciones selectivas desde la distribución `de
     prueba' el sistema APT (>Woody) debe configurarse como en Sección 5.1,
     `Transición a la versión Woody de APT' para usar aprovechar las
     características de apt_preferences(5).

     Primero añada las fuentes para la versión estable (`stable'), de
     prueba (`testing') e inestable (`unstable') a su
     `/etc/apt/sources.list'.  A continuación, edite `/etc/apt/preferences'
     para configurar correctamente el Pin-Priority:

          Package: *
          Pin: release a=stable
          Pin-Priority: 500
          
          Package: *
          Pin: release a=testing
          Pin-Priority: 600
          
          Package: *
          Pin: release a=unstable
          Pin-Priority: 50

6.2.3. `dselect'
----------------

     Al arrancar, `dselect' selecciona automáticamente todos los paquetes
     "Requeridos" ("Required"), "Importantes" ("Important") y "Estándar"
     ("Standard").  En el sistema Potato, algunos programas muy grandes
     tales como teTeX y Emacs solían estar aquí y resultaba mejor omitirlos
     en una instalación inicial deseleccionándolos manualmente (mediante
     `_').  En Woody, han sido puestos en la categoría de paquetes
     "Opcionales" ("Optional").

     `dselect' tiene una interfaz de usuario algo extraña.  Existen cuatro
     comandos un tanto ambiguos (Mayúsculas, significa ¡MAYÚSCULAS!):

Tecla       Acción
Q           Salir. Confirma la selección actual y sale de todas maneras.
            (no tiene en cuenta las dependencias)
R           ¡Reestablecer! No quise decir esto.
D           ¡Maldición! No me importa lo que piensa dselect.  ¡Házlo!
U           Volver todo en el estado sUgerido

     Con `D' y `Q', puede elegir paquetes en conflicto bajo su entera
     responsabilidad.  Utilice estos comandos con cuidado.  Actualmente,
     `dselect' es una herramienta basada en menús madura que ofrece un
     control muy preciso sobre los paquetes sugeridos (_suggests_) y
     recomendados (_recommends_).

     Añada una línea que contenga la opción "expert" en
     `/etc/dpkg/dselect.cfg' para reducir la cantidad de información
     mostrada.  Para una máquina más lenta, puede ejecutar `dselect' en
     otra máquina más rápida para encontrar los paquetes y usar `apt-get
     install' para instalarlos.

     `dselect' no ofrece acceso a los paquetes que no han sido favorecidos
     por la Pin-Priority.

6.2.4. `aptitude'
-----------------

     `aptitude' es un instalador de paquetes nuevo basado en menús similar
     a `dselect'.  También se puede como alternativa de `apt-get' en la
     línea de comandos.  Véase aptitude(1).

     `aptitude' acepta comandos de una tecla, que generalmente están en
     minúsculas.

          Tecla       Acción
          F10         Menú
          ?           Ayuda
          u           Actualizar la información del archivo de paquetes
          g           Descargar e instalar los paquetes seleccionados
          q           Salir de la pantalla actual y guardar los cambios
          x           Salir de la pantalla actual y descartar los cambios
          Enter       Ver información sobre un paquete

     `aptitude' ofrece la opción de descargar automáticamente todos los
     paquetes basándose en _depends_, _recommends_ y _suggests_.  Puede
     alterar este comportamiento eligiendo `F10 -> Optciones -> Manejo de
     dependencias' de su menú.

     `aptitude' permite el acceso a todas las versiones de un paquete.

6.2.5. Los comandos `apt-cache' y `apt-get'
-------------------------------------------

     Con el ejemplo de arriba para trabajar en la versión `de prueba',
     podemos controlar el sistema usando los siguientes comandos:

        * `apt-get -u upgrade'

          Permanece en la distribución `de prueba' y actualiza todos los
          paquetes del sistema instalando las dependencias desde ella
          misma.

        * `apt-get -u dist-upgrade'

          Permanece en la distribución `de prueba' y actualiza todos los
          paquetes del sistema resolviendo las dependencias desde ella
          misma.

        * `apt-get -u dselect-upgrade'

          Permanece en la distribución `de prueba' y actualiza todos los
          paquetes del sistema teniendo en cuenta la selección de
          `dselect'.

        * `apt-get -u install <paquete>'

          Instala el <paquete> y sus dependencias desde la distribución `de
          prueba'.

        * `apt-get -u install <package>/unstable'

          Instala el <paquete> desde la distribución `inestable' y sus
          dependencias desde la distribución `de prueba'.

        * `apt-get -u install -t unstable <paquete>'

          Instala el <paquete> y sus dependencias desde la distribución
          `inestable' asignando una Pin-Prioriy igual a 990 a `unstable'.

        * `apt-cache policy <loquesea1 loquesea2 ...>'

          Comprueba el estado de los paquetes <eloquesea1 loquesea2 ...>.

        * `apt-cache show <loquesea1 loquesea2> | less'

          Comprueba la información referente a los paquetes <loquesea1
          loquesea2 ...>.

        * `apt-get install <loquesea=2.2.4-1>'

          Instala una versión particular (<2.2.4-1>) del paquete
          <loquesea>.

        * `apt-get -u install <loquesea1 loquesea2->'

          Instala el paquete <loquesea1> y desinstala el paquete
          <loquesea2>

        * `apt-get remove <loquesea1>'

          Desinstala el paquete <loquesea1> pero conserva intactos los
          archivos de configuración personalizados.

        * `apt-get remove --purge <loquesea1>'

          Desinstala el paquete <loquesea1> junto con todos sus archivos de
          configuración personalizados.

     En los ejemplos anteriores, el uso de la opción `-u' asegura que
     `apt-get' muestre la lista de todos los paquetes que van a ser
     actualizados y pregunte al usuario antes de proceder.  Lo siguiente
     elige la opción `-u' como acción predeterminada:

          $ cat >> /etc/apt/apt.conf << .
          // Mostrar siempre los paquetes que van a ser actualizados (-u)
          APT::Get::Show-Upgraded "true";
          .

     Utilice la opción `-s' para simular la actualización sin llevarla
     realmente a cabo.

6.2.6. Permanecer en una versión de la distribución Debian
----------------------------------------------------------

     Dependiendo de su preferencia por permanecer en una determinada
     versión de Debian , puede modificar el archivo de ejemplo
     `/etc/apt/preferences' en Sección 6.2.2, `Configurar el sistema APT'
     para que se ajuste a sus necesidades:

permanecer en stable:             poner la Pin-Priority de testing en 50
permanecer en testing:            mantener la configuración dada anteriormente
permanecer en testing (unstable): poner la Pin-Priority de unstable en 500
permanecer en unstable(testing):  poner la Pin-Priority de unstable en 800

     Una idea para la elección del Pin-Priority consiste en moverse desde
     arriba hacia abajo en la tabla anterior conforme transcurre el tiempo
     entre la fecha inmediatamente posterior a la salida de una
     distribución y la fecha de congelación de la siguiente versión.

     Advertencia: el permanecer en la versión `de prueba' de Debian tiene
     como efecto colateral la lenta solución de los fallos de seguridad.

     Si mezcla las versiones de Debian, `de prueba' con `estable' o
     `inestable' con `estable', es muy probable que descarge diversos
     paquetes importantes de la rama `de prueba' o `inestable' que pueden
     tener errores.  Queda debidamente advertido.

     Ejemplos de `/etc/apt/preferences' que bloquean algunos paquetes
     fundamentales en su versión más madura mientras actualizan a una
     versión menos madura paquetes que no son esenciales, están disponibles
     en el examples subdirectory
     (http://www.debian.org/doc/manuals/debian-reference/examples/) como
     `preferences.testing' y `preferences.unstable'.  Por otra parte,
     `preferences.stable' fuerza a todos los paquetes a volver a su versión
     `estable'.

6.2.7. Volver todos los paquetes a su versión `estable'
-------------------------------------------------------

     Para volver todos los paquetes a la versión `estable', edite el
     `/etc/apt/preferences' de la siguiente manera:

          Package: *
          Pin: release a=stable
          Pin-Priority: 1001

     y ejecute "`apt-get upgrade'" que forzará el retorno a la rama estable
     debido a que Pin-priority > 1000.  Tenga cuidado, puede haber algunos
     inconvenientes con las dependencias.

6.2.8. Repaso de `/etc/apt/preferences'
---------------------------------------

     En el `/etc/apt/preferences' de ejemplo presentado en Sección 6.2.2,
     `Configurar el sistema APT', la primera línea `Package: *' significa
     que esa sección se aplica a todos los paquetes.  Puede usar el nombre
     de un paquete en vez de * para especificar la Pin-Priority del mismo.

     En el segundo renglón, "Pin: release a=stable" significa que `apt-get'
     descargará el archivo `Packages.gz' del repositorio que contiene al
     archivo `Release' con la línea "Archive: stable".

     En el último renglón "Pin-Priority: 500" indica que la Pin-Priority es
     500.

     Si existen varios paquetes con el mismo nombre, generalmente el que
     tiene el valor de Pin-Priority más alto es el que se instala..

     Los significados de los Pin-Priority son:

        * 1001 en adelante: prioridades para volver a la versión anterior.

          Se permite volver a la versión anterior del paquete.

        * 100 a 1000: prioridades estándar.

          No se permite volver a la versión anterior del paquete.  Algunos
          valores de Pin-Priority claves:

             * 990: la prioridad dado por la opción `--target-release' or
               `-t' of apt-get(8) option.

             * 500: la prioridad predeterminada de todos los paquetes.

             * 100: la prioridad de los paquetes recientemente instalados.

        * 0 a 99: prioridades que no son automáticas (se utilizan
          únicamente si el paquete no está instalado y no existe otra
          versión disponible).

        * menor que 0: la versión nunca es seleccionada.

     Se puede obtener el mismo efecto que `--target-release' configurando
     `/etc/apt/apt.conf' de la siguiente manera:

          # echo 'APT::Default-Release "testing";' >> /etc/apt/apt.conf

     La opción `--target-release' de la línea de comandos y la
     configuración de `/etc/apt/apt.conf' tienen prioridad sobre la
     configuración de `/etc/apt/preferences'.  Tenga cuidado con estas
     interferencias cuando juegue con `/etc/apt/preferences'.


6.3. Comandos de supervivencia de Debian
----------------------------------------

     Con estos conocimientos, se puede vivir _eternamente_ de
     "actualizaciones" :-)

6.3.1. Búsqueda de fallos y ayuda en Debian
-------------------------------------------

     Si tiene problemas con un paquete determinado, asegúrese de consultar
     los siguientes sitios antes de pedir ayuda o enviar un informe de
     fallos.  (`lynx', `links' y `w3m' funcionan igualmente bien):

$ lynx http://bugs.debian.org/
$ lynx http://bugs.debian.org/<nombre-paquete>  # si conoce el nombre del paquete
$ lynx http://bugs.debian.org/<número-fallo>     # si conoce el número de fallo

     Busque en Google (www.google.com) incluyendo "site:debian.org" como
     palabra clave.

     En caso de duda, recurra a la documentación.  Inicialice `CDPATH' de
     la siguiente manera:

          export CDPATH=.:/usr/local:/usr/share/doc

     y escriba

          $ cd <nombre_paquete>
          $ mc

     Más recursos de soporte se encuentran listados en Capítulo 15,
     `Suporte para Debian'.

6.3.2. Resolución de problemas al actualizar con APT
----------------------------------------------------

     Al actualizar desde `unstable'/`testing' pueden surgir problemas entre
     dependencias como se explicó en Sección 5.3, `Actualizar el sistema
     Debian'.  La mayoría de las veces, es debido a que el paquete que se
     desea actualizar posee una nueva dependencia que no es satisfecha.
     Estos problemas se solucionan haciendo

          # apt-get dist-upgrade

     Si esto no funciona, entonces repita las siguientes operaciones hasta
     que el problema se resuelva por sí solo:

# apt-get upgrade -f         # continue con upgrade a pesar de los errores
... o
# apt-get dist-upgrade -f    # continue con dist-upgrade a pesar de los errores

     Algunos scripts de actualización conflictivos pueden provocar
     inconvenientes en forma recurrente.  Generalmente resulta conveniente
     resolver este tipo de situación inspeccionando los scripts
     `/var/lib/dpkg/info/<packagename>.{post,pre}{inst,rm}' del paquete
     problemático y ejecutando:

          # dpkg --configure -a    # configura todos los paquetes parcialmente
                                   # instalados

     Si algún script se queja sobre un archivo de configuración faltante,
     busque en `/etc' el archivo de configuración correspondiente.  Si
     existe alguno con extensión `.new' (o algo similar), recurra a `mv'
     para eliminar el sufijo.

     Pueden aparecer problemas de dependencias al instalar paquetes de la
     rama `inestable'/`de prueba'.  Existen distintas maneras de burlar las
     dependencias.

          # apt-get install -f <paquete> # no tener en cuenta dependencias no
                                                  # resueltas

     Un método alternativo para resolver estas situaciones consiste en usar
     el paquete `equivs'.  Véase `/usr/share/doc/equivs/README.Debian' y
     Sección 6.5.2, `El paquete `equivs''.

6.3.3. Rescate usando `dpkg'
----------------------------

     La recuperación de un `dselect' (APT) que no funciona más en un
     sistema inutilizado se puede realizar usando `dpkg' sin APT:

          # cd /var/cache/apt/archives
          # dpkg -i libc6* libdb2* perl*
          # dpkg -i apt* dpkg* debconf*
          # dpkg -i *  # hasta que no haya más errores

     Si falta un paquete, obténgalo de mirror sites
     (http://www.debian.org/mirror/) mediante:

# mc            # utilice "FTP link" apuntando a un servidor FTP Debian

     Los paquetes en el servidor HTTP/FTP pueden no estar localizados en el
     directorio habitual `/dist' sino en el nuevo directorio `/pool'.
     (Véase Sección 2.1.10, `El directorio `pool''.)

     Luego instálelo haciendo:

          # dpkg -i /var/cache/apt/archives/<nombre_paquete.deb>

     Para una dependencia no resuelta, resuelvala o utilice:

# dpkg --ignore-depends=<paquete1>,... -i <nombre_paquete.deb>
# dpkg --force-depends -i <nombre_paquete.deb>
# dpkg --force-depends --purge <paquete>
# dpkg --force-confmiss -i <nombre_paquete.deb> # Instale archivo de
                                                         # configuración
                                                         # faltante

6.3.4. Recuperar los datos de la selección de paquetes
------------------------------------------------------

     Si por alguna razón se inutiliza `/var/lib/dpkg/status' , el sistema
     Debian perderá los datos de la selección de paquetes y resultará
     enormemente afectado..  Busque el archivo `/var/lib/dpkg/status'
     anterior en `/var/lib/dpkg/status-old' o `/var/backups/dpkg.status.*'.

     Puede resultar una muy buena idea mantener `/var/backups/' en una
     partición aparte ya que este directorio contiene una inmensa cantidad
     de datos importantes del sistema.

     Si el archivo `/var/lib/dpkg/status' anterior no se encuentra
     disponible, aún puede recuperar información de los directorios
     situados `/usr/share/doc/'.

# ls /usr/share/doc | \
  grep -v [A-Z] | \
  grep -v '^texmf$' | \
  grep -v '^debian$' | \
  awk '{print $1 " install"}' | \
  dpkg --set-selections
# dselect --expert # reinstale el sistema, use dselect si es necesario

6.3.5. Recuperando un sistema luego de borrar `/var'
----------------------------------------------------

     Puesto que el directorio `/var' contiene datos que se actualizan
     continuamente, como por ejemplo el correo, es suceptible de
     corromperse.  Ubicándolo en una partición independiente disminuye los
     riesgos.  Si ocurre un desastre, puede que deba reconstruir el
     directorio `/var' para recuperar el sistema Debian.

     Obtenga la estructura del directorio `/var' de un sistema Debian
     funcional basada en una versión Debian igual o anterior, por ejemplo
     `var.tar.gz (http://people.debian.org/~osamu/pub/)', y ubíquela en el
     directorio raíz del sistema dañado.  A continuación,

          # cd /
          # mv var var-old      # si quedan contenidos útiles
          # tar xvzf var.tar.gz # utilice la estructura Woody
          # aptitude            # o dselect

     Esto proporcionará un sistema funcional.  Puede recuperar la selección
     de paquetes, usando el método descripto en Sección 6.3.4, `Recuperar
     los datos de la selección de paquetes'.  ([FIXME]: Este procedimiento
     necesita de más pruebas.)

6.3.6. Instalar un paquete en un sistema que no arranca
-------------------------------------------------------

     Arranque Linux usando un diskete/CD de rescate o una partición
     alternativa en un sistema multi-arranque.  See Sección 8.1,
     `Arrancando el sistema'.  Monte el sitema que no arranca en `/target'
     y utilice el modo de instalación chroot de `dpkg'.

          # dpkg --root /target -i <nombre_paquete.deb>

     Luego configure y solucione los problemas.

     A propósito, si es un `lilo' dañado el que le impide arrancar el
     sistema, puede usar un disco de rescate estándar de Debian.  En el
     indicador de arranque, suponiendo que la partición raíz de su
     intalación Linux está en `/dev/hda12' y que desea entrar al nivel de
     ejecución 3, escriba:

          boot: rescue root=/dev/<hda12> 3

     De esta manera arrancará un sistema prácticamente funcional cuyo
     kernel se encuentra en el diskete (pueden aparecer pequeños problemas
     debido a la falta de algunas de las características o módulos del
     kernel)

6.3.7. Qué hacer si el comando `dpkg' se encuentra dañado
---------------------------------------------------------

     Un `dpkg' dañado puede tornar imposible la instalación de cualquier
     archivo `.deb'.  Un procedimiento similar al siguiente le ayudará a
     superar esta situación (en la primera línea, puede reemplazar "links"
     con su navegador de consola favorito)

          $ links http://<http.us.debian.org>/debian/pool/main/d/dpkg/
            ... descargue una versión de dpkg_<version>_<arquit>.deb
          $ ar x dpkg_<version>_<arquit>.deb
          $ su
          password: *****
          # mv data.tar.gz /data.tar.gz
          # cd /
          # tar xzfv data.tar.gz

     Para una máquina `i386', puede utilizar también la URL
     `http://packages.debian.org/dpkg'.


6.4. Comandos 'nirvana' de Debian
---------------------------------

     Bajo la _luz_ de estos comandos una persona se salvará de la lucha
     kármica eterna contra el infierno de la actualización y le permitirá
     alcanzar el _nirvana_ Debian.  :-)

6.4.1. Información sobre un archivo
-----------------------------------

     Para averiguar a qué paquete pertenece un archivo determinado:

$ dpkg {-S|--search} patrón # busca 'patrón' en los paquetes instalados
$ wget http://ftp.us.debian.org/debian/dists/<sarge>/<Contents-i386.gz>
$ zgrep -e pattern <Contents-i386.gz>
             # busca 'patrón' en los archivos descargados de Debian

     O utilice comandos de paquetes especializados:

# apt-get install dlocate
                 # entra en conflicto con slocate (versión segura de locate)
$ dlocate <nombre_archivo>    # alternativa rápida de dpkg -L y dpkg -S
...
# apt-get install auto-apt # herramienta de instalación automática de paquetes
                           # bajo demanda
# auto-apt update          # crea el archivo db para auto-apt
$ auto-apt search <patrón>
                # busca de 'patrón' en todos los paquetes, instalados o no

6.4.2. Información sobre un paquete
-----------------------------------

     Buscar y mostrar la información sobre un paquete.  Asegúrese de
     apuntar a un/unos archivo(s) APT adecuado(s) editando
     `/etc/apt/sources.list'.  Si desea ver las diferencias entre un
     paquete de la rama `de prueba'/`inestable' y uno instalado, utilice
     `apt-cache policy'.

# apt-get   check           # actualiza el caché y verifica las dependencias
$ apt-cache search  <patrón>  # busca un paquete a partir del 'patrón'
$ apt-cache policy  <paquete> # información sobre la prioridad de un
                                       # paquete
$ apt-cache show -a <paquete> # muestra la descripción del paquete en
                                       # todas las distribuciones
$ apt-cache showsrc <paquete> # muestra la descripción de un paquete
                                       # fuente
$ apt-cache showpkg <paquete> # información de depuración de un paquete
# dpkg  --audit|-C                     # busca paquetes parcialmente instalados
$ dpkg {-s|--status} <paquete># descripción de un paquete instalado
$ dpkg -l <paquete>           # estado de un paquete instalado (una
                                       # línea)
$ dpkg -L <paquete>           # lista los archivos instalados por el
                                       # paquete

     `apt-cache showsrc' no está documentado en el lanzamiento de Woody
     pero funciona :)

     Asimismo puede encontrar información de paquetes en (utilizo `mc' para
     navegar):

          /var/lib/apt/lists/*
          /var/lib/dpkg/available

     La comparación de los siguientes archivos proporciona inoformación
     sobre lo que ocurrió exactamente durante las últimas instalaciones.

          /var/lib/dpkg/status
          /var/backups/dpkg.status*

6.4.3. Instalación automática con APT
-------------------------------------

     Para una instalación automática, añada la siguiente línea al
     `/etc/apt/apt.conf':

          Dpkg::Options {"--force-confold";}

     Esto equivale a ejecutar `apt-get -q -y <nombre_paquete>'.  Puesto que
     de esta manera se responden con "Sí" todas las preguntas fomuladas,
     puede causar problemas.  Por lo tanto use este truco con cuidado.
     Véase apt.conf(5) y dpkg(1).

     Posteriormente puede configurar cualquier paquete siguiendo Sección
     6.4.4, `Reconfigurar paquetes instalados'.

6.4.4. Reconfigurar paquetes instalados
---------------------------------------

     Utilice los siguientes comandos para reconfigurar un paquete ya
     instalado.

          # dpkg-reconfigure --priority=<medium> <paquete> [...]
          # dpkg-reconfigure --all   # reconfigura todos los paquetes
          # dpkg-reconfigure locales # genera los nuevos locales
          # dpkg-reconfigure --p=<low> xserver-xfree86 # reconfigura el
                                                                # servidor X

     Hago lo mismo con `debconf' si necesita cambiar en forma permanente el
     modo de diálogo de `debconf'.

     Algunos programas vienen con scripts de configuración especiales.

apt-setup     - crea el /etc/apt/sources.list
install-mbr   - instala un administrador del sector de arranque maestro
tzconfig      - configura el huso horario local
gpmconfig     - configura el administrador del ratón gpm
sambaconfig   - configura Samba en Potato (Woody utiliza debconf)
eximconfig    - configura Exim (MTA)
texconfig     - configura teTeX
apacheconfig  - configura Apache (httpd)
cvsconfig     - configura CVS
sndconfig     - configura el sistema de sonido
...
update-alternatives - configuración del comando predeterminado, por ej. vim
                      por vi
update-rc.d         - administación de los scripts de arranque System-Vt
update-menus        - sistema de menús de Debian
...

6.4.5. Desinstalar y purgar paquetes
------------------------------------

     Desinstalar un paquete manteniendo su configuración:

          # apt-get remove <paquete> ...
          # dpkg  --remove <paquete> ...

     Desinstalar un paquete incluyendo su configuración:

          # apt-get remove --purge <paquete> ...
          # dpkg    --purge        <paquete> ...

6.4.6. Conservar paquetes antiguos
----------------------------------

     Por ejemplo, para conservar `libc6' y `libc6-dev' para `dselect' y
     `apt-get -u upgrade <paquete>' se puede hacer:

          # echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections

     `apt-get -u install <paquete>' no se verá afectado por esto.  Para
     conservar un paquete forzando una actualización automática a una
     versión anterior mediante `apt-get -u upgrade <paquete>' o `apt-get -u
     dist-upgrade', añada lo siguiente al `/etc/apt/preferences':

          Package: libc6
          Pin: release a=stable
          Pin-Priority: 2000

     En "`Package:'" no se pueden usar entradas del tipo "`libc6*'".  Si
     necesita conservar todos los paquetes binarios relacionados con el
     paquete fuente `glibc' en forma conjunta, debe listarlos en forma
     explícita.

     El siguiente comando lista todos los paquetes que se desean conservar:

          dpkg --get-selections "*"|grep -e "hold$"

6.4.7. Sistema mixto `estable'/`de prueba'/`inestable'
------------------------------------------------------

     `apt-show-versions' puede mostrar las versiones de los paquetes
     disponibles en cada distribución.

          $ apt-show-versions | fgrep /testing | wc
          ... cantidad de paquetes de la rama de prueba (testing)
          $ apt-show-versions -u
          ... lista de paquetes que se pueden actualizar
          $ apt-get install `apt-show-versions -u -b | fgrep /unstable`
          ... actualiza todos los paquetes de la rama inestable (unstable)
          a su versión más reciente

6.4.8. Eliminar paquetes del caché
----------------------------------

     La instalación de paquetes con APT guarda los paquetes en
     `/var/cache/apt/archives'.

          # apt-get autoclean # elimina únicamente los paquetes inútiles
          # apt-get clean     # elimina la totalidad de los paquetes del caché

6.4.9. Grabar/copiar la configuración del sistema
-------------------------------------------------

     Para hacer una copia local del estado de la selección de los paquetes:

          $ dpkg --get-selections "*" ><mis_selecciones>   # o usar \*

     `"*"' incluye también los nombres de los paquetes a purgar en
     `<mis_selecciones>'.

     Puede transferir este archivo a otra computadora e instalarlo
     haciendo:

          # dselect update
          # dpkg --set-selections <<mis_selecciones>
          # apt-get -u dselect-upgrade    # <o> dselect install

6.4.10. Portar un paquete a la rama `stable'
--------------------------------------------

     Para una actualización parcial del sistema `estable', es conveniente
     reconstruir el paquete para el entorno dado a partir de su código
     fuente.  Esto evita actualizaciones masivas de paquetes debido a las
     dependencias.  Primero, añada las siguientes entradas al
     `/etc/apt/sources.list':

          deb-src http://http.us.debian.org/debian testing \
           main contrib non-free
          deb-src http://non-us.debian.org/debian-non-US testing/non-US \
           main contrib non-free
          deb-src http://http.us.debian.org/debian unstable \
           main contrib non-free
          deb-src http://non-us.debian.org/debian-non-US unstable/non-US \
           main contrib non-free

     Cada entrada para `deb-src' está dividida en dos por cuestiones de
     impresión aunque en realidad las entradas en el `sources.list' deben
     escribirse en una única línea.

     A continuación, obtenga el código fuente y cree una copia local del
     paquete:

$ apt-get update  # actualiza la lista de paquetes del repositorio
$ apt-get source <paquete>
$ dpkg-source -x <paquete.dsc>
$ cd <versión_paquete>
  ... busque los paquetes requeridos (Build-depends en el archivo .dsc) e
      instálelos.  Necesitará también el paquete "fakeroot".

$ dpkg-buildpackage -rfakeroot

  ...o (sin firma)
$ dpkg-buildpackage -rfakeroot -us -uc # utilice luego "debsign" si es necesario

  ...luego para instalarlo
$ su -c "dpkg -i <nombre_paquete.deb>"

     En general, se necesita instalar algunos paquetes con la opción "-dev"
     para satisfacer la dependencia entre paquetes.  `debsign' pertenece al
     paquete `devscripts'.  `auto-apt' puede fácilmente satisfacer estas
     dependencias.  La utilización de `fakeroot' evita el uso innecesario
     de la cuenta de superusuario.

     En Woody, estos temas sobre dependencias pueden simplificarse.  Por
     ejemplo, para compilar el paquete fuente `pine':

          # apt-get build-dep pine
          # apt-get source -b pine

6.4.11. Archivo local de paquetes
---------------------------------

     A fin de crear un archivo local de paquetes que sea compatible con los
     sistemas APT y `dselect', es necesario crear el archivo `Packages' y
     archivar los paquetes en un árbol de directorios determinado.

     Se puede crear un repositorio local `deb' similar al oficial de Debian
     haciendo:

          # apt-get install dpkg-dev
          # cd </usr/local>
          # install -d <pool> # los paquetes se ubicarán físicamente aquí
          # install -d dists/<unstable>/<main>/binary-<i386>
          # ls -1 <pool> | sed 's/_.*$/ extra <BOGUS>/' | uniq > <override>
          # editor <override> # ajuste <BOGUS>
          # dpkg-scanpackages <pool> <override> </usr/local>/ \
             > dists/<unstable>/<main>/binary-<i386>/Packages
          # cat > dists/<unstable>/<main>/Release << EOF
          Archive: <unstable>
          Version: <3.0>
          Component: <main>
          Origin: <Local>
          Label: <Local>
          Architecture: <i386>
          EOF
          # echo "deb file:</usr/local> <unstable> <main>" \
             >> /etc/apt/sources.list

     O bien, rápidamente haciendo:

          # apt-get install dpkg-dev
          # mkdir </usr/local/debian>
          # mv </some/where/package.deb> </usr/local/debian>
          # dpkg-scanpackages </usr/local/debian> /dev/null | \
            gzip - > </usr/local/debian>/Packages.gz
          #  echo "deb file:</usr/local/debian> ./" >> /etc/apt/sources.list

     Se puede acceder en forma remota a estos archivos habilitando el
     acceso a estos directorios mediante HTTP o FTP y modificando
     convenientemente las entradas del archivo `/etc/apt/sources.list'.

6.4.12. Convertir o instalar un paquete que no pertenece a Debian
-----------------------------------------------------------------

     `alien' permite la conversión de paquetes `rpm' de Redhat , `slp' de
     Stampede , `tgz' de Slackware y `pkg' de Solaris al formato de
     paquetes `deb' de Debian.  Si desea utilizar un paquete de una
     distribución Linux diferente a la que tiene instalada en su sistema,
     puede usar `alien' para convertirlo en su formato de paquetes
     preferido e instalarlo.  `alien' soporta también paquetes LSB.

6.4.13. Verificar los paquetes instalados
-----------------------------------------

     `debsums' permite verificar la integridad de los paquetes instalados
     usando las sumas de control (checksums) MD5.  Algunos paquetes no
     poseen sumas de control MD5.  Veamos una solución provisoria para los
     administradores de sistema:

          # cat >>/etc/apt/apt.conf.d/90debsums
          DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";};
          ^D

     por Joerg Wendland <joergland@debian.org> (sin verificar).

6.4.14. `sources.list' optimizado
---------------------------------

     En pocas palabras, mis esfuerzos por optimizar `sources.list' no
     produjeron mejoras significativas para mí en los los Estados Unidos.
     Elegí manualmente un repositorio cercano usando `apt-setup'.

     `apt-spy' crea automáticamente un `sources.list' basándose en el ancho
     de bando y el tiempo de latencia.  `netselect-apt' crea un
     `sources.list' mucho más completo, pero usa un método menos efectivo
     para elegir la mejor réplica (comparación del tiempo de pings).

          # apt-get install apt-spy
          # cd /etc/apt ; mv sources.list sources.list.org
          # apt-spy -d testing -l sources.apt


6.5. Otras particularidades de Debian
-------------------------------------

6.5.1. El comando `dpkg-divert'
-------------------------------

     _dpkg-divert_ fuerza a `dpkg' a no instalar un archivo en su lugar
     habitual sino en otro diferente.  Estos _desvíos_ se pueden usar en
     los scripts de los paquetes Debian para quitar un archivo que provoca
     un conflicto.  Los administradores de sistemas también pueden usarlo
     para no tener en cuenta algunos archivos de configuración o algunos
     archivos (que no han sido marcados como tales) necesitan preservarse
     de `dpkg' al instalar una versión nueva de un paquete que los incluya
     (see Sección 2.2.4, `Preservando la configuración local').

          # dpkg-divert [--add]  <nombre_archivo> # añade "diversion"
          # dpkg-divert --remove <nombre_archivo> # elimina "diversion"

     En general, resulta una buena idea no usar `dpkg-divert' salvo que sea
     absolutamente necesario hacerlo.

6.5.2. El paquete `equivs'
--------------------------

     Si compila un programa a partir de su código fuente, resulta
     conveniente crear un paquete Debian (`*.deb').  Utilice `equivs' como
     último recurso.

          Package: equivs
          Priority: extra
          Section: admin
          Description: burlar las dependencias entre paquetes
          Este es un paquete ficticio que se puede usar para
          crear paquetes Debian que contienen únicamente información
          sobre dependencias.

6.5.3. Comandos alternativos
----------------------------

     Para utilizar el comando `vim' en lugar de `vi', utilice
     `update-alternatives':

          # update-alternatives --display vi
          ...
          # update-alternatives --config vi
            Selection    Command
          -----------------------------------------------
                1        /usr/bin/elvis-tiny
                2        /usr/bin/vim
          *+    3        /usr/bin/nvi
          
          Enter to keep the default[*], or type selection number: 2

     Los miembros del sistema de alternativos de Debian se encuentran en
     `/etc/alternatives' como enlaces simbólicos.

     Para tener su entorno de ventanas X favorito, aplique
     `update-alternatives' a `/usr/bin/x-session-manager' y
     `/usr/bin/x-window-manager'.  Para más detalles, véase Sección
     9.4.5.1, `Personalizando la sesión en X'.

     `/bin/sh' es un enlace simbólico a `/bin/bash' o `/bin/dash'.  Resulta
     más seguro utilizar `/bin/bash' para preservar la compatibilidad con
     scripts antiguos contaminados con comandos del bash aunque resulta más
     disciplinado usar `/bin/dash' para asegurar compatibilidad POSIX.  La
     actualización al kernel 2.4 Linux kernel tends to set this to
     `/bin/dash'.

6.5.4. `init' del System-V y niveles de ejecución
-------------------------------------------------

     El nivel de ejecución predeterminado se puede configurar en el
     `/etc/inittab'.

     A diferencia de otras distribuciones, Debian deja la administración de
     los niveles de ejecución bajo la completa responsabilidad del
     administrador de sistemas.  La administración de `init' en un sistema
     System-V es llevada a cabo mediante los scripts `update-rc.d'.

     Arrancar `/etc/init.d/<nombre>' en los niveles de ejecución 1,2,3 y
     detenerlo en 4,5 con una prioridad igual a 20 (normal) se puede
     realizar haciendo:

          # update-rc.d <nombre> start 20 1 2 3 . stop 20 4 5 .

     Si el script existe en `init.d', el enlace simbólico se puede eliminar
     haciendo:

          # update-rc.d -f <nombre> remove

     Para editar los niveles de ejecución, hago trampa.  Edito manualmente
     las entradas usando el comando `mv' en el indicador del `mc' y copio
     los enlaces con Alt-Enter.  Por ejemplo:

          # mv S99xdm K99xdm # desactivo xdm (X display manager)

     Incluso, como atajo rápido, desactivo un demonio escribiendo `exit 0'
     al comienzo de un script del `init.d'.  Después de todo son `archivos
     de configuración'.

6.5.5. Servicios desactivados
-----------------------------

     La distribución Debian toma muy en serio la seguridad del sistema y
     espera que el administrador del sistema sea competente.  Por lo tanto,
     la facilidad de uso a menudo se relega al segundo plano y determinados
     servicios brindados por los demonios vienen con el nivel de seguridad
     más alto y pocos servicios (o ninguno) estan disponibles en su estado
     de instalación predeterminado.

     Ejecute `ps aux' o consulte el contenido de `/etc/init.d/*' y
     `/etc/inetd.conf', si posee alguna duda (sobre Exim, DHCP, ...).
     También consulte el `/etc/hosts.deny' al igual que la sección Sección
     9.2.1, `Control de acceso mediante PAM y login'.  Asimismo resulta
     útil el comando `pidof' (véase pidof(8)).

     En versiones recientes de Debian X11 no permite, por defecto,
     conexiones TCP/IP (remotas).  VéaseSección 9.4.6, `Conexión TCP/IP en
     X'.  El redireccionamiento de X también se encuentra deshabilitado en
     SSH.  Véase Sección 9.4.8, `Conexión X remota: `ssh''.


-------------------------------------------------------------------------------


7. El kernel de Linux en Debian
-------------------------------

     Debian tiene su propio método de recompilar el kernel y sus módulos
     asociados.  Véase también Sección 2.7, `Debian y el kernel'.


7.1. Recompilación del kernel
-----------------------------

     La utilización de `gcc', `binutils' y `modutils' de la rama `unstable'
     de Debian puede resultar de ayuda al compilar el kernel de linux más
     reciente.  Véase `/usr/share/doc/kernel-package/README.gz' de la
     información oficial (en especial la parte inferior de ésta)

     Puesto que es un tema dinámico, la compilación del kernel es un asunto
     difícil que puede confundir incluso a los desarrolladores más
     admirados:
     Manoj Srivastava escribió:
          `--initrd' requiere de un parche cramfs de Debian.
     Herbert Xu escribió:
          No, no es así.  Para usar un sistema de archivos diferente al
          CRAMFS hay que configurar MKIMAGE en el
          `/etc/mkinitrd/mkinitrd.conf'.

     Sea cuidadoso y consulte siempre el
     `/usr/share/doc/kernel-package/README.gz' de Manoj y Kent.  Asegúrese
     de obtener la última versión inestable del paquete `kernel-package' si
     va a compilar la versión más reciente del kernel.

     `initrd' no es necesario para un kernel compilado para una única
     máquina.  Lo uso porque deseo que mi kernel sea casi el mismo que el
     proporcionado por los paquetes kernel-image.  Si utiliza `initrd',
     asegúrese de leer mkinitrd(8) y mkinitrd.conf(5).  Véase también
     http://bugs.debian.org/149236.

7.1.1. Método Debian estándar
-----------------------------

     Preste atención a los informes de fallos de los paquetes
     `kernel-package', `gcc', `binutils' y `modutils'.  Si es necesario
     utilice las versiones más recientes.

     Compilar en un sistema Debian un kernel personalizado a partir de los
     fuentes exige de un cuidado especial.  Utilice la nueva opción
     `--append_to_version' de `make-kpkg' para crear múltiples imágenes del
     kernel.

# apt-get install debhelper modutils kernel-package libncurses5-dev
# apt-get install kernel-source-<2.4.18> # utilice la versión más reciente
# vi /etc/kernel-pkg.conf                # escriba su nombre y dirección
                                         # electrónica
$ cd /usr/src                            # cree el directorio
$ tar --bzip2 -xvf kernel-source-<2.4.18>.tar.bz2
$ cd kernel-source-<2.4.18>     # si este es el código fuente de su
                                         # kernel
$ rm -rf */pcmcia
    # [OPCIONAL] si uno desea usar los módulos de pcmcia-cs
$ cp /boot/config-<2.4.18-386> .config # tomar configuración actual como predeterminada
$ make menuconfig            # personalizar a gusto
$ make-kpkg clean            # indispensable (consultar: man make-kpkg)
$ fakeroot make-kpkg --append_to_version -<486> --initrd \
        --revision=<rev.01> kernel_image \
        modules_image # modules_image para pcmcia-cs* etc.
$ cd ..
# dpkg -i kernel-image*.deb pcmcia-cs*.deb # instalar

     En realidad, `make-kpkg kernel_image' ejecuta `make oldconfig' y `make
     dep'.  No utilice `--initrd' si no va a usar initrd.

     Se puede evitar hacer `rm -fr */pcmcia' seleccionado "General setup
     --->" en "PCMCIA/CardBus support --->" en `make menuconfig' y tomar
     como configuración "< > PCMCIA/CardBus support" (es decir, destildando
     la casilla de verificación).

     En una máquina SMP, configure CONCURRENCY_LEVEL de acuerdo con el
     kernel-pkg.conf(5).

7.1.2. Método clásico
---------------------

     Obtenga los fuentes nuevos de:
        * Linux: http://www.kernel.org/
        * pcmcia-cs: http://pcmcia-cs.sourceforge.net/
     o utilice los fuentes de Debian equivalentes y haga lo siguiente:
# cd /usr/src
# tar xfvz linux-<loquesea>.tar.gz
# rm -rf linux
# ln -s linux-<loquesea> linux
# tar xfvz pcmcia-cs-<loquesea>.tar.gz
# ln -s pcmcia-cs-<loquesea> pcmcia
# cd linux
# rm -rf */pcmcia
    # [OPCIONAL] si desea usar los módulos de pcmcia-cs
# make menuconfig
... lo relativo a la configuración ...
# make dep
# make bzImage
... edite lilo / grub ...
... mueva /usr/src/linux/arch/i386/boot/bzImage al directorio boot ...
... /sbin/lilo o lo que corresponda si usa grub
# make modules; make modules_install
# cd ../pcmcia
# make config
# make all
# make install
... añada los nombres de los módulos que se necesitan al /etc/modules
# shutdown -r now
... arranque con el nuevo kernel ...

7.1.3. Cabeceras del kernel
---------------------------

     La mayoría de los programas "normales" no necesitan las cabeceras del
     núcleo y de hecho pueden corromperse si se las usa directamente; en
     cambio, deben compilarse usando las cabeceras con las que fueron
     creadas las _`glibc'_ que en un sistema Debian se encuentran en los
     directorios `/usr/include/linux' y `/usr/include/asm'.

     Por lo tanto no cree enlaces simbólicos al directorio `/usr/src/linux'
     desde `/usr/include/linux' y `/usr/include/asm', como lo sugieren
     algunos documentos desactualizados.

     Si _necesita_ las cabeceras del un kernel en particular para algunas
     aplicaciones específicas que así lo requieran, altere el/los
     makefile(s) de modo de incluir las rutas correspondientes
     `<dir-de-las-cabeceras-de-un-kernel-en-particular>/include/linux' y
     `<dir-de-las-cabeceras-de-un-kernel-en-particular>/include/asm'.


7.2. El kernel modular 2.4
--------------------------

     Los nuevos núcleos 2.4 de Debian proporcionados por el paquete
     `kernel-image-2.4.<NN>' están muy modularizados.  Debe asegurarse que
     los módulos estén activados para hacer que el kernel funcione como se
     pretende.

     Si bien hay numerosos ejemplos de `/etc/modules' en la siguiente
     sección, me han dicho que la manera adecuada de corregir los problemas
     relacionados con los módulos consiste en crear un alias para el
     dispositivo en un archivo situado en `/etc/modutils/' ya que en los
     núcleos actuales hay suficientes alias disponibles.  Algunos módulos
     se pueden activar automáticamente por los programas de detección
     automática de hardware tal como `discover'.  Véase también Sección
     9.4.2, `Paquetes de detección de hardware para el servidor X'.

     Véase Sección 2.7.5, `Cuidados especiales para tratar con módulos' y
     `Documentation/*.txt' en los fuentes de Linux para una información
     detallada.

7.2.1. PCMCIA
-------------

     `/etc/modules' necesita incluir lo siguiente para que funcione algunas
     PCMCIA antiguas:

          # controlador PnP ISA
          isa-pnp
          # Nuevo controlador PCMCIA de bajo nivel
          # yenta_socket # en mi caso no parece ser necesario

     Del resto se encarga los scripts PCMCIA (del paquete `pcmcia-cs'),
     `depmod' y `kmod'.  Creo que necesité de `isa-pnp' ya que mi portátil
     es una antigua ISA-PCMCIA.  Las portátiles actuales con CardBus/PCMCIA
     no necesitan de él.

     Según las palabras del genio Miquel van Smoorenburg
     <miquels@cistron.nl> :

     "Simplemente eliminé todo lo referente a pcmcia de la PC portátil de
     mi trabajo, incluyendo cardmgr, e instalé el kernel 2.4 con soporte
     cardbus y el nuevo paquetee `hotplug' de woody.

     Mientras posea únicamente tarjetas de 32 bits, no necesitará el
     paquete pcmia; 2.4 incluye servicios incorporados para tarjetas.  El
     controlador estándar tulip debería funcionar correctamente con su
     tarjeta dlink.

     ---Mike."

     Véase Linux PCMCIA HOWTO (http://www.tldp.org/HOWTO/PCMCIA-HOWTO.html)
     y Sección 10.9.5, `Configuración de la red y PCMCIA'.

7.2.2. SCSI
-----------

     [SIN PROBAR] `/etc/modules' necesita incluir lo siguiente para que
     funcione SCSI:

          # núcleo SCSI
          scsi_mod
          # controlador SCSI genérico
          sg
          # disco SCSI
          sd_mod
          # Todos los módulos necesario para el hardware
          ...

     `depmod' puede encargarse de algunos de los módulos anteriores.

7.2.3. Funciones de Red
-----------------------

     `/etc/modules' debe incluir lo siguiente para funciones de red
     adicionales:

          # net/ipv-4
          ip_gre
          ipip
          
          # net/ipv-4/netfilter
          # iptable (en orden)
          ip_tables
          ip_conntrack
          ip_conntrack_ftp
          iptable_nat
          iptable_filter
          iptable_mangle
          #
          ip_nat_ftp
          ip_queue
          #
          ipt_LOG
          ipt_MARK
          ipt_MASQUERADE
          ipt_MIRROR
          ipt_REDIRECT
          ipt_REJECT
          ipt_TCPMSS
          ipt_TOS
          ipt_limit
          ipt_mac
          ipt_mark
          ipt_multiport
          ipt_owner
          ipt_state
          ipt_tcpmss
          ipt_tos
          ipt_unclean
          #
          #ipchains
          #ipfwadm

     Lo anterior puede no estar optimizado.  `depmod' puede encargarse de
     algunos de los módulos anteriores.

7.2.4. Sistema de archivos EXT3 ( > 2.4.17)
-------------------------------------------

     Para activar el sistema de archivos transaccional EXT3 usando el
     paquete precompilado kernel-image ( > 2.4.17) de Debian hay que seguir
     los siguientes pasos:

# cd /etc; mv fstab fstab.antiguo
# sed 's/ext2/ext3,ext2/g' <fstab.antiguo >fstab
# vi /etc/fstab
... fijar el sistema de archivos raíz en "auto" en vez de "ext3,ext2"
# cd /etc/mkinitrd
# echo jbd >>modules
# echo ext3 >>modules
# echo ext2 >>modules
# cd /
# apt-get update; apt-get install kernel-image-<2.4.17-686-smp>
... instale el último kernel y configure el arranque (en este caso se ejecuta lilo)
# tune2fs -j -i 0 </dev/hda1>
# tune2fs -j -i 0 </dev/hda2>
... Para todos los sistemas de archivos EXT2 convertidos en EXT3
# shutdown -r now

     El sistema transaccional EXT3 se encuentra ahora habilitado.  Una
     entrada "type" `ext3,ext2' en el `fstab' permite una migración segura
     a EXT2 si el núcleo no soporta EXT3 para particiones diferentes a la
     partición raíz.

     Si ya tiene instalado un kernel 2.4 y no desea reinstalarlo, realice
     los pasos anteriores a los comandos `apt-get', y a continuación:

# mkinitrd -o /boot/initrd.img-<2.4.17-686-smp> /lib/modules/<2.4.17-686-smp>
# lilo
# tune2fs -j -i 0 </dev/hda1>
# tune2fs -j -i 0 </dev/hda2>
... para todos los sistemas de archivos EXT2 convertidos a EXT3
# shutdown -r now

     El sistema transaccional EXT3 se encuentra ahora habilitado.

     Si `/etc/mkinitrd/modules' no ha sido configurado cuando `mkinitrd'
     fue ejecutado y le gustaría añadir algunos módulos en tiempo de
     arranque:

... en el indicador de initrd pulse ENTER (5 seg.) para acceder al intérprete
de comandos
# insmod jbd
# insmod ext3 # modprobe ext3 puede hacerse cargo de todo
# insmod ext2
# ^D
... continua el arranque

     En los mensajes del arranque del sistema (`dmesg'), puede aparecer la
     frase "cramfs: wrong magic" que no acarrea ninguna consecuencia.  Este
     problema se ha resuelto en Sarge (2002/10).  Véase
     http://bugs.debian.org/135537 y el EXT3 File System mini-HOWTO
     (http://www.zip.com.au/~akpm/linux/ext3/ext3-usage.html) o
     `/usr/share/doc/HOWTO/en-txt/mini/extra/ext3-mini-HOWTO.gz' para más
     información.

     Se ha informado sobre graves cuelgues del kernel al activar EXT3 pero
     no he tenido ningún problema (con el 2.4.17).

7.2.5. Soporte Realtek RTL-8139 en el kernel 2.4
------------------------------------------------

     Por alguna razón, el módulo que soporta RTL-8139 ya no se llama
     rtl8139 sino 8139too.  Simplemente edite su `/etc/modules' para
     reflejar este cambio al pasar del kernel 2.2 al 2.4.

7.2.6. Soporte puerto paralelo
------------------------------

     En el `kernel-image-2.4.*', el soporte del puerto paralelo es
     proporcionado mediante un módulo.  Actívelo haciendo:

          # modprobe lp
          # echo lp >> /etc/modules

     Véase `Documentation/parport.txt' del código fuente de Linux.


7.3. Poniendo a punto al kernel mediante el sistema de archivos proc
--------------------------------------------------------------------

     El comportamiento del kernel de Linux se puede modificar al vuelo
     usando el sistema de archivos proc.

     Para información básica para modificar los parámetros del kernel a
     través del sistema de archivos `/proc', consulte
     `Documentation/sysctl/*' de los fuentes del kernel.

     Véase algunos ejemplos de manipulación de los parámetros del kernel en
     `/etc/init.d/networking' y Sección 3.7.5, `Problemas extraños al
     acceder a ciertos sitios de Internet'.

     Véase sysctl.conf(5) para saber cómo configurar el tiempo de arranque
     en la configuración del kernel mediante el sistema de archivos `/proc'
     con el script `/etc/init.d/procps.sh' que generalmente se ejecuta
     desde `/etc/rcS.d/S30procps.sh'.

7.3.1. Demasiado archivos abiertos
----------------------------------

     El kernel de Linux puede quejarse diciendo "Too many open files"
     ("Demasiado archivos abiertos").  Esto es debido al pequeño valor
     predeterminado (8096) de `file-max'.  Para solucionar este problema,
     ejecute el siguiente comando como superusuario:

# echo "65536"  > /proc/sys/fs/file-max  # para los núcleos 2.2 y 2.4
# echo "131072" > /proc/sys/fs/inode-max # únicamente para el núcleo 2.2

     o escriba lo siguiente en el `/etc/sysctl.conf' para que el cambio sea
     permanente:

          file-max=65536    # para los núcleos 2.2 y 2.4
          inode-max=131072  # únicamente para el núcleo 2.2

7.3.2. Intervalos de vaciado de disco
-------------------------------------

     Puede modificar los intervalos de vaciado de disco mediante el sistema
     de archivos proc.  Lo siguiente disminuirá el intervalo predeterminado
     de cinco segundos a un segundo.

          # echo "40 0 0 0 100 30000 60 0 0"  > /proc/sys/vm/bdflush

     Esto puede influir negativamente en el rendimiento de la E/S del
     archivo.  Pero asegura los contenidos del mismo salvo durante el
     último segundo que es inferior a los 5 segundos predeterminados.  Esto
     es así incluso para el sistema de archivos transaccional.

7.3.3. Máquinas con memoria extremadamente lenta
------------------------------------------------

     Para algunos sistemas antiguos con memoria extremadamente lenta, puede
     resultar útil activar la siguiente opción usando el sistema de
     archivos proc:

          # echo 1 > /proc/sys/vm/overcommit_memory


-------------------------------------------------------------------------------


8. Trucos para Debian
---------------------


8.1. Arrancando el sistema
--------------------------

     Véase el BootPrompt-HOWTO
     (http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html) para información
     detallada sobre el indicador de arranque.

8.1.1. "¡Olvidé la contraseña de superusuario!" (1)
---------------------------------------------------

     Es posible arrancar el sistema y acceder a la cuenta de superusuario
     sin conocer la contraseña siempre y cuando se tenga acceso al teclado
     de la consola (esto supone que ni la BIOS ni un cargador de arranque
     como `lilo' solicitan una contraseña para evitar el arranque del
     sistema)

     Este es un procedimiento que no requiere de discos de arranque
     externos ni cambios en los parámetros de arranque de la BIOS.  Aquí,
     "Linux" hace referencia al kernel de Linux de la instalación
     predeterminada de Debian.

     En el pantalla de arranque de `lilo', cuando aparece `boot:' (en
     algunos sistemas debe presionar la tecla Mayús para evitar el arranque
     automático y cuando `lilo' utiliza el framebuffer tiene que pulsar TAB
     para ver las opciones), escriba:

          boot: Linux init=/bin/sh

     Esto hará que el sistema arranque el kernel y ejecute el `/bin/sh' en
     vez del estándar `init'.  Ahora tenemos privilegios de superusuario y
     acceso al intérprete de comandos.  Puesto que `/' generalmente está
     montado en modo sólo lectura y aún no han sido montadas las distintas
     particiones, debe hacer lo siguiente para tener un sistema que
     funcione razonablemente.

          init-2.03# mount -n -t remount,rw /
          init-2.03# mount -avt nonfs,noproc,nosmbfs
          init-2.03# cd /etc
          init-2.03# vi passwd
          init-2.03# vi shadow

     (si el segundo campo de datos en el `/etc/passwd' es una "x" para cada
     nombre de usuario, su sistema utiliza contraseñas ocultas y debe
     editar el archivo `/etc/shadow') Para desactivar la contraseña de
     root, edite el segundo campo de datos en el archivo de contraseñas de
     modo que quede vacío.  Ahora se puede reiniciar el sistema y entrar
     como root sin contraseña.  A diferencia de algunas distribuciones
     Linux antiguas, la Debian actual (Potato) requiere de contraseña sólo
     cuando arranca en el nivel de ejecución 1.

     Resulta una buena idea tener un editor mínimo en `/bin' en el caso que
     `/usr' no sea accesible (véase Sección 11.2, `Editores de rescate').

     También considere instalar el paquete `sash'.  Cuando no pueda
     arrancar el sistema, haga:

          boot: Linux init=/bin/sash

     `sash' sirve como un sustituto interactivo de `sh' incluso cuando
     `/bin/sh' no se puede usar.  Está enlazado estáticamente e incluye
     diversas utilidades estándar incorporadas (teclee "help" en el
     indicador de comandos para una lista de referencia).

8.1.2. "¡Olvidé la contraseña de superusuario!" (2)
---------------------------------------------------

     Arranque desde un disco de emergencia.  Si `/dev/hda3' es la partición
     raíz original, lo siguiente le permitirá editar el archivo de
     contraseñas tan fácilmente como antes.

          # mkdir fixit
          # mount /dev/hda3 fixit
          # cd fixit/etc
          # vi shadow
          # vi passwd

     La ventaja de este enfoque sobre el anterior es que no se necesita
     conocer la contraseña de `lilo' (si existe).  Pero para usarlo uno
     debe ser capaz de poder acceder a la configuración de la BIOS para
     permitir arrancar el sistema desde un disquete o CD si es que ya no
     está configurada como tal.

8.1.3. No puedo arrancar el sistema
-----------------------------------

     Si se tomó la molestia de crear un disco de arranque durante la
     instalación, no habrá ningún problema.  Si `lilo' se encuentra dañado,
     grabe el disco de arranque desde el disco de instalación de debian y
     arranque el sistema con él.  En el indicador de arranque, suponiendo
     que la partición raíz de su instalación Linux es `</dev/hda12>' y que
     desea entrar al nivel de ejecución 3, escriba:

          boot: rescue root=</dev/hda12> 3

     De esta manera arrancará con un sistema prácticamente funcional usando
     el kernel del disquete (pueden existir pequeños inconvenientes debido
     a la falta de algunas características o módulos del kernel).

     Véase también Sección 6.3.6, `Instalar un paquete en un sistema que no
     arranca' si su sistema está dañado.

     Si necesita un disquete de arranque personalizado, consulte el
     `readme.txt' del disco de rescate.

8.1.4. "¡Permítanme desactivar X al arrancar!"
----------------------------------------------

     Chasing `unstable/sid' is fun, but buggy `xdm', `gdm', `kdm', and
     `wdm' started during the boot process can bite you bad.

     Primero acceda al shell del superusuario escribiendo lo siguiente en
     el indicador de arranque:

          boot: <Linux> vga=normal s

     En este caso, <Linux> es la etiqueta de la imagen del kernel que está
     arrancando.  "vga=normal" nos asegurará que `lilo' se ejecute en una
     pantalla VGA normal y "s" (o "S") es el parámetro que se pasa a `init'
     para invocar el modo monousuario.  Escriba la contraseña del
     superusuario en el símbolo de espera.

     Existen distintas maneras de desactivar todos los demonios que
     arrancan con X:

        * ejecute `update-rc.d <?>dm stop 99 1 2 3 4 5 6 .'

        * escriba "exit 0" al comienzo de todos los archivos
          `/etc/init.d/<?>dm'.

        * renombre todos los archivos `/etc/rc<2>.d/S99<?>dm' como
          `/etc/rc2.d/K99<?>dm'.

        * elimine todos los archivos `/etc/rc<2>.d/S99<?>dm'.

        * ejecute `:>/etc/X11/default-display-manager'

     Aquí, el número en `rc<2>.d' se debe corresponder al nivel de
     ejecución especificado en el `/etc/inittab'.  Asimismo `<?>dm'
     significa que necesita ejecutar el comando múltiples veces
     sustituyéndolo con `xdm', `gdm', `kdm' o `wdm'.

     La primera de la lista es "la única manera verdadera" en Debian.  La
     última es fácil pero sólo funciona en Debian y exige que que se
     configure el administrador de pantalla nuevamente usando
     `dpkg-reconfigure'.  Los otros son métodos genéricos para deshabilitar
     demonios.

     Aún puede continuar arrancando X mediante el comando `startx' desde
     cualquier consola de shell.

8.1.5. Otros trucos con el indicador de arranque
------------------------------------------------

     El sistema se puede arrancar en un nivel de ejecución particular y con
     una configuración determinada usando el indicador de arranque de
     `lilo'.  Para más detalles consulte el BootPrompt-HOWTO
     (http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html) (LDP).

     Si desea arrancar el sistema en el nivel de ejecución cuatro, use la
     siguiente entrada para el indicador de arranque de `lilo'.

          boot: Linux 4

     Si desea arrancar el sistema en modo monousuario y conoce la
     contraseña de superusuario, algunos de los siguientes ejemplos
     funcionará usando el indicador de arranque de `lilo'.

          boot: Linux S
          boot: Linux 1
          boot: Linux -s

     Si desea arrancar el sistema con menos memoria de la que realmente
     posee el sistema (por ejemplo, 48MB en un sistema con 64MB), use la
     siguiente entrada para el indicador de arranque de `lilo':

          boot: Linux mem=48M

     Asegúrese de no especificar un valor mayor al tamaño de memoria real
     ya que si es así el kernel se colgará.  Los núcleos antiguos y/o las
     placas madres con una BIOS antigua no usan la memoria por encima de
     los 64 MB, salvo que uno escriba `mem=128M' en el indicador de
     arranque o incluya una línea similar en el `/etc/lilo.conf'.

8.1.6. Configurando los parámetros de arranque (GRUB)
-----------------------------------------------------

     GRUB es un nuevo administrador de arranque del projecto Hurd y es
     mucho más flexible que lilo pero con un manejo ligeramente diferente
     de los parámetros de arranque.

          grub> find /vmlinuz
          grub> root (hd0,0)
          grub> kernel /vmlinuz root=/dev/hda1
          grub> initrd /initrd
          grub> boot

     Aquí, debe tener presente los nombres de dispositivos que utiliza
     Hurd:

          Hurd/GRUB           Linux               MSDOS/Windows
           (fd0)               /dev/fd0            A:
           (hd0,0)             /dev/hda1           C: (en general)
           (hd0,3)             /dev/hda4           F: (en general)
           (hd1,3)             /dev/hdb4           ?

     Véase `/usr/share/doc/grub/README.Debian' y
     `/usr/share/doc/grub-doc/html/' para más detalles.


8.2. Registro de actividades
----------------------------

8.2.1. Registrando las actividades del intérprete de comandos
-------------------------------------------------------------

     La administración del sistema implica tareas mucho más elaboradas en
     un entorno Unix que un entorno común de una computadora personal.
     Asegúrese de saber lo básico sobre configuración por si acaso necesita
     recuperar el sistema de algún problema.  Las herramientas gráficas de
     configuración basadas en X11 son agradables y convenientes pero a
     menudo inapropiadas en situaciones de emergencia.

     En este contexto, el registro de las actividades del intérprete de
     comandos resulta ser una buena práctica especialmente como
     superusuario.

     Emacs: utilice M-x `shell' para empezar a grabar en el búfer y C-x C-w
     para escribir el contenido del mismo en un archivo.

     Intérprete de comandos: utilice el comando `screen' con "^A H" como se
     detalla en Sección 8.6.27, `Intercambiando consolas con `screen'' o el
     comando `script'.

          $ script
          Script started, file is typescript
           ... hacer cualquier cosa ...
           Ctrl-D
          $ col -bx <typescript >savefile
          $ vi savefile

     Se puede utilizar lo siguiente en vez del comando `script':

          $ bash -i 2>&1 | tee typescript

8.2.2. Registrando las actividades en X
---------------------------------------

     Si necesita registrar la imagen de una aplicación X, incluyendo una
     terminal `xterm', utilice `gimp' (GUI).  Puede capturar cada ventana o
     la totalidad de la pantalla.  Otras alternativas son `xwd'
     (`xbase-clients'), `import' (`imagemagick') y `scrot' (`scrot').


8.3. Copiar y archivar un subdirectorio entero
----------------------------------------------

8.3.1. Comandos básicos para copiar un subdirectorio entero
-----------------------------------------------------------

     Si necesita reordenar la estructura de archivos, mueva el contenido
     incluyendo los enlaces a archivos mediante:

          Método estándar:
          # cp -a /directorio/fuente /directorio/destino # debe ser GNU
          # (cd /directorio/fuente && tar cf - . ) | \
                  (cd /directorio/destino && tar xvfp - )
          Si existen enlaces duros, se necesita un método más elaborado:
          # cd /ruta/al/directorio/original
          # find . -depth -print0 | afio -p -xv -0a
          # /punto/de/montaje/del/nuevo/directorio
          En el caso de una conexión remota:
          # (cd /directorio/fuente && tar cf - . ) | \
              ssh usuario@host.dom (cd /directorio/destino && tar xvfp - )
          Si no hay archivos enlazados:
          # scp -pr usuario1@host1.dom:/directorio fuente \
                    usuario2@host2.dom:/directorio/destino

     En este caso, `scp' <==> `rcp' y `ssh' <==> `rsh'.

     El método para copiar un subdirectorio entero está basado en la
     información proporcionada por Manoj Srivastava <srivasta@debian.org>
     de la lista debian-user@lists.debian.org.

8.3.2. `cp'
-----------

     Inicialmente, `cp' no resultaba ser el candidato correcto ya que no
     desreferenciaba enlaces simbólicos ni tampoco preservaba enlaces
     duros.  Otra cosa a considerar eran los archivos de tamaño muy
     pequeño.

     GNU `cp' ha superado estas limitaciones.  No obstante en sistemas que
     no son GNU cp puede aún tener problemas.  Asimismo, no se pueden
     generar archivos portables pequeños usando `cp'.

          % cp -a . directorio_nuevo

8.3.3. `tar'
------------

     Tar soluciona algunos de los problemas que tenía cp con los enlaces
     simbólicos.  Sin embargo, `cpio' maneja archivos especiales que el
     `tar' tradicional no puede manejar.

     `tar' maneja múltiples enlaces duros colocando una única copia de un
     enlace en la cinta.  El nombre asignado a dicha copia es el _único_
     que se puede usar para recuperar el archivo.  En cambio, `cpio' coloca
     una copia de cada enlace de manera que para recuperar el archivo se
     puede utilizar el nombre de cualquiera de ellas.

     El comando `tar' ha cambiado sus opciones para los archivos `.bz2' al
     pasar de Potato a Woody, por lo tanto, use `--bzip2' en los scripts en
     vez de su forma reducida `-I' (Potato) o `-j' (Woody).

8.3.4. `pax'
------------

     Es la nueva utilidad para archivar, portable y compatible POSIX (IEEE
     Std 1003.2-1992, páginas 380-388 (sección 4.48) y páginas 936-940
     (sección E.4.48)).  `pax' lee, escribe y lista los componentes de un
     directorio y copia la jerarquía de los mismos.  La operación pax es
     independiente del formato específico del archivo y admite una amplia
     variedad de formatos.

     Las implementaciones de `pax' son aún nuevas y están en pleno
     desarrollo.

          # apt-get install pax
          $ pax -rw -p e . directorio_nuevo
           o
          $ find . -depth  | pax -rw -p e  directorio_nuevo

8.3.5. `cpio'
-------------

     `cpio' almacena o extrae archivos en o de un archivo `tar' o `cpio'.
     El archivo puede ser otro archivo del disco, una cinta magnética o una
     tubería.

          $ find . -depth -print0 | cpio --null --sparse -pvd new-dir

8.3.6. `afio'
-------------

     `afio' es una mejor forma de tratar con archivos con formato cpio.
     Generalmente es más rápido que `cpio', proporciona más opciones para
     utilizar con cintas magnéticas y maneja mejor la corrupción de los
     datos de entrada.  Admite archivos multi-volumen durante su operación
     interactiva.  Afio puede crear archivos empaquetados que son mucho más
     seguros que los empaquetados con `tar' o `cpio'.  En un script, para
     realizar una copia de seguridad, afio tiene un comportamiento óptimo
     como 'motor para archivar'.

          $ find . -depth -print0 | afio -px -0a directorio_nuevo

     Para crear todas mis copias de respaldo en una cinta uso `afio'.


8.4. Respaldos diferenciales y sincronización de datos
------------------------------------------------------

     Los respaldos diferenciales y la sincronización de datos se pueden
     implementar mediante diversos métodos:

        * `rcs': copia de respaldo e historial, sólo texto

        * `rdiff-backup': copia de respaldo e historial.  Se respetan
          enlaces simbólicos.

        * `pdumpfs': copia de respaldo e historial en un sistema de
          archivos.  Se respetan los enlaces simbólicos.

        * `rsync': sincronización en un sólo sentido

        * `unison': sincronización en ambos sentidos

        * `cvs': sincronización en múltiples sentidos con un servidor e
          historial, sólo texto, maduro.  Véase Sección 12.1, `Sistema de
          versiones concurrentes (CVS)'.

        * `arch': sincronización en múltiples sentidos con un servidor,
          copias de respaldo e historial, sin "directorio de trabajo".

        * `subversion': sincronización en múltiples sentidos con un
          servidor, copias de respaldo e historial, Apache.

     La combinación con uno de los métodos descriptos en Sección 8.3,
     `Copiar y archivar un subdirectorio entero' y la automatización de
     tareas descripta en Sección 8.6.26, `Planificar una actividad (`cron',
     `at')' permitirán crear un buen sistema de respaldo.

     Explicaré tres herramientas fáciles de usar.

8.4.1. Respaldos diferenciales con rdiff
----------------------------------------

     `rdiff-backup' ofrece respaldos buenos y sencillos con historial
     diferencial para cualquier tipo de archivos incluyendo enlaces
     simbólicos.  Para hacer una copia de respaldo de la mayor parte de
     `~/' en `/mnt/respaldo':

$ rdiff-backup --include ~/tmp/conservar --exclude ~/tmp  ~/ /mnt/respaldo

     Para restaurar los datos de hace tres días de este archivo en
     `~/antiguo':

          $ rdiff-backup -r 3D /mnt/respaldo ~/antiguo

     Véase rdiff-backup(1).

8.4.2. Copias de respaldo diarias con `pdumpfs'
-----------------------------------------------

     `pdumpfs' es un sencillo sistema para realizar copias de respaldo
     diarias similar al `dumpfs' de Plan9 que preserva cada réplica diaria
     del sistema.  Es posible acceder en cualquier momento a réplicas
     antiguas para obtener un archivo de un día determinado.  ¡ Hagamos una
     copia de respaldo de nuestro directorio personal con `pdumpfs' y
     `cron'!

     `pdumpfs' crea la réplica `AAAA/MM/DD' en el directorio de destino.
     Todos los archivos originales se copian al directorio réplica cuando
     `pdumpfs' se ejecuta por primera vez.  A partir de la segunda vez y en
     adelante, `pdumpfs' copia sólamente archivos nuevos o actualizados y
     almacena los archivos sin modificar como enlaces duros a los archivos
     de la réplica del día previo para ahorrar espacio en disco.

          $ pdumpfs <dir-orig> <dir-dest> [<dest-basename>]

     Véase pdumpfs(8).

8.4.3. Respaldos diferenciales con RCS
--------------------------------------

     `Changetrack' registrará en forma regular los cambios de los archivos
     de configuración en archivos RCS.  Véase changetrack(1).

          # apt-get install changetrack
          # vi changetrack.conf


8.5. Recuperar al sistema de un cuelgue
---------------------------------------

8.5.1. Mate el procesoi
-----------------------

     Ejecute `top' para ver cuál es el proceso que está actuando de manera
     extraña.  Pulse `P' para ordenar por tiempo de CPU, `M' para ordenar
     por uso de memoria y "k" para matar un proceso.  En forma aternativa,
     se puede usar el estilo BSD `ps aux | less' o el System V `ps -efH |
     less'.  La sintaxis del estilo System V muestra los ID de los procesos
     padres (`PPID') que se pueden utilizar para matar un proceso hijo
     zombie (malfuncionamiento).

     Utilice `kill' junto el ID del proceso para matar (o enviar una señal
     a) un proceso, `killall' para hacer lo mismo pero usando el nombre del
     comando.  Señales de uso habitual:

           1: HUP,  reiniciar demonio
          15: TERM, terminar un proceso en forma normal
           9: KILL, matar un proceso sin contemplaciones

8.5.2. Alt-SysRq
----------------

     La opción de compilación del kernel "Magic SysRq key" proporciona una
     protección contra el mal funcionamiento del sistema.  Pulsando
     Alt-SysRq en una i386 y a continuación una de las teclas `r 0 k e i s
     u b' se obtiene el pase mágico.

     Un`r'aw restaura el teclado tras el cuelgue de X.  Modifique el nivel
     de registro de la consola con `0' para reducir los mensajes de error.
     sa`k' (tecla de atención del sistema) mata a todos los procesos en la
     consola virtual actual.  t`E'rminate mata a todos los procesos de la
     terminal actual salvo `init'.  k`i'll mata a todos los procesos
     incluyendo a `init'.

     `s'ync (sincronizar), `u'mount (desmontar), y re`b'oot (reiniciar) a
     menudo se utilizan en el caso de situaciones realmente complicadas.

     En el momento de escribir este documento, los núcleos que vienen con
     la instalación predeterminada de Debian no han sido compilados con
     esta opción.  Recompile el kernel para activarla.  Se puede encontrar
     información detallada en:
     `/usr/share/doc/kernel-doc-<version>/Documentation/sysrq.txt.gz'.


8.6. Algunos pequeños comandos útiles para tener en cuenta
----------------------------------------------------------

8.6.1. Paginador
----------------

     `less' es el paginador predeterminado (navegador del contenido de un
     archivo).  Pulse `h' para obtener ayuda.  Puede hacer muchas más cosas
     que `more'.  `less' can be supercharged by executing `eval
     $(lesspipe)' or `eval $(lessfile)' in the shell start-up script.
     Véase más en `/usr/share/doc/lessf/LESSOPEN'.  La opción `-R' permite
     la salida de caractéres raw y activa las secuencias de escape en color
     ANSI.  Véase less(1).

     `w3m'puede ser un paginador alternativo útil para algunos sistemas de
     código (EUC).

8.6.2. Memoria disponible
-------------------------

     `free' y `top' brindan una buena información sobre los recursos de
     memoria disponibles.  No se preocupe por el tamaño que figura bajo
     "used" de la línea "Mem:" sino por el valor que se encuentra justo
     debajo de él (38792 en el siguiente ejemplo).

          $ free -k # para una máquina con 256MB
                       total       used       free     shared    buffers cached
          Mem:        257136     230456      26680      45736     116136 75528
          -/+ buffers/cache:      38792     218344
          Swap:       264996          0     264996

     La cantidad de memoria física exacta se puede confirmar haciendo `grep
     '^Memory' /var/log/dmesg'.  En este caso arroja el siguiente
     resultado: "Memory: 256984k/262144k available (1652k kernel code, 412k
     reserved, 2944k data, 152k init)".

          Total         = 262144k = 256M (1k=1024, 1M=1024k)
          Free to dmesg = 256984k = Total - kernel - reserved - data - init
          Free to shell = 257136k = Total - kernel - reserved - data

     El sistema no puede usar cerca de 5MB ya que lo utiliza el propio
     kernel.

8.6.3. Configurar fecha y hora (BIOS)
-------------------------------------

          # date MMDDhhmmCCYY
          # hwclock --utc --systohc
          # hwclock --show

     Esto fijará la fecha y hora del sistema y del hardware en MM/DD hh:mm,
     CCYY.  La hora se muestra según el huso horario local pero el hardware
     utiliza el UTC..

8.6.4. Configurar hora (NTP)
----------------------------

     Referencia: Managing Accurate Date and Time HOWTO
     (http://www.tldp.org/HOWTO/TimePrecision-HOWTO/index.html).

8.6.4.1. Configurar la fecha y hora con una conexión a Internet permanente
--------------------------------------------------------------------------

     Configure el reloj del sistema para corregir la fecha y hora en forma
     automática mediante un servidor remoto:

          # ntpdate <server>

     Si su sistema posee una conexión a Internet permanente, resulta
     interesante incluirlo en `/etc/cron.daily/'.

8.6.4.2. Configurar la hora y fecha con una conexión a Internet no
permanente
----------------------------------------------------------------------------

     Use el paquete `chrony'.

8.6.5. Como controlar características de la consola tales como el protector
de pantalla
----------------------------------------------------------------------------

     Para descativar el protector de pantalla, utilice los siguientes
     comandos:

     En la consola de Linux:

          # setterm -powersave off

     Ejecute la consola kon2 (kanji) con:

          # kon -SaveTime 0

     Cuando esté ejecutando X:

          # xset s off
           o
          # xset -dpms
           o
          # xscreensaver-command -prefs

     Consulte las correspondientes páginas del manual para controlar otras
     características de la consola.  Véase también stty(1) for changing and
     printing

8.6.6. Búsqueda en la base de datos administrativa
--------------------------------------------------

     Glibc ofrece getent(1) para buscar entradas en la base de datos
     administrativa (passwd, group, hosts, services, protocols o networks).
          getent database [clave ...]

8.6.7. Desactivar el sonido (bip)
---------------------------------

     Uno siempre puede desenchufar el parlante del PC ;-).  Para el
     intérprete de comandos:

          echo "set bell-style none">> ~/.inputrc:

8.6.8. Mensajes de error por pantalla
-------------------------------------

     Para hacer desaparecer los mensajes de error por pantalla, el primer
     lugar a verificar es `/etc/init.d/klogd'.  Fije `KLOGD="-c <3>"' en
     este script y ejecute `/etc/init.d/klogd restart'.  Un método
     alternativo consiste en ejecutar `dmesg -n<3>'.

     Veamos el significado de los niveles de error:
        * 0: KERN_EMERG, sistema inutilizado
        * 1: KERN_ALERT, deben tomarse acciones de inmediato
        * 2: KERN_CRIT, condiciones críticas
        * 3: KERN_ERR, condiciones de error
        * 4: KERN_WARNING, condiciones de precaución
        * 5: KERN_NOTICE, condiciones normales pero significativas
        * 6: KERN_INFO, mensajes informativos
        * 7: KERN_DEBUG, mensajes a nivel depuración

     Si un mensaje de error inútil lo molesta continuamente, considere
     crear un parche para el kernel sencillo tal como `shutup-abit-bp6'
     (disponible en el subdirectorio de ejemplos
     (http://www.debian.org/doc/manuals/debian-reference/examples/)).

     Otro lugar que hay que ver es el `/etc/syslog.conf'; verifique si los
     mensajes de error se envían a la consola.

8.6.9. Configurar la consola
----------------------------

     En sistemas tipo UNIX se accede a las pantallas de la consola
     mediantes rutinas de la biblioteca (n)curses.  Éstas brindadn al
     usuario un método independiente del terminal de actualizar las
     pantallas de caracteres con una optimización razonable.  Véase
     ncurses(3X) y terminfo(5).

     En un sistema Debian, existe una infinidad de entradas predefinidas:

$ toe | less                  # todas las entradas
$ toe /etc/terminfo/ | less   # entradas reconfigurables por el usuario

     Exporte su elección mediante la variable de entorno `TERM'.

     Si la entrada terminfo para `xterm' no funciona con una `xterm'
     no-Debian, cuando acceda a un sistema Debian en forma remota cambie el
     tipo de su terminal de "xterm" a una de las versiones con menos
     características como, por ejemplo, "xterm-r6".  Véase
     `/usr/share/doc/libncurses5/FAQ' para más información.

8.6.10. Volver la consola a su estado normal
--------------------------------------------

     Si la pantalla se enloquece después de hacer `cat <some-binary-file>'
     (quizás no pueda ver el comando que ingresa mientras escribe) haga:

          $ reset

8.6.11. Convertir un archivo de texto en formato DOS a formato Unix
-------------------------------------------------------------------

     Convertir un archivo de texto en formato DOS (fin-de-línea=^M^J) en un
     archivo Unix (^J).

          # apt-get install sysutils
          $ dos2unix dosfile

8.6.12. Sustitución de expresiones regulares
--------------------------------------------

     Para reemplazar todas las instancias <FROM_REGEX> por <TO_TEXT> en
     todos los archivos <FILES> ...:

          $ perl -i -p -e 's/<FROM_REGEX>/<TO_TEXT>/g;'
          <FILES> ....

     `-i' es para "editar en el lugar", `-p' significa "bucle implícito
     sobre los archivos FILES ...".  Si la sustitución es compleja, la
     recuperación ante posibles errores resulta más fácil usando el
     parámetro `-i.bak' en vez de `-i'.  De esta manera se conservará una
     copia de los archivos originales a los que se les agregará la
     extensión `.bak'.

8.6.13. Editar un archivo con un script
---------------------------------------

     El siguiente script eliminará las líneas de la 5 a la 10 y desde la 16
     a la 20.

          #!/bin/bash
          ed $1 <<EOF
          16,20d
          5,10d
          w
          q
          EOF

     Aquí, los comandos `ed' son los mismos que los del modo comando de
     `vi'.  La edición de archivos de esta manera facilita la creación de
     scripts.

8.6.14. Extraer diferencias y combinar actualizaciones entre archivos
fuente
----------------------------------------------------------------------------

     Siguiendo uno de los siguientes procedimientos se extraerán las
     diferencias entre dos archivos fuente y se crearán los archivos
     unificados diff <archivo.parche0> o <archivo.parche1> según la
     ubicación del archivo:

          $ diff -u <archivo.original> <archivo.nuevo1> >
          <archivo.parche0>
          $ diff -u <archivo/original> <archivo/nuevo1> >
          <archivo.parche1>

     El archivo diff (llamado también parche) se utiliza para enviar
     actualizaciones de programas.  La parte recibida aplicará esta
     actualización a otro <archivo> mediante:

          $ patch -p0 <archivo> < <archivo.parche0>
          $ patch -p1 <archivo> < <archivo.parche1>

     Si tiene tres versiones del código fuente, puede combinarlos
     efectivamente usando `diff3':

          $ diff3 -m <archivo.mío> <archivo.original>
          <archivo.tuyo> > <archivo>

8.6.15. Convertir un archivo grande en archivos más pequeños
------------------------------------------------------------

          $ split -b 650m <archivo>   # dividir el archivo en partes de 650 MB
          $ cat x* ><archivo_grande>  # unir los archivos en un archivo grande

8.6.16. Extraer datos de una tabla contenida en un archivo de texto
-------------------------------------------------------------------

     Consideremos un archivo de texto llamado `DPL' en donde todos los
     nombres de los líderes del proyecto Debian y el día de su asunción
     están listados separados entre sí mediante espacios.

          Ian     Murdock   Agosto  1993
          Bruce   Perens    Abril   1996
          Ian     Jackson   Enero   1998
          Wichert Akkerman  Enero   1999
          Ben     Collins   Abril   2001
          Bdale   Garbee    Abril   2002
          Martin  Michlmayr Marzo   2003

     A menudo, se utiliza Awk para extraer datos de este tipo de archivos.

          $ awk '{ print $3 }' <DPL                   # mes de asunción
          August
          April
          January
          January
          April
          April
          March
          $ awk '($1=="Ian") { print }' <DPL          # DPL llamado Ian
          Ian     Murdock   Agosto  1993
          Ian     Jackson   Enero   1998
          $ awk '($2=="Perens") { print $3,$4 }' <DPL # Cuando Perens asumió
          Abril 1996

     Los intérpretes de comandos como el Bash pueden también utilizarse
     para analizar este tipo de archivo:

          $ while read primero último mes año; do
              echo $mes
            done <DPL
          ... la misma salida que en el primer ejemplo Awk

     En este caso, el comando incorporado `read' utililiza las caracteres
     de $IFS (separadores de campo internos, con sus siglas en inglés) para
     dividir líneas en palabras.

     Si cambian IFS a ":", puede analizar perfectamente el `/etc/passwd'
     con el shell:

          $ originalIFS="$IFS"   # guarda el valor original
          $ IFS=":"
          $ while read user password uid gid resto_de_la_línea; do
              if [ "$user" = "osamu" ]; then
                echo "el ID de $user es $uid"
              fi
            done < /etc/passwd
          El ID de osamu es 1001
          $ IFS="$originalIFS"   # devuelve valor anterior

     (Si utiliza Awk para hacer lo mismo, utilice `FS=":"' para configurar
     el separador de campo)

     IFS también es utilizado por el intérprete de comandos para dividir la
     espansión de parámetros, la sustitución de comandos y la expansión
     aritmética.  Esto no sucede con palabras entre comillas simples o
     dobles.  El valor predeterminado de IFS es <espacio>, <tab> y
     <nueva_línea> combinados.

     Sea cuidadoso al usar estos trucos con el IFS del intérprete de
     comandos.  Pueden ocurrir cosas extrañas cuando el shell interpreta
     parte de un script como si se fuese su _entrada_.

$ IFS=":,"                        # utiliza ":" y "," como IFS
$ echo IFS=$IFS,   IFS="$IFS"     # echo es un comando del Bash
IFS=  , IFS=:,
$ date -R                         # simplemente la salida de un comando
Sat, 23 Aug 2003 08:30:15 +0200
$ echo $(date -R)                 # subshell --> entrada al shell principal
Sat  23 Aug 2003 08 30 36 +0200
$ unset IFS                       # volver al IFS predeterminado
$ echo $(date -R)
Sat, 23 Aug 2003 08:30:50 +0200

8.6.17. Pequeños scripts que incluyen tuberías
----------------------------------------------

     Los siguientes scripts realizan tareas útiles utilizando tuberías.

find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local"
                     # encontrar todos los archivos en /usr
                     # excluyendo algunos archivos
xargs -n 1 <command>   # ejecutar comando para todos los ítems de la stdin
xargs -n 1 echo|     # escribir ítems separados por espacios en blanco
                     # en renglones
grep -e <patrón>|      # extraer líneas con un determinado
<patrón>
cut -d: -f3 -|       # extraer el tercer campo separado por :
                     # (archivo passwd, etc.)
awk '{ print $3 }' | # extraer el tercer campo separado por espacios en blanco
awk -F'\t' '{ print $3 }' |
       # extaer el tercer campo separado por tabulaciones
col -bx |            # eliminar retrocesos y convertir tabulaciones en
                     # espacios
expand -|            # transformar las tabulaciones
sort -u|             # ordenar y eliminar duplicados
tr '\n' ' '|         # concatenar líneas en una sola línea
tr '\r' ''|          # eliminar CR (retornos de carro)
tr 'A-Z' 'a-z'|      # convertir mayúsculas en minúsculas
sed 's/^/# /'|       # transformar cada línea en un comentario
sed 's/\<.ext>//g'|    # eliminar <.ext>
sed  -n -e 2p|       # mostrar la segunda línea
head -n 2 -|         # mostrar las primeras 2 líneas
tail -n 2 -|         # mostrar las últimas 2 líneas

8.6.18. Pequeños scripts para recorrer distintos archivos
---------------------------------------------------------

     Las siguientes maneras de recorrer distintos archivos que coincidan
     con `*.<ext>' asegura un correcto manejo de nombres de archivos
     extraños -como los que incluyen espacios- y realizan la misma tarea:

        * Bucle del shell (esta es una entrada de múltiples líneas con
          `PS2="> "') [1]:

               for <x> in *.<ext>; do
                 if test -f "$<x>"; then
                   <comando> "$<x>"
                 fi
               done

        * Combinación de `find' y `xargs':

               find . -type f -maxdepth 1 -name '*.<ext>' -print0 | \
                xargs -0 -n 1 <comando>

        * `find' con la opción `-exec' y un comando:

               find . -type f -maxdepth 1 -name '*.<ext>' \
                -exec <comando> '{}' \;

        * `find' con la opción `-exec' y un script de shell breve:

               find . -type f -maxdepth 1 -name '*.<ext>' \
                -exec sh -c "<comando> '{}' && echo 'exitoso'" \;

[1]  Si la escribe en una sóla línea, necesita añadir algunos punto y
     comas, "`;'", para marcar el final de los comandos del shell.

8.6.19. La locura de los script cortos en Perl
----------------------------------------------

     Aunque todos los scripts en Awk se pueden reescribir automáticamente
     en Perl usando a2p(1), los scripts Awk de una sola línea en Awk se
     convierten mejor en scripts en perl de una línea en forma manual.  Por
     ejemplo

          awk '($2=="1957") { print $3 }' |

     es equivalente a cualquiera de las siguientes líneas:

          perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |
          perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |
          perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |
          perl -lane 'print $F[2] if $F[1] eq "1957"' |

     Se pueden eliminar todos los espacios en los argumentos de `perl' de
     la línea anterior y tomar ventaja de la conversión automática entre
     números y cadena de caracteres que existe en Perl:

          perl -lane 'print$F[2]if$F[1]eq+1957' |

     Véase perlrun(1) para las opciones de la línea de comandos.  Para más
     scripts delirantes en Perl, puede resultar interesante
     http://perlgolf.sourceforge.net.

8.6.20. Obtener el texto de una página web o del archivo de una lista de
correos
----------------------------------------------------------------------------

     Lo siguiente leerá una página web como un archivo de texto.  Resulta
     muy útil cuando se desea copiar configuraciones que se obtienen de la
     red.

          $ lynx -dump http://<www.remote-site.com/help-info.html>
          ><archivo_de_texto>

     Aquí también se pueden usar `links' y `w3m', con ligeras diferencias
     en el renderizado.

     Si se trata de un archivo de una lista de correo, use `munpack' para
     obtener los contenidos mime del texto.

8.6.21. Impresión de una página web
-----------------------------------

     Lo siguiente imprimirá una página web en una impresora/archivo
     PostScript.

          $ apt-get install html2ps
          $ html2ps <URL> | lpr

     Véase Sección 3.6.1, ``lpr'/`lpd''.  También tenga en cuenta los
     paquetes `a2ps' y `mpage' para crear archivos PostScript.

8.6.22. Impresión de la página una página del manual
----------------------------------------------------

     Lo siguiente imprimirá una página manual en una impresora/archivo
     PostScript.

          $ man -Tps <alguna-página-del-manual> | lpr
          $ man -Tps <alguna-página-del-manual> | mpage -2 | lpr

8.6.23. Combinar dos archivos PostScript o PDF
----------------------------------------------

     Es posible combinar dos archivos PostScript o PDF.

          $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \
          -sOutputFile=<bla.ps> -f \
          <loquesea1.ps> <loquesea2.ps>
          $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
            -sOutputFile=<bla.pdf> -f <loquesea1.pdf>\
            <loquesea2.pdf>

8.6.24. El tiempo de un comando
-------------------------------

     Mostrar el tiempo empleado por un proceso.

          # time <algún-comando> >/dev/null
          real    0m0.035s       # tiempo de reloj (tiempo real transcurrido)
          user    0m0.000s       # tiempo en modo usuario
          sys     0m0.020s       # tiempo en modo kernel

8.6.25. El comando `nice'
-------------------------

     Use `nice' (del paquete GNU `shellutils') para fijar el valor "nice"
     de un comando al ejecutarlo.  `renice' (`bsdutils') y `top' puede
     modificar el valor "nice" de un proceso.  El proceso más lento tiene
     el valor 19 (prioridad más baja); los valores negativos son
     "not-nice".  El valor -20 lo tiene el proceso más veloz (prioridad
     alta).  Sólo el superusuario puede fijar valores "nice" negativos.

          # nice  -19 top                                         # muy lento
          # nice --20 cdrecord -v -eject speed=2 dev=0,0 disk.img # muy rápido

     A veces un valor extremo de nice hace más daño que bien al sistema.
     Utilice este comando con cuidado.

8.6.26. Planificar una actividad (`cron', `at')
-----------------------------------------------

     Use `cron' y `at' para planificar tareas en Linux.  Véase at(1),
     crontab(5), crontab(8).

     Ejecute el comando `crontab -e' para crear o editar el archivo crontab
     para configurar eventos planificados.  Ejemplo de un archivo crontab:

# utilice /bin/sh para ejecutar los comandos sin importar lo que dice el
# /etc/passwd
SHELL=/bin/sh
# envíe un mensaje a `pablo' sin importar a quien pertenece el crontab
MAILTO=pablo
# Minuto Hora Día_del_mes Mes Día_de_la_semana comando
# ejecutar todos los días a las 00:05
5  0  *  * *   $HOME/bin/tarea.diaria >> $HOME/tmp/salida 2>&1
# ejecutar a las 14:15 el primer día de cada mes -- enviar salida a Pablo
15 14 1  * *   $HOME/bin/mensual
# ejecutar a las 22:00 todos los días hábiles (1-5), molestar a José.
# % para nueva línea, el último % para cc:
0 22 *   * 1-5 mail -s "Son las 10 de la noche" josé%José:%%¿Dónde están
                        los chicos?%.%%
23 */2 1 2 *   echo "ejecutar el 1 de febrero a los 23 minutos después
                     de 0am, 2am, 4am ..."
5  4 *   * sun echo "ejecutar todos los domingos a las 04:05"
# ejecutar a las 03:40 el primer lunes de cada mes
40 3 1-7 * *   [ "$(date +%a)" == "Mon" ] && comando -args

     Ejecutar el comando `at' para planificar una tarea una sola vez:

          $ echo 'command -args'| at 3:40 monday

8.6.27. Intercambiando consolas con `screen'
--------------------------------------------

     El programa `screen' permite ejecutar _múltiples_ terminales
     virtuales, cada una con su intérprete de comandos interactivo, en una
     _única_ terminal física o ventana que emule un terminal.  Incluso si
     utiliza consolas virtuales Linux o múltiples ventanas `xterm', merece
     la pena experimentar con `screen' por sus _amplias funcionalidades_
     que incluye:
        * navegación por el histórico de comandos,
        * copiar y pegar,
        * registro de accesos al sistema,
        * entrada de caracteres especiales y
        * la capacidad de _separar_ una sesión entera de `screen' del
          terminal para recuperarla posteriormente.

8.6.27.1. Acceso remoto
-----------------------

     Si frecuentemente se conecta a una máquina Linux desde un terminal
     remoto o usando el terminal VT100, `screen' le facilitará muchísimo
     las cosas.

     1.   Supongamos que estamos conectado a la red mediante una conexión
          telefónica ejecutando una sesión compleja de `screen' con
          editores y otros programas abiertos en diversas ventanas.
     2.   De repente necesita abandonar su terminal, pero no deseamos
          perder nuestro trabajo al colgar la línea.
     3.   Simplemente teclee `^A d' para _separar_ las sesión y
          desconéctese (o aún más rápido, teclee `^A DD' para que `screen'
          se separe y se desconecte por sí misma)
     4.   Cuando se conecte nuevamente, escriba el comando `screen -r' y
          `screen' mágicamente automáticamente _recuperará_ todas las
          ventanas que había abierto.

8.6.27.2. Comandos de `screen' típicos
--------------------------------------

     Una vez que arranca `screen' toda la entrada de datos que se hace a
     través del teclado se envía a la ventana actual excepto la combinación
     de teclas de comando, por defecto `^A'.  Todos los comandos de
     `screen' se ingresan escribiendo `^A' seguido de una sola tecla [y
     eventualmente algunos parámetros].  Algunos comandos útiles:

^A ?     mostrar ventana de ayuda (muestra las asociaciones de teclas)
^A c     crear una nueva ventana y cambiar a ella
^A n     ir a la siguiente ventana
^A p     ir a la ventana anterior
^A 0     ir a la ventana número 0
^A w     mostrar la lista de ventanas
^A a     enviar un Ctrl-A a la ventana actual como entrada del teclado
^A h     grabar una copia de la ventana actual a un archivo
^A H     comenzar/finalizar la grabación de ventana actual en un archivo
^A ^X    bloquear la terminal (protegida con contraseña)
^A d     separar una sesión del terminal
^A DD    separar una sesión y salir

     Éste es sólo una pequeña muestra de los comandos y características de
     `screen'.  Si hay algo que desea que `screen' haga, ¡existe una gran
     posibilidad que pueda hacerlo!.  screen(1) para más detalles.

8.6.27.3. Tecla de retroceso y/o Ctrl-H en un sesión de `screen'
----------------------------------------------------------------

     Si comprueba que la tecla de retroceso y/o Ctrl-H no funciona
     correctamente cuando ejecuta `screen', edite el archivo
     `/etc/screenrc,' localice la línea

          bindkey -k kb stuff "\177"

     y coméntela (es decir, agréguele el carácter "#" al principio).

8.6.27.4. Programa para X equivalente a `screen'
------------------------------------------------

     Consulte `xmove'.  Véase xmove(1).

8.6.28. Probando la red
-----------------------

     Instale `netkit-ping', `traceroute', `dnsutils', `ipchains' (para el
     kernel 2.2), `iptables' (para el kernel 2.4 ) y el paquete
     `net-tools':

$ ping <yahoo.com> # verificar la conexión a Internet
$ traceroute yahoo.com      # rastrear paquetes IP
$ ifconfig                  # verificar la configuración del
                            # anfitrión (host)
$ route -n                  # verificar la configuración de la ruta
$ dig [@dns-server.com] host.dom [{a|mx|any}] |less
      # verificar registros host.dom DNS [@ dns-server.com] para
      # un registro <{a|mx|any}>
$ ichains  -L -n |less      # verificar filtrado de paquetes (kernel 2.2)
$ iptables -L -n |less      # verificar filtrado de paquetes (kernel 2.4)
$ netstat -a                # mostrar todos los puertos abiertos
$ netstat -l --inet         # mostrar los puertos en escucha
$ netstat -ln --tcp         # mostrar puertos tcp en escucha (numérico)

8.6.29. Eliminar mensajes de la cola local
------------------------------------------

     Para eliminar los mensajes de la cola local:

          # exim -q    # eliminar mensajes en espera
          # exim -qf   # eliminar todos los mensajes
          # exim -qff  # eliminar incluso mensajes bloqueados

     "-qff" puede resultar mejor para el script /etc/ppp/ip-up.d/exim.
     Para Sarge, reemplace `exim' con `exim4'.

8.6.30. Eliminar mensajes bloqueados de la cola local
-----------------------------------------------------

     Para eliminar mensajes de correo bloqueados de la cola local
     reenviando el mensaje de error:

          # exim -Mg `mailq | grep frozen | awk '{ print $3 }'`

     Para Sarge, reemplace `exim' por `exim4'

8.6.31. Redistribuir los contenidos de `mbox'
---------------------------------------------

     Si se llenó su directorio personal y `procmail' falló necesitará
     distribuir en forma manual sus mensajes de `/var/mail/<usuario>' a los
     buzones de correo situados en su directorio personal.  Luego de hacer
     espacio en el mismo, haga:

          # /etc/init.d/exim stop
          # formail -s procmail </var/mail/<usuario>
          # /etc/init.d/exim start

     Para Sarge, reemplace `exim' por `exim4'.

8.6.32. Borrar el contenido de un archivo
-----------------------------------------

     Para borrar el contenido de un archivo (un archivo log, por ej.) no
     utilice `rm' para eliminarlo y `mkdir' para crealo nuevamente, ya que
     el archivo puede estar siendo consultado en el intervalo comprendido
     entre la ejecución de ambos comandos.  Lo siguiente es la manera más
     segura de borrar el contenido de un archivo.

          $ :><archivo-a-eliminar>

8.6.33. Archivos fantasma
-------------------------

     Los siguientes comandos creará archivos fantasmas (archivos vacíos):

$ dd if=/dev/zero  of=<nombre_archivo> bs=1k count=5 # 5KB de
                                                              # contenido
                                                              # cero
$ dd if=/dev/urandom of=<nombre_archivo> bs=1m count=7 # 7MB de
                                                                # contenido
                                                                # al azar
$ touch <nombre_archivo>  # crear un archivo de 0B (si el archivo
                                   # existe actualizar mtime)

     Por ejemplo, los siguientes comandos ejecutados desde el shell de un
     disco de arranque Debian borrará íntegramente el contenido del disco
     duro `/dev/hda'.

          # dd if=/dev/urandom of=/dev/hda ; dd if=/dev/zero of=/dev/hda

8.6.34. `chroot'
----------------

     El programa `chroot', chroot(8), nos permite ejecutar diferentes
     instancias de un entorno GNU/Linux en un único sistema,
     simultáneamente y sin reiniciar.

     Asimismo, uno puede ejecutar un programa que insuma gran cantidad de
     recursos (por ejemplo, `apt-get' o `dselect') bajo el chroot de una
     máquina anfitrión veloz, montando en ella una máquina auxiliar lenta
     (máquina satélite) mediante NFS en modo lectura/escritura, siendo el
     punto de montaje el directorio chroot.

8.6.34.1. Ejecutar distintas versiones de Debian mediante `chroot'
------------------------------------------------------------------

     Un entorno chroot Debian se puede crear en Woody fácilmente mediante
     el comando `debootstrap'.  Por ejemplo, para crear un chroot Sid en
     </sid-root> con una conexión de Internet rápida:

          main # cd / ; mkdir </sid-root>
          main # debootstrap sid </sid-root> <http://ftp.debian.org/debian/>
          ... observe descargar todo el sistema
          main # echo "proc-sid </sid-root>/proc proc none 0 0" >> /etc/fstab
          main # mount proc-sid </sid-root>/proc -t proc
          main # cp /etc/hosts </sid-root>/etc/hosts
          main # chroot </sid-root> /bin/bash
          chroot # apt-setup # configurar /etc/apt/sources.list
          chroot # vi /etc/apt/sources.list # apuntar a la rama inestable
          chroot # dselect  # puede usar aptitude, instalar mc y vim :-)

     A esta altura, debería tener un sistema Debian totalmente funcional,
     donde podrá jugar sin temor de afectar su instalación Debian
     principal.

     Este truco con `debootstrap' se puede utilizar para instalar Debian en
     un sistema sin usar Debian install disk but using one for another
     GNU/Linux distribution.  Véase
     http://www.debian.org/releases/stable/i386/ch-preparing#s-linux-upgrade.

8.6.34.2. Configurar el acceso para `chroot'
--------------------------------------------

     Escribir `chroot </sid-root> /bin/bash' es fácil, pero conserva toda
     clase de variables de entorno que quizás no desee y acarrea otros
     problemas.  Un mejor enfoque consiste en ejecutar otro proceso login
     en una terminal virtual aparte donde pueda entrar al sistema chroot
     directamente.

     Puesto que, en los sistemas Debian predeterminados, las consolas Linux
     se ejecutan desde `tty1' hasta `tty6' y el sistema X Window se ejecuta
     en `tty7', configuremos, como ejemplo, una consola chroot en `tty8'.
     Luego de crear un sistema chroot como se explicó en Sección 8.6.34.1,
     `Ejecutar distintas versiones de Debian mediante `chroot'', escriba
     desde el shell del superusuario en el sistema principal:

          main # echo "8:23:respawn:/usr/sbin/chroot </sid-root> "\
                 "/sbin/getty 38400 tty8"  >> /etc/inittab
          main # init q    # vuelve a cargar init

8.6.34.3. Configurando X para `chroot'
--------------------------------------

     ¿Desea ejecutar la última versión de X y Gnome en forma segura en su
     chroot?  ¡Es perfectamente posible!  El siguiente ejemplo hará que GDM
     se ejecute en un terminal virtual `vt9'.

     Primero instale el sistema chroot usando el método descripto en
     Sección 8.6.34.1, `Ejecutar distintas versiones de Debian mediante
     `chroot''.  Siendo superusuario en el sistema principal, copie los
     archivos de configuración claves en el sistema chroot.

main # cp /etc/X11/XF86Config-4 </sid-root>/etc/X11/XF86Config-4
main # chroot </sid-root> # o utilice la consola chroot
chroot # apt-get install gdm gnome x-window-system
chroot # vi /etc/gdm/gdm.conf # haga s/vt7/vt9/ en la sección [servers]
chroot # /etc/init.d/gdm start

     En este caso, se editó `/etc/gdm/gdm.conf' para que la consola virtual
     inicial sea `vt9' en vez de `vt7'.

     A partir de ahora, puede fácilmente alternar entre el entorno X del
     chroot y su sistema principal simplemente cambiando de terminal
     virtual; por ejemplo, usando Ctrl-Alt-F7 y Ctrl-Alt-F9.  ¡Que se
     diviertan!

     [FIXME] Añadir un comentario y enlace al script init del `gdm' del
     chroot.

8.6.34.4. Ejecutar otra distribución con `chroot'
-------------------------------------------------

     Se puede crear fácilmente un entorno chroot para otra distribución
     Linux.  Instale un sistema en una partición aparte usando el
     instalador de otra distribución.  Si su partición raíz se encuentra en
     `</dev/hda9>':

          main # cd / ; mkdir </otra-dist>
          main # mount -t ext3 </dev/hda9> </otra-dist>
          main # chroot </otra-dist> /bin/bash

     Luego proceda como en Sección 8.6.34.1, `Ejecutar distintas versiones
     de Debian mediante `chroot'', Sección 8.6.34.2, `Configurar el acceso
     para `chroot'' y Sección 8.6.34.3, `Configurando X para `chroot''.

8.6.34.5. Compilar un paquete con `chroot'
------------------------------------------

     Existe un paquete chroot más sofisticado, `pbuilder', que crea un
     sistema chroot y compila un paquete dentro de él.  Es un sistema ideal
     para verificar que las dependencias de compilación de un paquete sean
     correctas y para estar seguros que no existan dependencias
     innecesarias o erróneas en el paquete resultante.

8.6.35. Cómo verificar los enlaces duros
----------------------------------------

     Puede ver si dos archivos son uno solo con dos enlaces duros,
     haciendo:

          $ ls -li <archivo1> <archivo2>

8.6.36. Montar una imagen del disco duro
----------------------------------------

     Si `<archivo.img>' contiene una imagen de los contenidos de un disco
     duro y el disco original tenía una configuración <xxxx> =
     (bytes/sector) * (sectores/cilindro), entonces lo siguiente la montará
     en `/mnt':

          # mount -o loop,offset=<xxxx> <archivo.img> /mnt

     Obsérvese que la mayoría de los discos duros tienen 512 bytes/sector.

8.6.37. Samba
-------------

     Lo básico para obtener archivos desde Windows:

          # mount -t smbfs -o <username=mi_nombre,uid=mi_uid,gid=mi_gid> \
              <//server/share /mnt/smb>  # monta un directorio Windows en Linux
          # smbmount <//server/share /mnt/smb> \
            -o "<username=mi_nombre,uid=mi_uid,gid=mi_gid>"
          # smbclient -L <192.168.1.2> # lista los archivos compartidos de una
                                                # máquina

     Los vecinos de Samba se pueden localizar desde Linux haciendo:

          # smbclient -N -L <dirección_ip_de_su_PC> | less
          # nmblookup -T "*"

8.6.38. Utilidades para otros sistemas de archivos
--------------------------------------------------

     El kernel de Linux soporta diversos sistemas de archivos.  Por lo
     tanto, se puede acceder a ellos montando los dispositivos que los
     contienen.  Para determinados sistemas de archivos, existen algunas
     herramientas especializadas para acceder a ellos sin tener que montar
     los correspondientes dispositivos.  Estas operaciones se realizan por
     programas del espacio del usuario, con lo cual no se necesita el
     soporte de sistemas de archivos del kernel.
        * `mtools': para sistemas de archivos MSDOS (MS-DOS, Windows)
        * `cpmtools': para sistemas de archivos CP-M
        * `hfsutils': para sistemas de archivos HFS (Macintosh nativo)
        * `hfsplus': para sistema de archivos HFS+ (Macintosh moderno)
     `dosfstools' resulta útil para crear y verificar sistemas de archivos
     FAT MS-DOS..


8.7. Errores típicos a tener presente
-------------------------------------

     Veamos algunos ejemplos de acciones peligrosas.  El impacto negativo
     será mayor si utiliza la cuenta con privilegios de `superusuario'.

8.7.1. `rm -rf .*'
------------------

     En "`rm -rf .*'", el "`.*'" se expande para incluir "`.'" y "`..'", y
     si por casualidad tiene privilegios para escribir en el directorio
     padre, terminará por eliminar todos los directorios _next_ to your
     current directory as well.

        * "`rm -rf .'" : borra todo lo que se encuentra en el directorio
          actual incluyendo el propio directorio.
        * "`rm -rf *'" : borra todos los archivos y directorios del
          directorio actual (excluyendo los que comienzan con un punto)
        * "`rm -rf .[^.]*'" : borra todos los archivos punto y los
          directorios normales del directorio actual.
        * "`rm -rf .*'" : borra todo del directorio padre y al propio
          directorio.

8.7.2. `rm /etc/passwd'
-----------------------

     Es difícil la pérdida de algunos archivos importantes como
     `/etc/passwd' por descuido.  El sistema Debian realiza copias de
     seguridad regulares de ellos en `/var/backups/'.  Al restaurar estos
     archivos, tiene que configurar manualmente los permisos adecuados.

          # cp /var/backups/passwd /etc/passwd
          # chmod 644 /etc/passwd

     Véase también Sección 6.3.4, `Recuperar los datos de la selección de
     paquetes'.


-------------------------------------------------------------------------------


9. Puesta a punto del sistema Debian
------------------------------------

     Este capítulo describe solamente lo básico de la configuración del
     sistema mediante interfaces basada en textos.  Como prerrequisito de
     este capítulo léase Capítulo 3, `Consejos para la instalación de un
     sistema Debian'.

     Para aquellos interesados en la seguridad, es altamente recomendables
     leer Securing Debian Manual
     (http://www.debian.org/doc/manuals/securing-debian-howto/) que se
     también se puede encontrar en el paquete `harden-doc'.


9.1. Trucos para la inicialización del sistema
----------------------------------------------

     Véase Sección 2.4.1, `El programa `init'' para los fundamentos del
     script init de Debian.

9.1.1. Personalizando los scripts init
--------------------------------------

     Debian utiliza el sistema de scripts sys-V.  Aunque todos los scripts
     init en `/etc/init.d/*' están marcados como archivos de configuración
     y el administrador del sistema tiene la libertad de modificarlos, es
     preferible personalizarlos editando los archivos `/etc/default/*'.

     Por ejemplo, `/etc/init.d/rcS' se puede usar para personalizar los
     valores predeterminados de arranque de `motd', `sulogin', etc.

9.1.2. Personalizando el sistema de registro
--------------------------------------------

     El modo de registro del sistema se puede configurar usando
     `/etc/syslog.conf'.  Utilice el paquete `colorize' para dar distintos
     colores a los archivos de registro del sistema.  Véase también
     syslogd(8) y syslog.conf(5).

9.1.3. Optimización del acceso al hardware
------------------------------------------

     Existen algunas pocas configuraciones de optimización del hardware que
     Debian deja a cargo del administrador del sistema.

        * `hdparm'
             * Optimización del acceso al disco.  Muy efectivo.
             * Peligroso.  Primero debe leer hdparm(8).
             * `hdparm -tT </dev/hda>' to test disk access speed.
             * `hdparm -c1 -d1 -u1 -m16 -A </dev/hda>' para acelerar un
               sistema IDE moderno (puede resultar peligroso).

        * `setcd'
             * Optimización del acceso a la unidad de CDs.
             * `setcd -x <2>' para disminuir la velocidad a <2>x.
             * Véase setcd(1).

        * `setserial'
             * Conjunto de herramienta para la administración del puerto
               serie.

        * `scsitools'
             * Conjunto de herramientas para la administración de hardware
               SCSI.

        * `memtest86'
             * Conjunto de herramientas para la administración de la
               memoria.

        * `hwtools'
             * Conjunto de herramientas para la administración de hardware
               de bajo nivel.
                  * irqtune: modifica la prioridad del IRQ de los
                    dispositivos para que aquellos que requieran de una
                    prioridad alta y un servicio rápido lo puedan conseguir
                    (por ejemplo, puertos serie, módems) Es posible
                    incrementar el rendimiento de un módem/puerto serie en
                    un factor 3X.
                  * scanport: analiza el espacio I/O de 0x100 a 0x3ff
                    buscando dispositivos ISA instalados.
                  * inb: un pequeño programa que lee un puerto I/O y vuelca
                    el valor en hexadecimal o binario.

        * `schedutils'
             * Utilidades de planificación de Linux.
             * se incluyen `taskset', `irqset', `lsrt', y `rt'.
             * Junto con `nice' y `renice' (no incluídos), permiten el
               control absoluto de los parámetros de la planificación de
               procesos.

     También resulta muy efectivo montar un sistema de archivos con la
     opción noatime para incrementar el acceso de lectura a los archivos.
     Véase fstab(5) y mount(8).

     Algunos dispositivos se pueden poner a punto directamente mediante el
     kernel de Linux por medio del sistema de archivos proc.  Véase Sección
     7.3, `Poniendo a punto al kernel mediante el sistema de archivos
     proc'.

     Existen diversas utilidades para la configuración de hardware
     específico en Debian.  La mayoría de ellas tienen en cuenta los
     requerimientos específicos de las PC portátiles.  Veamos algunos
     paquetes interesantes en Derbian:
        * `tpconfig' - Programa para configurar el touch pad
        * `apmd' - Utilidades para la Administración Avanzada de Energía
          (APM)
        * `acpi' - Muestra información sobre dispositivos ACPI
        * `acpid' - Utilidades para usar ACPI
        * `lphdisk' - Prepara una partición para hibernación para Phoenix
          NoteBIOS
        * `sleepd' - Hace "dormir" una portátil durante su inactividad.
        * `noflushd' - Permite disminuir la velocidad de rotación de los
          discos duros ociosos
        * `big-cursor' - Cursores del ratón más grandes para X
        * `acme' - Activa las "teclas multimedias" de los ordenadores
          portátiles
        * `tpctl' - Herramientas de configuración de hardware para la IBM
          ThinkPad
        * `mwavem' - Soporte del módem Mwave/ACP
        * `toshset' - Acceso a la mayoría de la interfaz de hardware de la
          pc portátil Toshiba
        * `toshutils' - Utilidades para la pc portátil Toshiba
        * `sjog' - Un programa para usar el "Jog Dial" de las pc portátiles
          Sony Vaio
        * `spicctrl' - Programa para configurar el brillo de fondo de la
          pantalla LCD de la Sony Vaio
     ACPI es un estándar para la administración de la energía del sistema
     más nuevo que APM.

     Algunos de estos paquetes necesitan módulos especiales del kernel.  En
     muchos casos ya han sido incluido en las últimas funentes del mismo.
     En caso de problemas, puede aplicar el último parche para el kernel
     por su propia cuenta.


9.2. Control de acceso
----------------------

9.2.1. Control de acceso mediante PAM y login
---------------------------------------------

     PAM (Módulos de Autenticación Conectables, con sus siglas en inglés)
     proporciona el control del acceso.

/etc/pam.d/*             # archivos de control de PAM
/etc/pam.d/login         # archivo de control PAM para el acceso
/etc/security/*          # parámetros del módulo de PAM
/etc/securetty           # controla el acceso del superusuario en consola (login)
/etc/login.defs          # controla el comportamiento de login

     Si desea acceder a consolas sin necesidad de contraseña modifique,
     bajo su entera responsabilidad, el contenido del archivo
     `/etc/pam.d/login' de la siguiente manera

          #auth       required   pam_unix.so nullok
          auth       required   pam_permit.so

     Un truco similar se puede aplicar para `xdm', `gdm', ...  , para
     conseguir una consola X sin contraseña.

     Por otra parte, si desea reforzar su política de contraseñas, instale
     `cracklib2' y añada lo siguiente a su `/etc/pam.d/passwd'.

          password required       pam_cracklib.so retry=3 minlen=6 difok=3

     Para la activación de una cuenta puede ayudar una contraseña
     temporaria.  Para ello, use el comando passwd con la opción `-e'
     passwd(1).

     En bash se puede configurar el número máximo de procesos con `ulimit
     -u 1000' o desde PAM con la configuración de
     `/etc/security/limits.conf'.  De igual manera se pueden configurar
     otros parámetros como, por ejemplo, `core'.  El valor inicial de
     `PATH' se puede fijar mediante el archivo `/etc/login.defs' antes de
     script de arranque del shell.

     La documentación de PAM se encuentra en el paquete `libpam-doc'.  La
     Guía del Administrador de un Sistema Linux-PAM explica la
     configuración de PAM, los módulos que hay disponibles, etc.  La
     documentación también incluye la Guía para Desarrolladores de
     Aplicaciones Linux-PAM y la Guía de Desarrolladores de Módulos
     Linux-PAM.

9.2.2. "Por qué el `su' GNU no soporta el grupo `wheel'"
--------------------------------------------------------

     Esta es la famosa frase de Richard M.  Stallman al final de la antigua
     página info de `su'.  No se preocupe: el `su' actual en Debian utiliza
     PAM, de modo que uno puede restringir la posibilidad de usar `su' a
     cualquier grupo usando `pam_wheel.so' en `/etc/pam.d/su'.  Lo
     siguiente configurará al grupo `adm' en un sistema Debian en forma
     equivalente al grupo BSD `wheel' y permitirá a sus miembros hacer `su'
     sin contraseña.

          # configuración anti-RMS en /etc/pam.d/su
          auth       required   pam_wheel.so group=adm
          
          # permitir a los miembros de wheel hacer su sin contraseña
          auth       sufficient pam_wheel.so trust group=adm

9.2.3. Significado de los distitos grupos
-----------------------------------------

     Algunos grupos interesantes:
        * el grupo `root' es el grupo wheel predeterminado para `su' si se
          usa `pam_wheel.so' sin el argumento `group='.
        * el grupo `adm' puede leer los archivos de registro.
        * el grupo `cdrom' se puede usar en forma local para dar a un
          conjunto de usuarios acceso a la unidad de CD.
        * el grupo `floppy' se puede usar en forma local para dar a un
          conjunto de usuarios acceso a la unidad de disquete.
        * el grupo `audio' se puede usar en forma local para dar a un
          conjunto de usuarios acceso al dispositivo de audio.
        * el grupo `src' administra el código fuente, incluyendo los
          archivos de `/usr/src'.  Se puede usar localmente para dar a un
          usuario la posibilidad de administrar el código fuente del
          sistema.
        * el grupo `staff' es útil para administradores de sistemas junior,
          dándoles la posibilidad de hacer cosas en `/usr/local' y crear
          directorios en `/home'.

     Para una lista completa, véase la sección "FAQ" en el Securing Debian
     Manual (http://www.debian.org/doc/manuals/securing-debian-howto/), que
     también se puede encontrar en el paquete `harden-doc'.

9.2.4. `sudo' -- un entorno de trabajo más seguro
-------------------------------------------------

     Utilizo `sudo' principalmente como protección contra mi propia
     estupidez.  Considero que usar `sudo' es una mejor alternativa que
     usar el sistema siendo superusuario.  YMMV.

     Instale `sudo' y actívelo configurando /etc/sudoers
     (http://www.debian.org/doc/manuals/debian-reference/examples/).
     También consulte las posibilidades de `sudo' para los grupos en
     `/usr/share/doc/sudo/OPTIONS'.

     La configuración de ejemplo brinda a los miembros del grupo "staff" el
     acceso a todos los comandos ejecutados como superusuario bajo `sudo' y
     también proporciona a los miembros del grupo "src" a determinados
     comandos ejecutados como superusuario bajo `sudo'.

     La ventaja de `sudo' radica en que sólo requiere de la contraseña de
     un usuario normal y que su actividad es monitoreada.  Esta es una
     buena manera de dar cierta autoridad a un administrador principiante.
     Por ejemplo:

          $ sudo chown -R <yo_mismo>:<mi_grupo> .

     Por supuesto, si conoce la contraseña de superusuario (como la mayoría
     de los usuarios domésticos), cualquier comando se puede ejecutar como
     superusuario desde una cuenta de usuario normal:

          $ su -c "shutdown -h now"
          Password:

     (Soy conciente que debería limitar los privilegios de la cuenta del
     administrador con `sudo'.  Pero puesto que se trata de mi servidor
     personal, aún no me he molestado en hacerlo)

     Otro programa que permite a los usuarios normales ejecutar comandos
     con privilegios de superusuario, véase el paquete `super'.

9.2.5. Control de accesos a los demonios
----------------------------------------

     El _superservidor_ de Internet, `inetd', es ejecutado durante el
     arranque por `/etc/rc2.d/S20inetd' (para el nivel de ejecución 2), que
     es un enlace simbólico a `/etc/init.d/inetd'.  Básicamente, `inetd'
     permite ejecutar un único demonio para invocar otros, reduciendo la
     carga del sistema.

     Cada vez que llega la petición a un servicio, se identifica el
     protocolo y el servicio mirando las bases de datos situadas en
     `/etc/protocols' y `/etc/services'.  Para un servicio de internet
     normal, `inetd'l consulta la base de datos `/etc/inetd.conf' o la si
     el servicio se basa en Sun-RPC.

     Para seguridad del sistema, asegúrese desactivar los servicios sin
     utilizar del archivo `/etc/inetd.conf'.  Los servicios Sun-RPC
     necesitan estar activos para NFS y otros programas basados en RPC.

     A veces, `inetd' no arranca el servidor solicitado directamente sino
     el programa envoltorio del demonio TCP/IP `tcpd' con el nombre del
     servidor pedido como argumento en el `/etc/inetd.conf'.  En este caso,
     `tcpd' ejecuta el programa servidor adecuado luego de haber registrado
     la solicitud y haber realizado algunas comprobaciones adicionales
     usando `/etc/hosts.deny' y `/etc/hosts.allow'.

     Si tiene problemas con el acceso remoto sobre un sistema Debian
     reciente, comente la línea "ALL: PARANOID" si es que existe en el
     archivo `/etc/hosts.deny'.

     Para más detalles, consulte inetd(8), inetd.conf(5), protocols(5),
     services(5), tcpd(8), hosts_access(5) y hosts_options(5).

     Para más información sobre Sun-RPC, véase rpcinfo(8) , portmap(8) y
     `/usr/share/doc/portmap/portmapper.txt.gz'.

9.2.6. Lightweight Directory Access Protocol
--------------------------------------------

     Referencias:
        * OpenLDAP (http://www.openldap.org/)
        * OpenLDAP Admin Guide del paquete `openldap-guide'
        * LDP: LDAP Linux HOWTO
          (http://www.tldp.org/HOWTO/LDAP-HOWTO/index.html)
        * LDP: Implementación de LDAP HOWTO
          (http://www.tldp.org/HOWTO/LDAP-Implementation-HOWTO/index.html)
        * OpenLDAP, uso de informes
          (http://portal.aphroland.org/~aphro/ldap-docs/ldap.html)
        * Open LDAP con IMAP y Postfix
          (http://alinux.washcoll.edu/docs/plc/postfix-courier-howto.html)


9.3. Grabadora de CDs
---------------------

     Las grabadoras de CDs con interfaz IDE/ATAPI se han convertido en
     periféricos muy populares.  Es un medio conveniente para un usuario
     doméstico que necesite < 640 MB de capacidad para hacer copias de
     respaldos o archivar documentos.  Para información más autorizada,
     consulte el CD-Writing-HOWTO
     (http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html) del LDP.

9.3.1. Introducción
-------------------

     Antes que todo, cualquier interrupción de los datos enviados a la
     grabadora provocará un daño irreparable al CD.  Consiga una grabadora
     con un búfer tan grande como le sea posible.  Si el dinero no es
     importante, no se moleste con una grabadora IDE/ATAPI y adquiera una
     SCSI.  Si tiene la posibilidad de elegir la interfaz IDE a la cual va
     a conectar la grabadora, prefiera el bus PCI antes que el ISA (tarjeta
     SB16, etc.).

     Cuando una grabadora de CDs se conecta al canal IDE, debe utilizarse
     el controlador IDE-SCSI en vez del IDE común.  Asimismo, es necesario
     activar el controlador genérico SCSI.  Suponiendo la utilización de un
     kernel usado por las distribuciones modernas (posteriores a marzo del
     2001), existen dos formas posibles de hacerlo.

9.3.2. Primer enfoque: módulos + `lilo'
---------------------------------------

     Añada la siguiente línea al `/etc/lilo.conf' si utiliza el núcleo que
     distribuye Debian.  Si utiliza múltiples opciones, lístelas separadas
     mediante espacios:

          append="hdx=ide-scsi ignore=hdx"

     Aquí la ubicación de la grabadora, a la que se accede mediante el
     controlador ide-scsi, se indica mediante `hdx' con el siguiente
     significado:

          hda          maestro en el primer puerto IDE
          hdb          esclavo en el primer puerto IDE
          hdc          maestro en el segundo puerto IDE
          hdd          esclavo en el segundo puerto IDE
          hde ... hdh  para una unidad en un puerto IDE externo o
                       puerto IDE ATA66/100

     Siendo superusuario, escriba los siguientes comandos para activar las
     opciones luego de haber terminado con la configuración:

          # lilo
          # shutdown -h now

9.3.3. Segundo enfoque 2: recompile el kernel
---------------------------------------------

     Para crear el kernel, Debian utiliza `make-kpkg'.  Use la nueva opción
     `--append_to_version' de make-kpkg para crear múltiples imágenes del
     kernel.  Veáse Capítulo 7, `El kernel de Linux en Debian'.

     Utilice la siguiente configuración con `make menuconfig':

        * bzImage

        * Excluir el controlador CD IDE (no es fundamental, pero simplifica
          las cosas)

        * Compilar ide-scsi y sg, o compílelos como módulos.

9.3.4. Etapas post-configuración
--------------------------------

     El soporte para la grabadora se puede activar durante el arranque
     mediante lo siguiente:

          # echo ide-scsi >>/etc/modules
          # echo sg       >>/etc/modules
          # cd /dev; ln -sf scd0 cdrom

     La activación manual se puede realizar haciendo:

          # modprobe ide-scsi
          # modprobe sg

     Tras el arranque, puede comprobar la instalación haciendo:

          $ dmesg|less
          # apt-get install cdrecord
          # cdrecord -scanbus

     [Por Warren Dodge] A veces, pueden existir conflictos entre `ide-scsi'
     y `ide-cd' si el sistema cuenta con una lectora de CD y una grabadora.
     Pruebe añadir la siguiente línea a su `/etc/modutils/aliases', ejecute
     `update-modules' y vuelva a arrancar el sistema.

          pre-install      ide-scsi      modprobe ide-cd

     Esto hará que el controlador IDE se cargue antes que el `ide-scsi'.
     El controlador IDE `ide-cd' tomará el control de la lectora de CD ---
     de todo lo que no se le pidió _ignorar_.  Esto deja únicamente a los
     dispositivos no tenidos en cuenta bajo el control del `ide-scsi'.

9.3.5. Imagen en CD (arrancable)
--------------------------------

     Para grabar un CD-ROM con los archivos contenidos en el
     `directorio-objetivo/' como `imagen-cd.raw' (arrancable, con formato
     Joliet TRANS.TBL activado; para un CD no arrancable, no incluir las
     opciones `-b' y `-c'), inserte un disquete de arranque en la primera
     unidad de disquetes y haga:

          # dd if=</dev/fd0> <directorio-objetivo/boot.img>
          # mkisofs -r -V <volume_id> -b <boot.img> -c \
                  <bootcatalog> -J -T -o <imagen-cd.raw>\
                  <directorio-objetivo/>

     Como aplicación interesante se puede crear un CD-ROM DOS de arranque.
     Si `<boot.img>' contiene la imagen de un disquete de arranque DOS, el
     CD-ROM arrancará como si hubiese un disquete DOS en la unidad (A:).
     Hacer esto con freeDOS puede ser aún más interesante.

     El archivo imagen se puede inspeccionar montándolo en un dispositivo
     loop.

          # mount -t iso9660 -o ro,loop <imagen-cd.raw> /cdrom
          # cd /cdrom
          # mc
          # umount /cdrom

9.3.6. Grabar un CD (R, R/W):
-----------------------------

     Primero pruebe con (suponiendo una velocidad 2x)

          # nice --10 cdrecord -dummy speed=2 dev=0,0 <imagen>

     Si no hay problemas, grabe el CD-R haciendo

          # nice --10 cdrecord -v -eject speed=2 dev=0,0 <imagen>

     O grabe un CD-RW mediante

          # nice --10 cdrecord -v -eject blank=fast speed=2 dev=0,0 <imagen>

     Algunas grabadoras de CD funcionan mejor con

          # nice --10 cdrecord -v blank=all speed=2 dev=0,0

     seguido de

          # nice --10 cdrecord -v -eject speed=2 dev=0,0 <imagen>

     Se necesitan dos etapas para evitar que los tiempos de espera durante
     la etapa de formateo no interfieran con la etadpa de grabación.  El
     valor del argumento de `nice' puede requerir de algunos ajustes.

9.3.7. Crear la imagen de un CD
-------------------------------

     Algunos CD-Rs y CDs comerciales tienen sectores parásitos al final que
     torna imposible su copia mediante `dd' (el CD de Windows 98 es uno de
     ellos).  El paquete `cdrecord' viene con el comando `readcd'.
     Utilícelo para copiar el contenido de cualquier CD en un archivo
     imagen.  Si se trata de un disco de datos, móntelo y use `du' para ver
     su tamaño verdadero.  Divida por dos el número que se muestra (en
     bloques, = 1024 bytes) para obtener el número de sectores del CD (2048
     bytes).  Ejecute `readcd' con las opciones correspondientes y utilice
     la imagen para grabar el CD-R/RW.

          # readcd <target> <lun> <scsibusno> # elija la función 11

     En la mayoría de los casos, elija aquí los 3 parámetros de la línea de
     comandos iguales a cero.  A veces, el números de sectores
     proporcionado por `readcd' es demasiado grande.  Utilice el valor dado
     por mount para obtener mejores resultados.

     It should be noted that the use of `dd' has few problems if used on
     CD-ROM.  The first run of `dd' command may cause error message and may
     yield a shorter disk image with the lost tail-end.  The second run of
     `dd' command may yield a larger disk image with garbage data attached
     at the end on some systems if the data size is not specified.  Only
     the second run of `dd' command with the correct data size specified
     without ejecting CD after error message seems to avoid these problems.
     If the image size displayed by `df' is `46301184' blocks , use the
     following command twice to get right image (this is my empirical
     information):

          # dd if=/dev/cdrom of=cd.img bs=2048 count=$((46301184/2))

9.3.8. Imágenes de CD Debian
----------------------------

     Para obtener la información más actual sobre los CDs de Debian, visite
     el sitio de CDs Debian (http://www.debian.org/CD/).

     Si posee una conexión de Internet veloz, considere realizar la
     instalación a través de la red usando:
        * algunas imágenes en disquetes
          (http://www.debian.org/distrib/floppyinst).
        * una imagen de CD mínima (http://www.debian.org/CD/netinst/).

     Si no posee una conexión de Internet veloz, considere adquirir los CDs
     de los distribuidores de CDs (http://www.debian.org/CD/vendors/).

     Por favor no desperdicie ancho de banda descargando las imágenes de
     los CDs estándar a menos que sea un tester de imágenes de CDs (incluso
     con el nuevo método jigdo).

     Una imagen de CD que vale la pena mencionar es KNOPPIX - Sistema de
     archivos Linux en CD (http://www.knopper.net/knoppix/index-en.html).
     Este CD arrancará un sistema Debian funcional sin instalarlo en el
     disco duro.

9.3.9. Hacer una copia de respaldo del sistema en un CD-R
---------------------------------------------------------

     Para copiar los archivos de configuración y datos importantes a un
     CD-R, use el script de ejemplo backup
     (http://www.debian.org/doc/manuals/debian-reference/examples/).
     También véase Sección 8.4, `Respaldos diferenciales y sincronización
     de datos'.

9.3.10. Grabar un CD de música a un CD-R
----------------------------------------

     No he comprobado lo siguiente personalmente:

          # apt-get install cdrecord cdparanoia
          # cdparanoia -s -B
          # cdrecord dev=0,0,0 speed=2 -v -dao -eject defpregap=1 -audio *.wav

     o

# apt-get install cdrdao #sin multisesión
# cdrdao read-cd --device /dev/cdrom --paranoia-mode 3 mi_cd # leer el CD
# cdrdao write --device /dev/cdrom --speed 8 mi_cd    # grabar un CD nuevo

     `cdrdao' realiza una copia verdadera (sin interrupciones, etc...)


9.4. El programa X
------------------

     El entorno X es proporcionado por Xfree86 (http://www.xfree86.org/).
     Existen 2 versiones del servidor X disponibles en un sistema Debian:
     V3.x y V4.x.  Xfree86 Version 3.3 (XF3) and XFree86 Version 4.x series
     (XF4) both based on X11R6 specifications by X.ORG (http://www.x.org/).

     Para los fundamentos de a X(7), al XWindow-User-HOWTO
     (http://www.tldp.org/HOWTO/XWindow-User-HOWTO.html) del LDP y el
     Remote X Apps mini-HOWTO
     (http://www.tldp.org/HOWTO/mini/Remote-X-Apps.html).  Para una guía
     específica para el usuario Debian, lea la
     `/usr/share/doc/xfree86-common/FAQ.gz' proporcionada por el paquete
     `xfree86-common'.  Ésta contiene un análisis autorizado e interesante
     de Branden Robinson de temas relacionados con combinaciones de teclas.

     Sección 9.4.3, `El servidor X'
          un programa en la máquina local que muestra una ventana X y/o un
          escritorio en el monitor del usuario (CRT, LCD) y acepta la
          entrada del teclado y del ratón.

     Sección 9.4.4, `El cliente X'
          un programa en una máquina (local o remota) que ejecuta una
          aplicación compatible con X-Window.

     Esto invierte el significado de los términos "servidor" y "cliente"
     usado en otros contextos.

     Existen distintas maneras de lograr que el "servidor X" acepte
     conexiones remotas de un "cliente X":

        * `xhost'
             * el mecanismo de la lista de hosts (muy inseguro).
             * protocolo sin cifrado (propenso a ataques de intervención de
               línea telefónica).
             * En lo posible, no la utilice.
             * Véase Sección 9.4.7, `Conexión X remota: `xhost'' y
               xhost(1x).

        * `xauth'
             * el mecanismo de la cookie mágica del MIT (inseguro pero
               mejor que `xhost').
             * protocolo sin cifrado (propenso a ataques de intervención de
               línea telefónica).
             * utilícelo únicamente en una conexión local ya que requiere
               menos CPU que `ssh -X'.
             * Véase Sección 9.4.11, `Adquirir privilegios de superusuario
               en X' y xauth(1x).

        * `xdm', `wdm', `gdm', `kdm', ...métodos:
             * el mecanismo de la cookie mágica del MIT (inseguro al igual
               que `xauth').
             * Véase xdm(1x) y Xsecurity(7) para los fundamentos de la
               pantalla de acceso a X.
             * Véase wdm(1x), gdm(8), y kdm.options(5) para más
               información, si se encuentran instalados.
             * Véase Sección 6.5.4, ``init' del System-V y niveles de
               ejecución' para saber cómo desactivar `xdm' para tener
               acceso a la consola de Linux sin tener que eliminar el
               paquete `xdm'.

        * _`ssh -X'_
             * el mecanismo de reenvío de puertos a través de un shell
               seguro (_seguro_).
             * protocolo con cifrado (una pérdida de recursos si se usa en
               forma local).
             * úselo para conexiones remotas.
             * Véase Sección 9.4.8, `Conexión X remota: `ssh''.

     Todos los métodos para conexiones remotas, excepto `ssh', requieren
     que esté activada la conexión TCP/IP en el servidor X.  Véase Sección
     9.4.6, `Conexión TCP/IP en X'.

9.4.1. Paquetes del sistema X
-----------------------------

     En Woody existen algunos (meta)paquetes que facilitan la instalación
     de X.

     `x-window-system-core'
          Este metapaquete provee los componentes esenciales para ejecutar
          el sistema X-Window en una estación de trabajo.  Proporciona las
          bibliotecas X, un servidor X `xserver-xfree86', un conjunto de
          fuentes, clientes y utilidades X básicas.

     `x-window-system'
          Este metapaquete proporciona todos los componentes del sistema
          X-window desarrollado por el Proyecto XFree86, así como un
          conjunto de programas accesorios muy populares (en particular,
          depende de `x-window-system-core', `twm' y `xdm', es decir, si lo
          instala no necesitará el paquete `x-window-system-core')

     `xserver-common-v3'
          Archivos y utilidades comunes a todos los servidores X de XFree86
          3.x (X3)

     `xserver-*'
          Paquetes de servidores X3 adicionales para soportar hardware que
          por algún motivo no es portado por el nuevo servidor X4.  Algunas
          tarjetas ATI mach64 antiguas no son soportadas por X4, algunas
          tarjetas de video se cuelgan en forma abrupta en la versión Woody
          de X4, etc.  (para ver los paquetes disponibles, haga `apt-cache
          search xserver-|less'.  Todos estos servidores de X3 dependen del
          paquete `xserver-common-v3'.)

     En la mayoría de los casos, `x-window-system' es el paquete que se
     deberá instalar (si desea la consola de acceso, asegúrese de
     desactivar `xdm' como se explica en Sección 8.1.4, `"¡Permítanme
     desactivar X al arrancar!"'.)

9.4.2. Paquetes de detección de hardware para el servidor X
-----------------------------------------------------------

     Para activar la detección de hardware durante la etapa de
     configuración de X, instale los siguientes paquetes antes de instalar
     el sistema X:

        * `discover' --- sistema de identificación de hardware.

        * `mdetect' --- herramienta de autodetección de ratones.

        * `read-edid' --- herramienta para obtener información de los
          monitores PnP VESA.

9.4.3. El servidor X
--------------------

     Véase XFree86(1x) para información sobre el servidor X.

     Invoque el servidor X desde una consola local:

$ startx -- :<display> <vtXX>
e.g.:
$ startx -- :1 vt8 -bpp 16
... ejecución en una terminal vt8 conectada a localhost:1 with 16 bpp mode

     Los argumentos a continuación de `--' son para el servidor X.

     Observación: al usar el script `~/.xserverrc' para personalizar el
     proceso de arranque del servidor X asegúrese de usar `exec' con el
     servidor real.  Caso contrario el servidor será lento al arrancar o al
     salir.  Por ejemplo:

          #!/bin/sh
          exec /usr/bin/X11/X -dpi 100 -nolisten tcp

9.4.3.1. Configurar el servidor X4
----------------------------------

     Para volver a configurar el servidor X4,

          # dpkg-reconfigure --priority=low xserver-common
          # dpkg-reconfigure --priority=low xserver-xfree86

     generará el archivo `/etc/X11/XF86Config-4' y configurará X usando el
     script `dexconf'.

9.4.3.2. Configurar el servidor X3
----------------------------------

     Para volver a configurar el servidor X3,

          # dpkg-reconfigure --priority=low xserver-common-v3
          # dpkg-reconfigure --priority=low xserver-mach64

     generará el archivo `/etc/X11/XF86Config' y configurará X usando el
     script `xf86config-v3'.

9.4.3.3. Configurar el servidor X4 en forma manual
--------------------------------------------------

     Para añadir personalizaciones, _no edite el archivo de configuración
     en medio del texto_ (válido para X4):

          ### BEGIN DEBCONF SECTION
          [snip]
          ### END DEBCONF SECTION

     En cambio, _añada las personalizaciones antes del mismo_.  Por
     ejemplo, para usar un dispositivo de video personalizado, añada algo
     similar a lo siguiente _al principio_ del archivo:

          Section "Device"
            Identifier        "Custom Device"
            Driver            "ati"
            Option            "NoAccel"
          EndSection
          
          Section "Screen"
            Identifier  "Custom Screen"
            Device      "Custom Device"
            Monitor     "Generic Monitor"
            DefaultDepth 24
            Subsection "Display"
              Depth       8
              Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
            EndSubsection
            Subsection "Display"
              Depth       16
              Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
            EndSubsection
            Subsection "Display"
              Depth       24
              Modes       "1280x960" "1152x864" "1024x768" "800x600" "640x480"
            EndSubsection
          EndSection
          
          Section "ServerLayout"
              Identifier        "Custom"
              Screen            "Custom Screen"
              InputDevice       "Generic Keyboard" "CoreKeyboard"
              InputDevice       "Configured Mouse" "CorePointer"
          EndSection

9.4.4. El cliente X
-------------------

     La mayoría de los clientes X se pueden arrancar con un comando similar
     a éste:

client $ xterm -geometry 80x24+30+200 -fn 6x10 -display <hostname>:0 &

     los argumentos opcionales de la línea de comando tienen el siguiente
     significado:

        * `-geometry <ANCHO>x<ALTO>+<POSICIÓN_X>+<POSICIÓN_Y>': ubicación y
          tamaño de la ventana inicial.

        * `-fn <FUENTE>': fuente utilizada para mostrar el texto.
          `<FUENTE>' puede ser:
             * a14: fuente de tamaño normal
             * a24: fuente de tamaño grande
             * ...  (vea las fuentes disponibles mediante `xlsfont'.)

        * `-display <displayname>': el nombre del servidor X a usar.
          `<displayname>' puede ser:
             * `<hostname>:<D.S>' significa pantalla `<S>' en terminal
               `<D>' de la máquina `<hostname>'; el servidor X para este
               terminal está escuchando en el puerto TCP 6000+D.
             * `<host>/unix:<D.S>' significa pantalla `<S>' en el terminal
               <D> de la máquina `<host>'; el servidor X para este terminal
               está escuchando en el socket UNIX `/tmp/.X11-unix/XD' (por
               lo tanto, solamente accesible desde `<host>').
             * `<:D.S>' es equivalente a `<host>/unix:<D.S>', donde
               `<host>' es el nombre de la máquina local.

     El `<displayname>' predeterminado para el programa X cliente puede
     configurarase mediante la variable de entorno DISPLAY.  Por ejemplo,
     antes de ejecutar un programa X cliente, se puede ejecutar uno de los
     siguientes comandos para alcanzar este objetivo:

$ export DISPLAY=:0
        # el predeterminado, máquina local usando la primer pantalla X
$ export DISPLAY=<hostname.fulldomain.name>:0.2
$ export DISPLAY=localhost:0

     El arranque puede ser personalizado con `~/.xinitrc'.  Por ejemplo:

          xrdb -load $HOME/.Xresources
          xsetroot -solid gray &
          xclock -g 50x50-0+0 -bw 0 &
          xload -g 50x50-50+0 -bw 0 &
          xterm -g 80x24+0+0 &
          xterm -g 80x24+0-0 &
          twm

     Como se explicó en Sección 9.4.5.1, `Personalizando la sesión en X',
     esto ethis overrides todo lo que una ejecución normal de Xsession hace
     cuando se arranca desde `startx'.  Utilice este enfoque sólo como
     último recurso.

9.4.5. Sesión X
---------------

     Una sesión X (servidor X + cliente X) puede arrancarse mediante:
        * `startx': script para `initx' que arranca el cliente y el
          servidor X desde la consola de Linux.  Si `~/.xinitrc' no existe,
          `/etc/X11/Xsession' se ejecuta a través de
          `/etc/X11/xinit/xinitrc'.
        * `xdm', `gdm', `kdm' o `wdm': administradores de pantalla X que
          arrancan el cliente y el servidor X y que controlan el acceso
          desde un interfaz gráfica (GUI).  `/etc/X11/Xsession' se ejecuta
          directamente.
     Se puede disponer de la consola leyendo Sección 8.1.4, `"¡Permítanme
     desactivar X al arrancar!"'.

9.4.5.1. Personalizando la sesión en X
--------------------------------------

     El script de arranque `/etc/X11/Xsession' es en realidad una
     combinación de
     `/etc/X11/Xsession.d/50xfree86-common_determine-startup' y
     `/etc/X11/Xsession.d/99xfree86-common_start'.

     La ejecución de `/etc/X11/Xsession' se ve afectada por
     `/etc/X11/Xsession.options' que consiste esencialmente en la ejecución
     de un programa mediante el comando `exec' teniendo en cuenta el
     siguiente orden:
     1.   `~/.xsession' o `~/.Xsession', si está definida
     2.   `/usr/bin/x-session-manager',si está definida
     3.   `/usr/bin/x-window-manager', si está definida
     4.   `/usr/bin/x-terminal-emulator', si está definida

     El significado exacto de estos comandos viene determinado por el
     sistema de alternativos explicado en Sección 6.5.3, `Comandos
     alternativos'.  Por ejemplo:

          # update-alternatives --config x-session-manager
          ... o
          # update-alternatives --config x-window-manager

     A fin de que cualquier administrador de ventanas sea el
     predeterminado, dejando instalados los administradores de sesiones
     GNOME y KDE reemplace
     `/etc/X11/Xsession.d/50xfree86-common_determine-startup' con el
     adjuntado al segundo informe de fallos dado a conocer en
     http://bugs.debian.org/168347 (espero que sea incluido pronto) y edite
     de la siguiente manera el `/etc/X11/Xsession.options' para desactivar
     el administrador de sesiones X:

# /etc/X11/Xsession.options
#
# opciones de configuración para /etc/X11/Xsession
# Véase Xsession.options(5) para una explicación de las opciones disponibles.
# predeterminados activados
allow-failsafe
allow-user-resources
allow-user-xsession
use-ssh-agent
# predeterminados desactivados (actívelos descomentándolos)
do-not-use-x-session-manager
#do-not-use-x-window-manager

     Sin la modificación anterior, `gnome-session' y `kdebase' son los
     paquetes que contienen los administradores de sesión X.  Al
     eliminarlos el administrador de ventanas X pasa a ser el
     predeterminado.  (Hmm, ¿alguna mejor idea?)

     En un sistema donde `/etc/X11/Xsession.options' incluye una línea
     `allow-user-xsession' sin ningún caracter precediéndola, cualquier
     usuario podrá personalizar el comportamiento del `/etc/X11/Xsession'.
     mediante `~/.xsession' o `~/.Xsession'

     El último comando del archivo `~/.xsession' debe ser de la forma `exec
     <some-window/session-manager>' para arrancar su administrador de
     sesiones/ventanas X favorito.

     Un buen ejemplo de script `~/.xsession' se encuentra en
     `/usr/share/doc/xfree86-common/examples/xsession.gz'.

     Lo utilizo para definir el administrador de ventanas y el idioma para
     cada cuenta de usuario.  Véase Sección 9.4.5.2, `Arrancar un
     administrador de sesiones/ventanas determinado', Sección 9.4.11,
     `Adquirir privilegios de superusuario en X' y Sección 9.7.8, `Ejemplo
     para un sistema bilingüe (EUC japonés e ISO-8859-1)'.

     Los recursos X específicos para cada usuario se pueden almacenar en
     `~/.Xresources', mientras que los recursos X para todo el sistema en
     `/etc/X11/Xresources/*'.  Véase xrdb(1x).

     En X, los teclados personalizados y las asociaciones de los botones
     del ratón se pueden especificar en `~/.xmodmaprc'.  Véase xmodmap(1x).

9.4.5.2. Arrancar un administrador de sesiones/ventanas determinado
-------------------------------------------------------------------

     Siguiendo los pasos explicados en Sección 9.4.5.1, `Personalizando la
     sesión en X', se puede activar un administrador de ventanas/sesiones X
     específico para cada usuario instalando el paquete indicado y
     configurando el archivo `~/.xsession' de la siguiente manera (me gusta
     blackbox por su estilo simple y por ser veloz):

        * administración de sesión X predeterminada.
             * Véase Sección 6.5.3, `Comandos alternativos'.
             * `exec /usr/bin/x-session-manager'

        * administrador de ventanas X predeterminado.
             * See Sección 6.5.3, `Comandos alternativos'.
             * `exec /usr/bin/x-window-manager'

        * Administrador de sesión de GNOME (consume muchos recursos)
             * Instale el paquete: `gnome-session'
             * `exec /usr/bin/gnome-session'

        * Administrador de sesión de KDE (consume muchos recursos)
             * Instale el paquete: `kdebase' (o `kdebase3' para KDE3)
             * `exec /usr/bin/kde2'

        * Administrador de ventanas Blackbox (consume pocos recursos).
             * Instale el paquete: `blackbox'
             * `exec /usr/bin/blackbox'

        * Administrador de ventanas Fluxbox (consume pocos recursos, el
          nuevo blackbox)
             * Install package: `fluxbox'
             * `exec /usr/bin/fluxbox'

        * Adminitstrador de ventanas Xfce (Mac OS-X, aspecto similar al CDE
          de SUN).
             * Install package: `xfce'
             * `exec /usr/bin/xfwm'

        * Administrador de ventanas IceWM (consume pocos recursos,
          alternativa de GNOME)
             * Install package: `icewm'
             * `exec /usr/bin/X11/icewm'

        * Administrador de ventanas virtual FVWM2 (consume pocos recursos,
          aspecto similar a Win95).
             * Instalar el paquete: `fvwm'
             * `exec /usr/bin/fvwm2'

        * Administrador de ventanas Windowmaker (aspecto similar a NexT)
             * Instale el paquete: `wmaker'
             * `exec /usr/bin/wmaker'

        * Administrador de ventanas Enlightenment (consume muchos
          recursos).
             * Install package: `enlightenment'
             * `exec /usr/bin/enlightenment'

     Véase Administradores de ventanas para X (http://www.xwinman.org).

9.4.5.3. Configuración del entorno KDE/GNOME
--------------------------------------------

     Para configurar plenamente el entorno KDE/GNOME, resultan de utilidad
     los siguiente metapaquetes:

        * KDE: instale el paquete `kde'

        * GNOME: instale el paquete `gnome'

     Instalar estos paquetes con herramientas que tengan en cuenta los
     `recomendados', como `dselect' y `aptitude', le permitirá una elección
     más variada de programas que hacerlo con `apt-get'.

     Si desea ingresar al sistema por consola, asegúrese de deshabilitar el
     administrador de pantallas X, como `kdm', `gdm' y `wdm', que pueden
     ser instalados por el sistema de dependencias, como se explica en
     Sección 8.1.4, `"¡Permítanme desactivar X al arrancar!"'.

     Si desea tener a GNOME como sistema predeterminado en vez de KDE,
     asegúrese de configurar `x-session-manager' como se detalla en Sección
     6.5.3, `Comandos alternativos'.

9.4.6. Conexión TCP/IP en X
---------------------------

     Puesto que las conexiones TCP/IP remotas sin cifrado son propensas a
     ataques de intervención de línea telefónica, la configuración
     predeterminada de X en versiones recientes de Debian viene con los
     sockets TCP/IP desactivados.  Para una conexión X remota piense en
     usar `ssh' (véase Sección 9.4.8, `Conexión X remota: `ssh'').

     No se recomienda el método recién explicado a menos que uno esté en un
     entorno muy seguro, detrás de un buen firewall y con usuarios
     confiables.  Use el siguiente comando para verificar la configuración
     actual de su socket TCP/IP de su servidor X:

          # find /etc/X11 -type f -print0 | xargs -0 grep nolisten
          /etc/X11/xinit/xserverrc:exec /usr/bin/X11/X -dpi 100 -nolisten tcp

     Eliminar `-nolisten' para restaurar la escucha TCP/IP en el servidor
     X.

9.4.7. Conexión X remota: `xhost'
---------------------------------

     `xhost' permite el acceso basándose en los nombres de host.  Esto
     resulta ser muy inseguro.  Los comandos siguientes desactivarán la
     verificación del host y permitirán conexiones desde cualquier lugar si
     las conexiones TCP/IP están autorizadas (véase Sección 9.4.6,
     `Conexión TCP/IP en X'):

          $ xhost +

     Se puede volver a habilitar la verificación del host haciendo:

          $ xhost -

     `xhost' no distingue entre diferentes usuarios en la máquina remota.
     Además, los nombres de las máquinas (en realidad, sus direcciones)
     pueden ser falseadas.

     Si se encuentra en una red que no es confiable (por ejemplo, con un
     acceso a Internet mediante una línea telefónica a través de PPP) debe
     evitar este método incluso si se consideran criterios más restrictivos
     sobre los hosts.  Véase xhost(1x).

9.4.8. Conexión X remota: `ssh'
-------------------------------

     El uso de `ssh' permite una conexión segura desde un servidor X local
     a una aplicación servidora remota.

        * en el archivo `/etc/ssh/sshd_config' de la máquina remota.
          Asigne a las entradas `X11Forwarding' y `AllowTcpForwarding' el
          valor `yes'

        * Arranque el servidor X en la máquina local.

        * Abra una `xterm' en la máquina local.

        * Ejecute `ssh' para establecer una conexión con la máquina
          distante.

nombre_local @ máquina_local $ ssh -q -X -l nombre_usuario máquina_remota.dominio
Password:
.....

        * Ejecute una aplicación X en el sitio remoto.

               nombre_usuario @ máquina_remota $ gimp &

     Este método permite la visualización de la salida del cliente X remoto
     como si estuviera conectado a un socket UNIX local.

9.4.9. `xterm'
--------------

     Aprenda todo sobre `xterm' en la dirección
     http://dickey.his.com/xterm/xterm.faq.html.

9.4.10. Base de datos de recursos de X
--------------------------------------

     Algunos programas X antiguos, como xterm, usan la base de datos de
     recursos de X para configurar su apariencia.  El archivo
     `~/.Xresources' se utiliza para almacenar las especificaciones de los
     recursos del usuario.  Al autenticarse, este archivo automáticamente
     se anexa a los recursos predeterminados de X.

     Veamos algunos parámetros interesantes para añadir a su archivo
     `~/.Xresources':

          ! Usar una fuente más legible 9x15
          XTerm*font: 9x15
          
          ! Mostrar barra de desplazamiento
          XTerm*scrollBar: true
          
          ! Fijar el tamño del búfer en 1000 líneas
          XTerm*saveLines: 1000

     Para que estas configuraciones tengan efecto inmediatamente, añádalas
     a la base de datos mediante el comando:

          xrdb -merge ~/.Xresources

9.4.11. Adquirir privilegios de superusuario en X
-------------------------------------------------

     Si una aplicación gráfica mecesita ejecutarse con privilegios de
     superusuario, use el siguiente procedimiento para visualizar la salida
     del programa en el servidor X del usuario.  Con objeto de evitar
     posibles riesgos de seguridad _nunca intente iniciar un servidor X
     directamente desde la cuenta de superusuario_.

     Inicie el servidor X como usuario normal y abra una consola `xterm'.
     Then:

          $ XAUTHORITY=$HOME/.Xauthority
          $ export XAUTHORITY
          $ su root
          Password:*****
          # printtool &

     Cuando utilice este truco para hacer `su' a un usuario normal,
     asegúrese que el archivo `~/.Xauthority' tenga permiso de lectura para
     el grupo al que pertenece dicho usuario.

     Para automatizar esta secuencia de comandos, cree un archivo
     `~/.xsession' desde la cuenta del usuario, que contenga las siguientes
     líneas:

# Esto permite arrancar X cuando hago su para ser superusuario.
if [ -z "$XAUTHORITY" ]; then
        XAUTHORITY=$HOME/.Xauthority
        export XAUTHORITY
fi
unset XSTARTUP
# Si desea un administrador de sesiones/ventanas particular descomente
# lo siguiente y edítelo según sus necesidades.
# XSTARTUP=/usr/bin/blackbox
# Esto inicia el administrador de sesiones/ventanas de X
if [ -z "$XSTARTUP" ]; then
  if [ -x /usr/bin/x-session-manager ]; then
    XSTARTUP=x-session-manager
  elif [ -x /usr/bin/x-window-manager ]; then
    XSTARTUP=x-window-manager
  elif [ -x /usr/bin/x-terminal-emulator ]; then
    XSTARTUP=x-terminal-emulator
  fi
fi
# ejecuta el administrador de sesiones/ventanas seleccionado
exec $XSTARTUP

     A continuación ejecute `su' (no `su -') en una ventana `xterm' de
     usuario.  A partir de ahora, es posible ejecutar aplicaciones gráficas
     con privilegios de superusuario en una pantalla X de superusuario.
     Este truco funciona siempre y cuando se ejecute la `/etc/X11/Xsession'
     predeterminada.  Si un usuario personaliza `~/.xinit' o `~/.xsession',
     la variable `XAUTHORITY' mencionada anteriormente necesita ser
     inicializada de manera similar en estos scripts.

     Otro método, consiste en usar `sudo' para automatizar la secuencia de
     comandos:

          $ sudo xterm
          ... o
          $ sudo -H -s

     En este casp `/root/.bashrc' debe contener:

          if [ $SUDO_USER ]; then
              sudo -H -u $SUDO_USER xauth extract - $DISPLAY | xauth merge -
          fi

     Esto funciona correctamente incluso si el directorio personal del
     usuario se encuentra en una partición NFS, ya que el superusuario no
     lee el archivo `.Xauthority'.

     Existen también diversos paquetes específicos para este fin: `kdesu',
     `gksu', `gksudo', `gnome-sudo' y `xsu'.  Se pueden usar otro métodos
     para alcanzar resultados similares: crear un enlace simbólico del
     `/root/.Xauthority' al correspondiente al usuario; utilizar el script
     sux (http://fgouget.free.fr/sux/sux-readme.shtml); o incluir "`xauth
     merge ~<USER_RUNNING_X>/.Xauthority'" en el script de inicialización
     del root.

     Véase más en la lista de correos debian-devel
     (http://lists.debian.org/debian-devel/2002/debian-devel-200207/msg00259.html).

9.4.12. Fuentes trueType en X
-----------------------------

     El `xfs' estándar de XFree86-4 funciona correctamente con fuentes
     TrueType.  Si está usando XFree86-3 debe instalar algún servidor de
     terceros como, por ejemplo, `xfs-xtt'.

     Sólo necesita asegurarse que las aplicaciones que desee usar con las
     fuentes TrueType hayan sido enlazadas con libXft o libfreetype (es muy
     probable que no tenga ni siquiera que preocuparse por ello si usa
     .debs precompilados).

     Recuerde instalar las fuentes y generar los archivos
     `fonts.{scale,dir}' para que puedan ser indexadas y utilizadas.

     Puesto que hay pocas fuentes _libres_, los usuarios de Debian pueden
     instalar fuentes TrueType comerciales o shareware.  A fin de facilitar
     este proceso al usuario, han sido creado algunos paquetes muy
     prácticos:
        * `ttf-commercial'
        * `msttcorefonts (>1.1.0)' (el paquete en Woody no funciona desde
          el of 8/2002 debido a los cambios que experimentó el sitio web de
          Microsoft)
     De esta manera tendrá una buena colección de fuentes TT a expensas de
     contaminar su sistema _libre_ con fuentes propietarias.

9.4.13. Navegador web (gráfico)
-------------------------------

     Existe algunos paquetes de navegadores web disponibles con el
     lanzamiento de Woody :
        * `mozilla' el navegador Mozilla (nuevo)
        * `galeon' navegador basado en Mozilla con una interfaz Gnome
          (nuevo)
        * `konqueror' navegador KDE
        * `dillo' navegador GTK
        * `amaya-gtk' navegador de referencia de la W3C
        * `amaya-lesstif' navegador de referencia de la W3C
        * `netscape-...'  (muchos, antiguos)
        * `communicator-...'  (muchos, antiguos)
        * ...
     La versión de `mozilla' debe coincidir con la versión correspondiente
     de `galeon'.  Aunque difieren en su interfaz, ambos programas
     conparten el mismo motor de renderizado de HTML Gecko.

     Los añadidos (plug-ins) para los navegadores tales como `mozilla' y
     `galeon' se pueden activar instalando manualmente los archivos
     "`*.so'" en el directorio de añadidos y reiniciando el navegador.

     Recursos:
        * Java: instale el binario "J2SE" de http://java.sun.com.
        * Flash: instale el binario "Macromedia Flash Player 5" de
          http://www.macromedia.com/software/flashplayer/.
        * `freewrl': navegador VRML y añadido de Netscape
        * ...


9.5. SSH
--------

     SSH (Secure SHell) es la manera segura de comunicarse a través de
     Internet.  Una versión libre de SSH llamada OpenSSH se encuentra
     disponible en el paquete Debian `ssh'.

9.5.1. Fundamentos
------------------

     Primero instale el cliente y el servidor OpenSSH.

          # apt-get update && apt-get install ssh

     La entrada non-US debe figurar en el `/etc/apt/source.list'.
     `/etc/ssh/sshd_not_to_be_run' no debe estar presente si desea ejecutar
     el servidor OpenSSH.

     SSH tiene dos protocolos de autenticación:

        * Protocolo SSH versión 1:
             * la versión que viene con Potato admite únicamente este
               protocolo.
             * métodos de autenticación disponibles:
                  * RSAAuthentication: autenticación del usuario basada en
                    una clave RSA
                  * RhostsAuthentication: autenticación basada en .rhosts
                    (insegura, desactivada)
                  * RhostsRSAAuthentication: autenticación basada en
                    .rhosts combinada con una clave RSA (desactivada)
                  * ChallengeResponseAuthentication: autenticación basada
                    en challenge-response RSA
                  * PasswordAuthentication: autenticación basada en
                    contraseña

        * Protocolo SSH versión 2:
             * versiones posteriores a Woody usan este protocolo como
               protocolo principal.
             * métodos de autenticación disponibles:
                  * PubkeyAuthentication: autenticación del usuario basada
                    en una clave pública
                  * HostbasedAuthentication: autenticación basada
                    en`.rhosts' o `/etc/hosts.equiv' combinada con la
                    autenticación de la clave pública de la máquina cliente
                    (desactivada)
                  * ChallengeResponseAuthentication: autenticación basada
                    en challenge-response
                  * PasswordAuthentication: autenticación basada en
                    contraseña

     Tenga cuidado con estas diferencias si está migrando hacia Woody o
     usando un sitema que no es Debian.

     Véase `/usr/share/doc/ssh/README.Debian.gz', ssh(1), sshd(8),
     ssh-agent(1) y ssh-keygen(1) para más detalles.

     Los siguientes son los archivos de configuración más importantes:

        * `/etc/ssh/ssh_config': valores predeterminados del cliente SSH .
          Véase ssh(1).  Las entradas más importantes son:
             * `Host': Restricts the following declarations (up to the next
               Host keyword) to be only for those hosts that match one of
               the patterns given after the keyword.
             * `Protocol': especifica la versión del protocolo SSH.  Valor
               predeterminado "2,1".
             * `PreferredAuthentications': especifica el método de
               autenticación para el cliente SSH2.  Por defecto:
               "hostbased,publickey,keyboard-interactive,password".
             * `ForwardX11': desactivado por defecto.  Se puede no tener en
               cuenta mediante la opción "`-X'" de la línea de comandos.

        * `/etc/ssh/sshd_config': valores predeterminados del servidor SSH.
          Véase sshd(8).  Las entradas más importantes son:
             * `ListenAddress': especifica las direcciones locales que
               `sshd' debe escuchar.  Se permiten múltiples opciones.
             * `AllowTcpForwarding': desactivado por defecto.
             * `X11Forwarding': desactivado por defecto.

        * `$HOME/.ssh/authorized_keys': la lista de las claves públicas
          predeterminadas que los clientes usan para conectarse con la
          cuenta en este host.  Véase ssh-keygen(1).

        * `$HOME/.ssh/identity': Véase ssh-add(1) y ssh-agent(1).

     Lo siguiente iniciará una conexión `ssh' desde un cliente.

$ ssh nombre_usuario@nombre_máquina.dominio.ext
$ ssh -1 nombre_usuario@nombre_máquina.dominio.ext # Fuerza la versión 1 de SSH
$ ssh -1 -o RSAAuthentication=no -l username foo.host
    # force password on SSH1
$ ssh -o PreferredAuthentications=password -l username foo.host
    # force password on SSH2

     Para el usuario, las funciones de `ssh' son mejores y más seguras que
     las de `telnet' (no lo bombardearán con ^]).

9.5.2. Reenvío de puertos -- túnel SMTP/POP3
--------------------------------------------

     Para establecer un túnel para conectarse al puerto 25 del
     <servidor-remoto> desde el puerto 4025 de la máquina local y al puerto
     110 del <servidor-remoto> desde el puerto 4110 de la máquina local
     mediante `ssh', ejecute lo siguiente en la máquina local:

          # ssh -q -L 4025:servidor-remoto:25 4110:servidor-remoto:110 \
                     nombre_usuario@servidor-remoto

     Es una manera segura de conectarse a servidores SMTP/POP3 a través de
     Internet.  En el `/etc/ssh/sshd_config' de la máquina remota, asigne a
     la entrada `AllowTcpForwarding' el valor `yes'.

9.5.3. Conectarse con pocas contraseñas
---------------------------------------

     Uno puede evitar recordar la contraseña para cada sistema remoto
     usando RSAAuthentication (protocolo SSH1) o PubkeyAuthentication
     (protocolo SSH2).

     En el `/etc/ssh/sshd_config' del sistema remoto debe figurar
     "RSAAuthentication yes" o "PubkeyAuthentication yes".

     A continuación genere las claves de autenticación en forma local e
     instale la clave pública en el sistema remoto:

          $ ssh-keygen          # RSAAuthentication: clave RSA1 para SSH1
          $ cat .ssh/identity.pub | ssh user1@remote \
                  "cat - >>.ssh/authorized_keys"
          ...
          $ ssh-keygen -t rsa   # PubkeyAuthentication: clave RSA para SSH2
          $ cat .ssh/id_rsa.pub | ssh user1@remote \
                  "cat - >>.ssh/authorized_keys"
          ...
          $ ssh-keygen -t dsa   # PubkeyAuthentication: clave DSA para SSH2
          $ cat .ssh/id_dsa.pub | ssh user1@remote \
                  "cat - >>.ssh/authorized_keys"

     Uno puede cambiar la frase de contraseña posteriormente haciendo
     "`ssh-keygen -p'".  Asegúrese de verificar la configuración probando
     la conexión.  En caso de problemas, haga "`ssh -v'".

     Puede añadir opciones a las entradas en `authorized_keys' para limitar
     los hosts y ejecutar comandos específicos.  Véase sshd(8) para más
     detalles.

     Observe que SSH2 realiza una autenticación del tipo
     `HostbasedAuthentication'.  Para que esto funcione, debe asignar a la
     entrada `HostbasedAuthentication' el valor `yes' tanto en el
     `/etc/ssh/sshd_config' de la máquina servidor como en el
     `/etc/ssh/ssh_config' o el `$HOME/.ssh/config' de la máquina cliente.

9.5.4. Otro clientes SSH
------------------------

     Existen algunos clientes SSH libres disponibles para plataformas que
     no son UNIX.

     Windows
          puTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/) (GPL)

     Windows (cygwin)
          SSH en cygwin (http://www.cygwin.com/) (GPL)

     Macintosh Clásico
          macSSH (http://www.macssh.com/) (GPL) [Obsérvese que Mac OS X
          incluye OpenSSH; utilice `ssh' en el terminal]

     Recurra también al sitio de documentación de SourceForge.net
     (http://www.sourceforge.net/docman/?group_id=1): "6.  CVS
     Instructions".

9.5.5. Agente SSH
-----------------

     Resulta más seguro proteger su clave de autenticación SSH con una
     frase de contraseña.  Si no ha sido configurada, use `ssh-keygen -p'
     para hacerlo.

     Ubique su clave pública (por ejemplo, `~/.ssh/id_rsa.pub') en el
     `~/.ssh/authorized_keys' de una máquina remota usando la conexión
     basada en contraseñas como se explica en Sección 9.5.3, `Conectarse
     con pocas contraseñas'.

          $ ssh-agent bash # o ejecute en cambio el programa zsh/tcsh/pdksh.
          $ ssh-add ~/.ssh/id_rsa
          Enter passphrase for /home/osamu/.ssh/id_rsa:
          Identity added: /home/osamu/.ssh/id_rsa (/home/osamu/.ssh/id_rsa)
          $ scp <foo> <user@remote.host:foo>
           ... de ahora en adelante no se necesita frase de contraseña :-)
          $^D
           ... terminating ssh-agent session

     Para el servidor X, los scripts de arranque normales de Debian
     ejecutan al `ssh-agent' como proceso padre.  Por lo tanto, necesitará
     ejecutar `ssh-add' una sola vez.

     Para más información , consulte ssh-agent(1) y ssh-add(1).

9.5.6. Resolución de problemas
------------------------------

     Si tiene problemas, controle los permisos de los archivos de
     configuración y ejecute `ssh' con la opción "`-v'".

     Utilice la opción "`-P'" si no es superusuario y tiene problemas con
     un firewall; esto evita el uso de los puertos 1--1023 del servidor.

     Si las conexiones `ssh' con un sitio remoto dejan de funcionar
     repentinamente, puede ser debido a modificaciones hechas por el
     administrador de sistema, muy probablemente debido a un cambio de
     `host_key' durante el mantenimiento del sistema.  Tras asegurarse que
     este es el caso y que nadie está haciéndose pasar por la máquina
     remota mediante algún artilugio ingenioso, es posible recuperar la
     conexión eliminando la entrada `host_key' del archivo
     `$HOME/.ssh/known_hosts' de la máquina local.


9.6. Programas de correo
------------------------

     La configuración del correo comprende tres partes:

        * un agente de transferencia de correo (MTA): `exim'

        * utilidades de correo: `procmail', `fetchmail', `mailx', ...

        * agente de usuario de correo (MUA): `mutt', `emacs'+`gnus'

9.6.1. Agente de transporte de correo (MTAs)
--------------------------------------------

     Para un MTA con un sinnúmero de posibilidades, utilice `exim'.
     Referencias:
        * paquetes `exim-doc' y `exim-doc-html'
        * http://www.exim.org/
     Si le preocupa el tema de la seguridad, el único MTA alternativo
     razonable es `postfix'.  Tanto `sendmail' como `qmail' se encuentran
     disponibles como paquetes Debian pero no se recomiendan.

     Si no necesita de la función de reenvío del MTA como en el caso de un
     sistema satélite como puede ser una PC portátil, considere usar uno de
     estos paquetes pequeñosl:
        * `ssmtp': necesita una conexión SMTP y permite alias, o
        * `nullmailer': no permite alias.
     Por el momento, considero a que `exim' es más conveniente incluso para
     mi estación de trabajo que es una PC portátil..

     Necesitará eliminar `exim' para la instalación de estos paquetes que
     entran en conflicto:

          # dpkg -P --force-depends exim
          # apt-get install nullmailer         # o ssmtp

9.6.1.1. Configuración básica de Exim
-------------------------------------

     Para usar `exim' como MTA, configure lo siguiente:

/etc/exim/exim.conf     "eximconfig" para crearlo o editarlo
/etc/inetd.conf          descomente smtp para ejecutar exim como demonio
/etc/email-addresses     edítelo si su nombre de usuario y máquina no es una dirección
                         de correo válida en Internet
verifique los filtros usando exim -brw, -bf, -bF, -bV, ... etc.

9.6.1.2. Direcciones de correo electrónico inexistentes (Exim)
--------------------------------------------------------------

     En la parte DIRECTORS del archivo `/etc/exim/exim.conf' (Woody o
     posterior), añada una directiva "catchall" al final (a continuación de
     localuser: director) que corresponda a todas las direcciones que la
     directiva anterior no pudo resolver (por Miquel van Smoorenburg):

          catchall:
            driver = smartuser
              new_address = <webmaster@mi_dominio.com>

     Si desea una receta más detallada para cada dominio virtual, añada lo
     siguiente al final del archivo `/etc/exim/exim.conf' (para mí, no muy
     probado):

          *@su_dominio.com ${lookup{$1}lsearch*{/etc/email-addresses} \
                  {$value}fail} T

     y añada una entrada "*" al `/etc/email-addresses'.

9.6.1.3. Reescritura selectiva de direcciones del correo saliente (Exim)
------------------------------------------------------------------------

     En `exim' la reescritura selectiva de direcciones del correo saliente
     para que los encabezados "From:" se muestren correctamente se puede
     realizar modificando el final del archivo `/etc/exim/exim.conf':

          *@host1.algo.dyndns.org \
            "${if eq {${lookup{$1}lsearch{/etc/passwd}{1}{0}}} {1}  \
             {$0}{$1@algo.dyndns.org}}"  frFs

     Esto reescribe todas las direcciones coincidentes con
     `*@host1.algo.dyndns.org'.

     1.   busca en `/etc/password' para ver si la parte local ($1) es un
          usuario local o no.

     2.   si se trata de un usuario local, reescribe la dirección con lo
          mismo que estaba en primer lugar ($0).

     3.   si no se trata de un usuario local, reescribe la parte del
          dominio.

9.6.1.4. Autenticación SMTP con Exim
------------------------------------

     Algunos servicios SMTP tales como yahoo.com requieren de autenticación
     SMTP.  Configure `/etc/exim/exim.conf' de la siguiente manera:

          remote_smtp:
            driver = smtp
            authenticate_hosts = smtp.mail.yahoo.com
          ...
          
          smarthost:
            driver = domainlist
            transport = remote_smtp
            route_list = "* smtp.mail.yahoo.com bydns_a"
          ...
          
          plain:
            driver = plaintext
            public_name = PLAIN
            client_send = "^cmatheson3^esta_es_mi_contraseña"

     No se olvide entrecomillar la última líneas.

9.6.2. Utilidad de correo (Fetchmail)
-------------------------------------

     `fetchmail' se ejecuta en modo demonio para transferir los mensajes de
     correo de una cuenta POP3 de un ISP al sistema de correo local.
     Configure:

/etc/init.d/fetchmail
/etc/rc?.d/???fetchmail ejecute update-rc.d fetchmail default priority 30
/etc/fetchmailrc        archivo de configuración (chown 600)

     La información para arrancar fetchmail como demonio desde un script de
     `init.d' en Potato es confusa (Woody corrigió esta situación).  Véase
     los archivos de ejemplo `/etc/init.d/fetchmail' y `/etc/fetchmailrc'
     en los scripts de ejemplo
     (http://www.debian.org/doc/manuals/debian-reference/examples/).

     Si los encabezados de sus mensajes de correo están contaminados con ^M
     debido al programa de correo de su ISP, añada "stripcr" a sus opciones
     en `$HOME/.fetchmailrc':

          options fetchall no keep stripcr

9.6.3. Utilidad de correo (Procmail)
------------------------------------

     `procmail' es un programa de filtrado y distribución de correo local.
     Se necesita crear un `$HOME/.procmailrc' para cada cuenta que se
     utiliza.  Ejemplo: _procmailrc
     (http://www.debian.org/doc/manuals/debian-reference/examples/)

9.6.4. Agente de usuario de correo (Mutt)
-----------------------------------------

     Utilice `mutt' como agente de usuario de correo (MUA) en combinación
     con `vim'.  Personalícelo mediante `~/.muttrc'; por ejemplo:

# use el modo visual y "gq" para reformatear citas
set editor="vim -c 'set tw=72 et ft=mail'"
#
# selección de encabezados tomada del manual (Sven's Draconian header weeding)
#
ignore *
unignore from: date subject to cc
unignore user-agent x-mailer
hdr_order from subject to cc date user-agent x-mailer
auto_view application/msword
....

     Añada lo siguiente al `/etc/mailcap' o `$HOME/.mailcap' para
     visualizar correo en HTML y documentos adjuntos en MS Word:

          text/html; lynx -force_html %s; needsterminal;
          application/msword; /usr/bin/antiword '%s'; copiousoutput;
          description="Microsoft Word Text"; nametemplate=%s.doc


9.7. Localización y soporte de idiomas
--------------------------------------

     Debian se encuentra internacionalizado y admite el uso de un número
     creciente de idiomas y convenciones de uso local.  Las siguientes
     subseccines discuten la _localización_, es decir, el proceso de
     personalización de un entorno de trabajo para permitir la entrada y
     salida de el/los idioma(s) elegido(s), convenciones para las fechas,
     formatos numéricos y monetarios y otros aspectos de un sistema que
     difiere de región en región.

9.7.1. Personalización básica
-----------------------------

     Existen algunos aspectos de la personalización para la localización y
     el soporte de un idioma.

9.7.1.1. Teclado
----------------

     Debian se distribuye con los mapas de caracteres de casi dos docenas
     de teclados.  En Woody, el teclado se reconfigura así:
        * `dpkg-reconfigure --priority=low console-data # consola'
        * `dpkg-reconfigure --priority=low xserver-xfree86 # X4'
        * `dpkg-reconfigure --priority=low xserver-common-v3 # X3'

9.7.1.2. Datos
--------------

     La gran mayoría de los paquetes Debian soporta el manejo de datos en
     caracteres no US-ASCII a través de la variable de entorno LC_CTYPE
     brindada por la tecnología _locale_ de glibc
        * en 8-bits puro: prácticamente todos los programas
        * otros conjuntos de caracteres latinos (por ejemplo ISO-8859-1 o
          ISO-8859-2): la mayoría de los programas
        * idiomas de múltiples bytes tales como el chino, el japonés o el
          coreano: muchas aplicaciones recientes

9.7.1.3. Visualización
----------------------

     X puede mostrar cualquier codificación -incluyendo UTF-8- y soporta
     todas las fuentes.  La lista incluye no sólo las fuentes de 8 bits
     sino las de 16 bits que aparecen en el idioma chino, japonés o
     coreano.  El método de entrada de los caracteres de múltiples bytes es
     soportado por el mecanismo XIM.  Véase Sección 9.7.8, `Ejemplo para un
     sistema bilingüe (EUC japonés e ISO-8859-1)'.

     La visualización del código japonés EUC se encuentra también
     disponible en la consola gráfica (S)VGA mediante el paquete `kon2'.
     Existe una terminal alternativa nueva en japonés llamada `jfbterm' que
     usa la consola FB.  En estos entornos de consola, la aplicación debe
     proporcionar el método de entrada del japonés.  Utilice el paquete
     `egg' para el paquete Emacs y el paquete `jvim' para el entorno Vim.

9.7.1.4. Traducción
-------------------

     Existen traducciones para diversos mensajes y documentos que se
     muestran en un sistema Debian, como mensajes de errores, salida
     estándar de programas, menús y páginas del manual.  Actualmente, hay
     soporte para las páginas del manual en alemán, español, finlandés,
     francés, italiano, japonés, coreano y polaco proporcionados por los
     paquetes `manpages-<LANG>' (donde <LANG> son dos letras ISO del código
     del país.  Utilice `apt-cache search manpages-|less' para obtener la
     lista de manuales unix disponibles)

     Para acceder a la página de un manual NLS, el usuario debe configurar
     la variable de entorno LC_MESSAGES apropiadamente.  Por ejemplo, para
     las páginas del manual en el idioma italiano, LC_MESSAGES debe ser
     igual a `it'.  El programa `man' buscará entonces las páginas del
     manual en italiano en `/usr/share/man/it/'.

9.7.2. Locales
--------------

     Debian soporta la tecnología _locale_.  Locale es un mecanismo que
     permite a los programas brindar una salida adecuada y una
     funcionalidad conforme a las convenciones locales tales como el
     conjunto de caracteres, el formato del tiempo y de la fecha, los
     símbolos monetarios, etc.  Utiliza las variables de entorno para
     determinar el comportamiento apropiado.  Por ejemplo, suponiendo que
     tiene instalado en su sistema tanto el local para el francés como para
     el inglés americano, los mensajes de error de varios programas se
     pueden mostran en uno u otro idioma:

          $ LANG="en_US" cat foo
          cat: foo: No such file or directory
          $ LANG="fr_FR" cat foo
          cat: foo: Aucun fichier ou répertoire de ce type

     Glibc brinda soporte a esta funcionalidad.  Véase locale(7).

9.7.3. Activar el soporte de locales
------------------------------------

     Debian _no_ viene con todos los locales disponibles precompilados.
     Vaya a `/usr/lib/locale' para ver qué locales (además del
     predeterminado "C") han sido compilados para su sistema.  Si no
     encuentra el que necesita, tiene dos opciones:
        * Editar el `/etc/locale.gen' para añadir el local que necesita y
          luego ejecutar `locale-gen' siendo superusuario para compilarlo.
          Véase locale-gen(8) y las páginas del manual listadas en su "VER
          TAMBIÉN".
        * Ejecute `dpkg-reconfigure locales' para volver a configurar el
          paquete `locales'.  Al hacerlo aparecerá una interfaz debconf
          para que pueda elegir los locales y así compilarlos.

9.7.4. Activar un local determinado
-----------------------------------

     Las siguientes variables de entorno se evalúan en el siguiente orden
     para proporcionar a los programas los valores de un local determinado:

     1.   LANGUAGE: esta variable de entorno consiste en una lista de
          locales separados por dos puntos en orden de prioridad.  Es
          utilizado sólo si el local POSIX tiene un valor diferente de "C"
          [en Woody; en Potato tiene siempre prioridad sobre el local
          POSIX].  (extensión GNU)

     2.   LC_ALL: si no es nulo, su valor se utiliza para todas las
          categorías del local.  (POSIX.1) Generalmente "" (nulo).

     3.   LC_*: si no es nulo, su valor se utiliza para la categoría
          correspondiente (POSIX.1).  Generalmente "C".

          Las variables LC_* son las siguientes:
             * LC_CTYPE: juego de caracteres.
             * LC_COLLATE: ordenación del alfabeto.
             * LC_TIME: formatos del tiempo y fechas.
             * LC_NUMERIC: formatos numéricos no monetarios.
             * LC_MONETARY: formatos monetarios.
             * LC_MESSAGES: formatos de los mensajes informativos, de
               diagnóstico y respuestas interactivas.
             * LC_PAPER: tamaño del papel.
             * LC_NAME: formatos de los nombres
             * LC_ADDRESS: formatos de las direcciones e información sobre
               lugares.
             * LC_TELEPHONE: formatos de los números telefónicos.
             * LC_MEASUREMENT: unidades de medida (sistema métrico u otro).
             * LC_IDENTIFICATION: metadatos referente a información del
               local.

     4.   LANG: si es no nulo y LC_ALL está indefinido, el valor se utiliza
          para todas las categorías LC_* si valores definidos.  (POSIX.1)
          Generalmente "C".

     Obsérvese que algunas aplicaciones (por ejemplo, Netscape 4) ignora
     los valores de LC_*.

     El programa `locale' pude mostrar la configuración local activa y los
     locales disponibles; véase locale(1).  (OBSERVACIÓN: `locale -a' lista
     todos los locales que su sistema reconoce; eso _no_ significa que la
     totalidad de ellos hayan sido compilados.  Véase Sección 9.7.3,
     `Activar el soporte de locales'.)

9.7.5. Formato de la fecha del local ISO 8601
---------------------------------------------

     El soporte de local para el estándar internacional de la fecha
     `yyyy-mm-dd' (formato de fecha ISO 8601) es proporcionado por el local
     denominado `en_DK', --- _Inglés en Dinamarca_ lo cual es una broma :-)
     Parece ser que sólo funciona en la consola para `ls'.

9.7.6. Ejemplo para los Estados Unidos (ISO-8859-1)
---------------------------------------------------

     Añada las siguientes líneas a su `~/.bash_profile':

          LC_CTYPE=en_US.ISO-8859-1
          export LC_CTYPE

9.7.7. Ejemplo para Francia con el signo euro (ISO-8859-15)
-----------------------------------------------------------

     Añada las siguientes líneas a su `~/.bash_profile':

          LANG=fr_FR@euro
          export LANG
          LC_CTYPE=fr_FR@euro
          export LC_CTYPE

     Configure el teclado francés "AZERTY" como se explica en Sección
     9.7.1.1, `Teclado'.  y añada las páginas del manual en francés
     instalando `manpages-fr'.  Alt-derecho en el teclado estadounidense se
     llama al Alt-Gr en Europa.  Pulsándola simultáneamente junto con otras
     teclas se obtienen numerosos caracteres acentuados, etc.  Por ejemplo,
     Alt-Gr+E da el signo euro.

     La mayoría de las lenguas europeas occidentales se pueden configurar
     de una manera similar.

     Véase Debian Euro HOWTO
     (http://www.debian.org/doc/manuals/debian-euro-support/) para añadir
     soporte para el nuevo signo monetario y Utilizar y configurar Debian
     para el idioma francés
     (http://www.debian.org/doc/manuals/fr/debian-fr-howto/) para más
     detalles en francés.

9.7.8. Ejemplo para un sistema bilingüe (EUC japonés e ISO-8859-1)
------------------------------------------------------------------

     Configuremos un sistema bilingüe: ja_JP.eucJP (EUC japonés, entorno
     tradicional japonés para UNIX) en X con mensajes en inglés y fecha
     tipo ISO y en_US.ISO-8859-1 (ASCII con soporte de la mayoría de los
     caracteres con acento) en la consola Linux.

        * añada el soporte del local para el japonés ja_JP.eucJP usando el
          método descripto en Sección 9.7, `Localización y soporte de
          idiomas'.

        * instale el sistema de conversión y el diccionario Kana-a-Kanji:
             * `canna' --- servidor local (licencia gratuita) o
             * `freewnn-jserver' --- servidor extensible de red (Dominio
               Público)

        * instale el sistema de entrada para el japonés:
             * `kinput2-canna' --- para X o
             * `kinput2-canna-wnn' --- para X y
             * `egg' --- que funciona directamente con Emacsen incluso en
               consola (opcional)

        * terminal compatible con el japonés:
             * `kterm' --- X (clásico),
             * `mlterm' --- X (muy bueno, con tamaño de fuente variable) y

        * agregue todos los paquetes de fuentes japonesas.

        * Configure como se explica en Sección 9.4.5.1, `Personalizando la
          sesión en X'.  Esto permite al usuario utilizar un entorno X
          específico independiente de los métodos de arranque de X
          (`startx', `xdm', ...)

        * cree `~/.xsession' que configura el entorno X del usuario
          específico:

               #!/bin/sh
               # This makes X work when I su to root.
               if [ -z "$XAUTHORITY" ]; then
                       XAUTHORITY=$HOME/.Xauthority
                       export XAUTHORITY
               fi
               
               # local japonés predeterminado, local C en caso de problemas
               # export LANG=ja_JP.eucJP
               # asegúrese de sobreescribir en_US.ISO-8859-1 usado en consola
               # export LC_CTYPE=ja_JP.eucJP
               # quiero los mensajes en inglés ASCII :-)
               export LC_MESSAGES=C
               # activar método de entrada
               kinput2 &
               XMODIFIERS=@im=kinput2
               export XMODIFIERS
               # administrador de ventanas blackbox (consume pocos recursos)
               exec /usr/bin/blackbox

        * agregar las siguientes líneas al `~/.bashrc':

# Change language environment depending on the console program
# X-shells only execute .bashrc (They are not login shell)
# General environment for X is set by .xsession
if [ $TERM = kterm ] || [ $TERM = mlterm ]; then
        unset LC_ALL
        export LANG=C
        #export LANG=ja_JP.eucJP
# para mostrar fecha ISO en formato yyyy-mm-dd date display más natural para
# los japoneses :-)
        export LC_TIME=en_DK.ISO-8859-1
        export LC_MESSAGES=C
        export LANGUAGE=ja_JP.eucJP:en_US.ISO-8859-1:C
        export LC_CTYPE=ja_JP.eucJP
else
        unset LC_ALL
        export LANG=C
        export LC_TIME=en_DK.ISO-8859-1
        export LANGUAGE=en_US.ISO-8859-1:C
        export LC_CTYPE=en_US.ISO-8859-1
fi

        * añada las siguientes líneas a su `~/.muttrc':

# El soporte UTF-8 no es popular en el entrono EMACS japonés
# La codificación de 7 bits de la iso-2022-jp resulta ser más fácil para todo
# el mundo
# orden predeterminado codificación = us-ascii --> iso-8859-1 --> utf-8
#set send_charset="us-ascii:iso-8859-1:utf-8"
#set allow_8bit=yes
set send_charset="us-ascii:iso-8859-1:iso-2022-jp"
set allow_8bit=no

        * activar XIM `kinput2' para las aplicaciones X
             * añada `*inputMethod: kinput2' a su archivo de recursos X
               `.~/Xresources' (a primera vista Debian lo tiene en cuenta
               automáticamente).
             * Algunas aplicaciones (como `mlterm') también permiten
               configurar el `*inputMethod:' y otra información en forma
               dinámica en tiempo de ejecución (presione
               _Ctrl-tercer-botón-ratón_ en `mlterm').

        * arranque X escribiendo `startx' o desde un administrador de
          pantalla (xdm, gdm, kdm, wdm, ...)

        * arranque una aplicación compatible con el japonés: VIM6,
          (x)emacs21, mc-4.5, mutt-1.4, ...  (Parece ser que Emacs es la
          plataforma más popular, aunque personalmente no la utilizo)

        * presione "_Mayús+Espacio_" para activar/desactivar la entrada de
          caracteres japoneses.

     Véase también las páginas de SuSE para CJK
     (http://www.suse.de/~mfabian/suse-cjk/suse-cjk.html).

9.7.9. Ejemplo de UTF-8 en X
----------------------------

     Lo necesitará todo el mundo en un futuro.  Véase The Unicode HOWTO
     (http://www.tldp.org/HOWTO/Unicode-HOWTO.html).

9.7.10. Ejemplo de UTF-8 en una consola FB
------------------------------------------

     El soporte UTF-8 para la consola FB es proporcionada por `bterm'
     utilizado en `debian-installer'.

9.7.11. Más allá de los locales
-------------------------------

     Cuando vaya a configurar por primera vez un _entorno de idioma_, por
     favor considere usar `tasksel' o `aptitude' para averiguar qué
     paquetes han sido seleccionados al elegir la tarea correspondiente a
     dicho entorno.  La elección del idioma es útil incluso para la
     configuración de un entorno multilingüe.  Si encuentra problemas de
     dependencia durante la instalación en su sistema configurado, evite
     instalar los programas que causan conflicto.  Puede recurrir a
     `update-alternative' para recuperar el estado original de algunos
     comandos ya que los nuevos instalados pueden tener una prioridad mayor
     sobre los ya existentes.

     La gran mayoría de los programas usan glibc 2.2 y en gran parte están
     internacionalizados.  Por lo tanto versiones localizadas tales como
     `jvim' para VIM puede que no sean necesarias y su funcionalidad es
     ofrecida por la versión 6.0 para X de `vim'.  En realidad, aún es
     difícil de usar.  Puesto que `jvim' posee una versión compilada con
     soporte nativo de caracteres japoneses (`canna') incluso en consola y
     soluciona diversos problemas específicos del japonés puede que aún la
     quiera usar :-)

     Puede que se necesite configurar los programas más allá de la
     configuración del `local' para lograr un entorno de trabajo agradable.
     El paquete `language-env' y su comando `set-language-env' facilita
     notablemente este proceso.

     Asimismo consulte el documento sobre internalización Introducción a la
     i18n (http://www.debian.org/doc/manuals/intro-i18n/).  Está dirigido a
     los desarrolladores pero también resulta útil para los administradores
     de sistemas.


-------------------------------------------------------------------------------


10. Configuración de la red
---------------------------

     Este capítulo se centra en la administración de redes en Debian.  Para
     una introducción general sobre redes en GNU/Linux lea el Net-HOWTO
     (http://www.tldp.org/HOWTO/Net-HOWTO/index.html).

     Para que un equipo Debian sea capaz de acceder a Internet sus
     interfaces de red necesitan ser soportadas por el kernel y
     configuradas apropiadamente.

     El primer requisito es el soporte del kernel para los dispositivos de
     interfaz de red tales como las tarjetas Ethernet, tarjetas Wi-Fi y
     módems.  Para obtener este soporte es posible que necesite recompilar
     el kernel o añadirle módulos como se describe en Capítulo 7, `El
     kernel de Linux en Debian'.

     La configuración de los dispositivos de red se explica a continuación.
     La información en este capítulo ha sido actualizada para Sarge.  Mucho
     de todo esto no se aplica a versiones anteriores.


10.1. Fundamentos de redes IP
-----------------------------

     Un equipo Debian puede tener diversas interfaces con una diferente
     dirección IP.  Las interfaces pueden ser de diversos tipos diferentes,
     incluyendo:
        * Loopback: `lo'
        * Ethernet: `eth0', `eth1', ...
        * Wi-Fi: `wlan0', `wlan1', ...  [1]
        * Token Ring: `tr0', `tr1', ...
        * PPP: `ppp0', `ppp1', ...
     Existe un amplio rango de otros dispositivos de red disponibles,
     incluyendo SLIP, PLIP (línea IP serie y paralelo), dispositivos
     "shaper" para controlar el tráfico de ciertas interfaces, conmutación
     de tramas, AX.25, X.25, ARCnet y LocalTalk.

     Cada interfaz de red conectada directamente a Internet (o a cualquier
     red basada en IP) es identificada por una única dirección IP de 32
     bits.  [2] La dirección IP se puede dividir en la parte relativa a la
     red y la parte relativa a la máquina.  Si se considera una dirección
     IP, se ponen 1 en los bits que son parte de la dirección de red y
     ceros en la parte de la dirección de la máquina se obtiene la máscara
     de red.

     Tradicionalmente, las redes IP fueron agrupadas en clases cuyas
     direcciones de red componentes eran de 8, 16 o 24 bits de tamaño.  [3]

          direcciones IP                   máscara de red     longitud
Clase A   1.0.0.0       - 126.255.255.255  255.0.0.0          =  /8
Clase B   128.0.0.0     - 191.255.255.255  255.255.0.0        = /16
Clase C   192.0.0.0     - 223.255.255.255  255.255.255.0      = /24

     Las direcciones IP que no se encuentran en estos rangos se utilizan
     para propósitos especiales.

     En cada clase existen rangos de direcciones reservados para su uso en
     redes de área local (LANs).  Se garantiza que estas direcciones no
     entren en conflicto con las direcciones propias de Internet (en
     consecuencia, si una de estas direcciones se asigna a un equipo éste
     no podrá acceder a Internet directamente sino a través de una puerta
     de enlace que actúe como proxy para los servicios individuales o hacer
     la traducción de direcciones de red -- NAT) Estos rangos de
     direcciones se dan en la siguiente tabla junto con el número de rangos
     en cada clase.

                    direcciones de red           longitud  cantidad
          Clase A   10.x.x.x                     /8        1
          Clase B   172.16.x.x -  172.31.x.x     /16       16
          Clase C   192.168.0.x - 192.168.255.x  /24       256

     La primera dirección en una red IP es la dirección de la propia red.
     La última dirección es la dirección de difusión de la red.  [4] Todas
     las otras direcciones se pueden asignar a máquinas de la red.  De
     éstas, la primera o la última dirección generalmente se asigna a la
     puerta de enlace para Internet.

     La tabla de rutas contiene información sobre cómo enviar paquetes IP a
     sus destinos.  Veamos una impresión de ejemplo de la tabla de rutas
     para una máquina Debian de una red de área local (LAN) con dirección
     IP 192.168.50.x/24.  La máquina 192.168.50.1 (también en la LAN) es un
     router para la red corporativa 172.20.x.x/16 y la máquina
     192.168.50.254 (también en la LAN) es un router para Internet.

# route
Kernel IP routing table
Destination    Gateway          Gateway    Genmask      Flags Metric Ref Use Iface
127.0.0.0     *                 255.0.0.0     U     0      0     2 lo
192.168.50.0  *                 255.255.255.0 U     0      0   137 eth0
172.20.0.0    192.168.50.1      255.255.0.0   UG    1      0     7 eth0
default       192.168.50.254    0.0.0.0       UG    1      0    36 eth0

        * La primera línea después del encabezado dice que el tráfico
          destinado a la red `127.x.x.x' será encaminado hacia la interfaz
          de retorno (loopback) `lo'.
        * La segunda línea dice que el tráfico destinado para las máquinas
          de la LAN será encaminado a través de `eth0'.
        * La tercer línea dice que el tráfico destinado a la red
          corporativa será encaminado a la puerta de enlace `192.168.50.1'
          y también a través de `eth0'.
        * La cuarta línea dice que el tráfico destinado a Internet será
          encaminado a la puerta de enlace `192.168.50.254' también a
          través de `eth0'.
     Las direcciones IP en la tabla también pueden aparecer como nombres
     que se obtienen observando las direcciones en `/etc/networks' o usando
     la biblioteca C resolver.

     Ademas de encaminar, el kernel puede realizar la traducción de las
     direcciones de red, la modulación del tráfico y su filtrado.

     Véase el Net-HOWTO (http://www.tldp.org/HOWTO/Net-HOWTO/index.html) y
     other networking HOWTOs
     (http://www.tldp.org/HOWTO/Networking-Overview-HOWTO.html) para más
     información.

[1]  Observe que una interfaz Wi-Fi es en realidad un alias para una
     interfaz Ethernet que brinda acceso a los parámetros de configuración
     propios de Wi-Fi.  Estos parámetros se controlan usando el programa
     `iwconfig'.

[2]  Esto es así si se se utiliza la versión 4 de IP.  En IPv6 las
     direcciones son de 128 bits.  Véase http://www.ipv6.org/.

[3]  Este sistema no era flexible y desperdiciaba muchas direcciones IP,
     por lo tanto actualmente las redes IPv4 permiten direcciones de red
     componentes de longitud variable.

[4]  La dirección de la red se puede obtener haciendo un AND bit a bit
     entre una dirección de la red y la máscara de red.  La dirección de
     difusión se puede obtener haciendo un OR bit a bit entre la dirección
     de red y el complemento de uno de la máscara de red.


10.2. Configuración de la red a bajo nivel
------------------------------------------

     Las herramientas tradicionales de configuración de red a bajo nivel en
     sistemas GNU/Linux son los programas `ifconfig' y `route' que vienen
     en el paquete `net-tools'.  Estas herramientas han sido oficialmente
     reemplazadas por `ip' que viene en el paquete `iproute'.  El programa
     `ip' funciona con Linux 2.2 y superior y es más poderoso que las
     herramientas anteriores.  Sin embargo, las herramientas anteriores aún
     funcionan y resultan más familiares para muchos usuarios.

10.2.1. Configuración de la red a bajo nivel -- `ifconfig' y `route'
--------------------------------------------------------------------

     Veamos una ilustración de cómo cambiar la dirección IP de la interfaz
     `eth0' de `192.168.0.3' a `192.168.0.111' y convertir a `eth0' en la
     ruta a la red `10.0.0.0' vía `192.168.0.1'.  Empiece ejecutando
     `ifconfig' y `route' sin argumentos para mostrar el estado actual de
     todas las interfaces de red y encaminamiento.

          # ifconfig
          eth0 Link encap:Ethernet  HWaddr 08:00:46:7A:02:B0
               inet addr:192.168.0.3  Bcast:192.168.0.255  Mask:255.255.255.0
               UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
               RX packets:23363 errors:0 dropped:0 overruns:0 frame:0
               TX packets:21798 errors:0 dropped:0 overruns:0 carrier:0
               collisions:0 txqueuelen:100
               RX bytes:13479541 (12.8 MiB)  TX bytes:20262643 (19.3 MiB)
               Interrupt:9
          
          lo   Link encap:Local Loopback
               inet addr:127.0.0.1  Mask:255.0.0.0
               UP LOOPBACK RUNNING  MTU:16436  Metric:1
               RX packets:230172 errors:0 dropped:0 overruns:0 frame:0
               TX packets:230172 errors:0 dropped:0 overruns:0 carrier:0
               collisions:0 txqueuelen:0
               RX bytes:22685256 (21.6 MiB)  TX bytes:22685256 (21.6 MiB)
          
          # route
          Kernel IP routing table
          Destination  Gateway      Genmask          Flags Metric Ref Use Iface
          192.168.0.0  *            255.255.0.0      U     0      0     0 eth0
          default      192.168.0.1  255.255.255.255  UG    0      0     0 eth0

     Primero deshabilitamos la interfaz.

          # ifconfig eth0 inet down
          # ifconfig
          lo   Link encap:Local Loopback
            ... (no más entradas eth0)
          # route
            ... (no más entradas en la tabla de rutas)

     Luego la habilitamos con la nueva IP y la nueva ruta.

          # ifconfig eth0 inet up 192.168.0.111 \
                     netmask 255.255.0.0 broadcast 192.168.255.255
          # route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 dev eth0

     El resultado:

          # ifconfig
          eth0 Link encap:Ethernet  HWaddr 08:00:46:7A:02:B0
               inet addr:192.168.0.111  Bcast:192.168.255.255  Mask:255.255.0.0
               UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
               ...
          
          lo   Link encap:Local Loopback
               inet addr:127.0.0.1  Mask:255.0.0.0
               ...
          # route
          Kernel IP routing table
          Destination  Gateway      Genmask      Flags Metric Ref Use Iface
          192.168.0.0  *            255.255.0.0  U     0      0     0 eth0
          10.0.0.0     192.168.0.1  255.0.0.0    UG    0      0     0 eth0

     Para más información véase ifconfig(8) y route(8).

10.2.2. Configuración de la red a bajo nivel -- `ip'
----------------------------------------------------

     Los comandos `ip' equivalentes a los comandos `ifconfig' y `route'
     anteriores son:
        * `ip link show'
        * `ip route list'
        * `ip link set eth0 down'
        * `ip addr del dev eth0 local 192.168.0.3'
        * `ip addr add dev eth0 local 192.168.0.111/16 broadcast
          192.168.255.255'
        * `ip link set eth0 up'
        * `ip route add dev eth0 to 10.0.0.0/8 src 192.168.0.111 via
          192.168.0.1'

     El programa `ip' muestra la sintaxis de sus comandos cuando se ejecuta
     con el argumento `help'.  Por ejemplo, `ip link help' imprime por
     pantalla :

          Usage: ip link set DEVICE { up | down | arp { on | off } |
          	                     dynamic { on | off } |
          	                     multicast { on | off } | txqueuelen PACKETS |
          	                     name NEWNAME |
          	                     address LLADDR | broadcast LLADDR |
          	                     mtu MTU }
                 ip link show [ DEVICE ]

     Véase también ip(8).

10.2.3. Configurando una interfaz Wi-Fi
---------------------------------------

     Para interfaces Wi-Fi se utiliza el programa `iwconfig', que viene con
     el paquete `wireless-tools', además de `ifconfig' o `ip'.

     Véase iwconfig(8).

10.2.4. Configurando una interfaz PPP
-------------------------------------

     Si accede a Internet mediante un módem conectado a la línea telefónica
     doméstica la conexión se negocia usando el Protocolo Point-to-Point
     (PPP).  Dichas conexiones se acceden como interfaces de red `ppp0',
     `ppp1', etc.

     Una interfaz PPP es administrada por el demonio PPP `pppd' que viene
     con el paquete `ppp'.  De esta manera, para el usuario, configurar una
     interfaz PPP equivale a configurar `pppd'.

10.2.4.1. Configurando `pppd' en forma manual
---------------------------------------------

     Para establecer un vínculo con una red, se necesita abrir un puerto de
     comunicación (generalmente un puerto serie), los comandos deben
     enviarse a un dispositivo de comunicación (generalmente un módem) se
     debe marcar un número telefónico, se debe autenticar la identidad con
     un demonio PPP externo, se debe crear una interfaz PPP y deben
     modificarse las tablas de ruta de modo que el tráfico se pueda enviar
     por el enlace.  `pppd' puede hacer todo esto y, en consecuencia, posee
     una lista muy extensa de opciones operativas.  Estas opciones se
     describen en pppd(8).

     En un sistema Debian, las opciones globales se configuran en
     `/etc/ppp/options'.  Las opciones específicas al usuario se configuran
     en `~/.ppprc'.  Las opciones que dependen del puerto de comunicación
     utilizado son almacenadas en `/etc/ppp/options.<nombre_puerto>'.  Por
     ejemplo, supongamos que tiene dos módems--- un módem interno Lucent LT
     accesible a través de /dev/LT-modem y un módem externo accesible a
     través de /dev/ttyS0.  Cree los dos archivos de opciones siguientes.

          # cat > /etc/ppp/options.LT-modem <<EOF
          115200
          init "/usr/sbin/chat -f /etc/chatscripts/setup-LT-modem"
          EOF
          # cat > /etc/ppp/options.ttyS0 <<EOF
          115200
          init "/usr/sbin/chat -f /etc/chatscripts/setup-ttyS0"
          EOF

     Estos se refieren a los siguientes scripts chat.  Primero,
     `/etc/chatscripts/setup-LT-modem'.

          ABORT ERROR
          '' ATZ
          OK 'ATW2X2 S7=70 S11=55'
          OK AT

     Segundo, `/etc/chatscripts/setup-ttyS0'.

          ABORT ERROR
          '' ATZ
          OK 'ATL1M1Q0V1W2X4&C1&D2 S6=4 S7=70 S11=55 S95=63 S109=1 +FCLASS=0'
          OK AT

     Obviamente, los contenidos de estos archivos dependen de su hardware.

     Las opciones también se pueden pasar como argumentos a `pppd'.

     En Debian `pppd' generalmente se inicia usando el comando `pon'.
     Cuando se utiliza `pon', su primer argumento define un archivo de
     opciones en `/etc/ppp/peers/' que también es leído por `pppd'.  [1] Es
     allí donde se configuran las opciones que son específicas a un máquina
     distante particular, por ejemplo, a un determinado Proveedor de
     Servicios de Internet (ISP).

     Supongamos, por ejemplo, que alterna entre Amsterdam y Den Haag.  En
     cada ciudad tiene acceso a dos ISP ---Planet y KPN.  Primero cree un
     archivo de opciones básico para cada ISP.

          # cat > /etc/ppp/peers/KPN <<EOF
          remotename KPN
          noauth
          user kpn
          noipdefault
          ipparam KPN
          EOF
          # cat > /etc/ppp/peers/Planet <<EOF
          remotename Planet
          auth
          user usuario3579@planet.nl
          noipdefault
          mru 1000
          mtu 1000
          ipparam Planet
          EOF

     Estos archivos fijan opciones que difieren entre los dos ISPs.  Las
     opciones comunes a ambos ISPs se pueden ubicar en `/etc/ppp/options'
     o, según corresponda, en uno de los archivos de opciones específico a
     la interfaz.

     A continuación, cree los archivos de opciones para el ISP de cada
     ciudad.  En nuestro ejemplo, la única diferencia entre conectarse a un
     ISP en un lugar y en otro es el script chat que se necesita (el script
     chat es diferente porque el número telefónico de acceso local es
     diferente)

          # cat > /etc/ppp/peers/KPN-Amsterdam <<EOF
          connect "/usr/sbin/chat -v -f /etc/chatscripts/KPN-Amsterdam"
          file /etc/ppp/peers/KPN
          EOF
          # cat > /etc/ppp/peers/KPN-DenHaag <<EOF
          connect "/usr/sbin/chat -v -f /etc/chatscripts/KPN-DenHaag"
          file /etc/ppp/peers/KPN
          EOF
          # cat > /etc/ppp/peers/Planet-Amsterdam <<EOF
          connect "/usr/sbin/chat -v -f /etc/chatscripts/Planet-Amsterdam"
          file /etc/ppp/peers/Planet
          EOF
          # cat > /etc/ppp/peers/Planet-DenHaag <<EOF
          connect "/usr/sbin/chat -v -f /etc/chatscripts/Planet-DenHaag"
          file /etc/ppp/peers/Planet
          EOF

     Cada una de las directivas `file' incluye uno de los archivos de
     opciones que se mostraron anteriormente.  La directiva `connect'
     especifica el comando que `pppd' utiliza para establecer la conexión.
     Normalmente se utiliza para esto el programa `chat', adaptando el
     script chat al ISP.  Veamos los scripts chat para Den Haag.  Los
     pertenecientes a Amsterdam podrían ser similares (salvo el número
     telefónico) o diferentes si el ISP ofrece allí su servicio a través de
     otra compañia.

          # cat > /etc/chatscripts/KPN-DenHaag <<EOF
          ABORT BUSY
          ABORT 'NO CARRIER'
          ABORT VOICE
          ABORT 'NO DIALTONE'
          ABORT 'NO DIAL TONE'
          ABORT 'NO ANSWER'
          ABORT ERROR
          OK-AT-OK ATDT <0676012321>
          CONNECT \d\c
          EOF
          # cat > /etc/chatscripts/Planet-DenHaag <<EOF
          ABORT BUSY
          ABORT 'NO CARRIER'
          ABORT VOICE
          ABORT 'NO DIALTONE'
          ABORT 'NO DIAL TONE'
          ABORT 'NO ANSWER'
          ABORT ERROR
          OK-AT-OK ATDT <0676002505>
          CONNECT \d\c
          EOF

     Para poderse conectar a estos ISPs se necesitan los nombres de cliente
     y contraseñas que `pppd' puede suministrar bajo demanda.  Esta
     información se almacena en `/etc/ppp/pap-secrets' (si se utiliza el
     protocolo PAP) o en `/etc/ppp/chap-secrets' (si se utiliza el
     protocolo CHAP).  Aunque CHAP es más seguro, PAP aún sigue siendo
     ampliamente utilizado.  Puesto que estos archivos contienen
     información confidencial, ni el grupo ni el resto de usuarios deberían
     tener permiso de lectura o escritura sobre ellos.  El formato de estos
     archivos se explica en pppd(8).  Un "secreto" (tercer campo) se
     localiza en el archivo buscando el nombre del cliente (primer campo)
     y/o el nombre del servidor (segundo campo).  Al conectarse a un ISP
     uno, generalmente, no conoce el nombre del servidor y, en cambio,
     suministra el nombre del cliente (usuario); esto fue hecho en las
     líneas `user' de `peers/KPN' y `peers/Planet' de arriba.

          # nombre del cliente nombre del servidor  secreto
          kpn                          *            kpn
          usuario3579@planet.nl        *            mi_mascota_preferida

[1]  Este archivo de opciones se incluye usando la opción `call'.

10.2.4.2. Configurando `pppd' usando `pppconfig'
------------------------------------------------

     Una manera rápida de configurar `pppd' consiste en usar el programa
     `pppconfig' que viene con el paquete del mismo nombre.  `pppconfig'
     configura los archivos como los anteriores luego de formular preguntas
     al usuario a través de una interfaz de menús.

     Si elije usar `resolvconf' entonces asegúrese de elegir "None" en la
     pantalla "Configure Nameservers".

10.2.4.3. Configurando una interfaz PPP usando `wvdial'
-------------------------------------------------------

     Un enfoque diferente para usar `pppd' consiste en ejecutarlo desde
     `wvdial' que viene con el paquete `wvdial'.  En vez de hacer que
     `pppd' ejecute `chat' para marcar y negociar la conexión, `wvdial'
     realiza el marcado, la negociación inicial y luego inicia `pppd' para
     que haga el resto.  En la mayoría de los casos dando sólamente el
     número telefónico, el nombre de usuario y la contraseña, `wvdial'
     logra establecer la conexión.


10.3. Asignando un nombre a la máquina
--------------------------------------

10.3.1. Nombre de la máquina
----------------------------

     Un sistema Debian a veces necesita identificarse por su nombre.  Para
     este propósito el kernel guarda el _hostname_ (nombre de la máquina).

     El script de inicio `/etc/init.d/hostname.sh' establece el nombre de
     la máquina durante el arranque (con el comando `hostname') usando el
     nombre almacenado en `/etc/hostname'.  Este archivo _únicamente_
     debería contener el nombre de la máquina y no un nombre de dominio
     completo.

     Para mostrar el nombre actual de la máquina ejecute `hostname' sin
     argumentos.

10.3.2. Nombre para el correo
-----------------------------

     El _mailname_ (nombre para el correo) de un máquina es el nombre que
     los programas relacionados con el correo utilizan para identificar la
     máquina.  El archivo `/etc/mailname' contiene este nombre seguido de
     una nueva línea.  Generalmente el nombre para el correo es uno de los
     nombres de dominio completo de la máquina.  Véase mailname(5).

     Lo que ve el destinatorio de los mensajes de correo en la cabecera
     `From:' del mensaje enviado por su máquina Debian depende de cómo se
     encuentran configurados el Agente de Usuario de Correo (MUA) y el
     Agente de Transferencia de Correo (MTA).  Supongamos que un usuario
     local `<quiensea>' envía un mensaje de una máquina con nombre para el
     correo `<mimáquina.dom>'.  La cabecera `From:' del mensaje saliente
     será:
        * "`From: <quiensea>@<mimáquina.dom>'" si el MUA no tiene
          configurada la cabecera `From:';
        * "`From: <bar>@<mimáquina.dom>'" si el MUA tiene configurado
          "`From: <bar>'";
        * "`From: <bar>@<falso.dom>'" si el MUA tiene configurado "`From:
          <bar>@<falso.dom>'".
     Incluso cuando el MUA tiene una cabecera `From:' configurada el MTA
     puede añadir una cabecera "`Sender:<quiensea>@<herman.dom>'" para
     indicar su verdadero origen.

     Por supuesto, cuando cualquier MTA realiza la reescritura de
     direcciones como se discutió en Sección 9.6.1.2, `Direcciones de
     correo electrónico inexistentes (Exim)' y Sección 9.6.1.3,
     `Reescritura selectiva de direcciones del correo saliente (Exim)', la
     dirección electrónica visualizada por el destinatario se puede
     modificar arbitrariamente.


10.4. Servicio de Nombres de Dominio (DNS)
------------------------------------------

     Las máquinas son referenciadas por el nombre de dominio y por su
     dirección IP.  DNS es un sistema cliente-servidor en donde los
     sistemas de resolución de nombres (llamados también traductores de
     direcciones) consultan a los servidores de nombres con objeto de
     asociar los nombres de dominio con las direcciones IP y otras
     propiedades de las máquinas.  La biblioteca C GNU resolver(3) también
     puede buscar direcciones IP en archivos o consultar a los Servicios de
     Información de Red (NIS).

     Para ver la dirección IP asociada a una máquina local utilice el
     comando `hostname --fqdn'.  Esto muestra el primer nombre de dominio
     completo que el sistema de resolución encuentra para el nombre de
     máquina local.  [1]

[1]  Técnicamente, es el FQDN devuelto por gethostbyname(2) para el nombre
     de máquina dado por gethostname(2).

10.4.1. El sistema de resolución
--------------------------------

     La tarea de averiguar las direcciones IP asociadas con un nombre de
     dominio particular es la función de un sistema de resolución
     (resolver).  El más utilizado es el conjunto de funciones de la
     biblioteca C GNU que llevan este nombre (resolver(3)).  Otro es
     sistema de resolución FireDNS que viene con el paquete `libfiredns'.

     La forma que el sistema de resolución de la biblioteca C resuelve los
     nombres viene dada por la línea `hosts' del archivo de configuración
     `/etc/nsswitch.conf'.  Esta línea lista los servicios que deberían
     usarse para resolver un nombre: por ejemplo, `dns', `files', `nis',
     `nisplus'.  [1] Véase nsswitch.conf(5).  Si se utiliza el servicio
     `files', el comportamiento del sistema de resolución también viene
     regido por el archivo de configuración `/etc/hosts'.  Véase hosts(5).

     Todos los archivos anteriores son estáticos y se pueden editar con su
     editor favorito.

     Si se utiliza el servicio `dns', el comportamiento del sistema de
     resolución también viene dado por el archivo de configuración
     `/etc/resolv.conf'.  Véase resolv.conf(5).  Una de las funciones
     importantes del archivo `resolv.conf' consiste en listar las
     direcciones IP de los servidores de nombres que se contactarán para
     resolver el nombre.  Esta lista a menudo depende del entorno de red
     que puede cambiar de tanto en tanto mientras la máquina está
     funcionando.  Programas tales como `pppd' y `dhclient' son capaces de
     manipular `resolv.conf' para añadir y eliminar líneas, pero estas
     características no siempre funcionan adecuadamente y entran en
     conflicto entre sí.  El paquete `resolvconf' soluciona mejor el
     problema proporcionando un marco estándar para la actualización de
     este archivo.  Véase Sección 10.4.2, `Administrando la información del
     servidor de nombres -- `resolvconf''.

[1]  La forma en que el sistema de resolución resuelve los nombres
     teóricamente también viene dada por el archivo de configuración
     `/etc/host.conf'.  La línea `order' en este archivo lista los métodos
     que deberían utilizarse para resolver un nombre: `bind', `hosts',
     `nis'.  Véase host.conf(5).  Creo que esta línea ha sido reemplazada
     por `hosts' de `nsswitch.conf' pero no estoy seguro.

10.4.2. Administrando la información del servidor de nombres --
`resolvconf'
----------------------------------------------------------------------------

     El paquete `resolvconf' proporciona un marco para la administración
     dinámica de la información relativa a los servidores de nombres
     disponibles.  Soluciona el antiguo problema de mantener las listas
     dinámicas de los nombres de los servidores para ser usadas por el
     sistema de resolución y los cachés DNS.  Resolvconf se posiciona como
     intermediario entre los programas que controlan las interfaces de red
     y suministran información de los servidores de nombre, y las
     aplicaciones que necesitan de dicha información.

     `resolvconf' está diseñado para funcionar sin que sea necesaria
     ninguna configuración manual.  No obstante, el paquete es bastante
     nuevo y puede requerir alguna intervención para lograr que funcione
     adecuadamente.  Esto será realmente así si alguna vez personalizó
     paquetes para que actualicen al `/etc/resolv.conf': necesitará
     deshabilitar estas personalizaciones.

     Véase /usr/share/doc/resolvconf/README.gz para más detalles.

10.4.3. Guardar en memoria los nombres resueltos -- `dnsmasq'
-------------------------------------------------------------

     Salvo que su servidor de nombres sea el servidor oficial de un dominio
     resulta mejor utilizar un servidor de nombres con caché local como
     `dnsmasq' que funciona bien con `resolvconf'.

10.4.4. Proveyendo un Servicio de Nombres de Dominio -- `bind'
--------------------------------------------------------------

     Si necesita proveer un servicio de nombres oficial para un dominio
     entonces necesita de un servidor de nombres completo como `named' que
     viene con el paquete `bind9' o con `bind'.  Para nuevas instalaciones
     se recomienda `bind9'.

     Para instalar `bind9', instale estos paquetes básicos: `bind9';
     `dnsutils'.  Puede que también quiera instalar estos paquetes de
     utilidades: `bind9-host'; `dns-browse'; `dnscvsutil'; `nslint'.  Este
     paquete de documentación: `bind9-doc'.  y estos paquetes de
     desarrollo: `libbind-dev'; `libnet-dns-perl'.  Si configura interfaces
     usando DHCP entonces puede encontrar útil el siguiente paquete:
     `dhcp-dns'.

     Instale `bind9' o vuelva a configurarlo usando `dpkg-reconfigure' para
     realizar la configuración básica.  La configuración consiste en editar
     `named.conf'.  En Debian este archivo se encuentra en `/etc/bind/' y
     se utiliza principalmente para definir las zonas DNS básicas;
     `incluye' otros dos archivos: `named.conf.local', utilizado para
     definir las zonas locales y `named.conf.options', utilizado para
     configurar opciones (este último es procesado por `resolvconf' para
     producir `/var/run/bind/named.options' que es el mismo que el original
     excepto que la especificación `forwarders' es una lista de los
     servidores de nombre no locales actualmente disponibles.  Para hacer
     uso de ello, cambie la línea `include' del `named.conf' de modo que
     incluya `/var/run/bind/named.options'.  Véase Sección 10.4.2,
     `Administrando la información del servidor de nombres --
     `resolvconf''.)

     Los archivos de base de datos sin una ruta completa mencionados en
     `named.conf*' se almacenarán en `/var/cache/bind/'.  Este es el lugar
     correcto para almacenar archivos generados por `named': por ejemplo,
     los archivos de bases de datos para las zonas cuyo demonio es
     secundario.  Los archivos de base de datos estáticos de `/etc/bind/'
     están y deben referenciarse en `named.conf' mediante sus rutas
     completas.  Véase /usr/share/doc/bind9/README.Debian.gz para más
     detalles.


10.5. Configurando las interfaces de red usando DHCP
----------------------------------------------------

     La configuración de las interfaces de red de bajo nivel se puede
     automatizar mediante el Protocolo de Configuración Dinámica de Hosts
     (DHCP).  De esta manera, su cortafuegos, router o su ISP de banda
     ancha puede suministrar direcciones IP y otros parámetros.

     Para que esto funcione debe instalar uno de los siguientes paquetes:
        * `dhcp3-client' (versión 3, Internet Software Consortium)
        * `dhcpcd' (Yoichi Hariguchi y Sergei Viznyuk)
        * `pump' (Red Hat)
     `pump' es sencillo y ampliamente utilizado.  `dhcp3-client' es
     complejo pero más configurable.  [1]

[1]  Desde mediados de octubre 2003 está disponible también un
     `dhcp-client'.  Este contiene la versión 2 del cliente ISC DHCP que ha
     sido reemplazada por la versión 3 que viene con `dhcp3-client'.  Los
     encargados planean algún día cambiar el nombre de `dhcp3-client' a
     `dhcp-client' pero parece que no ocurrirá a tiempo para el lanzamiento
     de Sarge.


10.6. Configuración de la red de alto nivel en Debian
-----------------------------------------------------

     A fin de facilitar la configuración de la red, Debian proporciona una
     herramienta estándar de configuración de red de alto nivel que
     consiste en los programas `ifup', `ifdown' y el archivo
     `/etc/network/interfaces'.  [1] Si elige utilizar `ifupdown' para
     realizar la configuración de su red, entonces _no_ debería usar los
     comandos de bajo nivel.  [2] `Ifupdown' se programó bajo la suposición
     que sólo iba a ser utilizado para configurar y desconfigurar las
     interfaces de red.

     Para actualizar la configuración de la interfaz haga lo siguiente:

          # ifdown eth0
          # editor /etc/network/interfaces  # modifique a su antojo
          # ifup eth0

     Para más información véase interfaces(5),
     /usr/share/doc/ifupdown/examples/network-interfaces.gz y ifup(8).

[1]  El formato del archivo `/etc/network/interfaces' de la versión actual
     de `ifupdown' es ligeramente incompatible con el formato de archivo de
     las primeras versiones de Potato.  Si es necesario el script
     post-instalación `ifupdown' debería actualizar el archivo
     automáticamente.

[2]  Esto significa también que no debería utilizar otras herramientas de
     configuración de alto nivel tales como `whereami' que llaman a
     herramientas de configuración de bajo nivel.

10.6.1. Configurando una interfaz con una dirección IP estática.
----------------------------------------------------------------

     Supongamos que desea configurar una interfaz Ethernet que tiene una
     dirección IP fija `192.168.0.123'.  Esta dirección comienza con
     `192.168.0' por lo tanto debe estar en una LAN.  Supongamos además que
     `192.168.0.1' es la dirección de la puerta de enlace de la LAN a
     Internet.  Edite `/etc/network/interfaces' de modo que incluya un
     fragmento como el siguiente:

          iface eth0 inet static
                  address 192.168.0.123
                  netmask 255.255.255.0
                  gateway 192.168.0.1

     Si tiene instalado el paquete `resolvconf' puede añadir líneas para
     especificar la información relativa al DNS.  Por ejemplo:

          iface eth0 inet static
                  address 192.168.0.123
                  netmask 255.255.255.0
                  gateway 192.168.0.1
                  dns-search nicedomain.org
                  dns-nameservers 195.238.2.21 195.238.2.22

     Luego que se activa la interfaz, los argumentos de las opciones
     `dns-search' y `dns-nameservers' quedan disponibles para `resolvconf'
     para su inclusión en `resolv.conf'.  El argumento `lindodominio.org'
     de la opción `dns-search' corresponde al argumento de la opción
     `search' en resolv.conf(5).  Los argumentos `195.238.2.21' y
     `195.238.2.22' de la opción `dns-nameservers' corresponde a los
     argumentos de las opciones `nameserver' en resolv.conf(5).  Otras
     opciones reconocidas son `dns-domain' y `dns-sortlist'.  Véase Sección
     10.4.2, `Administrando la información del servidor de nombres --
     `resolvconf''.

10.6.2. Configurando una interfaz usando DHCP
---------------------------------------------

     Para configurar una interfaz usando DHCP edite el
     `/etc/network/interfaces' de manera que incluya un fragmento como el
     siguiente :

          iface eth0 inet dhcp

     Para que esto funcione debe tener instalado uno de los clientes DHCP
     mencionados en Sección 10.5, `Configurando las interfaces de red
     usando DHCP'.

10.6.3. Configurando una interfaz Wi-Fi
---------------------------------------

     El paquete `wireless-tools' incluye el script
     `/etc/network/if-pre-up.d/wireless-tools' que permite configurar
     hardware Wi-Fi (802.11a/b/g) antes que se active la interfaz.  La
     configuración se realiza usando el programa `iwconfig'; véase
     iwconfig(8).  Para cada parámetro posible del comando `iwconfig' puede
     incluir una opción en `/etc/network/interfaces' con un nombre como el
     del parámeto con el prefijo "wireless-".  Por ejemplo, para fijar el
     ESSID de `eth0' en `miessid' y la clave de cifrado en `123456789e'
     antes de activar `eth0' usando DHCP, edite el
     `/etc/network/interfaces' de modo que incluya un fragmento como el
     siguiente :

          iface eth0 inet dhcp
                  wireless-essid miessid
                  wireless-key 123456789e

     Obsérvese que no debería utilizar este método para configurar el ESSID
     y la clave si está ejecutando `waproamd' para esta interfaz.  En el
     momento que se ejecuta `ifup', `waproamd' ya tiene configurados ESSID
     y la clave.  Véase Sección 10.9.4, `Activando la configuración de la
     red -- `waproamd''.

10.6.4. Configurando una interfaz PPP
-------------------------------------

     Los programas `ifup' e `ifdown' utilizan `pon' y `poff' para añadir y
     eliminar interfaces PPP, por lo tanto, primero lea Sección 10.2.4,
     `Configurando una interfaz PPP'.

     Supongamos que ha configurado PPP para que funcione con `mi_isp'.
     Edite `/etc/network/interfaces' de modo que incluya una sección como
     la siguiente :

          iface ppp0 inet ppp
                  provider mi_isp

     con este fragmento, `ifup ppp0' hace

          pon mi_isp

     Desafortunadamente no es posible hoy por hoy proporcionar otras
     opciones a `pppd' en un sección `ppp' de `/etc/network/interfaces'.
     [1]

     Actualmente no es posible usar `ifupdown' para realizar una
     configuración auxiliar de las interfaces PPP.  Como `pon' desaparece
     antes que `pppd' haya terminado de establecer la conexión, `ifup'
     ejecuta los scripts `up' antes que la interfaz PPP esté lista para
     usar.  Hasta que se solucione este fallo [2] sigue siendo necesario
     realizar una configuración posterior en `/etc/ppp/ip-up' o
     `/etc/ppp/ip-up.d/'.

[1]  Véase fallo #196877 (http://bugs.debian.org/196877).

[2]  Véase fallo #127786 (http://bugs.debian.org/127786).

10.6.5. Configurando una interfaz PPPoE
---------------------------------------

     Muchos Proveedores de Servicios de Internet (ISPs) de banda ancha
     utilizan PPP para negociar las conexiones incluso cuando las máquinas
     de los clientes están conectados mediante Ethernet y/o redes ATM.
     Esto se logra mediante PPP sobre Ethernet (PPPoE) que es una técnica
     para el encapsulamiento del flujo PPP dentro de las tramas Ethernet.
     Supongamos que su ISP se llama `<mi_isp>'.  Primero configure PPP y
     PPPoE para `<mi_isp>'.  La manera más fácil de hacerlo consiste en
     instalar el paquete `pppoeconf' y ejecutar `pppoeconf' desde la
     consola.  A continuación, edite `/etc/network/interfaces' de modo que
     incluya un fragmento como el siguiente:

          iface eth0 inet ppp
                  provider <mi_isp>

     A veces surgen problemas con PPPoE relativos a la Unidad de
     Transmisión Máxima (Maximum Transmit Unit o MTU) en líneas DSL
     (Digital Subscriber Line).  Véase DSL-HOWTO
     (http://www.tldp.org/HOWTO/DSL-HOWTO/) para más detalles.

     Obsérvese que si su módem posee un router entonces el módem/router
     maneja por sí mismo la conexión PPPoE y aparece del lado de la LAN
     como una simple puerta de enlace Ethernet a Internet.

10.6.6. Configurando múltiples interfaces Ethernet para una puerta de
enlace
----------------------------------------------------------------------------

     Supongamos que `eth0' está conectada a Internet con un dirección IP
     configurada con DHCP y `eth1' está conectada a la LAN con una
     dirección IP estática `192.168.1.1'.  Edite `/etc/network/interfaces'
     de modo que incluya un fragmento similar al siguiente:

          iface eth0 inet dhcp
          
          iface eth1 inet static
                  address 192.168.1.1
                  netmask 255.255.255.0

     Si activa NAT en esta máquina como se describe en Sección 10.12,
     `Configurando una puerta de enlace' puede compartir la conexión de
     Internet con todas las máquinas de la LAN.

10.6.7. Configurando interfaces virtuales
-----------------------------------------

     Usando interfaces virtuales puede configurar una única tarjeta
     Ethernet para que sea la interfaz de distintas subredes IP.  Por
     ejemplo, supongamos que su máquina se encuentra en una red LAN
     192.168.0.x/24.  Desea conectar la máquina a Internet usando una
     dirección IP pública proporcionada con DHCP usando su tarjeta Ethernet
     existente.  Edite `/etc/network/interfaces' de modo que incluya un
     fragmento similar al siguiente:

          iface eth0 inet static
                  address 192.168.0.1
                  netmask 255.255.255.0
                  network 192.168.0.0
                  broadcast 192.168.0.255
          
          iface eth0:0 inet dhcp

     La interfaz `eth0:0' es una interfaz virtual.  Al activarse también lo
     hará su padre `eth0'.


10.7. _Re_configuración de la red
---------------------------------

     En lo que sigue sería importante que el lector comprenda la diferencia
     entre una _interfaz física_ y una _interfaz lógica_.  [1] Una interfaz
     física es lo que hemos estado llamando "interfaz", lo que hemos
     designado con `eth0', `ppp1', etc.  Una interfaz lógica es un conjunto
     de valores que pueden asignarse a los parámetros variables de una
     interfaz física.  Si al leer le resulta confuso, reemplace la
     expresión "configurada como interfaz lógica `X'" por la expresión
     "configurada con el perfil de la interfaz `X'".

     Las definiciones `iface' en `/etc/network/interfaces' son, en
     realidad, definiciones de interfaces lógicas no de interfaces físicas.
     [2] Si nunca más desea volver a configurar sus interfaces entonces
     puede ignorar este hecho ya que la interfaz física `X' será
     configurada, por defecto, como interfaz lógica `X'.

     No obstante, supongamos que su máquina es un equipo portátil que
     transporta de su casa a su trabajo.  Cuando conecta la máquina a una
     red corporativa o a su LAN hogareña, necesita configurar `eth0'
     adecuadamente.

     Primero defina dos interfaces lógicas `hogar' y `trabajo' (en vez de
     `eth0' como hicimos antes) que describen cómo debería configurarse la
     interfaz para la red hogareña y la del trabajo respectivamente.

          iface hogar inet static
                  address 192.168.0.123
                  netmask 255.255.255.0
                  gateway 192.168.0.1
          
          iface trabajo inet static
                  address 81.201.3.123
                  netmask 255.255.0.0
                  gateway 81.201.1.1

     De esta manera, la interfaz física `eth0' se puede activar para la red
     hogareña con la configuración apropiada especificándola en la línea de
     comandos:

          # ifup eth0=hogar

     Para reconfigurar `eth0' para la red del trabajo, ejecute los
     comandos:

          # ifdown eth0
          # ifup eth0=trabajo

     Obsérvese que con el archivo `interfaces' escrito así ya no resultará
     posible activar `eth0' haciendo solamente `ifup eth0'.  La razón es
     que `ifup' utiliza el nombre de la interfaz física como el nombre de
     la interfaz lógica `eth0' predeterminada y, en realidad, en nuestro
     ejemplo no hay una interfaz lógica definida.

[1]  Esta terminología se utiliza en la documentación de `ifupdown'.

[2]  Observe que las interfaces que aparecen en las líneas `auto' son
     interfaces físicas, no lógicas.


10.8. Reconfiguración mágica de la red
--------------------------------------

     Cuando se ejecuta `ifup', los nombres de las interfaces lógicas se
     pueden transformar en los nombres de otras interfaces lógicas.  La
     manera en que se transforman los nombres depende de las
     circunstancias.  Por ejemplo, se puede configurar `ifup' para activar
     una determinada interfaz física con la interfaz lógica adecuada entre
     un conjunto de alternativas predefinidas.

     La transformación del nombre de la interfaz lógica ocurre en los
     siguientes casos :
        * Si en la línea de comandos de `ifup' no se da el nombre de la
          interfaz lógica entonces como nombre de interfaz lógica inicial
          se utiliza el nombre de la interfaz física.
        * Si el nombre de la interfaz lógica coincide con el patrón de una
          sección `mapping' entonces se aplica esta transformación para
          generar un nuevo nombre de interfaz lógica.  Esto se realiza
          recursivamente hasta que no haya más coincidencias con el patrón.
        * Si el nombre de la última interfaz lógica corresponde a la
          definición de una interfaz lógica de `/etc/network/interfaces'
          entonces la interfaz física es activada como esta interfaz
          lógica.  Caso contrario `ifup' muesta el mensaje "Ignoring
          unknown interface" y se detiene.
     La sintaxis de una sección `mapping' es la siguiente:
          mapping <patrón>
                  script <nombre_script>
                  [map <script>]

     El script llamado en la sección `mapping' es ejecutado con el nombre
     de la interfaz física como argumento y con el contenido de todas las
     líneas "map" de la sección.  Antes de finalizar, el script muestra el
     resulta de la transformación por la salida estándar.

     Por ejemplo, la siguiente sección `mapping' hará que `ifup' active la
     interfaz `eth0' como interfaz lógica `hogar'.

          mapping eth0
                  script /usr/local/sbin/echo-hogar

     donde `/usr/local/sbin/echo-hogar' es :

          #!/bin/sh
          echo hogar

     Como la transformación se realiza mediante un script, resulta posible
     seleccionar la interfaz lógica basándose en algun tipo de prueba.
     Veamos un ejemplo.  Supongamos que posee dos tarjetas de red
     diferentes: una para el hogar y otra para el trabajo.  El directorio
     `/usr/share/doc/ifupdown/examples/' contiene un script de
     transformación que se puede usar para seleccionar una interfaz lógica
     basándose en la dirección MAC (Media Access Controller).  Primero
     instale el script en un directorio apropiado.

# install -m770 /usr/share/doc/ifupdown/examples/match-mac-address.sh \
   /usr/local/sbin/

     A continuación añada una sección como la siguiente al
     `/etc/network/interfaces':

          mapping eth0
                  script /usr/local/sbin/match-mac-address.sh
                  map 02:23:45:3C:45:3C hogar
                  map 00:A3:03:63:26:93 trabajo

     Programas de transformación más sofisticados se describen en Sección
     10.8.1, `guessnet' y Sección 10.8.2, `laptop-net'.

10.8.1. guessnet
----------------

     Instale `guessnet' y luego añada una sección como la siguiente al
     `/etc/network/interfaces':

          mapping eth0
                  script guessnet-ifupdown
                  map hogar
                  map trabajo

     Ahora al hacer `ifup eth0', `guessnet' verificará si `eth0' tiene que
     activarse como `hogar' o `trabajo'.  Para ello utiliza la información
     almacenada en las definiciones de las interfaces lógicas.

10.8.2. laptop-net
------------------

     El paquete `laptop-net' toma un enfoque diferente para la
     reconfiguración automática de la red.  Laptop-net no utiliza las
     interfaces lógicas de `ifupdown' sino sus propios "esquemas" de
     configuración y "perfiles" de sistemas.  No obstante, laptop-net sigue
     usando `ifupdown' para configurar las interfaces físicas.  Para más
     información consulte la excelente documentación de `laptop-net-doc'.


10.9. Activando la reconfiguración de la red
--------------------------------------------

     Hemos visto como se reconfiguran las interfaces.  La reconfiguración
     necesita realizarse en el momento apropiado.

     Tradicionalmente la red era configurada durante la secuencia de
     arranque mediante el script init `/etc/rcS.d/S40networking' y
     raramente se volvía a configurar.  Los servicios que dependían de la
     red eran lanzados luego durante la secuencia de arranque.  Al apagar o
     reiniciar, los scripts init eran ejecutados en el orden inverso.

     Sin embargo, actualmente existe una tendencia en GNU y Linux al
     soporte de hardware y entornos que cambian dinámicamente.  El primer
     soporte se añadió para la inserción en caliente de tarjetas PCMCIA ;
     más recientemente ha sido incorporado el mecanismo `hotplug' para que
     muchos más periféricos se puedan enchufar y desenchufar mientras la
     máquina se encuentra funcionando.  Esto incluye el hardware de red.
     Observe que los servicios que dependen del hardware que se conecta en
     caliente sólo deben iniciarse luego que el hardware haya sido
     insertado y deben detenerse cuando se hayan eliminado.  Esto significa
     que dichos servicios deben liberarse del control del sistema init
     System V y ponerlos, en cambio, bajo el control de `ifupdown'.

     Por ejemplo, supongamos que el servicio `loquesea' controlado por el
     script init `/etc/init.d/loquesea' depende dinámicamente de la
     interfaz de red reconfigurada `eth0'.
        * Primero elimine `loquesea' del control del sistema init.  Si está
          ultilizando el sistema init `sysv-rc' entonces haga lo siguiente.
          [1]
               # rm /etc/rc?.d/S??loquesea
        * Luego ponga `loquesea' bajo el control de `ifupdown' añadiendo
          las opciones `up' y `down' en la sección `eth0' de
          `/etc/network/interfaces' que contiene las llamadas al script
          init `loquesea':
               iface eth0 inet dhcp
                       up /etc/init.d/loquesea start
                       down /etc/init.d/loquesea stop

[1]  Obsérvese que esto deja de lado a los enlaces "stop"
     (`/etc/rc?.d/K??loquesea').  Deseará retener los enlaces "stop", por
     ejemplo, en los niveles 0 y 6, ya que en su ausencia el paquete
     `loquesea' restaurará todos los enlaces simbólicos rc a su estado
     original durante una actualización.

10.9.1. Activando la configuración de la red durante el arranque
----------------------------------------------------------------

     Al arrancar, el script de init `/etc/rcS.d/S40networking' ejecuta el
     comando `ifup -a'.  Esto activa todas las interfaces físicas que
     aparecen en las secciones `auto' de `/etc/network/interfaces'.

     Actualmente, a menudo resulta mejor manejar la configuración de la red
     usando métodos dinámicos.  Una vez configurados los mecanismos para el
     soporte de hardware que cambia en forma dinámica, resulta más sencillo
     tratar el hardware estático como si fuera dinámico.  El arranque se
     puede considerar como un simple evento hotplug.  (Véase Sección
     10.9.2, `Activando la configuración de la red -- `hotplug''.)

     No obstante, en casi todos los casos uno desea por lo menos que la
     interfaz de retorno (loopback) `lo' se active en el arranque.  Por lo
     tanto, asegúrese que `/etc/network/interfaces' incluya las siguientes
     líneas:

          auto lo
          iface lo inet loopback

     Puede listar los nombres de interfaces físicas adicionales en las
     secciones `auto' si desea que también se activen durante el arranque.
     _Nunca_ incluya las interfaces PCMCIA en las secciones `auto'.
     `cardmgr' se inicia durante el arranque luego de
     `/etc/rcS.d/S40networking'.

10.9.2. Activando la configuración de la red -- `hotplug'
---------------------------------------------------------

     Para el soporte del arranque en caliente instale el paquete `hotplug'.

     El hardware de red se puede enchufar en caliente ya sea durante el
     arranque, tras haber insertado la tarjeta en la máquina (una tarjeta
     PCMCIA, por ejemplo), o luego que una utilidad como `discover' se haya
     ejecutado y cargado los módulos necesarios.  [1]

     Cuando el kernel detecta nuevo hardware inicializa el controlador para
     el hardware y luego ejecuta el programa `hotplug' para configurarlo.
     Si más tarde se elimina el hardware, ejecuta nuevamente `hotplug' con
     parámetros diferentes.  En Debian, cuando se llama a `hotplug' éste
     ejecuta los scripts de `/etc/hotplug/' y `/etc/hotplug.d/'.  Véase
     hotplug(8) para más detalles.

     El hardware de red recientemente conectado es configurado por el
     `/etc/hotplug/net.agent'.  [2] Supongamos que su tarjeta de red PCMCIA
     ha sido conectada lo que implica que la interfaz `eth0' esta lista
     para usar.  `/etc/hotplug/net.agent' hace lo siguiente:

          ifup eth0=hotplug

     A menos que haya añadido una interfaz lógica llamada `hotplug' en
     `/etc/network/interfaces', este comando no hará nada.  Para que este
     comando configure `eth0', añada las siguientes líneas al
     `/etc/network/interfaces':

          mapping hotplug
                  script echo

     Como se explicó en Sección 10.7, `_Re_configuración de la red' esto
     transformará el comando mostrado arriba de modo que sea equivalente al
     siguiente:

          ifup eth0=eth0

     (_No_ incluya una sección de este tipo si también posee una sección
     `ifplugd' para la misma interfaz como se describió en Sección 10.9.3,
     `Activando la configuración de la red -- `ifplugd''.)

     Si sólo desea que `eth0' se active en caliente y no otras interfaces
     utilice `grep' en vez de `echo' como se muestra a continuación :

          mapping hotplug
                  script grep
                  map eth0

     Véase Sección 10.8, `Reconfiguración mágica de la red' y
     /usr/share/doc/hotplug/README.Debian para más trucos.

[1]  Si su sistema inicia `discover' en `/etc/rcS.d/S36discover', debe
     moverlo a `/etc/rcS.d/S40discover'.  Véase fallo #208155
     (http://bugs.debian.org/208155).

[2]  También puede ser configurado por cualquiera de los scripts que han
     sido instalados en `/etc/hotplug.d/net/'.

10.9.3. Activando la configuración de la red -- `ifplugd'
---------------------------------------------------------

     `ifplugd' activa o desactiva una interfaz según si el hardware
     subyacente está o no conectado a la red.  El programa puede detectar
     un cable conectado a una interfaz Ethernet o un punto de acceso
     asociado a una interfaz Wi-Fi.  Cuando `ifplugd' ve que el estado del
     enlace ha cambiado ejecuta un script que por defecto ejecuta `ifup' o
     `ifdown' para la interfaz.

     `ifplugd' funciona correctamente en combinación con `hotplug'.  Al
     insertar una tarjeta, lo que significa que la interfaz está lista para
     usar, `/etc/hotplug.d/net/ifplugd.hotplug' inicia una instancia de
     `ifplugd' para dicha interfaz.  Cuando `ifplugd' detecta que la
     tarjeta es conectada a una red, ejecuta `ifup' para esta interfaz.

     Véase el archivo README del paquete `waproamd' para más información.

10.9.4. Activando la configuración de la red -- `waproamd'
----------------------------------------------------------

     Para asociar una tarjeta Wi-Fi con un punto de acceso puede que
     necesite programarla con una clave de cifrado WEP adecuada.  Si está
     utilizando `ifplugd' para controlar `ifup' como se explicó en Sección
     10.9.3, `Activando la configuración de la red -- `ifplugd'' entonces
     evidentemente no podrá configurar la clave de cifrado usando `ifup' ya
     que éste sólo es llamado luego que la tarjeta ha sido asociada.  Una
     solución posible consiste en programar todas las claves necesarias en
     la memoria no volátil de la tarjeta Wi-Fi.  Pero si deambula por
     diversas redes su tarjeta Wi-Fi puede no ser capaz de almacenar
     suficientes claves.

     Otra solución consiste en usar `waproamd' que configura la clave de
     cifrado WEP según los puntos de acceso disponibles que se descubren
     mediante escaneo.

     `waproamd' funciona perfectamente con `hotplug'.  Al insertar una
     tarjeta, lo que implica una interfaz lista para usar,
     `/etc/hotplug.d/net/waproamd.hotplug' inicia una instancia de
     `waproamd' para dicha interfaz.

     Para más información, véase el archivo README del paquete `waproamd'.

10.9.5. Configuración de la red y PCMCIA
----------------------------------------

     Si utiliza tarjetas de red PCMCIA de 16 bits entonces debe añadir
     `CARDMGR_OPTS="-f"' al `/etc/default/pcmcia'.  Esto enlentece un poco
     el proceso de inicialización pero evita una situación de concurrencia
     (condición de carrera) ejecutando `cardmgr' en segundo plano hasta que
     hayan sido configuradas todas las tarjetas PCMCIA de 16 bits.

     Aunque por defecto `/etc/init.d/pcmcia' se ejecuta desde
     `/etc/rc2.d/S20pcmcia' puede ubicarlo antes, por ejemplo, en
     `/etc/rc2.d/S12pcmcia' para aseugrarse que el subsistema PCMCIA se
     inicialice antes de arrancar los servicios de red en S20.

     Existen diversas maneras para configurar las interfaces de red PCMCIA.
        * Para tarjetas de red PCMCIA PCI de 32 bits (CardBus):
             * `hotplug' / `ifupdown'
        * Para tarjetas de red PCMCIA ISA de 16 bits:
             * `hotplug' / `ifupdown' con `/etc/pcmcia/network' desactivado
               (recomendado), o
             * `pcmcia-cs' / `ifupdown' con `/etc/pcmcia/network' por
               defecto (obsoleto), o
             * `pcmcia-cs' personalizado para habilitar características de
               `/etc/pcmcia/network' (obsoleto)

     La manera recomendada para tarjetas de 16 bits aprovecha el hecho que
     el subsistema _hotplug_ de Linux 2.4 ahora soporta PCMCIA.
     Simplemente siga las instrucciones de Sección 10.9.2, `Activando la
     configuración de la red -- `hotplug''.  [1] Sin embargo, nótese que
     afin de evitar que el script `/etc/pcmcia/network' de `cardmgr' no
     interfiera con `hotplug' debe añadir la línea:

          exit 0

     al comienzo de `/etc/pcmcia/network' para desactivar su comportamiento
     predeterminado.

     Obsérvese que no hay nada de malo ejecutar `cardmgr'.  Simplemente, no
     deseamos que llame a los programas de configuración de red.

     Para que `cardmgr' funcione correctamente puede que necesite editar
     `/etc/pcmcia/config.opts' a fin de configurar los recursos asignados a
     las tarjetas PCMCIA de 16 bits.  Véase Sección 7.2.1, `PCMCIA' y el
     Linux PCMCIA HOWTO (http://www.tldp.org/HOWTO/PCMCIA-HOWTO.html) para
     más información.

[1]  En las versiones anteriores de Debian la manera estándar para
     configurar las tarjetas de red PCMCIA consistía en usar `cardmgr'
     junto con los scripts `/etc/pcmcia/network' y
     `/etc/pcmcia/network.opts'.  Estos scripts fueron desarrollados en la
     época en que Linux todavía no había desarrollado el método más general
     _hotplug_.

     Algunas personas aún usan estos scripts en su configuración
     predeterminada que simplemente llaman a `ifup' luego que se añade la
     interfaz y a `ifdown' cuando se la elimina.  Como se observó arriba,
     actualmente se recomienda usar `hotplug'.

     Otros recurren directamente a comandos de configuración de red de bajo
     nivel que se activan cuando ciertas variables de
     `/etc/pcmcia/network.opts' se inicializan en "`y'".  Este sistema
     tiene diversos inconvenientes.  Es afectado por condiciones de
     carrera; sólo funciona con tarjetas PCMCIA de 16 bits; hace lo mismo
     que hace `ifupdown'.  Por lo tanto, es obsoleto.


10.10. Configuración de los servicios de red
--------------------------------------------

     La configuración típica de los servicios de red en un entorno de
     escritorio o servidor hogareño incluye:
        * El _superservidor_ de Internet y envoltorio de demonios TCP/IP,
          véase Sección 9.2.5, `Control de accesos a los demonios'.
             * `/etc/inetd.conf'
        * `ssh': shell segura OpenSSH, véase Sección 9.5, `SSH'.
             * `/etc/ssh/ssh_config'
             * `/etc/ssh/sshd_config'
        * `exim': agente de transporte de correo, véase Sección 10.3.2,
          `Nombre para el correo' y Sección 9.6.1, `Agente de transporte de
          correo (MTAs)'.
             * `/etc/exim/exim.conf'
             * `/etc/mailname'
             * `/etc/aliases'
             * `/etc/email-addresses'
        * `fetchmail': demonio para descargar el correo de una cuenta POP3,
          véase Sección 9.6.2, `Utilidad de correo (Fetchmail)'.
             * `/etc/fetchmailrc'
        * `procmail': programa para filtrar y distribuir el correo local,
          véase Sección 9.6.3, `Utilidad de correo (Procmail)'.
             * `~/.procmailrc'
        * Nombre de la máquina y DNS (proxy, caché, ...), véase Sección
          10.3.1, `Nombre de la máquina' y Sección 10.4, `Servicio de
          Nombres de Dominio (DNS)'.
             * `/etc/host.conf'
             * `/etc/hostname'
             * `/etc/hosts'
             * `/etc/hosts.allow'
             * `/etc/hosts.deny'
             * `/etc/resolv.conf'
             * `/etc/bind/named.conf' (editar)
             * `/etc/bind/db.lan' (añadir para los equipos de una LAN)
             * `/etc/bind/db.<192.168.0>' (añadir para el DNS inverso de
               una LAN)
        * DHCP, véase Sección 10.5, `Configurando las interfaces de red
          usando DHCP'.
             * `/etc/dhcp3/dhclient.conf' (DHCP del lado del cliente)
             * `/etc/default/dhcp3-server' (DHCP del lado del servidor)
             * `/etc/dhcp3/dhcpd.conf' (DHCP del lado del servidor)
        * `cvs': sistema de versiones concurrentes, véase Sección 12.1,
          `Sistema de versiones concurrentes (CVS)'.
             * `/etc/cvs-cron.conf'
             * `/etc/cvs-pserver.conf'
        * `nfs-kernel-server': sistema de archivos de red, véase Sección
          3.4, `Configuración NFS'.  (para sistemas tipo UNIX)
             * `/etc/exports'
        * `samba': archivos de red y compartición de impresoras en redes
          Windows, véase Sección 3.5, `Configuración de Samba' y Sección
          8.6.37, `Samba'.
             * `/etc/samba/smb.conf'
        * Demonio para el sistema de impresión, véase Sección 3.6,
          `Configuración de la impresora'.
             * `/etc/printcap' (para lpr)
        * `apache' y `apache2': servidor web.
             * `/etc/apache/*'
             * `/etc/apache2/*'
        * `squid': servidor proxy-caché.
             * `/etc/squid/*'


10.11. Resolución de problemas en la red
----------------------------------------

     Si tropieza con problemas verifique la salida de los siguientes
     comandos para obtener una primera idea :

          # ifconfig
          # cat /proc/pci
          # cat /proc/interrupts
          # dmesg | more

     También véase las siguientes secciones Sección 8.6.28, `Probando la
     red'.

     Si tiene problemas con ciertos sitios web, véase Sección 3.7.5,
     `Problemas extraños al acceder a ciertos sitios de Internet'.


10.12. Configurando una puerta de enlace
----------------------------------------

     Una máquina Debian puede ser una puerta de enlace multipropósito que
     haga la Traducción de las Direcciones de Red (NAT, también conocida
     como enmascaramiento), la transferencia de correo, DHCP, caché DNS,
     caché HTTP, servidor CVS, servidor NFS y servidor Samba.  Véase
     Sección 3.1.9, `Máquinas IP para usar en una LAN' para un ejemplo de
     esta configuración.

10.12.1. Configuración de netfilter
-----------------------------------

     El proyecto netfilter/iptables es un sistema de firewall para Linux
     2.4 y posteriores.  Véase Netfilter (http://www.netfilter.org/) donde
     se explican diversos temas sobre la configuración de redes.

10.12.1.1. Principios básicos de netfilter
------------------------------------------

     Netfilter procesa los paquetes mediante 5 cadenas incorporadas:
     PREROUTING, INPUT, FORWARD, OUTPUT, y POSTROUTING.

                          decisión de
          interfaz        enrutado                                     interfaz
          IN ------> PRE ---> ------> FORWARD -----> ----> POST -----> OUT
                     ROUTING  \       filter       /       ROUTING
                     DNAT     |       tracking     ^       SNAT
                     REDIRECT |       seguimiento  |       MASQUERADE
                              v                    |
                            INPUT                OUTPUT
                              | filtro             ^ filtro,DNAT
                              v                    |
                              \--> Proceso Local --/
                                      programas del espacio de usuario

10.12.1.2. Tabla netfilter
--------------------------

     Los paquetes son procesados por cada cadena según la siguiente tabla.
        * filter (filtro de paquetes, predeterminado)
             * INPUT (para los paquetes que llegan a la máquina)
             * FORWARD (para los paquetes encaminados por la máquina)
             * OUTPUT (para los paquetes generados localmente).
        * nat (Network Address Translation o Traducción de Direcciones de
          Red)
             * PREROUTING (para modificar los paquetes tan pronto lleguen)
             * OUTPUT (para modificar los paquetes generados localmente
               antes de encaminarlos)
             * POSTROUTING (para modificar los paquetes a punto de salir)
        * manipulación (manipulación de direcciones de red, efectiva a
          partir de la versión 2.4.18)
             * las 5 cadenas incluidas.

10.12.1.3. Objetivos de Netfilter
---------------------------------

     Las reglas de firewall poseen diversos objetivos:
        * los 4 objetivos básicos:
             * ACCEPT significa dejar pasar el paquete.
             * DROP significa descartar el paquete.
             * QUEUE significa pasar al paquete al espacio de usuario (si
               es soportado por el kernel).
             * RETURN significa detener el paso en la cadena y continuar
               con la regla siguiente de la cadena anterior.
        * otros objetivos:
             * LOG activa los registros del kernel.
             * REJECT reenvía un paquete con error y descarta el paquete.
             * SNAT modifica la dirección de origen del paquete y se usa
               únicamente en la cadena POSTROUTING (tabla nat únicamente)
                    --to-source  ipaddr[-ipaddr][:port-port]
             * MASQUERADE es lo mismo que SNAT pero para direcciones IP
               asignadas en forma dinámica (conexión telefónica).  (tabla
               nat únicamente)
                    --to-ports port[-port]
             * DNAT modifica la dirección de destino del paquete y se usa
               en las cadenas PREROUTING, OUTPUT y las cadenas definidas
               por el usuario que se llaman únicamente desde dichas cadenas
               (tabla nat únicamente)
                    --to-destination ipaddr[-ipaddr][:port-port]
             * REDIRECT modifica la dirección IP de destino para enviar el
               paquete a la propia máquina.
                    --to-ports port[-port]

10.12.1.4. Los comandos netfilter
---------------------------------

     Los comandos básicos de `iptables' son:
iptables -N <cadena>                   # crear una <cadena>

iptables -A <cadena> \                 # añadir regla a la <cadena>
         -t <tabla> \                  # usar <tabla> (filtro, nat, mangle)
         -p <protocolo> \              # tcp, udp, icmp, or all,
         -s <dirección-fuente[/mask]> \
         --sport <puerto[:port]> \     # puerto de origen si -p es tcp o udp
         -d <dirección-destino[/mask]> \
         --dport <puerto[:port]> \     # puerto de destino si -p es tcp o udp
         -j <objetivo> \               # qué hacer si coincide
         -i <nombre-interfaz-entrada> \# para INPUT,  FORWARD, PREROUTING
         -o <nombre-interfaz-salida>   # para FORWARD, OUTPUT, POSTROUTING

10.12.1.5. Traducción de las direcciones de red
-----------------------------------------------

     Las máquinas de una LAN pueden acceder a los recursos de Internet a
     través de una puerta de enlace que utiliza enmascaramiento IP (NAT)
     compartiendo una única dirección IP accesible desde el exterior

          # apt-get install ipmasq

     Aplique las reglas de ejemplo para mejorar la protección `ipmasq'.
     Consulte `/usr/share/doc/ipmasq/examples/stronger/README'.  Para el
     paquete kernel-image-2.4 de Debian asegúrese de cargar los módulos
     adecuados.  Véase Sección 7.2.3, `Funciones de Red' para efectuar la
     correspondiente configuración.

     Para el paquete kernel-image-2.2 de Debian, edite de la siguiente
     manera `Z92timeouts.rul' en `/etc/masq/rules' para asegurar una
     conexión más duradera con sitios distantes (conveniente para mensajes
     de correo grandes, etc.):

          # tcp, tcp-fin, udp
          # 2hr, 10 seg, 160 seg - predeterminado
          # 1 día, 10 min, 10 min - modificación
          $IPCHAINS -M -S 86400 600 600

     Asimismo, si se accede a la red mediante una tarjeta de red PCMCIA,
     `ipmasq' necesita iniciarce desde `/etc/pcmcia/network.opts'.
     (consulte: /usr/share/doc/ipmasq/ipmasq.txt.gz) o desde
     `/etc/network/interfaces' (consulte: Sección 10.9.5, `Configuración de
     la red y PCMCIA' y Sección 10.9, `Activando la reconfiguración de la
     red').

10.12.1.6. Redireccionar una conexión SMTP (2.4)
------------------------------------------------

     Supongamos que tiene una PC portátil configurada para otro entorno de
     red y que desea usar su programa de correo sin tener que
     reconfigurarla.

     Añadiendo las siguientes reglas mediante el comando `iptables' en la
     puerta de enlace, la conexión SMTP será redirigida hacia ella.

# iptables -t nat -A PREROUTING -s 192.168.1.0/24 -j REDIRECT \
           -p tcp --dport smtp --to-port 25 # smtp=25, INPUT se encuentra abierta

     Para el redireccionamiento de un conjunto de reglas más complejo
     considere instalar el paquete `ipmasq' y agregue `M30redirect.def
     (http://www.debian.org/doc/manuals/debian-reference/examples/)' en el
     directorio `/etc/ipmasq/rules/'.

10.12.2. Administrando múltiples conexiones de red
--------------------------------------------------

     [FIXME] Política de encaminamiento (por Phil Brutsche
     <pbrutsch@tux.creighton.edu>): Ver el iproute manual
     (http://lartc.org/) para más detalles.  El control de tráfico (tc)
     puede ser también interesante.

     Entorno:

          eth0: 192.168.1.2/24; puerta de enlace 192.168.1.1
          eth1: 10.0.0.2/24; puerta de enlace 10.0.0.1
          Sin enmascaramiento en esta máquina.

     Algo de magia:
     1.   ip rule add from 192.168.1.2 lookup 1
     2.   ip rule add from 10.0.0.2 lookup 2
     3.   ip route add to default via 10.0.0.1 metric 0
     4.   ip route add to default via 192.168.1.1 metric 1
     5.   ip route add table 1 to 192.168.1.0/24 via eth0
     6.   ip route add table 1 to 10.0.0.2/24 via eth1
     7.   ip route add table 1 to default via 192.168.1.1
     8.   ip route add table 2 to 192.168.1.0/24 via eth0
     9.   ip route add table 2 to 10.0.0.2/24 via eth1
     10.  ip route add table 2 to default via 10.0.0.2

     [FIXME] Nunca hice esto.  ¿Cómo configurar una conexión telefónica
     como respaldo de una conexión rápida y automática?  Por favor,
     envíenme un parche :)


-------------------------------------------------------------------------------


11. Editores
------------


11.1. Editores populares
------------------------

     Linux ofrece muchas alternativas en cuanto a editores de texto.
     Citemos algunos:
        * `gim': poderoso y pequeño editor patrimonio del BSD.  Del inglés,
          VI iMproved.
        * `emacs': el editor definitivo patrimonio del GNU.  Original de
          RMS (Richard M.  Stallman).
        * `xemacs': Emacs: La Próxima Generación, originaria de Lucid.
        * `mcedit': editor GNU para principiantes.  Idéntico al editor
          interno del mc.  Véase Sección 4.3.5, `Editor'
        * `ae': pequeño editor que trae por defecto Potato.  Evítelo.
        * `nano': pequeño editor GNU que trae por defecto Woody.  Emula a
          `pico'.
        * `joe': para los nostálgicos usuarios del WordStar o TurboPascal.
        * `jed': editor rápido, con múltiples funciones, basado en menúes y
          con las combinaciones de teclas de emacs.
        * `jove': editor muy pequeño con las combinaciones de teclas de
          emacs.
        * `nvi': el nuevo vi.  Totalmente compatible con el vi original.

     Utilice el comando `update-alternatives --config editor' para cambiar
     el editor por defecto.  Asimismo, muchos programas utilizan las
     variables de entorno `EDITOR' o `VISUAL' para decidir qué editor
     utilizar.  Véase Sección 4.3.5, `Editor'.

     Vale la pena mencionar también algunos editores de texto basados en X:
        * `gvim': Vim con GUI (paquetes `vim' y `vim-gtk')
        * `emacs': el Único y Verdadero Emacs (autodetecta X).
        * `xemacs': Emacs de la próxima generación (autodetecta X).
     Estos comandos aceptan las opciones estándar tales como `-fn <a24>',
     que facilitan la vida a gente grande como yo :) Véase Sección 9.4.4,
     `El cliente X'.


11.2. Editores de rescate
-------------------------

     Existen unos pocos editores situados en `/bin/'.  Debería instalarse
     uno de ellos para facilitar la edición de archivos cuando `/usr/' no
     se encuentre accesible.

        * `elvis-tiny': editor vi mínimo (`vi' para comenzar)
        * `nano-tiny': editor mínimo (`nano-tiny' para comenzar)
        * `ed': editor mínimo (siempre allí pero difícil de usar)


11.3. Emacs y Vim
-----------------

11.3.1. Comandos útiles en Vim
------------------------------

     Lea el "archivo de ayuda principal de VIM" presionando <F1> mientras
     ejecuta el programa.

          <F1>           Ayuda
          <esc>          Retorno al modo normal
          V              Modo visual
          i              Modo edición
          :              Modo línea de comandos
          :set tw=72     Establecer el ancho de texto en 72
          <F11>          Modo edición (pegar)
          :r! date -R    Inserta la fecha según la RFC-822
          q<a>             Grabar lo que se escribe en el registro <a>
          q              Detiene la grabación
          @<a>             Ejecutar lo que se escribió en el registro <a>
          :edit <loquesea.txt>  Edite otro archivo cargando <loquesea.txt>
          :wnext         Grabar el archivo actual y editar el siguiente archivo

     `q' y `@' pueden utilizarse para grabar y reproducir macros sencillas.
     Por ejemplo, para crear una macro que inserte etiquetas HTML para
     cursiva alrededor de una palabra escriba `qii<i>^[ea</i>^[q' (donde
     `^[' es la tecla ESC).  Entonces, al escribir `@i' al inicio de una
     palabra se le añadirán la etiquetas <i> y </i>.

     Véase también Sección 14.4.2, `Usando GnuPG con Vim'.

11.3.2. Comandos útiles en Emacs
--------------------------------

          <F1>                Ayuda
          <F10>               Menú
          C-u M-! date -R     Inserta la fecha RFC-822

11.3.3. Ejecutando el editor
----------------------------

Iniciar el editor:                  emacs nom_archivo   vim nom_archivo
Iniciar el modo compatible con vi:                      vim -C
Iniciar el modo no compatible con vi:                   vim -N
Iniciar con el compilador por defecto: emacs -q         vim -N -u NONE

11.3.4. Resumen de los comandos del editor (Emacs, Vim)
-------------------------------------------------------

Salir:                              C-x C-c             :qa /:wq /:xa /:q!
Volver al modo comando:             C-g                 <esc>
Retroceder (flecha izquierda):      C-b                 h
Avanzar (flecha derecha):           C-f                 l
Siguiente (flecha hacia abajo):     C-n                 j
Anterior (flecha hacia arriba):     C-p                 k
Comienzo de línea (^):              C-a                 0
Final de línea ($):                 C-e                 $
Comandos múltiples:                 C-u nnn cmd         :nnn cmd
Comandos múltiples:                 M-número cmd
Guardar archivo:                    C-x C-s             :w archivo
Comienzo del búfer:                 M-<              1G
Final del búfer:                    M->              G
Avanzar 1 pantalla:                 C-v                 ^F
Avanzar 1/2 pantalla:                                   ^D
Avanzar una 1 línea:                                    ^E
Retroceder 1 pantalla:              M-v                 ^B
Retroceder 1/2 pantalla:                                ^U
Retroceder 1 línea:                                     ^Y
Ir a la otra ventana:               M-C-v
Borrar bajo el cursor:              C-d                 x
Borrar desde el cursor al final de la línea:
                                    C-k                 D
Búsqueda incremental hacia adelante: C-s
Búsqueda incremental hacia atrás:    C-r
Buscar hacia adelante:              C-s enter           /
Buscar hacia atrás:                 C-r enter           ?
Búsqueda incremental exp. reg:      M-C-s
Búsqueda incremental hacia atrás exp. reg: M-C-r
Buscar expresión regular:           M-C-s enter         /
Búsqueda hacia atrás exp. reg:      M-C-r enter         ?
Ayuda:                              C-h C-h             :help
Ayuda Apropos:                      C-h a
Ayuda combinaciones de teclas       C-h b               :help [tecla]
Ayuda Info:                         C-h i
Ayuda modo mayor:                   C-h m
Ayuda tutorial:                     C-h t               :help howto
Deshacer:                           C-                  u
Rehacer:                            C-f                 ^R
Marcar posición del cursor:         C-@                 m{a-zA-Z}
Intercambiar marca y posición:      C-x C-x
Ir a la marca del archivo actual:                       '{a-z}
Ir a la marca en cualquier archivo:                     '{A-Z}
Copiar región:                      M-w                 {visual}y
Borrar región:                      C-w                 {visual}d
Copiar y conservar en el búfer:     C-y
Pegar desde el siguiente búfer:     M-y                 p
Convertir una región en mayúsculas: C-x C-u             {visual}U
Convertir una región en minúsculas: C-x C-l             {visual}u
Insertar un carácter especial:      C-q numoctal/tecla  ^V decimal/tecla
Reemplazar:                         M-x replace-string  :%s/aaa/bbb/g
Reemplazar expreg:                  M-x replace-regexp  :%s/aaa/bbb/g
Buscar y reemplazar:                M-%                 :%s/aaa/bbb/gc
Buscar y reemplazar:                M-x query-replace
Buscar y reemplazar exp. reg:       M-x query-replace-regexp
Abrir archivo:                      C-x C-f             :r archivo
Guardar archivo:                    C-x C-s             :w
Guardar todos los búferes:          C-x s               :wa
Guardar como:                       C-x C-w archivo     :w archivo
Pedir un búfer:                     C-x b
Listar búferes:                     C-x C-b             :buffers
Cambiar a sólo lectura:             C-x C-q             :set ro
Pedir y eliminar búfer:             C-x k
División vertical:                  C-x 2               :split
División horizontal:                C-x 3               :vsplit (ver. 6)
Moverse a otra ventana:             C-x o               ^Wp
Eliminar esta ventana:              C-x 0               :q
Eliminar otra(s) ventana(s):        C-x 1               ^Wo
Ejecutar shell en bg:               M-x compile
Matar shell en bg:                  M-x kill-compilation
Ejecutar make:                                          :make Makefile
Analizar mensaje de error:          C-x`                :echo errmsg
Ejecutar shell y grabar:            M-x shell           :!script -a tmp
...clean BS, ...                                   :!col -b <tmp >record
...guardar/recordar grab. del shell: C-x C-w record     :r record
Ejecutar shell:                     M-! sh              :sh
Ejecutar comando:                   M-! cmd             :!cmd
Ejecutar comando e insertar:        C-u M-! cmd         :r!cmd
Ejecutar filtro:                    M-| archivo         {visual}:w archivo
Ejecutar filtro e insertar:         C-u M-| filter      {visual}:!filter
Mostrar opción                                          :se[t] {option}?
Volver opción a valor predeterminado                    :se[t] {option}&
Resetea opción booleana                                 :se[t] no{option}
Conmutar una opción booleana                            :se[t] inv{option}
Ajustar el texto en 72 columnas                         :se tw=72
No ajustar texto                                        :se tw=0
Sangrado automático                                     :se ai
Expandir tabulación                                     :se et
Especificar comentario (correo)                    :se comments=n:>,n:\|

Ejecutar GDB                        M-x gdb
Describe el modo GDB                C-h m
Saltar una línea                    M-s
Siguiente línea                     M-n
Saltar una instrucción (stepi)      M-i
Finalizar el marco de la pila actual C-c C-f
Continuar                           M-c
up arg frames                       M-u
down arg frames                     M-d
Copiar número a partir del punto, insertar al final
                                    C-x &
Colocar un punto de ruptura         C-x SPC

11.3.5. Configuración de Vim
----------------------------

     Para utilizar todas las características de Vim y el resaltado de
     sintáxis incluya las siguientes líneas en el `~/.vimrc' o
     `/etc/vimrc':

          set nocompatible
          set nopaste
          set pastetoggle=<f11>
          syn on

     El modo 'paste' permite evitar que el sangrado automático interfiera
     con las operaciones pegar/cortar en una terminal o consola.  Es mejor
     que escribir simplemente ":set noai".

     Véase Sección 14.4.2, `Usando GnuPG con Vim' para integración con
     GnuPG.

11.3.6. Ctags
-------------

     `apt-get install exuberant-ctags' y ejecute `ctags' sobre los archivos
     fuente.  En vim escriba `:tag <nombre_función>' para ir a la línea
     donde comienza <nombre_función>.  Las marcas funcionan para C, C++,
     Java, Python y muchos otros lenguajes de programación.

     Emacs utiliza las mismas ctags.

11.3.7. Convertir un porción de texto seleccionado en código HTML
-----------------------------------------------------------------

     `so \$VIMRUNTIME/syntax/2html.vim' desde el modo comando de Vim
     convertirá el texto seleccionado en código HTML.  Guárdelo como `:w
     archivo.html' y luego escriba `:q'.  Útil cuando se programa en C,
     etc.

11.3.8. Dividir la pantalla con `vim' puede editar múltiples archivos en un
entorno de múltiples ventanas. Escriba ":help usr_08.txt" para más
detalles.
----------------------------------------------------------------------------

     Para dividir la pantalla para mostrar diferentes archivos, escriba en
     la línea de comandos de vi:

          :split otro-archivo
          :vsplit otro-archivo

     o en la línea de comandos del shell:

          $ vi -o archivo1.txt archivo.txt    # División horizontal
          $ vi -O archivo1.txt archivo2.txt   # División vertical

     en ambos casos se podrá trabajar con múltiples ventanas.

          $ vimdiff archivo.txt~ archivo.txt
          $ gvimdiff archivo.txt~ archivo.txt # en X

     proporcionan una vista muy cómoda para comparar un archivo con su
     copia de respaldo.  En SGML analiza las etiquetas y por lo tanto
     resulta muy útil cuando se trata de comparar traduciones.

     Movimientos del cursor especiales con los comandos Ctrl-W:

          Ctrl-W +      incrementar el tamaño de una ventana
          Ctrl-W -      disminuir el tamaño de una ventana
          Ctrl-W h      ir a la ventana izquierda
          Ctrl-W j      ir a la ventana inferior
          Ctrl-W k      ir a la ventana superior
          Ctrl-W l      ir a la ventana derecha
          ...

     Los siguientes comandos permiten controlar el desplazamiento de la
     pantalla:

          :set scrollbind
          :set noscrollbind


-------------------------------------------------------------------------------


12. Sistemas de control de versiones
------------------------------------


12.1. Sistema de versiones concurrentes (CVS)
---------------------------------------------

     Consulte `/usr/share/doc/cvs/html-cvsclient',
     `/usr/share/doc/cvs/html-info', `/usr/share/doc/cvsbook' con la ayuda
     de lynx o ejecute `info cvs' o `man cvs' para una información más
     detallada.

12.1.1. Instalar el servidor CVS
--------------------------------

     La siguiente configuración permite que sólo un miembro del grupo "src"
     pueda hacer envíos al repositorio CVS (mediante el comando 'commit') y
     que la administración del CVS pueda llevarse a cabo únicamente por un
     miembro del grupo "staff" de modo de reducir las posibilidades de
     conflicto.

          # cd </var/lib>; umask 002 ; mkdir <cvs> # [Woody] FSH
          # apt-get install cvs cvs-doc cvsbook
          # export CVSROOT=</var/lib/cvs>
          # cd $CVSROOT
          # chown root:src .         # "staff": restricción importante para un
                                     #  proyecto nuevo
          # chmod 3775 .             #  Si usa "staff", escribir 2775
          # cvs -d </var/lib/cvs> init #  ¡resulta más seguro especificar
                                     #  explícitamente -d!
          # cd CVSROOT
          # chown -R root:staff .
          # chmod 2775 .
          # touch val-tags
          # chmod 664 history val-tags
          # chown root:src history val-tags

12.1.2. Sesiones CVS de ejemplo
-------------------------------

     Lo siguiente configurará el intérprete de comandos para acceso al
     repositorio CVS.

12.1.2.1. CVS anónimo (únicamente para descargar)
-------------------------------------------------

     Acceso de sólo lectura:

          $ export
          CVSROOT=:pserver:<anonymous@cvs.sf.net:/cvsroot/qref>
          $ cvs login
          $ cvs -z3 co <qref>

12.1.2.2. Uso del servidor CVS local
------------------------------------

     Acceso local desde el intérprete de comandos en la misma máquina:

          $ export CVSROOT=</var/lib/cvs>

12.1.2.3. Uso del pserver en un CVS remoto
------------------------------------------

     Acceso remoto sin SSH (uso del protocolo RSH en el `cvs')

          $ export CVSROOT=:pserver:<cuenta@cvs.loquesea.com:/var/lib/cvs>
          $ cvs login

     Propenso a ataques espías.

12.1.2.4. Uso de un CVS remoto mediante `ssh'
---------------------------------------------

     Acceso remoto con SSH:

          $ export CVSROOT=:ext:<cuenta@cvs.loquesea.com:/var/lib/cvs>

     o para SourceForge:

          $ export CVSROOT=:ext:<cuenta@cvs.sf.net:/cvsroot/qref>

     También puede utilizar la autenticación RSA (Sección 9.5.3,
     `Conectarse con pocas contraseñas'), que evita la solicitud de la
     contraseña.

12.1.2.5. Crear un archivo CVS nuevo
------------------------------------

     Para,

ITEM                  VALOR                           SIGNIFICADO
Árbol del proyecto:   ~/<proyecto-x>         Todos los archivos fuente
Nombre del proyecto:  <proyecto-x>           Nombre para este proyecto
Nombre del proveedor: <Rama-principal>       Etiqueta para toda la rama
Etiqueta de versión:  <Versión-inicial>      Etiqueta para una versión
                                                      específica

     Entonces,

$ cd ~/<proyecto-x>          # para entrar en el directorio del proyecto
 ... crear un árbol ...
$ cvs import -m <"Comienzo del proyecto-x" proyecto-x Rama-principal Versión-inicial>
$ cd ..; rm -R <~/proyecto-x>

12.1.2.6. Trabajando con CVS
----------------------------

     Para recordar y trabajar con los fuentes locales del <proyecto-x> en
     un archivo CVS:

$ cd                            # para ubicarse en la zona de trabajo.
$ cvs co <proyecto-x>             # copia los fuentes del repositorio CVS
                                # a la máquina local
$ cd <proyecto-x>
 ... efectuar los cambios ...
$ cvs diff -u                   # similar a diff -u repository/ local/
$ cvs ci -m "<Describir cambio>"  # guarda los fuentes locales en el CVS
$ vi <archivo_nuevo>
$ cvs add <archivo_nuevo>
$ cvs ci -m "<Se añadió archivo_nuevo>"
$ cvs up                  # actualiza a la última versión del CVS
 ... cuidado con las líneas que comienzan con "C <nombre_archivo>"
 ... el código sin modificar se renombra como `.#<nombre_archivo>.version'.
 ... Busque "<<<<<<<" y ">>>>>>>" en
     <nombre_archivo>.

$ cvs tag <Release-1>       # añade etiqueta de versión
... hacer otras modificaciones ...
$ cvs tag -d <Release-1>    # elimina etiqueta de versión
$ cvs ci -m "<otros comentarios>"
$ cvs tag <Release-1>       # vuelve a añadir la etiqueta de versión
$ cd                      # para volver al área de trabajo.
$ cvs co -r <Versión-inicial> -d <antiguo> <proyecto-x>
... obtiene la versión original y la ubica en el directorio '<antiguo>'
$ cd antiguo
$ cvs tag -b <Versión-inicial-modif> # crea la etiqueta de la rama (-b)
 ... ahora puede trabajar sobre la versión original (Etiqueta=sticky)
$ cvs update -d -P    # no crea directorios vacíos
 ... el árbol de fuentes tiene ahora la etiqueta sticky "Versión-inicial-modif"
 ... trabaje en esta rama
$ cvs up -d -P        # sicroniza los cambios en la rama con el resto
$ cvs ci -m "<verificación hecha en la rama>"
$ cvs update -kk -A -d -P
 ... elimina la etiqueta sticky y descarta el contenido
 ... actualiza  desde el tronco principal sin reemplazar palabras claves
$ cvs update -kk -d -P -j <Versión-inicial-modif>
 ... Añade rama  <Versión-inicial-modif> en el tronco
 principal
 ... sin el reemplazo de palabras claves. Solucionar confictos con el editor.
$ cvs ci -m "<Creación Versión-inicial-modif>"
$ cd
$ tar -cvzf <antiguo-proyecto-x.tar.gz> <antiguo>  # crear
archivo, -j para bz2
$ cvs release -d <antiguo>     # eliminar fuentes locales (opcional)

          -n      no ejecuta ningún comando que cambie el disco
          -t      muestra los mensajes de la actividad en el cvs

12.1.2.7. Exportar archivos desde el CVS
----------------------------------------

     Para conseguir la última versión del CVS use "tomorrow":

          $ cvs ex -D tomorrow <nombre_módulo>

12.1.2.8. Administrar el CVS
----------------------------

     Añadir un alias al proyecto (servidor local):

          $ su - admin           # un miembro del equipo
          $ export CVSROOT=</var/lib/cvs>
          $ cvs co CVSROOT/modules
          $ cd CVSROOT
          $ echo "<px> -a <proyecto-x>" >>modules
          $ cvs ci -m "<Ahora px es un alias del proyecto-x>"
          $ cvs release -d .
          $ exit                 # o control-D para salir de 'su'
          $ cvs co -d <proyecto> <px>
           ... <proyecto-x> (<alias:px>) del CVS al directorio proyecto
          $ cd proyecto
           ... realizar cambios ...

12.1.3. Resolución de problemas
-------------------------------

12.1.3.1. Permisos de los archivos en el repositorio
----------------------------------------------------

     CVS no sobreescribe el archivo del repositorio actual sino que lo
     reemplaza por otro.  Por lo tanto el _permiso de escritura en el
     directorio del repositorio_ resulta crítico.  Cada vez que se cree un
     nuevo repositorio ejecute lo siguiente para evitar cualquier problema.

          # cd </var/lib/cvs>
          # chown -R root:src <repositorio>
          # chmod -R ug+rwX   <repositorio>
          # chmod    2775     <repositorio>  # si es necesario para éste y sus
                                                      # subdirectorios

12.1.3.2. El bit de ejecución
-----------------------------

     Cuando se abandona la sesión (check-out) se conserva el bit de
     ejecución.  Ante cualquier problema de permisos de ejecución sobre un
     archivo puede cambiar sus permisos en el repositorio CVS con el
     siguiente comando.

          # chmod ugo-x <nombre_archivo>

12.1.4. Comandos del CVS
------------------------

     Veamos los comandos del CVS con sus respectivos atajos.

{add|ad|new} [-k kflag] [-m 'mensaje'] archivos...
{admin|adm|rcs} [opciones-rcs] archivos...
{annotate|ann} [opciones] [archivos...]
{checkout|co|get} [opciones] módulos...
{commit|ci|com}   [-lnR]  [-m  'mensaje_registro'  |  -f  archivo] \
        [-r revision] [archivos...]
{diff|di|dif} [-kl] [opciones_rcsdiff] [[-r rev1 | -D fecha1] \
        [-r rev2 |  -D fecha2]] [archivos...]
{export|ex|exp} [-flNn] -r rev|-D fecha [-d dir] [-k kflag] módulo...
{history|hi|his} [-report] [-flags] [-options args] [archivos...]
{import|im|imp} [-options] repositorio nombre_proveedor etiq_versión...
{login|logon|lgn}
{log|lo|rlog} [-l] opciones-rlog [archivos...]
{rdiff|patch|pa} [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] módulos...
{release|re|rel} [-d] directorios...
{remove|rm|delete} [-lR] [archivos...]
{rtag|rt|rfreeze} [-falnR]  [-b]  [-d]  [-r  etiqueta  |  -D  fecha] \
         sym_bolic_tag módulos...
{status|st|stat} [-lR] [-v] [archivos...]
{tag|ta|freeze} [-lR] [-F] [-b] [-d] [-r etiqueta | -D fecha]  [-f] \
         sym_bolic_tag [archivos...]
{update|up|upd} [-AdflPpR] [-d] [-r tag|-D fecha] archivos...


12.2. Subversion
----------------

     Subversion es la siguiente generación del sistema de control de
     versiones destinado a reemplazar CVS.  Actualmente, los
     desarrolladores consideran que se encuentra en la etapa "alfa" pero es
     muy probable que sea lo suficientemente estable para la mayoría de los
     usuarios.  A la fecha de escribir este documento, Subversion se
     encuentra en la rama `inestable' de Debian.

12.2.1. Instalando el servidor Subversion
-----------------------------------------

     El metapaquete `subversion-server' depende de los paquetes
     `libapache2-dav-svn' y `subversion-tools' necesarios para configurar
     el servidor.

12.2.1.1. Configurando un repositorio
-------------------------------------

     Actualmente, el paquete `subversion' no configura el repositorio y,
     por lo tanto, hay que hacerlo en forma manual.  Una posible ubicación
     del repositorio es `/var/local/repos'.

     Cree el directorio:

          # mkdir -p /var/local/repos

     Cree la base de datos del repositorio:

          # svnadmin create /var/local/repos

     Permitir que el servidor WWW escriba en el repositorio:

          # chown -R www-data:www-data /var/local/repos

12.2.1.2. Configurando Apache2
------------------------------

     Para permitir el acceso al repositorio mediante la autenticación de
     usuario, añada lo siguiente al `/etc/apache2/httpd.conf':

          <Location /repos>
            DAV svn
            SVNPath /var/local/repos
            AuthType Basic
            AuthName "Repositorio Subversion"
            AuthUserFile /etc/subversion/passwd
            <LimitExcept GET PROPFIND OPTIONS REPORT>
              Require valid-user
            </LimitExcept>
          </Location>

     A continuación, cree el archivo de autenticación de usuario mediante
     el comando:

          htpasswd2 -c /etc/subversion/passwd nombre_usuario

     Reinicie Apache2 y podrá acceder al nuevo repositorio de subversion
     desde la URL http://<nombre_máquina>/repos.

12.2.2. Migrando un repositorio CVS a Subversion
------------------------------------------------

12.2.3. Ejemplos de uso de Subversion
-------------------------------------

     Las siguientes secciones le enseña cómo usar diferentes comandos en
     Subversion.

12.2.3.1. Crear un archivo nuevo en Subversion
----------------------------------------------

     Para crear un nuevo archivo en Subversion, escriba lo siguiente:

          $ cd ~/<su-proyecto>         # vaya a su directorio fuente
          $ svn import http://localhost/repos <su-proyecto> \
            <nombre-proyecto> -m "importar proyecto inicial"

     Esto crea un directorio llamado <nombre-proyecto> en su repositorio de
     Subversion que contiene sus archivos del proyecto.  Vea en
     http://localhost/repos/ para ver si está allí.

12.2.3.2. Trabajando con Subversion
-----------------------------------

     Trabajando con el <proyecto-y> usando Subversion:

$ cd                            # ubicarse en la zona de trabajo
$ svn co http://localhost/repos/<proyecto-y>  # Obtener los fuentes
$ cd <proyecto-y>
 ... realizar algunas tareas ...
$ svn diff                      # similar a diff -u repositorio/ local/
$ svn revert <archivo_modificado>      # deshace los cambios a un archivo
$ svn ci -m "<Describir los cambios>"  # efectúa los cambios en el repositorio
$ vi <nuevo_archivo_añadido>
$ svn add <nuevo_archivo_añadido>
$ svn add <dir_nuevo>               # añade todos los archivos al dir_nuevo en forma recursiva all files in new_dir
$ svn add -N <dir_nuevo2>           # añade un directorio en forma no recursiva
$ svn ci -m "Se añadieron <nuevo_archivo_añadido>, <dir_nuevo>, <dir2_nuevo>"
$ svn up                        # sincronización con la última versión del repositorio
$ svn log                       # mostrar todos los cambios realizados
$ svn copy http://localhost/repos/<proyecto-y> \
      http://localhost/repos/<rama-proyecto-y> \
      -m "creando mi rama del <proyecto-y>"  # ramificando <proyecto-y>
$ svn copy http://localhost/repos/<proyecto-y> \
      http://localhost/repos/<proy-y_release1.0> \
      -m "<proyecto-y> 1.0 versión"    # se añade etiqueta de versión
 ... obsérvese que el proceso de ramificación y el de añadido de etiquetas son
 prácticamente iguales. La única diferencia consiste en que las ramas son
 enviadas (commited) mientras que las etiquetas no.

 ... realizar cambios a la rama ...

$ # fusionar la rama al tronco principal
$ svn merge http://localhost/repos/<proyecto-y> \
   http://localhost/repos/<rama-proyecto-y>
$ svn co -r 4 http://localhost/repos/<proyecto-y> # obtener la versión 4


-------------------------------------------------------------------------------


13. Programación
----------------

     No use la palabra "test" para designar un archivo ejecutable de
     prueba.  `test' es un comando del shell.


13.1. Dónde empezar
-------------------

     Referencias:
        * Documentos y ejemplos de `/usr/share/doc/<paquetes>'
        * Unix / Programming Information
          (http://arioch.unomaha.edu/~jclark/#info)
        * _Linux Programming Bible_ (John Goerzen/IDG books)

     Una gran cantidad de extensos documentos con información se puede
     obtener del proyecto GNU (http://www.gnu.org/).

     Las siguientes 4 secciones contienen algunos scripts de ejemplo en
     diferentes lenguajes de programación para crear un archivo de texto
     con información de las cuentas para agregarse al archivo `/etc/passwd'
     usando un procesador por lotes como lo es el programa `newusers'.
     Cada script requiere como entrada de un archivo con una serie de
     líneas de la forma: `nombre apellido contraseña' (estos scripts no
     crearán los directorios 'home' de los usuarios)


13.2. Shell
-----------

     Leer los scripts de shell es la _mejor_ manera de entender cómo
     funciona un sistema tipo Unix.  Aquí, brindo algunos enlaces y
     recordatorios para la programación del shell.  Véase Shell Mistakes
     (http://www.greenend.org.uk/rjk/2001/04/shell.html) para aprender de
     los errores.

13.2.1. Bash -- el intérprete de comandos interactivo estándar de _GNU_
-----------------------------------------------------------------------

     Referencias para Bash:
        * bash(1)
        * `info bash'
        * BASH Programming - Introduction HOWTO
          (http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html) del LDP
          como documento introductorio.
        * `mc /usr/share/doc/bash/examples/ /usr/share/doc/bash/'
          (Instale el paquete `bash-doc' para ver archivos de ejemplo)
        * _Learning the bash Shell_, 2nd edition (O'Reilly)

     Pequeño programa de ejemplo (sirve como entrada para el comando
     `newusers'):

#!/bin/bash
# (C) Osmu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
pid=1000;
while read n1 n2 n3 ; do
if [ ${n1:0:1} != "#" ]; then
let pid=$pid+1
echo ${n1}_${n2}:password:${pid}:${pid}:,,,/home/${n1}_${n2}:/bin/bash
fi
done

13.2.2. Intérpretes de comandos POSIX
-------------------------------------

     En Debian diversos paquetes proporcionan un intérprete de comandos
     POSIX:
        * `dash' (Sarge)
             * Prioridad: opcional
             * Tamaño de instalación: 176
             * Lejos, el más pequeño y el más rápido; el mejor para el
               arranque inicial
        * `ash' (Woody)
             * Prioridad: opcional
             * Tamaño de instalación: 180
             * Pequeño y muy rápido -- bueno para el arranque inicial
        * `bash'
             * Esencial: sí
             * Prioridad: requerido
             * Tamaño de instalación: 580
             * El más grande y más completo -- posee diversas extensiones
               implementadas
        * `pdksh'
             * Prioridad: opcional
             * Tamaño de instalación: 408
             * Clon del ksh de AT&T

     Si desea escribir scripts de shell portables, resulta conveniente
     escribirlos como script de shell POSIX .  Use `/bin/sh' enlazado con
     `ash' o (`dash') para comprobar su compatibilidad POSIX.  Evite
     escribir scripts usando la sintaxis propia del _bash_ o del _zsh_ que
     es similar al del `csh').  Por ejemplo, evite usar:
        * `if [ <foo> == <bar> ] ; then ...'
        * `diff -u <archivo>.c{.orig,}'
        * `mkdir </foo>{<bar>,<baz>}'

     La descripción de los intérpretes de comandos en el presente documento
     se aplica únicamente a aquellos del tipo POSIX y no a `csh' incluyendo
     a `tcsh'.

13.2.3. Parámetros del intérprete de comandos
---------------------------------------------

     Diversos _parámetros especiales_ para recordar:
          $0      = nombre del shell o del script del shell
          $1      = primer argumento
           ...
          $9      = noveno argumento
          $#      = cantidad de parámetros
          "$*"    = "$1 $2 $3 $4 ... $<n>"
          "$@"    = "$1" "$2" "$3" "$4" ... "$<n>"
          $?      = estado de salida del comando más reciente
          $$      = PID del script de shell
          $!      = PID del proceso en segundo plano más reciente

     _Expansiones de parámetros_ básicas para recordar:
              Forma       Si <var> está   Si <var>
                          inicializada  no está inicializada
          ${<var>:-<cadena>}  $<var>          <cadena>
          ${<var>:+<cadena>}  <cadena>        null
          ${<var>:=<cadena>}  $<var>          <cadena>
                                        (y ejecute <var>=<cadena>)
          ${<var>:?<cadena>}  $<var>          (repite <cadena> y luego sale)
     Aquí, en realidad, los `:' son opcionales para todos los operadores.
        * Con los `:' = el operador comprueba la existencia y la no
          nulidad.
        * Sin los `:' = el operador comprueba únicamente la existencia.

     _Sustituciones de parámetros_ básicas para recordar:
              Forma       Resultado
          ${<var>%<sufijo>}   Elimina el patrón <sufijo> más pequeño
          ${<var>%%<sufijo>}  Elimina el patrón <sufijo> más grande
          ${<var>#<prefijo>}  Elimina el patrón <prefijo> más pequeño
          ${<var>##<prefijo>} Elimina el patrón <prefijo> más grande

13.2.4. Redireccionamiento del shell
------------------------------------

     _Redireccionamiento_ básico para recordar (aquí el [<n>] es un número
     opcional para especificar el descriptor de archivo):
          [<n>]> <archivo>    Redirige stdout (o <n>) al <archivo>.
          [<n>]>> <archivo>   Añade stdout (o <n>) al <archivo>.
          [<n>]< <archivo>    Redirige stdin (o <n>) desde el <archivo>.
          [<n1>]>&n2        Redirige stdout (o <n1>) a
          <n2>.
          2> <archivo> >&2   Redirige stdout y stderr al <archivo>.
          | <comando>       Desvía stdout al <comando>.
          2>&1 | <comando>   Desvía stderr y stdout <comando>.
     Aquí:
        * stdin: entrada estándar (descriptor de archivo = 0)
        * stdout: salida estándar (descriptor de archivo = 1)
        * stderr: error estándar (descriptor de archivo = 2)

     El intérprete de comandos le permite abrir archivos usando el comando
     propio `exec' con un descriptor de archivo arbitrario.

          $ echo Hola >loquesea1
          $ exec 3<loquesea1 4>loquesea2  # abrir archivos
          $ cat <&3 >&4       # redirigir stdin a 3, stdout a 4
          $ exec 3<&- 4>&-    # cerrar archivos
          $ cat loquesea2
          Hola

     Aquí <n>`<&-' y <n>`>&-' significan cerrar el descriptor de archivo
     <n>.

13.2.5. Operadores condicionales del shell
------------------------------------------

     Todos los comandos devuelven un _estado de salida_ que se pueden
     utilizar para expresiones condicionales:
        * Éxito: 0 (Verdadero)
        * Error: 1 - 255 (Falso)
     Obsérvese que aquí el valor 0, contrariamente a la convención habitual
     en otras áreas de la computación, significa "verdadero".  Asimismo,
     `[' es equivalente al comando `test', que evalúa sus argumentos hasta
     `]' como expresión condicional.

     _Expresiones condicionales_ básicas para recordar:
          <comando> && <si_éxito_ejecutar_también_este_comando> ||
          verdadero
          <comando> || <si_fracaso_ejecutar_en_cambio_este_comando>
          
          if [ <expresión_condicional> ]; then
           <si_éxito_ejecutar_este_comando>
          else
           <si_fracaso_ejecutar_este_comando>
          fi
     En este caso `|| verdadero' se necesita para asegurarse que este
     script de shell no salga accidentalmente en esta línea al invocar el
     intérprete de comandos con la opción `-e'.

     Los operadores de comparación de _archivos_ en las expresiones
     regulares son:
-e <archivo>            Verdadero si <archivo> existe.
-d <archivo>            Verdadero si <archivo> existe y es un directorio.
-f <archivo>            Verdadero si <archivo> existe y es un archivo normal.
-w <archivo>            Verdadero si <archivo> existe y se puede escribir.
-x <archivo>            Verdadero si <archivo> existe y es ejecutable.
<archivo1> -nt <archivo2> Verdadero si <archivo1> es más reciente que <archivo2> (modificación)
<archivo1> -ot <archivo2> Verdadero si <archivo1> es más antiguo que <archivo2> (modificación)
<archivo1> -ef <archivo2> Verdadero si son el mismo dispositivo o tienen igual ínodo.

     Los operadores de comparación de _cadenas_ en las expresiones
     condicionales son:
     -z <str>    Verdadero si la longitud de <str> es igual a cero.
     -n <str>    Verdadero si la longitud de <str> es distinta de cero.
<str1> == <str2>   Verdadero si las <str> son iguales.
<str1> = <str2>    Verdadero si las <str> son iguales.
     (debería usarse "=" en vez de "==" para una extricta compatibilidad POSIX)
<str1> != <str2>   Verdadero si las <str> son distintas.
<str1> <  <str2>   Verdadero si <str1> está antes que <str2> (depende del local).
<str1> >  <str2>   Verdadero si <str1> está después que <str2> (depende del local).

     Los operadores de comparación _aritmética_ entera en las expresiones
     condicionales son `-eq', `-ne', `-lt', `-le', `-gt' o `-ge'.

13.2.6. Tratamiento de la línea de comandos
-------------------------------------------

     El intérprete de comandos procesa un script de la siguiente manera:
        * separación de _símbolos_ mediante metacaracteres: ESPACIO, TAB,
          NEWLINE, ;, (, ), <, >, |, &
        * búsqueda de _palabras claves_ si no están entre "..."  o '...'
          (bucle)
        * expansión de _alias_ si no están entre "..."  o '...'  (bucle)
        * expansión de _llaves_, A{b|c} -> Ab Ac, si no están entre "..."
          o '...'
        * expansión de _tildes_, ~<user> -> $HOME/$USER, si no están entre
          "..."  o '...'
        * expansión de _parámetros_, $<PARAMETER>, si no están entre '...'
        * expansión de _sustitución de comandos_, $(<comando>), si no están
          entre '...'
        * separación en _palabras_ con $IFS si no están entre "..."  o
          '...'
        * expansión de _nombres de rutas_ *?[] si no están entre "..."  o
          '...'
        * búsqueda de _comando_
             * función
             * comando interno
             * archivo en el $PATH
        * bucle

     Las comillas simples dentro de las dobles no tienen ningún efecto.

     Al ejecutar `set -x' en el intérprete de comandos o al invocar este
     último con la opción `-x' hará que se muestren todos los comandos
     ejecutados.  Esto resulta bastante práctico para depurar.


13.3. Awk
---------

     Referencias para Awk:
        * _Effective awk Programming_, 3rd edition (O'Reilly)
        * _Sed & awk_, 2nd edition (O'Reilly)
        * mawk(1) y gawk(1)
        * `info gawk'

     Pequeño programa de ejemplo (sirve como entrada para el comando
     `newusers')

#!/usr/bin/awk -f
# Script para crear un archivo que sirva para usar con el comando
# newusers a partir de un archivo que contiene las IDs y contraseñas de
# los usuarios de la siguiente manera: nombre apellido contraseña
# Copyright (c) KMSelf Sat Aug 25 20:47:38 PDT 2001
# Distribuido bajo GNU GPL v 2 o cualquier versión posterior.
# Este programa se distribuye SIN NINGUNA GARANTÍA.

BEGIN {
    # Asignar UID, GID iniciales
    if ( ARGC > 2 ) {
        startuid = ARGV[1]
        delete ARGV[1]
    }
    else {
        printf( "Uso: newusers UIDinicial archivo\n" \
          "...donde UIDinicial es el ID del primer usuario " \
          "a agregar y 'archivo' es \n" \
          "un archivo de entrada de la forma: \n"\
          "'nombre apellido contraseña'\n" \
        )
        exit
    }

    infile = ARGV[1]
    printf( "Primer UID: %s\n\n", startuid )
}

/^#/ { next }

{
    ++record
    first = $1
    last = $2
    passwd = $3
    user= substr( tolower( first ), 1, 1 ) tolower( last )
    uid = startuid + record - 1
    gid = uid
    printf( "%s:%s:%d:%d:%s %s,,/home/%s:/bin/bash\n",  \
        user, passwd, uid, gid, first, last, user \
        )
}

     En Debian dos paquetes proveen `awk' POSIX:
        * `mawk'
             * Prioridad: requerido
             * Tamaño de instalación: 228
             * Más pequeño y mucho más rápido -- útil para una instalación
               predeterminada
             * Compile-time limits exist
                  * NF = 32767
                  * sprintf buffer = 1020
        * `gawk'
             * Prioridad: opcional
             * Tamaño de instalación: 1708
             * Más grande y completo -- posee diversas extensiones
               implementadas
                  * System V Release 4 version of UNIX
                  * awk de laboratorios Bell
                  * específicas de GNU


13.4. Perl
----------

     Este es _él_ intérprete interpreter on a Unix-like system.

     Referencias para Perl:
        * perl(1)
        * _Programming Perl_, 3rd edition (O'Reilly)

     Pequeño programa de ejemplo (sirve como entrada para el comando
     `newusers')

          #!/usr/bin/perl
          # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
          $pid=1000;
          while (<STDIN>) {
                  if (/^#/) { next;}
                  chop;
                  $pid++;
                  ($n1, $n2, $n3) = split / /;
                  print $n1,"_",$n2,":", $n3, ":",$pid,
                            ":",$pid,",,,/home/",$n1,"_",$n2,":/bin/bash\n"
          }

     Instalar el módulo Perl <nombre módulo>:

          # perl -MCPAN -e 'install <nombre_modulo>'


13.5. Python
------------

     Es un intérprete orientado a objetos muy agradable.

     Referencias para Python:
        * python(1)
        * _Learning Python_ (O'Reilly).

     Pequeño programa de ejemplo (sirve como entrada para el comando
     `newusers')

          #! /usr/bin/env python
          import sys, string
          
          # (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
          # Adaptado del script awk por KMSelf Sat Aug 25 20:47:38 PDT 2001
          # Este programa se distribuye SIN NINGUNA GARANTÍA.
          
          def usages():
              print \
          "Uso:  ", sys.argv[0], " UID_inicial [nombre_archivo]\n" \
          "\tUID_inicial es el ID del primer usuario a agregar.\n" \
          "\tnombre_archivo es el nombre del archivo de entrada.\n" \
          "Si no se especifica, se toma la entrada estándar.\n\n" \
          "Formato del archivo de entrada:\n"\
          "\tnombre apellido contraseña\n"
                          return 1
          
          def parsefile(startuid):
              #
              # filtrado principal
              #
              uid = startuid
              while 1:
                  line = infile.readline()
                  if not line:
                      break
                  if line[0] == '#':
                      continue
                  (first, last, passwd) = string.split(string.lower(line))
                  # lo anterior falla con un # equivocado de parámetros :-)
                  user = first[0] + last
                  gid = uid
                  lineout = "%s:%s:%d:%d:%s %s,,/home/%s:/bin/bash\n" %  \
                      (user, passwd, uid, gid, first, last, user)
                  sys.stdout.write(lineout)
                  +uid
          
          if __name__ == '__main__':
              if len(sys.argv) == 1:
                  usages()
              else:
                  uid = int(sys.argv[1])
                  #print "# UID empieza desde: %d\n" % uid
                  if len(sys.argv) > 1:
                      infilename   = string.join(sys.argv[2:])
                      infile = open(infilename, 'r')
                      #print "# Leer archivo desde: %s\n\n" % infilename
                  else:
                      infile = sys.stdin
                  parsefile(uid)


13.6. Make
----------

     Referencias for Make:
        * `info make'
        * make(1)
        * _Managing Projects with make_, 2nd edition (O'Reilly)

     Variables automáticas sencillas:

     Sintaxis de las reglas:

          <Objetivo>: [<Prerequisito> ... ]
           [TAB] <comando1>
           [TAB] -<comando2>         # ignorar errores
           [TAB] <@comando3>         # evitar repetición

     Aquí `[TAB]' es un TAB.  Cada línea es interpretada por el shell antes
     de la sustitución de variables por parte de `make'.  Utilice la `\' al
     final de la línea para continuar el script.  Utilice `$$' para
     escribir el `$' para las variables de entorno para un script de shell.

     Las _reglas implícitas_ para el <objetivo> y los <prerequisitos> se
     pueden escribir, por ejemplo, así:

          %: %.c header.h

     o,

          %.o: %.c header.h

     En este caso, el <objetivo> contiene el carácter `%' (exactamente uno
     de ellos).  El `%' puede corresponderse con cualquier subcadena no
     vacía en los nombres de los archivos objetivo actuales.  Asimismo, los
     <prerequisitos> usan `%' para mostrar cómo se relaciones sus nombres
     con el nombre del objetivo actual.

     Las _reglas de sufijo_ son una forma _obsoleta_ de definir reglas
     implícitas para `make'.  Por compatibilidad, aún son admitidas en el
     `make' GNU pero, en lo posible, utilice las reglas de patrón
     equivalentes:

          antigua regla de sufijo --> nueva regla de patrón
          .c:                     --> %  : %.c
          .c.o:                   --> %.o: %.c

     Variables automáticas para las reglas anteriores:

          foo.o: nuevo1.c nuevo2.c original1.c nuevo3.c
          $@ == foo.o                                  (objetivo)
          $< == nuevo1.c                               (el primero)
          $? == nuevo1.c nuevo2.c nuevo3.c             (los nuevos)
          $^ == nuevo1.c nuevo2.c original1.c nuevo3.c (todos)
          $* == `%' patrón correspondiente al patrón objetivo.

     Referencia de las variables:

          foo1 := bar    # Expansión única
          foo2  = bar    # Expansión recursiva
          foo3 += bar    # Añade
          SRCS := $(wildcard *.c)
          OBJS := $(foo:c=o)
          OBJS := $(foo:%.c=%.o)
          OBJS := $(patsubst %.c,%.o,$(foo))
          DIRS  = $(dir directory/filename.ext) # Extrae "directory"
          $(notdir NAMES...), $(basename NAMES...), $(suffix NAMES...) ...

     Ejecute `make -p -f/dev/null' para ver las reglas automáticas
     internas.


13.7. C
-------

     Preparación:

          # apt-get install glibc-doc manpages-dev libc6-dev gcc

     Referencias para C:
        * `info libc' (referencia de funciones de biblioteca C)
        * gcc(1)
        * each_C_library_function_name(3)
        * Kernighan & Ritchie, _The C Programming Language_, 2nd edition
          (Prentice Hall).

13.7.1. Programa sencillo en C (`gcc')
--------------------------------------

     Un simple ejemplo `example.c' para compilar con la biblioteca `libm' y
     obtener el ejecutable `run_example':

$ cat > exemple.c << EOF
#include <stdio.h>
#include <math.h>
#include <string.h>

int main(int argc, char **argv, char **envp){
    double x;
    char y[11];
    x=sqrt(argc+7.5);
    strncpy(y, argv[0], 10); /* evita el desbordamiento del búfer */
    y[10] = '\0'; /* para asegurar que la cadena termine con un '\0' */
    printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]);
    return 0;
}
EOF
$ gcc -Wall -g -o run_example example.c -lm
$ ./run_example
    1, 2.915, ./run_exam,     (null)
$ ./run_example, 1234567890qwerty
    2, 3.082, ./run_exam, 1234567890qwerty

     Aquí, `-l_m_' se necesita para enlazar la biblioteca `lib_m_' y poder
     así usar sqrt().  La biblioteca actual se encuentra en el directorio
     `/lib' con el nombre `libm.so.6' que es un enlace lógico a
     `libm-2.1.3.so'.

     Observe el último parámetro del texto de salida.  Existen más de 10
     caracteres a pesar de haber especificado `%10s'.

     El uso de funciones que efectuan operaciones con punteros sin
     verificar sus limítes, tales como `sprintf' y `strcpy', es censurado
     pues no evita las vulnerabilidades que surgen por desbordamiento de
     búfer.  Utilice, en cambio, `snprintf' y `strncpy'.

13.7.2. Depurar
---------------

13.7.2.1. Depurando con `gdb'
-----------------------------

     Preparación:

          # apt-get install gdb

     Referencias para `gdb':
        * `info gdb' (tutorial)
        * gdb(1)
        * http://www.unknownroad.com/rtfm/gdbtut/gdbtoc.html

     Utilice `gdb' para depurar un programa compilado con la opción `-g'.
     Muchos de los comandos se pueden abreviar.  La expansión del tabulador
     funciona de igual manera que en el shell.

          $ gdb programa
          (gdb) b 1                # coloca un punto de ruptura en la línea 1
          (gdb) run <arg1 arg2 arg3> # ejecuta programa
          (gdb) next               # va a la siguiente línea
          ...
          (gdb) step               # avanza un paso
          ...
          (gdb) p parm             # imprime parámetro
          ...
          (gdb) p parm=12          # inicializa el valor del parámetro en 12

     Para depurar dentro de Emacs, diríjase a Sección 11.3.4, `Resumen de
     los comandos del editor (Emacs, Vim)'.

13.7.2.2. Verificar dependencias con bibliotecas
------------------------------------------------

     Utilice `ldd' para averiguar las dependencias de un programa con
     respecto a las bibliotecas:

          $ ldd /bin/ls
                  librt.so.1 => /lib/librt.so.1 (0x4001e000)
                  libc.so.6 => /lib/libc.so.6 (0x40030000)
                  libpthread.so.0 => /lib/libpthread.so.0 (0x40153000)
                  /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

     Para que `ls' funcione en un entorno `chroot', deben esta disponibles
     las mencionadas bibliotecas.

     Pueden también resultar útiles los siguientes comandos.
        * `strace': rastrea las señales y llamadas al sistema
        * `ltrace': rastrea las llamadas a las bibliotecas

13.7.2.3. Depurar con herramientas de detección de fugas de memoria
-------------------------------------------------------------------

     Existen diversas herramientas de detección de fugas de memoria
     disponibles en Debian.

        * `njamd'
        * `valgrind'
        * `dmalloc'
        * `electric-fence'
        * `memprof'
        * `memwatch' (el paquete no existe, obténgalo de memwatch
          (http://directory.fsf.org/devel/debug/memwatch.html).)
        * `mpatrol'
        * `leaktracer'
        * `libgc6'
        * `Insure++' de Parasoft (http://www.parasoft.com).  (propietario,
          commercial for fee)

     También consulte Herramientas de depuración para la asignación de
     almacenamiento dinámico y administración de memoria
     (http://www.cs.colorado.edu/homes/zorn/public_html/MallocDebug.html).

13.7.3. Flex -- un Lex mejorado
-------------------------------

     `flex' es un generador de analizadores sintácticos muy veloz.

     Referencias para `flex':
        * `info flex' (tutorial)
        * flex(1)

     Necesita proporcionar su propia `main()' y `yywrap()', o su
     `programa.l' se vería así al compilar sin la biblioteca (`yywrap' es
     una macro; `%option main' activa en forma implícita a `%option
     noyywrap'):

          %option main
          %%
          .|\n    ECHO ;
          %%

     Alternativamente, puede compilar con la opción -`lfl' del enlazador al
     final de la línea de comando de `cc' (como ATT-Lex con `-ll').  En
     este caso no se necesita la `%option'.

13.7.4. Bison -- un Yacc mejorado
---------------------------------

     En Debian diversos paquetes proporcionan un generador de analizadores
     LALR compatible con Yacc:

        * `bison': generador de analizador LALR GNU
        * `byacc': el generador de analizador LALR de Berkeley
        * `byyacc': generador de analizador con backtracking basado en
          byacc

     Referencias para `bison':
        * `info bison' (tutorial)
        * bison(1)

     Necesita proporcionar su propia `main()' y `yyerror()'.  `main()'
     llama a `yyparse()' que llama a `yylex()' que ha sido generalmente
     creada con FleX.

          %%
          
          %%

13.7.5. Autoconf
----------------

     `autoconf' es una herramienta para crear scripts de shell que
     automáticamente configuran los paquetes con código fuente para
     adaptarlos a distintos tipos de sistemas tipo UNIX que utilizan el
     sistema de compilación GNU.

     `autoconf' crea el script de configuración `configure'.  `configure'
     crea automáticamente un `Makefile' y un `Makefile.am' personalizados.

13.7.5.1. Compilar e instalar un programa
-----------------------------------------

     Debian no toca los archivos situados en `/usr/local' (véase Sección
     2.5, `En apoyo a la diversidad').  Por lo tanto, si compila un
     programa a partir de sus fuentes, instálelo en `/usr/local' de modo
     que no interfiera con Debian.

          $ cd src
          $ ./configure --prefix=/usr/local
          $ make
          $ make install # esto ubica los archivos en el sistema

13.7.5.2. Desinstalar un programa
---------------------------------

     SI cuenta con los fuentes, SI éstos utilizan `autoconf'/`automake' y
     SI puede recordar cómo lo configuró:

          $ ./configure <todas-las-opciones-que-eligió>
          # make uninstall

     Alternativamente, si está absolutamente sequro que el proceso de
     instalación ubicó todos los archivos únicamente en `/usr/local/' y que
     no hay nada importante allí, puede borrar todo su contenido haciendo:

          # find /usr/local -type f -print0 | xargs -0 rm -f

     Si no está seguro dónde fueron instalados los archivos, considere el
     uso de `checkinstall' que permite desinstalaciones limpias.


13.8. Preparación de documentos
-------------------------------

13.8.1. Tratamiento de texto `roff'
-----------------------------------

     Tradicionalmente, `roff' es el sistema de tratamiento de texto
     principal de Unix.

     Véase roff(7), groff(7), groff(1), grotty(1), troff(1), groff_mdoc(7),
     groff_man(7), groff_ms(7), groff_me(7), groff_mm(7) e "`info groff'".

     Existe un buen tutorial sobre macros `-me'.  Si tiene groff (1.18 o
     posterior), busque `/usr/share/doc/groff/meintro.me.gz' y haga lo
     siguiente:

          $ zcat /usr/share/doc/groff/meintro.me.gz | \
               groff -Tascii -me - | less -R

     Lo que sigue creará un archivo de texto:

          $ zcat /usr/share/doc/groff/meintro.me.gz | \
              GROFF_NO_SGR=1 groff -Tascii -me - | col -b -x > <meintro.txt>

     Para imprimir use la salida PostScript.

          $ groff -Tps <meintro.txt> | lpr
          $ groff -Tps <meintro.txt> | mpage -2 | lpr

13.8.2. SGML
------------

     Preparación:

          # apt-get install debiandoc-sgml debiandoc-sgml-doc

     Referencias de `debiandoc-sgml':
        * `/usr/share/doc/debiandoc-sgml-doc'
        * debiandoc-sgml(1)
        * _DocBook: The Definitive Guide
          (/usr/share/doc/docbook-defguide/html/docbook.html)_, de Walsh y
          Muellner, (O'Reilly) (paquete `docbook-defguide')

     SGML permite la creación de múltiples formatos de un mismo documento.
     Un sistema SGML sencillo es Debiandoc que es el que se usó aquí.  Este
     requiere de pequeñas adaptaciones en los archivos de texto originales
     para los siguientes caracteres:
        * "<" --> `&lt;'
        * ">" --> `&gt;'
        * " " --> `&nbsp;' (espacio sin ruptura)
        * "&" --> `&amp;'
        * "%" --> `&percnt;'
        * "(C)" --> `&copy;'
        * "--" --> `&ndash;'
        * "---" --> `&mdash;'

     Para marcar una sección como comentario, escriba:

          <!-- El tema empieza aquí ... -->

     Para marcar una sección que necesita modificarse, escriba:

          <![ %FIXME [ El tema empieza aquí ... ]]>

     En SGML, la _primer definición_ de una entidad gana.  Por ejemplo:

          <!entity % qref "INCLUDE">
          <![ %qref [ <!entity param "Datos 1"> ]]>
          <!entity param "Datos 2">
          &param;

     Esto finaliza como "Datos 1".  Si en la primer línea figurara "IGNORE"
     en vez de "INCLUDE" finalizaría como "Datos 2" (la segunda línea es
     una sentencia condicional).  Asimismo, las frases que se repiten se
     pueden definir de antemano separadas del contexto.

          <!entity <esto> "mi">
          Hola &<esto>; amigo.
          Este es &<esto>; libro.

     Esto resulta en lo siguiente:

          Hola mi amigo.
          Este es mi libro.

     Vea el pequeño ejemplo en SGML `sample.sgml' en los ejemplos
     (http://www.debian.org/doc/manuals/debian-reference/examples/).

     Cuando los documentos SGML aumentan de tamaño TeX, que es utilizado
     como interfaz del procesador de texto, puede provocar,a veces, errores
     Sección 13.8.3, `TeX/LaTeX'.

13.8.3. TeX/LaTeX
-----------------

     Preparación:

          # tasksel # seleccionar Miscelánea  --> Entorno TeX/LaTeX

     Referencias para LaTeX:
        * The teTeX HOWTO: The Linux-teTeX Local Guide
          (http://www.tldp.org/HOWTO/TeTeX-HOWTO.html)
        * tex(1)
        * latex(1)
        * _The TeXbook_, de Donald E.  Knuth, (Addison-Wesley) [1]
        * _LaTeX - A Document Preparation System_, de Leslie Lamport,
          (Addison-Wesley)
        * _The LaTeX Companion_, de Goossens, Mittelbach, Samarin,
          (Addison-Wesley)

     Éste es el entorno más poderoso para la composición de documentos.
     Muchos procesadores SGML lo utilizan como su procesador de texto.  Lyx
     proporcionado por `lyx', `lyx-xforms' o `lyx-qt' y GNU TeXmacs,
     proporcionado por el paquete `texmacs', ofrecen un entorno de edición
     WYSIWYG agradable para LaTeX mientras que muchos utilizan a Emacs y
     Vim como editores de los archivos fuente.

     Existen diversos recursos disponibles en Internet:
        * teTeX - A Documentation Guide
          (/usr/share/doc/texmf/newhelpindex.html) (paquete `tetex-doc')
        * A Quick Introduction to LaTeX
          (http://www.msu.edu/user/pfaffben/writings/)
        * A Simple Guide to Latex/Lyx
          (http://www.stat.rice.edu/~helpdesk/howto/lyxguide.html)
        * Word Processing Using LaTeX
          (http://www-h.eng.cam.ac.uk/help/tpl/textprocessing/latex_basic/latex_basic.html)
        * Local User Guide to teTeX/LaTeX
          (http://supportweb.cs.bham.ac.uk/documentation/LaTeX/lguide/local-guide/local-guide.html)
     Cuando los documentos SGML aumentan de tamaño TeX puede, a veces,
     provocar errores.  Debe incrementar el tamaño del repositorio en
     `/etc/texmf/texmf.cnf' (o mejor editar `/etc/texmf/texmf.d/95NonPath'
     y ejecutar `update-texmf') para solucionarlo.

[1]  Los fuentes TeX para este libro se encuentra disponible en
     ftp://ftp.dante.de/pub/tex/systems/knuth/tex/texbook.tex.
     ftp://ftp.dante.de/pub/tex/systems/knuth/lib/manmac.tex contiene la
     mayoría de las macros necesarias.  Puede procesar este documento con
     `tex' luego de comentar las líneas 7 a 10 y añadir `\input manmac
     \proofmodefalse'.

     Es altamente recomendable adquirir este libro (y todos los otros
     libros de Donald E.  Knuth) en vez de usar la versión en línea.  Pero
     los fuentes ¡ son un ejemplo magnífico de TeX !

13.8.4. Programación ilustrada
------------------------------

     En vez de escribir código que contenga documentación, el programador
     ilustrado escribe documentación que contiene código.  Este enfoque
     asegura una buena documentación del programa.

     Para más información sobre programación ilustrada, véase Literate
     Programming (http://www.literateprogramming.com/).

13.8.4.1. Noweb
---------------

     Preparación:

          # apt-get install nowebm

     Referencias para Noweb:
        * Noweb --- A Simple, Extensible Tool for Literate Programming
          (http://www.eecs.harvard.edu/~nr/noweb/)
        * noweb(1)

     Esta herramienta de la programación ilustrada del tipo WEB es mucho
     más sencilla ya que provee extensibilidad e independencia de lenguaje.
     [1] Cuando se invoca `noweb', escribe el código fuente del programa en
     los archivos mencionados en el archivo noweb y crea un archivo TeX
     para la composición de la documentación.

     El paquete Debian `ifupdown' es un buen ejemplo.

          $ apt-get source ifupdown
          $ cd ifupdown*
          $ make ifupdown.pdf ifupdown.ps

[1]  Esta WEB no tiene _nada_ que ver con la World Wide Web.  WEB (para
     PASCAL) y CWEB (para C/C++) son herramientas tradicionales para la
     programación ilustrada.

13.8.4.2. Doxygen
-----------------

     Preparación:

          # apt-get install doxygen doxygen-doc doxygen-gui

     Referencias para Doxygen (¡creado por `doxygen'!):
        * Página principal (http://www.doxygen.org/)
        * /usr/share/doc/doxygen-doc/html/index.html

     Puede generar documentación HTML, RTF, páginas de manual Unix,
     PostScript y PDF (usando LaTeX) para C++, C, Java, IDL y, con en
     cierto grado, para programas en PHP y C#.  Doxygen es compatible con
     JavaDoc (1.1), Qt-Doc, KDOC y fue específicamente diseñado para ser
     usado en proyecto que utilizan el conjunto de herramientas Qt
     (http://www.trolltech.no/qt/) de Troll Tech.  Al crear incluye
     gráficos de dependencia, diagramas de colaboración y gráficos
     jerárquicos incluso para programas no documentados.  La salida es
     similar a la de la documentación Qt.


13.9. Creación de paquetes Debian
---------------------------------

     Preparación:

          # apt-get install debian-policy developers-reference \
                  maint-guide dh-make debhelper
          # apt-get install packaging-manual # en el caso de Potato

     Referencias para la creación de paquetes:
        * (Sección 2.2, `Sistema de administración de paquetes Debian'
          fundamentos)
        * Guía para Nuevos Encargados de Debian (tutorial)
        * dh-make(1)
        * Referencia para los Desarrolladores de Debian (práctico)
        * Manual de Normativa de Debian (oficial)
        * Manual para la creación de paquetes (Potato)

13.9.1. Empaquetar un único binario
-----------------------------------

     Método rápido para empaquetar un único binario por Joey Hess.

          # mkdir -p mi_pqt/usr/bin mi_pqt/DEBIAN
          # cp binario mi_pqt/usr/bin
          # cat > mi_pqt/DEBIAN/control
          Package: mi_paquete
          Version: 1
          Architecture: i386
          Maintainer: Joey Hess <joeyh@debian.org>
          Description: mi pequeño paquete
          No espere demasiado.
          ^D
          # dpkg-deb -b mi_pqt

13.9.2. Empaquetando con herramientas
-------------------------------------

     Utilice `dh_make' del paquete `dh-make' para crear la arquitectura del
     paquete.  Luego, proceda de acuerdo a las instrucciones de dh-make(1)
     que utiliza `debhelper' en `debian/rules'.

     Otro enfoque consiste en usar `deb-make' del paquete `debmake' que no
     utiliza los scripts de `debhelper' y depende únicamente del intérprete
     de comandos.

     Para ejemplos de múltiples paquetes fuente, véase "mc" (`dpkg-source
     -x mc_4.5.54.dsc') que utiliza "sys-build.mk" por Adam Heath
     (<doogie@debian.org>) y "glibc" (`dpkg-source -x glibc_2.2.4-1.dsc')
     que utiliza un sistema diferente de Joel Klecker (<espy@debian.org>).


-------------------------------------------------------------------------------


14. GnuPG
---------

     Referencias:
        * gpg(1).
        * `/usr/share/doc/gnupg/README.gz'
        * _GNU privacy handbook_ en
          `/usr/share/doc/gnupg-doc/GNU_Privacy_Handbook/' (instalar el
          paquete `gnupg-doc')


14.1. Instalar Gnu PG
---------------------

     Lea el manual de GNU privacy (en Woody, `gnupg-doc').

# gpg --gen-key                   # genera una clave nueva
# gpg --gen-revoke <mi_usuario_ID>  # genera una clave de revocación para
                                  # mi_usuario_ID
# host -l pgp.net | grep www|less # busca los servidores de claves pgp

     Un buen servidor de claves predeterminado situado en
     `$HOME/.gnupg/gpg.conf' (o el la ubicación anterior
     `$HOME/.gnupg/options') es:

          keyserver http://subkeys.pgp.net

     Debe tener cuidado de no crear más de dos subclaves.  Si lo hace, los
     servidores de claves de pgp.net corromperán la clave.  Utilize el
     paquete `gnupg' más reciente (>1.2.1-2) para tratar estas subclaves
     corruptas.  Véase http://fortytwo.ch/gpg/subkeys.


14.2. Usar GnuPG
----------------

     Manejo de archivos:

$ gpg  [opciones]  comando [args]
$ gpg {--armor|-a} {--sign|-s} <archivo>         # firma el 'archivo' en
                                                          # el archivo.asc
$ gpg --clearsign <archivo>                      # firma el 'archivo'
                                                          # sin cifrarlo
$ gpg --clearsign --not-dash-escaped <patchfile> # firma patchfile sin
                                                          # cifrar
$ gpg --verify <archivo>                         # verifica el 'archivo'
                                                          # firmado sin cifrar
$ gpg -o <archivo.firm> {-b|--detach-sig} <archivo> # crea
                                                          # firma separada
$ gpg --verify <archivo.firm> <archivo> # verifica el 'archivo'
                                                          # con ayuda del archivo.firm
$ gpg -o <archivo_cifrado> {--recipient|-r} <nombre>
{--encrypt|-e} <archivo>                         # cifrado con clave pública
                                                          # para el destinario nombre
$ gpg -o <archivo_cifrado> {--symmetric|-c} <archivo> # cifrado
                                                          # simétrico
$ gpg -o <archivo> --decrypt <archivo_cifrado>        # descifrado


14.3. Administrar GnuPG
-----------------------

     Administración de claves:

$ gpg --edit-key <ID_usuario>       # "help" para ayuda interactiva
$ gpg -o <archivo>> --exports        # exporta todas las claves al
                                             # 'archivo'
$ gpg --imports <archivo>           # importa todas las claves del
                                             # 'archivo'
$ gpg --send-keys <ID_usuario>      # envía la clave del ID_usuario al
                                             # servidor de claves
$ gpg --recv-keys <ID_usuario>      # recibe la clave del ID_usuario del
                                             # servidor de claves
$ gpg --list-keys <ID_usuario>      # lista las claves del ID_usuario
$ gpg --list-sigs <ID_usuario>      # lista las firmas del ID_usuario
$ gpg --check-sigs <ID_usuario>     # verifica la firma del ID_usuario
$ gpg --fingerprint <ID_usuario>    # verifica la huella dactilar del
                                             # ID_usuario
$ gpg --list-sigs | grep '^sig' | grep '[User id not found]' \
  | awk '{print $2}' | sort -u | xargs gpg --recv-keys
              # obtiene claves desconocidas
              # actualiza las claves para todas las firmas desconocidas.
$ gpg --refresh-keys                         # actualiza el archivo de claves
local

     Códigos de confiabilidad:

-         No se asignó/evaluó confiabilidad del poseedor.
e         Ha fallado la evaluación de confiabilidad.
q         No existe suficiente información para realizar la evaluación.
n         No confiar nunca en esta clave.
m         Relativamente confiable.
f         Totalmente confiable.
u         Plenamente confiable.

     Lo siguiente transferirá mi clave "<A8061F32>" al popular servidores
     de claves `hkp://subkeys.pgp.net':

          $ gpg --keyserver hkp://subkeys.pgp.net --send-keys <A8061F32>


14.4. Usando GnuPG con aplicaciones
-----------------------------------

14.4.1. Usando GnuPG con Mutt
-----------------------------

     Agregar lo siguiente al `~/.muttrc' para evitar que GnuPG -un programa
     muy 'pesado'- arranque automáticamente y sólamente se active al pulsar
     la tecla 'S' en el menú del índice.

          macro index S ":toggle pgp_verify_sig\n"
          set pgp_verify_sig=no

14.4.2. Usando GnuPG con Vim
----------------------------

     Añadir el contenido de `_vimrc' obtenido de examples subdirectory
     (http://www.debian.org/doc/manuals/debian-reference/examples/) en
     `~/.vimrc' para ejecutar GnuPG en forma transparente.


-------------------------------------------------------------------------------


15. Suporte para Debian
-----------------------

     Es posible recurrir a las siguientes fuentes para obtener ayuda,
     consejo y soporte para Debian.  En lo posible se deben usar estos
     recursos antes de ponerse a gritar en las listas de correo :)

     Observése que puede acceder a una gran cantidad de documentación en su
     sistema proveniente de los distintos paquetes usando un navegador web
     o mediante los comandos `dwww' o `dhelp'.


15.1. Referencias
-----------------

     Las siguientes referencias están disponibles para Debian y Linux en
     general.  Si sus contenidos entran en conflicto, siempre confíe más en
     las fuentes de información primarias que en las fuentes de información
     secundarias tal como este documento.

        * Manual de Instalación (primaria)
             * Leer antes de instalar o actualizar.
             * Web: http://www.debian.org/releases/stable/installmanual
             * Web: http://www.debian.org/releases/testing/installmanual
               (en preparación, a veces puede que no funcione)
             * Paquete: `install-doc'
             * Archivo: `/usr/share/doc/install-doc/index.html'

        * Nota de la versión (primaria)
             * Se debe leer antes de instalar o actualizar incluso si se
               piensa que que sabe absolutamente todo.
             * Web: http://www.debian.org/releases/stable/releasenotes
             * Web: http://www.debian.org/releases/testing/releasenotes (en
               preparación, a veces puede que no exista)
             * Paquete: `install-doc'
             * Archivo: `/usr/share/doc/install-doc/upgrade-i386.html
               [FIXME]'

        * FAQ (secundaria)
             * Preguntas frecuentes (un tanto desactualizadas)
             * Web: http://www.debian.org/doc/manuals/debian-faq/
             * Paquete: `doc-debian'
             * Archivo: `/usr/share/doc/debian/FAQ/index.html'

        * Guía de Referencia Debian (secundaria)
             * El manual de usuario post-instalación más comprensible
             * Web: http://www.debian.org/doc/manuals/debian-reference/
             * Paquete: `debian-reference-es'
             * Archivo: `/usr/share/doc/Debian/reference/'

        * APT COMO (secundaria)
             * Detallada guía de usuario para la administración de paquetes
               Debian (Woody)
             * Web: http://www.debian.org/doc/manuals/apt-howto/
             * Paquete: `apt-howto',
             * Archivo: `/usr/share/doc/apt-howto'

        * Securing Debian Manual (secundaria)
             * Guía de usuario detallada para aumentar la seguridad y
               robustecer la instalación predeterminada de Debian (Woody).
             * Web:
               http://www.debian.org/doc/manuals/securing-debian-howto/
             * Paquete: `harden-doc'
             * Archivo:
               `/usr/share/doc/harden-doc/html/securing-debian-howto/'

        * `dselect' Documentación para Principiantes (secundaria)
             * Tutorial de `dselect'
             * Web:
               http://www.debian.org/releases/woody/i386/dselect-beginner
             * Paquete: `install-doc',
             * Archivo: `/usr/share/doc/install-doc/ [FIXME]'

        * Manual de Normativa de Debian (primaria)
             * Texto técnico de referencia de Debian.
             * Web: http://www.debian.org/doc/debian-policy/
             * Paquete: `debian-policy'
             * Archivo: `/usr/share/doc/debian-policy/'

        * Referencia para Desarrolladores de Debian (primaria)
             * Conocimientos básicos para desarrolladores.
             * Para consultar una vez para el resto de nosotros.
             * Web: http://www.debian.org/doc/manuals/developers-reference/
             * Paquete: `developers-reference'
             * Achivo: `/usr/share/doc/developers-reference/'

        * Guía para Nuevos Encargados de Paquetes de Debian (primaria)
             * Guía práctica para desarrolladores.
             * Tutoriales para empaquetar para el resto de nosotros.
             * Web: http://www.debian.org/doc/manuals/maint-guide/
             * Paquete: `maint-guide'
             * Archivo: `/usr/share/doc/maint-guide/'

        * Manual para la creación de paquetes (Potato)
             * Paquete `packaging-manual' de potato (actualmente en el
               apéndice de la _Referencia para Desarrolladores_)

        * Páginas del manual al estilo Unix (primaria)
             * `man <nombre-paquete>'

        * Páginas info al estilo GNU (primaria)
             * `info <nombre-paquete>'

        * Documentación específica de paquetes (primaria)
             * Encuéntrela en `/usr/share/doc/<package-name>'

        * LDP: Proyecto de Documentación de Linux (secundaria)
             * COMOs y mini-COMOs para Linux
             * Web: http://www.tldp.org/
             * Paquete: `doc-linux-text' y `doc-linux-html'
             * Archivo: `/usr/share/doc/HOWTO/'

        * Linux Gazette (secundaria) -- aparecen nuevos números
          mensualmente
             * The Linux Gazette
             * Web: http://www.linuxgazette.com/
             * Paquete: `lg-all' o `lg-latest-two'
             * Archivo: `/usr/share/doc/lg/'

        * DDP: Proyecto de Documentación de Debian (secundaria)
             * Manuales específicos de Debian
             * Web: http://www.debian.org/doc/

        * El Rincón de los Desarrolladores de Debian (secundaria)
             * Información clave para desarrolladores de Debian
             * Muy instructiva para el usuario final
             * Web: http://www.debian.org/devel/

        * Código fuente (absolutamente primaria)
             * Nadie puede negarlo :-)
             * Descargar el código fuente siguiendo Sección 2.1.15, `El
               código fuente'

        * Internet Assigned Numbers Authority (primaria)
             * Web: http://www.iana.org/
             * Paquete: `doc-iana'
             * Archivo: `/usr/share/doc/doc-iana/'

        * Internet requests for comments (estándares IETF) (primaria)
             * Web: http://www.ietf.org/rfc.html
             * Paquete: `doc-rfc'
             * Archivo: `/usr/share/doc/RFC/'

     Las siguientes referencias están disponibles para UNIX en general.
     Por favor, tenga en cuenta que existen pequeñas diferencias entre
     diferentes tipos de sistemas UNIX.  Los nombres de disposivos y los
     métodos de arranque requieren de una especial atención.

        * _El Entorno de Programación UNIX_
             * El libro que hay que leer para aprender cómo funciona UNIX.
             * de B.  W.  Kernighan and R.  Pike
             * Publicado por Princeton Hall Software Series

        * _El Lenguaje de Programación C_ (segunda edición)
             * El libro que hay que leer para aprender el ANSI C.
             * de B.  W.  Kernighan y D.  M.  Ritchie
             * Publicado por Princeton Hall Software Series

        * _UNIX Power Tools_
             * El libro que hay que leer para aprender trucos de UNIX.
             * de Jerry Peek, Tim O'Reilly y Mike Loukides
             * Publicado por O'Reilly y Associates

        * _Essential System Administration_ (segunda edición)
             * El libro que hay que leer para aprender sobre la
               administración de sistema UNIX para distintos sabores UNIX.
             * de Aeleen Frisch
             * Publicado por O'Reilly y Associates

        * _Linux: Rute User's Tutorial and Exposition_
             * Un excelente libro en línea y de tapa dura que abarca la
               administración de sistemas GNU/Linux.
             * De Paul Sheer
             * Publicado por Prentice Hall
             * Web: http://www.icon.co.za/~psheer/book/index.html.gz
             * Paquete: `rutebook' (from `non-free')
             * Archivo: `/usr/share/doc/rutebook/'

        * Bell Labs: Computing Sciences Research
             * Valioso archivo sobre la historia de UNIX
             * Principal: http://cm.bell-labs.com/cm/cs/
             * Informes técnicos selectos:
               http://cm.bell-labs.com/cm/cs/cstr.html
             * Algunas publicaciones:
               http://cm.bell-labs.com/cm/cs/papers.html

        * Recursos en línea sobre Linux en general
             * Debian Planet (http://www.debianplanet.org/)
             * debianHELP (http://www.debianhelp.org/)
             * Linux.com (http://linux.com/)
             * Página pricipal de Linux Online (http://www.linux.org/)
             * Red Hat (vendedor comercial de Linux)
               (http://www.redhat.com/) (RPM, Sys-V init)
             * SuSE, Inc.  (vendedor comercial de Linux)
               (http://www.suse.de/) (RPM, Sys-V init)
             * Slackware (http://www.slackware.com/) (TGZ, BSD-style init)

        * Guías generales en línea y recursos sobre UNIX
             * El sistema UNIX por el Open Group (http://www.unix.org/)
             * Curso introductorio de UNIX de la Universidad Estatal de
               Ohio
               (http://www-wks.acs.ohio-state.edu/unix_course/unix.html)
             * UNIXhelp de la Universidad de Edinburgh
               (http://unixhelp.ed.ac.uk/)
             * Información sobre Unix / Programación
               (http://arioch.unomaha.edu/~jclark/#info)
             * comp.unix.questions FAQ
               (http://www.faqs.org/faqs/unix-faq/faq/)
             * comp.unix.user-friendly FAQ
               (http://www.camelcity.com/~noel/usenet/cuuf-FAQ.htm)
             * Documentación FreeBSD (http://www.freebsd.org/docs.html)
             * El manual de FreeBSD
               (http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/index.html)
             * GUÍA UNIX (http://ieee.uow.edu.au/documents/)
             * The Unix Heritage Society (http://www.tuhs.org/)

        * Páginas principales de projectos de software libre
             * Proyecto GNU (http://www.gnu.org/)
             * El Proyecto de Documentación Linux (http://www.tldp.org/)
             * Los Archivos del Kernel de Linux (http://www.linux.org/)
             * El Proyecto XFree86, Inc (http://www.xfree86.org/)
             * GNOME (http://www.gnome.org/)
             * Entorno de Escritorio K (http://www.kde.org/)
             * GNU software en Red Hat (http://sources.redhat.com/)
             * Mozilla (http://www.mozilla.org)
             * FreeBSD (http://www.freebsd.org/)
             * OpenBSD (http://www.openbsd.org/)
             * NetBSD (http://www.netbsd.org/)


15.2. Encontrar el significado de una palabra
---------------------------------------------

     Muchas palabras usadas en Debian son términos bastantes crípticos.
     También se utilizan muchos acrónimos.  El siguiente comando resolverá
     la mayoría de nuestras dudas:

          $ dict <escriba-aquí-una-palabra-extraña>


15.3. Conocer la popularidad de un paquete Debian
-------------------------------------------------

     En Debian existen muchísimos paquetes y, a veces, resulta difícil
     saber cuál probar primero.  Véase Resultados del concurso de
     popularidad de Debian (http://www.debian.org/~apenwarr/popcon/) para
     conocer lo que usan los demás.  Asimismo instale el paquete
     `popularity-contest' para contribuir.


15.4. Sistema de seguimiento de fallos de Debian
------------------------------------------------

     La distribución Debian tiene un sistema de seguimiento de fallos (BTS)
     (http://bugs.debian.org/) que lleva un registro de fallos informados
     por los usuarios y desarrolladores.  A cada fallo se le asigna un
     número y se mantiene en el archivo hasta que es marcado como resuelto.

     Antes de enviar el informe de un fallo debe comprobar que nadie lo
     hizo antes.  Las listas con los fallos más significativos están
     disponibles en Internet (http://bugs.debian.org/) y en otros lugares
     (http://www.debian.org/Bugs/Access).  Véase también Sección 6.3.1,
     `Búsqueda de fallos y ayuda en Debian'.

     Pueden existir diversos informes de fallos críticos marcados con
     _FTBFS_.  Esto significa "Fails To Build From Source".  (Falla al
     compilar el código fuente)

     Los pasos a seguir para informar un fallo se explica en
     http://www.debian.org/Bugs/Reporting


15.5. Listas de Correo
----------------------

     Por lo menos lea debian-devel-announce (en inglés, de sólo lectura y
     con poco tráfico) para estar al día con Debian.

     Las listas de correo de mayor interés para los usuarios de Debian son
     la debian-user (en inglés, de libre acceso y con mucho tráfico) y las
     otras listas debian-user-<idioma> (para otros idiomas).

     Para información sobre estas listas y detalles de cómo suscribirse
     véase http://lists.debian.org/.  Por favor, consulte los archivos
     tratando de encontrar respuestas a sus preguntas antes de publicarlas
     y ajústese a la reglas de etiqueta de la lista.

     If you do not wish to get CCed for the reply to your mailing list
     posting, utilice la cabecera `Mail-Followup-To:' que es una medida muy
     efectiva.  Esta es una convención de las listas de correo como se
     explica en http://cr.yp.to/proto/replyto.html.


15.6. IRC
---------

     IRC (Internet Relay Chat) es una forma de conversar con gente de todo
     el mundo en tiempo real.  Los canales IRC dedicados a Debian se pueden
     encontrar en la red IRC freenode (http://www.freenode.info/)- Para
     conectarse, necesita un cliente IRC.  Algunos de los clientes más
     populares son XChat, BitchX, ircII, irssi, epic4 y KSirc, todos ellos
     han sido empaquetados para Debian.  Una vez que tenga instalado el
     cliente, necesita conectarse al servidor.  En la mayoría de los
     clientes, lo puede hacer escribiendo:

          /server irc.debian.org

     Una vez conectado, únase al canal tecleando #debian

          /join #debian

     Para abandonar el canal #teclee debian

          /part #debian

     Para salir del cliente irc teclee

          /quit

     Para enviar un mensaje privado "Hola Sr. Quiensea" a <quiensea> teclee

          /msg <quiensea> Hola Sr. Quiensea

     Observe que cualquier cosa que escriba sin la `/' precedente es
     enviada al canal como un mensaje.

     Observación: los clientes tales como XChat a menudo tienen una forma
     diferente de unirse a servidores/canales (distintas interfaces
     gráficas de usuario).


15.7. Motores de Búsqueda
-------------------------

     Existen diversos motores de búsqueda que proporcionan documentación
     relacionada con Debian:

        * Página de búsqueda de Debian en la WWW
          (http://search.debian.org/).

        * Google (http://www.google.com/): incluir "site:debian.org" como
          parámetro de búsqueda.

        * Grupos Google (http://groups.google.com/): un motor de búsqueda
          para los foros de discusión.  Incluir "linux.debian.user" como
          parámetro de búsqueda.

        * AltaVista (http://www.altavista.com/)

     Por ejemplo, buscando la cadena "cgi-perl" se obtiene una explicación
     más detallada de este paquete que la breve descripción proporcionada
     por su archivo de control.  Véase Sección 6.3.1, `Búsqueda de fallos y
     ayuda en Debian' por ejemplo.


15.8. Páginas en Internet
-------------------------

     Las siguientes son algunas URLs que recopilé para temas específicos.

        * IBM developerWorks: Linux
          (http://www.ibm.com/developerworks/linux/)

        * Los últimos paquetes de Adrian Bunk (http://www.fs.tum.de/~bunk/)

        * Linux en ordenadores portátiles (http://www.linux-laptop.net/)

        * Xterm FAQ (http://dickey.his.com/xterm/xterm.faq.html)

        * mini-COMO sobre el sistema de archivos EXT3
          (http://www.zip.com.au/~akpm/linux/ext3/ext3-usage.html)

        * Soporte de archivos grandes en Linux
          (http://www.suse.de/~aj/linux_lfs.html)

        * Administradores de Ventanas para X (http://www.xwinman.org)

        * Proyecto USB para Linux (http://www.linux-usb.org/)

        * Páginas de SuSE para CJK
          (http://www.suse.de/~mfabian/suse-cjk/suse-cjk.html)

        * LNX-BBC (Business-card-sized boot CD project)
          (http://www.lnx-bbc.org/)

        * Información sobre Linux de Karsten Self (Particiones, copias de
          respaldo, navegadores...)
          (http://kmself.home.netcom.com/Linux/index.html)

        * Copias de respaldo-COMO de Alvin Oga
          (http://www.Linux-Backup.net/)

        * Seguridad-COMO de Alvin Oga (http://www.Linux-Sec.net/)

        * Diversas fuentes NO OFICIALES para APT (http://www.apt-get.org/)

        * Configuración de Ethernet en ordenadores portátiles
          (http://www.orthogony.com/gjw/lap/lap-ether-intro.html)


-------------------------------------------------------------------------------


A. Apéndice
-----------


A.1. Autores
------------

     La Guía de referencia Debian fue iniciada por Osamu Aoki
     <osamu@debian.org> a partir del resumen de su instalación personal que
     inicialmente denominó "Referencia Rápida..."  ("Quick Reference ...").
     Muchos de los contenidos provienen de los archivos de la lista de
     correo "debian-user".  También fueron referenciados "Manual de
     Instalación Debian " y "Debian Release Notes".

     Siguiendo las sugerencias de Josip Rodin, un miembro muy participativo
     del Proyecto de Documentación Debian (http://www.debian.org/doc/ddp)
     (DDP) y el encargado actual de las "FAQ de Debian", el documento fue
     renombrado como "Referencia Debian" y se nutrió con diversos capítulos
     de las "Debian FAQ".  Luego se creo el resumen "Guía de referencia
     rápida Debian".

     Este documento fue editado, traducido y ampliado por los siguientes
     miembros el equipo QREF:
        * Inglés original de la "Quick Reference..."
             * Osamu Aoki <osamu@debian.org> (coordinador: de todos los
               contenidos)
        * Relectura del original en inglés y contribuciones adicionales
             * David Sewell <dsewell@virginia.edu> (coordinador: en estilo)
             * Thomas Hood <jdthood@yahoo.co.uk> (temas relacionados con
               redes)
             * Brian Nelson <nelson@bignachos.com> (en especial, temas
               relacionados con X)
             * Jan Michael C Alonzo <jmalonzo@spaceants.net>
             * Daniel Webb <webb@robust.colorado.edu>
             * Intercambio de opiniones con todos los traductores
        * Traducción al francés
             * Guillaume Erbs <gerbs@free.fr> (coordinador: fr)
             * Rénald Casagraude <rcasagraude@interfaces.fr>
             * Jean-Pierre Delange <delange@imaginet.fr>
             * Daniel Desages <daniel@desages.com>
        * Traducción al italiano
             * Davide Di Lazzaro <mc0315@mclink.it> (coordinador: it)
        * Traducción al portugués brasileño
             * Paulo Rogério Ormenese <pormenese@uol.com.br> (coordinador:
               pt-br)
             * Andre Luis Lopes <andrelop@ig.com.br>
             * Marcio Roberto Teixeira <marciotex@pop.com.br>
             * Rildo Taveira de Oliveira <to_rei@yahoo.com>
             * Raphael Bittencourt Simoes Costa <raphael-bsc@bol.com.br>
             * Gustavo Noronha Silva <kov@debian.org> (coordinador)
        * Traducción al español
             * Walter Echarri <wecharri@infovia.com.ar> (coordinador: es)
             * José Carreiro <ffx@urbanet.ch>
        * Traducción al alemán
             * Jens Seidel <tux-master@web.de> (coordinador: de)
             * Willi Dyck <wdyck@gmx.net>
             * Stefan Schröder <stefan@fkp.uni-hannover.de>
             * Agon S.  Buchholz <asb@kefk.net>
        * Traducción al polaco---los siguientes miembros de PDDP
          (http://debian.linux.org.pl):
             * Marcin Andruszkiewicz
             * Mariusz Centka <mariusz.centka@debian.linux.org.pl>
             * Bartosz Fenski <fenio@debian.linux.org.pl> (coordinador: pl)
             * Radoslaw Grzanka <radekg@debian.linux.org.pl>
             * Bartosz 'Xebord' Janowski
             * Jacek Lachowicz
             * Rafal Michaluk
             * Leonard Milcin, Jr.
             * Tomasz Z.  Napierala <zen@debian.linux.org.pl>
             * Oskar Ostafin <cx@debian.linux.org.pl>
             * Tomasz Piekos
             * Jacek Politowski
             * Mateusz Prichacz <mateusz@debian.linux.org.pl>
             * Marcin Rogowski
             * Pawel Rozanski
             * Mariusz Strzelecki
             * Krzysztof Scierski
             * Przemyslaw Adam Smiejek <tristan@debian.linux.org.pl>
             * Mateusz Tryka <uszek@debian.linux.org.pl>
             * Cezary Uchto
             * Krzysztof Witkowski <tjup@debian.linux.org.pl>
             * Bartosz Zapalowski <zapal@debian.linux.org.pl>
        * Traducción al chino (simplificado)
             * Hao "Lyoo" LIU <iamlyoo@163.net> (coordinador: zh-cn)
             * Ming Hua <minghua@rice.edu>
        * Traducción al chino (tradicional)
             * Asho Yeh <asho@debian.org.tw> (coordinador: zh-tw)
             * Tang Wei Ching <wctang@csie.nctu.edu.tw> (ex-coordinador:
               zh-tw)
        * Traducción al japonés
             * Shinichi Tsunoda <tsuno@ngy.1st.ne.jp> (coordinador: ja)
             * Osamu Aoki <osamu@debian.org>

     QREF es una abreviatura del título del documento original, "Quick
     Reference..."  (Referencia rápida...) y es también el nombre del
     proyecto en qref.sourceforge.net.

     La mayoría de los contenidos de Capítulo 2, `Fundamentos de Debian'
     provienen de las "FAQ de Debian" (Marzo del 2002):
        * 5.  Los archivos FTP de Debian `ftparchives.sgml' (todo el
          capítulo)
        * 6.  Fundamentos de la Administración de Paquetes Debian
          `pkg_basics.sgml' (todo el capítulo)
        * 7.  Las Herramientas de Administración de Paquetes Debian
          `pkgtools.sgml' (todo el capítulo)
        * 8.  Manteniendo su sistema Debian actualizado `uptodate.sgml'
          (todo el capítulo)
        * 9.  Debian y el kernel `kernel.sgml' (todo el capítulo)
        * 10.  Personalizando la instalación de Debian GNU/Linux
          `customizing.sgml' (parte del capítulo)

     Estas secciones de las "FAQ de Debian" han sido incluidas en este
     documento después de algunas modificaciones para reflejar los cambios
     recientes del sistema Debian.

     Las "FAQ de Debian" originales fueron creadas y estaban a cargo de
     J.H.M.  Dassen (Ray) y Chuck Stickelman.  Las personas que
     reescribieron las "FAQ de Debian" fueron Susan G.  Kleinmann y Sven
     Rudolph.  Posteriormente estuvieron a cargo de Santiago Vila.  El
     encargado actual es Josip Rodin.

     Parte de la información de las "FAQ de Debian" provienen de:
        * El anuncio de la versión Debian-1.1, por Bruce Perens
          (http://www.perens.com/).
        * Las FAQ de Linux, por Ian Jackson
          (http://www.chiark.greenend.org.uk/~ijackson/).
        * Archivos de las Listas de Correo de Debian
          (http://lists.debian.org/),
        * el manual de dpkg para programadores y el manual de normativa de
          Debian (véase Sección 15.1, `Referencias')
        * una gran cantidad de desarrolladores, voluntarios, beta-testers y
        * los frágiles recuerdos de sus autores :-)

     Algunas partes de la sección "Tutorial" se obtuvieron de
        * "Debian Tutorial" de Havoc Pennington, Oliver Elphick, Ole
          Tetlie, James Treacy, Craig Sawyer y Ivan E.  Moore II (este
          documento se creo a partir de la "Linux User's Guide" de Larry
          Greenfield.)
        * "Debian GNU/Linux: Guide to Installation and Usage" de John
          Goerzen y Ossama Othman.

     Queremos agradecer a todos aquellos que han ayudado a crear este
     documento.


A.2. Garantías
--------------

     Puesto que no soy un experto, no pretendo ser un entendido en Debian o
     Linux en general.  Las consideraciones sobre seguridad quizás sean
     aplicables únicamente al ámbito doméstico.

     El presente documento no reemplaza a ninguna de las guías autorizadas.

     No se ofrecen garantías de ningún tipo.  Todas las marcas son
     propiedad de sus respectivos dueños.


A.3. Comentarios
----------------

     Son bienvenidos todos los comentarios y sugerencias.  Por favor,
     envíen un mensaje a Debian BTS system (http://bugs.debian.org/) para
     el paquete `debian-reference' o los respectivos paquetes traducidos.
     El uso de `reportbug' facilita el envío de un reporte de fallos.
     Incluso pueden enviar un mail para Osamu Aoki
     (http://people.debian.org/~osamu/) a <osamu@debian.org> en inglés o a
     cada traductor en su respectivo idioma)

     Aunque vivía en USA, mi idioma nativo no es el inglés.  Cualquier
     corrección gramatical es bienvenida.

     La mejor contribución consiste en aplicar diff a la versión SGML del
     documento aunque también es bienvenido diff aplicado a la versión
     texto.

     Los archivos originales en SGML usados para crear este documento están
     disponible vía CVS en: `:pserver:anonymous@cvs.sf.net/cvsroot/qref' o
     en http://qref.sourceforge.net/Debian/qref.tar.gz.


A.4. Formato del documento
--------------------------

     El presente documento fue escrito usando la DTD SGML de DebianDoc
     (re-escrito a partir del SGML de LinuxDoc).  El sistema SGML de
     DebianDoc nos permite crear documentos en una amplia variedad de
     formatos a partir de un único archivo fuente.  De esta manera es
     posible ver este documento en HTML, texto plano, TeX DVI, PostScript,
     PDF o GNU info.

     Las utilidades de conversión del SGML de DebianDoc están disponible en
     el paquete Debian `debiandoc-sgml'.


A.5. El laberinto de Debian
---------------------------

     El sistema Linux es una poderosa plataforma informática cuando es
     utilizado en red.  No obstante, aprender a usar todas sus capacidades
     no es una tarea sencilla.  La configuración de la impresora es un buen
     ejemplo.

     Existe un mapa completo y detallado denominado "CÓDIGO FUENTE".  Es
     muy preciso pero muy difícil de entender.  Existen también referencias
     llamadas COMO (HOWTO) y mini-COMO (mini-HOWTO).  Son más fácil de
     entender pero tienden a proporcionar demasiados detalles y a perder de
     vista la idea principal.  A veces tengo problemas para encontrar la
     sección correcta en un extenso HOWTO cuando necesito sólo un par de
     comandos.

     Para transitar por el laberinto de información de la configuración del
     sistema Linux, comencé escribiendo apuntes sencillos en archivos de
     texto como referencia rápida.  La lista de archivos fue haciéndose más
     grande y mientras tanto aprendí debiandoc.  El resultado es esta _Guía
     de referencia Debian_.


A.6. Citas de Debian
--------------------

     Veamos algunas citas interesantes de la lista de correos de Debian.

        * "Esto es Unix.  Le proporciona suficiente cuerda para sostenerse
          por sí mismo."  --- Miquel van Smoorenburg <miquels@cistron.nl>

        * "Unix _ES_ amigable...  Sólo que es selectivo al elegir sus
          amigos."  --- Tollef Fog Heen <tollef@add.no>


-------------------------------------------------------------------------------


     Guía de referencia Debian

     Osamu Aoki <osamu@debian.org>
     Coordinador de la traducción al español: Walter O. Echarri
     <wecharri@infovia.com.ar>
     Sección A.1, `Autores'


     CVS, lun abr 3 22:57:45 UTC 2005