   En este documento se quiere proporcionar una guía sencilla y de
fácil comprensión sobre como instalar el Hurd, con un mínimo esfuerzo.

   Copyright (C) 2000, 2001 Neal H Walfield <neal@cs.uml.edu>

   Este documento ha sido traducido al castellano por Vicente Hernando
Ara <bizenton@terra.es>

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

   Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided also
that the sections entitled "Copying" and "GNU General Public License"
are included exactly as in the original, and 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
manual into another language, under the above conditions for modified
versions, except that this permission notice may be stated in a
translation approved by the Free Software Foundation.

   (Nota del traductor: La traducción de la licencia que aparece a
continuación es únicamente con fines educativos. La licencia oficial es
la escrita en los párrafos anteriores en inglés)

   Se permite hacer y distribuir copias literales de este manual
siempre que se acompañe del correspondiente copyright y esta licencia
aparezca en todas las copias.

   Se permite copiar y distribuir versiones modificadas de este manual
bajo las mismas condiciones que para la copia literal, siempre que las
secciones tituladas "Copias" y "GNU Gneral Public License(LICENCIA
PÚBLICA GENERAL)" sean incluidas exactamente igual que en el original,
y que el trabajo resultante se distribuya con una licencia legal
idéntica a ésta.

   Se permite copiar y distribuir traducciones a otros lenguajes de
este manual, bajo las condiciones de los párrafos anteriores, para las
versiones modificadas, siempre que esta nota legal aparezca en una
traducción aprobada por la Fundación Para El Software Libre (FSF).

Installing the Hurd
*******************

   En este documento se desea proporcionar una guía sencilla y de fácil
comprensión sobre cómo instalar el Hurd, con un esfuerzo mínimo.

Visión General
**************

   La distribución Debian GNU/Hurd, al contrario que las distribuciones
de otros sistemas operativos, no tiene un bonito programa de
instalación.  Algún día lo tendrá, incluso puede que tú ayudes a
diseñarlo y a programarlo. Sin embargo, hasta entonces, para instalar
el sistema GNU/Hurd, necesitarás instalar el sistema base desde otro
sistema operativo, más específicamente un sistema compatible con Unix.
Tenemos noticia de instalaciones con éxito del Hurd desde diferentes
versiones de sistemas GNU/Linux y de BSDs. Desde otro sistema no habría
problema, siempre que sea compatible con el entorno Unix. Actualmente la
única distribución existente de Hurd está basada en Debian, por eso, una
instalación cruzada(CROSS INSTALLING) desde una distribución GNU/Linux
puede simplificarte mucho la vida.

   La instalación del Hurd emplea un script que se encarga del trabajo
pesado.  Entre su ejecución y la lectura de esta guía la mayoría de
nuestro tiempo la pasaremos descargando ficheros. Sin embargo, antes de
ejecutar esos scripts, necesitamos preparar el sistema. Ésto incluye
crear una partición para el Hurd e instalar el cargador de arranque:
Grub, (GRAND UNIFIED BOOT LOADER) el gran cargador unificado de
arranque.

   Esta guía trata de hacer el proceso de instalar el Hurd lo más
sencillo posible. Si hay errores, seguramente serán del autor. Por
favor, envíaselos junto con otras sugerencias y críticas, los aceptará
amablemente.

Manos a la Obra ó Buscando un sitio para nuestro directorio Home
****************************************************************

   Este puede ser el paso más largo para aquellos que no tienen una
