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 © 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 © 1999 Matthew Vernon matthew@debian.org. http://www.pick.ucam.org/~mcv21/hurd.html