partición disponible o un disco duro extra. En ese caso necesitaremos
reparticionar el disco duro. Una solución es usar Parted, el editor de
particiones de GNU. Es capaz, no solo de editar particiones de forma
básica, sino además de crearlas y editarlas. Podéis bajar el programa
desde `http://www.gnu.org/software/parted'.  El manual es bastante
completo, e incluye varios tutoriales.

   El Hurd soporta tamaños de particiones de hasta un giga. Las
particiones mayores de este tamaño no funcionarán. Esta limitación es a
causa de una decisión de diseño tomada varios años atrás, debido a la
cual el servidor del sistema de ficheros mapea la partición entera en
la memoria virtual.  Como en la arquitectura ia32 sólo disponemos de 4
gigabytes de memoria virtual, de los cuales, únicamente 2 gigas están
disponibles para la aplicación, y de éstos una porción significativa
está reservada para el código, la pila y el heap, al final la parte de
memoria virtual contigua que nos queda es generalmente de un gigabyte.
Se ha planeado ya eliminar esta limitación. Sin embargo, otras tareas
tienen una mayor prioridad por ahora.

   Teóricamente, una partición de un giga es más que suficiente para un
sistema utilizable. Mucha gente prefiere tener, sin embargo, al menos
dos particiones: una, la partición de root y la otra, la partición de
home. Esta estructura es muy aconsejable para desarrolladores
interesados en debuguear los servidores del Hurd.

   El Hurd añade varias extensiones al formato de ficheros ext2fs, como
pueden ser los traductores(translators) pasivos, y un cuarto triplete de
permisos para el usuario desconocido. Para sacar el máximo partido de
estas características, sin embargo, el dueño de la partición debe ser
puesto a `Hurd'.  El comando `mke2fs', a no ser que se especifique en
la línea de comandos, pondrá como dueño por defecto al sistema
operativo que estemos ejecutando. El Hurd respetará el dueño que tenga
el sistema de ficheros, así que debemos ser cuidadosos y poner el valor
correcto, o el Hurd puede fallar de maneras imprevistas.  Ten en
cuenta, que aunque un sistema de ficheros tenga como dueño a un sistema
operativo concreto, los otros sistemas podrán hacer uso de dicho
sistema de ficheros, aunque algunas extensiones no estarán disponibles.

   Para crear un sistema de ficheros usaremos `mke2fs' y le pasaremos
`-o hurd' para designar a hurd como dueño del sistema de ficheros
recién creado. Por ejemplo:

      # mke2fs -o hurd /dev/DEVICE

El Cargador de Arranque
***********************

   Al contrario que GNU/Linux y los BSDs, el Hurd no tiene su propio
cargador de arranque. Cualquiera que cumpla con el estandar multiboot
puede ser usado para iniciar el Hurd. De momento, sólo hay un proyecto
que satisface estos requisitos: Grub, el Grand Unified Boot Loader.

   Unas palabras sobre Grub: Grub es muy potente, al contrario que los
cargadores de arranque tradicionales en los x86, como es el caso del
LILO. Tiene un intérprete de comandos, admite parámetros para el
arranque, un terminal ligero, y una plétora de características. Además
puede iniciar multitud de sistemas operativos. Si alguna vez has
iniciado un alpha o un sparc, entenderás lo que Grub es capaza de
hacer. Sin embargo, no te asustes: Grub es mejor. Te gustará. Después
no usarás otro.

   Para obtener el Grub, visita `ftp://alpha.gnu.org/gnu/grub'.
Encontrarás un targz y una imagen de disquete. Si te descargas el
targz,se instala con los `configure', `make', y `make install' de
siempre.  Incluye también un manual maravillosamente completo acerca
del manejo de Grub. Léelo. Si, por el contrario, eliges descargar la
imagen de disquete, es suficiente con volcarla a un disquete para
obtener un Grub completamente operativo:

      # dd if=grub-boot-VERSION.image of=/dev/fd0

En el caso de que uses el Grub en el disquete, siempre estarás a tiempo
de instalar Grub en tu disco duro, cuando lo decidas conveniente.

Instalación Cruzada(Cross Install)
**********************************

   El siguiente paso es descargar el sistema base de:
`ftp://alpha.gnu.org/gnu/hurd/contrib/marcus/gnu-latest.tar.gz'

   El targz está preparado para extraer todo su contenido en el
directorio actual. Después de montar la partición y situarnos donde
hayamos montado la partición, sólo necesitaremos extraer el archivo. En
el siguiente ejemplo asumimos que la partición raíz está montada en
`/gnu'.

      # cd /gnu
      # tar --same-owner -xvzpf ~/gnu-latest.tar.gz

Iniciando el Hurd
*****************

   Ya está todo preparado para iniciar el Hurd por primera vez. Después
de verificar que hemos introducido el disquete con el Grub en la
disquetera, reiniciamos. Si todo va bien, saldrá por la pantalla el
menú del Grub.  Pulsa `c' para que aparezca la línea de comandos del
Grub.

   Lo primero será seleccionar el sistema de ficheros raíz. Grub usa una
nomenclatura de particiones un poco diferente de la de Linux o de la de
Hurd: tanto los discos IDE como los SCSI se denominan `(hdN)'.  `N' es
el número del disco (empezando por el cero) en el orden en que los
detecta la BIOS. Es decir, Grub no hace distinciones entre discos IDE o
SCSI. Las particiones, como los discos, se empiezan a contar desde
cero: `(hdN,N)'. Si esto te marea, no te preocupes, Grub va a acudir en
nuestra ayuda.

   Para determinar en qué sistema de ficheros reside un fichero en
particular, se puede usar el comando `find'. Cuando se ejecuta este
comando, Grub busca en cada sistema de ficheros el fichero
especificado, y muestra en pantalla dónde lo ha encontrado. En este
caso vamos a buscar el kernel, `/boot/gnumach.gz'.

       grub> find /boot/gnumach.gz
        (hd0,0)

Como podemos ver, Grub está indicando que `/boot/gnumach.gz' está en
`(hd0,0)'. Entonces seleccionaremos la partición raíz:

       grub> root (hd0,0)
        Filesystem type is ext2fs, partition type 0x83

   Ahora, necesitamos cargar el GNU Mach. Además de cargar el binario,
debemos especificar por lo menos la partición raíz, la cual será usada
por el propio Hurd, por lo que deberá estar escrita en términos que el
Hurd entienda.

   GNU Mach nombra los discos empezando por cero. Los discos IDE llevan
el prefijo `hd', mientras que los SCSI llevan el `sd'. Al igual que
Linux, los discos son numerados según su posición en la controladora.
Por ejemplo, el primario maestro es `hd0', y el secundario esclavo es
`hd3'. Las particiones usan la convención de notación de las
rodajas(slices) de BSD, y añaden `sM' al nombre del disco para indicar
la partición a la que nos referimos. Ten en cuenta que `M' empieza a
contarse desde 1, no desde cero. El número de la rodaja(slice) es fácil
de calcular, sólo tienes que sumarle uno al número que usaste para el
Grub.

   Como el Hurd aún no ha sido configurado, debemos iniciarlo en modo
monousuario. Para ésto, lo único que necesitamos es añadir `-s' en la
línea de comandos del kernel.

   Entonces, continuando con el ejemplo anterior, y asumiendo que el
primer disco está como maestro de la segunda controladora, tendríamos:

       grub> kernel /boot/gnumach.gz -s root=device:hd2s1
        [Multiboot-elf, ...]

   Lo siguiente a hacer es cargar el servidor del sistema de ficheros y
el servidor `exec'. Ésto se hace usando la capacidad de carga del Grub.
Los parámetros son la manera mediante la cual el kernel pasa algunos
parámetros importantes a los servidores.

       grub> module /hurd/ext2fs.static --multiboot-command-line=${kernel-command-line}  --host-priv-port=${host-port} --device-master-port=${device-port} --exec-server-task=${exec-task} -T typed ${root} $(task-create) $(task-resume)
          [Multiboot-module  0x1c4000, 0x2cfe6a bytes]
       grub> module /lib/ld.so.1 /hurd/exec $(exec-task=task-create)
          [Multiboot-module  0x494000, 0x27afe bytes]

Es importante escribir cada cadena de un módulo en una sóla línea. Es
aconsejable añadir lo anterior al fichero de configuración de Grub
`menu.lst', tan pronto como sea posible.

   Finalmente el Hurd puede ser iniciado:

     grub> boot

   Siéntate y observa los mensajes. Ésto es en realidad más importante
de lo que se podría pensar, porque hay un bug en GNU Mach que provoca
que si se pulsa una tecla durante el proceso de arranque, se produce un
kernel panic.

   Si el Hurd no arranca, puede ser debido a interrupciones compartidas
(shared IRQs): GNU Mach no trabaja bien con las interrupciones
compartidas.  Puedes comprobar las interrupciones mirando, por ejemplo,
el fichero `/proc/interrupts' en GNU/Linux.  Como GNU Mach no soporta
los módulo cargables en el kernel, la mayoría de los drivers están
compilados en el kernel que viene por defecto. Si tienes periféricos
viejos ésto puede suponer un problema: un dispositivo puede responder
mal, a un intento de prueba diseñado par otro dispositivo.  Compilando
un nuevo kernel con únicamente los dispositivos requeridos, normalmente
se resolverá este problema. GNU Mach se cross compila fácilmente. Si
estás usando Debian, prueba el paquete `gcc-i386-gnu'.

   Si lo anterior no te ayuda, mira en la lista de fuentes de
información al final de este documento. Por último, pregunta en la
lista de correo apropiada.

Instalación Nativa
******************

   Una vez que aparece el prompt, y siempre que el Hurd esté en modo
monousuario, será necesario seleccionar el tipo de terminal:

      # export TERM=mach

   Ten en cuenta que <CONTROL-C> y familia no funcionan en modo
monousuario.

   Ahora podemos ejecutar el script `native-install'. Ésto configurará
los paquetes y algunos traductores importantes.

      # ./native-install

Justo antes de que el script termine, sacará el mensaje de que necesita
ser ejecutado una segunda vez. Sigue las instrucciones para reiniciar,
usando el comando `reboot'. Una vez más inicia en modo monousuario y
ejecuta `./native-install'.

Configuración
*************

La Red
======

   Necesitaremos configurar el traductor pfinet para configurar la red.
Se hace usando el comando `settrans' para asociar un traductor a un
nodo determinado del sistema de ficheros. Cuando los programas acceden
al nodo, para, por ejemplo, mandar un RPC, el sistema operativo
iniciará de manera transparente el servidor para llevar a cabo la tarea
requerida.

      # settrans -fgap /servers/socket/2 /hurd/pfinet -i eth0 \
        -a a.b.c.d -g e.f.g.h -m i.j.k.l

Hemos pasado varias opciones a `settrans'. Las primeras dos, `fg',
obligan a que se finalice cualquier traductor preexistente.  Las dos
siguientes, `ap', producen traductor activo y pasivo respectivamente.
Ésto significa que el sistema operativo inicia el traductor
inmediatamente y guarda la configuración en el nodo del sistema de
ficheros. Lo anterior también hace que cualquier mensaje de error sea
enviado a `stderr'. El siguiente argumento `/server/socket/2', es el
nodo al que asociamos el traductor. Lo que sigue es el programa
traductor a ejecutar y los argumentos que se le pasan.

   Se puede obtener ayuda sobre el comando `settrans' si le pasamos la
opción `--help'. Del mismo modo, podemos obtener ayuda sobre cualquier
traductor específico con el mismo argumento, p. ej.:

      # /hurd/pfinet --help

Como puede producirse una gran cantidad de datos de salida, considera
usar un paginador a través de una tubería.

Otros Sistemas de Ficheros
==========================

   A continuación edita `/etc/fstab' para añadir la partición home y el
espacio de swap. Por defecto, `nano' es el único editor instalado en la
distribución base. Es _muy importante_ que se use el swap. El Hurd será
un orden de magnitud más estable. Ten en cuenta que el Hurd puede no
sólo compartir transparentemente una partición de swap con Linux sino
además paginar correctamente a cualquier dispositivo, incluido una
partición sin formato(raw), o incluso a tu partición home.

   Aquí mostramos un ejemplo del fichero `/etc/fstab':

     # <file system> <mount point>   <type>  <options>  <dump>  <pass>
     /dev/hd2s1      /               ext2    rw         0       1
     /dev/hd2s2      /home           ext2    rw         0       2
     /dev/hd2s3      none            swap    sw         0       0

   Recuerda crear los dispositivos necesarios con el comando `MAKEDEV'.

   Usa el traductor `nfs' para montar una partición nfs. Cuando eres un
usuario distinto del root, el traductor conectará, por razones obvias,
al servidor de nfs en un puerto superior al 1024. Para hacer ésto
correctamente bajo GNU/Linux, la opción insecure debe añadirse a la
línea de export. Mostramos un ejemplo de fichero `/etc/exports':

     /home	192.168.1.2(rw,insecure)

Para montar ésto en un ordenador con Hurd:

      # settrans -cgap /home /hurd/nfs 192.168.1.1:/home

Reiniciando
===========

   Finalmente, reinicia en modo multiusuario, se hace de la misma manera
que en modo monousuario pero no poniendo la opción `-s' cuando cargamos
el kernel. ¡Feliz Hacking!

Palabras Finales
****************

Documentación
=============

   Para entender el Hurd, comienza por su página en la web de Debian:
`http://www.debian.org/ports/hurd/'. Después prueba la web de GNU:
`http://hurd.gnu.org'.

   Considera también la lectura del código fuente y el escribir más
documentación

El menú de Grub
===============

   Cargar siempre el kérnel a mano puede ser muy tedioso. Considera el
editar el fichero `/boot/grub/menu.lst' en el disquete. Modifícalo
apropiadamente; arrancar el sistema será ahora mucho más fácil y rápido.

Añadiendo Dispositivos
======================

   Por defecto, en el directorio `/dev', no se crean muchos
dispositivos.  Al igual que otras versiones de Unix, el Hurd tiene un
script `MAKEDEV'. Ejecútalo par crear los dispositivos que necesites.

Instalando Más Paquetes
=======================

   Hay varias maneras para añadir paquetes. Descargándolos y usando
`dpkg' funciona, pero es tedioso. Es más fácil emplear `atp-get' o
`dselect'. Edita el `/etc/apt/sources.list' y añade las dos líneas
siguientes:

     deb ftp://alpha.gnu.org/gnu/hurd/debian unstable main
     deb ftp://ftp.debian.org/debian unstable main

`ftp://alpha.gnu.org' contiene paquetes que tienen hacks y parches que
aún no han sido integrados en el sistema. No hay espejos(mirrors).

   Para usar un espejo(mirror) local de Debian, visita la página
`http://www.debian.org/distrib/ftplist'.

   Generalmente, ejecutando `dselect' después de la primera
instalación, descargará muy convenientemente los paquetes restantes del
sistema base. Después cada uno puede instalar los paquetes a su gusto.

XFree86
=======

  1. Primero, configura el traductor del teclado:

           # cd /dev
           # ./MAKEDEV kbd

  2. Ahora el traductor del ratón. Para ratones conectados al puerto
     serie tecleamos la línea siguiente:

           # settrans /dev/mouse /hurd/mouse --device=com0 --protocol=microsoft

     Asegúrate de que existe `/dev/com0'. Si no, créalo mediante
     `MAKEDEV' de la manera habitual.

     PS/2 no requiere un dispositivo. Es tan simple como:

           # settrans /dev/mouse /hurd/mouse --protocol=ps/2

     Para otros ratones, ejecuta `/hurd/mouse' con la opción `--help'.

  3. Necesitarás varios paquetes. La siguiente lista es un comienzo
     razonable: xfree86-common, xservers-common, xserver-YOURSERVER,
     xbase-clients, xterm, twm or fvwm, xfonts-base, xfonts-75dpi,
     xlib6g, xlib6g-dev, xpm4g-dev y rxvt.

  4. Está disponible el `xf86setup' para configurar las X, sin embargo,
     será más fácil copiar un fichero de configuración que funcione de
     otro sistema operativo que se ejecute en el mismo ordenador y
     colocarlo en `/etc/X11/XF86Config-4'.

     Ahora, cambiad la sección del ratón:

          Section "Pointer"
            Protocol "osmouse"
            Device "/dev/mouse"
          EndSection

     `Emulate3Buttons' puede ser añadido opcionalmente. Las demás
     opciones no funcionarán.

  5. Como el Hurd no usa ld.so.conf, será necesario añadir lo siguiente
     a `/etc/profile' para estar seguro de que encontrará las librerías:

          LD_LIBRARY_PATH=/X11R6/lib:$LD_LIBRARY_PATH

  6. Finalmente, ejecuta `startx'

  7. Hay varios detalles a tener en cuenta:
       1. `xterm' no funciona correctamente; prueba `rxvt'.

       2. `update-menu' no funciona aún. Así que no podemos uar los
          bonitos menúes de Debian.

       3. Debido a la carencia de una implementación de `pthreads', no
          esperes que funcione gnome, de todas formas, Window Maker,
          TWM, Blackbox y FVWM funcionarán.

Terminales Virtuales
====================

   El Hurd no tiene terminales virtuales. En su lugar usa `screen'

PPP
===

   PPP está disponible. Instala el paquete `um-pppd'.

Listas de Correo
================

  1. <debian-hurd@debian.org>  Discusión sobre el Hurd en cuanto a
     temas relacionados con Debian.
       1. Archive: `http://lists.debian.org/#debian-hurd'

  2. <web-hurd@gnu.org>  Desarrollo de las páginas web dle Hurd en
     `http://hurd.gnu.org'.
       1. Archive: `http://mail.gnu.org/pipermail/web-hurd/'

  3. <help-hurd@gnu.org>  Ayuda sobre el Hurd en general.
       1. Archive: `http://mail.gnu.org/pipermail/help-hurd/'

  4. <bug-hurd@gnu.org> Notificación de bugs, y desarrollo en general.
     Envía tus parches aquí.
       1. Archive: `http://mail.gnu.org/pipermail/bug-hurd/'

Trabajos Citados
****************

   "The Easy Guide to Installing Hurd on a Linux Box" Copyright (C)
1999 Matthew Vernon <matthew@debian.org>.
`http://www.pick.ucam.org/~mcv21/hurd.html'