Preguntas frecuentes sobre Hurd
Este documento intenta responder a aquellas preguntas que más frecuentemente inquietan a los usuarios cuando están instalando, usando, compilando, desarrollando y hablando sobre the GNU Hurd así como su distribución binaria Debian/GNU Hurd. Asegúrese de haber leído este documento antes de pedir que alguien le ayude.
The GNU Hurd está en desarrollo contínuo y todavía no ha sido publicada una versión estable. Le prevenimos de que: hay mucho trabajo todavía por terminar; encontrará bugs; su sistema se colgará. Dicho esto, usted puede contribuir en cualquier aspecto: desarrollo de the Hurd y Mach, portando aplicaciones, documentando y, lo más importante, reportando errores.
Si tiene alguna pregunta no contestada por este documento y usted cree que debería estar, mándela, y, si es posible, con respuesta.
Cada sección es copyright de su respectivo autor(es). Se le concede permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Libre Documentación de GNU, versión 1.1 o posterior publicada por la Fundación del Software Libre; sin Secciones Invariantes, y sin textos recubridores. Una copia de la licencia está incluida en el fichero COPYRIGHT.
Each section is copyright its respective author(s). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts and with no Back-Cover Texts. A copy of the license is included in the file COPYRIGHT. Neal H Walfield neal@cs.uml.edu
Traducción al Español: Gonzalo Fernández Hernández <gonzalofh@terra.es>
1.1. ¿Qué es un Micronúcleo Multiservidor?
1.2. Gramaticalmente, ¿Qué es the Hurd?
1.3. ¿Hay alguna lista de correo?
1.4. ¿Dónde puedo reportar errores?
1.5. ¿Hay alguna lista de cosas por hacer?
2. Instalación
2.1. ¿Dónde puedo obtener Debian GNU/Hurd?
2.2. ¿Cómo se instala Debian GNU/Hurd?
2.3. ¿Qué tipo de hardware soporta?
2.4. ¿Qué tipo de partición debo usar para mis particiones GNU/Hurd?
2.5. ¿Cómo llamo a mis particiones?
2.6. ¿Puedo usar particiones mayores a 1GB?
2.7. ¿Cuánta memoria de intercambio(swap) necesito?
2.8. ¿Puedo compartir mi espacio de intercambio(swap) entre GNU/Linux y GNU/Hurd?
3.1. ¿Cómo puedo añadir una partición de intercambio(swap)?
3.2. ¿Cómo puedo configurar una red? ¿Cómo puedo configurar un dispositivo de bucle(loopback)?
3.3. ¿Cómo puedo pasar opciones a \"serverboot\"?
3.4. ¿Puedo usar la versión de GNU/Linux de `e2fsck' en una partición GNU/Hurd?
4. Uso
4.1. ¿Dónde está la documentación?
4.2. ¿Qué es un traductor(translator)?
4.4. ¿Cómo puedo usar un teclado no-US?
4.5. ¿Cómo puedo activar el color en la consola?
4.6. ¿Cómo puedo activar las consolas virtuales?
4.9. ¿Qué son esos pids extraños \"2\" y \"3\"?
4.10. ¿Por qué \"ps aux\" me devuelve unos resultados extraños?
4.11. Se me ha colgado un proceso y lo quiero matar, pero \"ps\" también se me ha colgado.
4.12. ¿Dónde están...
4.13. ¿Hay un sistema de ficheros \"/proc\"?
4.14. ¿Por qué no funciona el comando \"df\"?
5.2. ¿Qué son esos mensajes sobre \"default pager\", \"paging\", y \"pager request\"?
5.3. ¿Qué es un gratuitous error?
5.4. ¿Qué significa \"/dev/hd0s1: MOUNTED READ-ONLY; MUST USE 'fsysopts --writable'\"?
6. Portando
6.1. ¿Qué programas ya han sido portados?
6.2. ¿Es fácil portar programas?
6.3. ¿Cómo puedo ayudar?
7. Compilando
7.1. ¿Dónde puedo conseguir el código fuente?
8. Desarrollo
8.1. ¿Qué es OSKit-Mach?
8.2. ¿Dónde está la documentación?
8.3. ¿Cómo puedo asegurarme de que mi código cumple POSIX?
8.4. ¿A quién le envio mis parches?
8.5. ¿En qué formato deben estar los parches para the Hurd y GNU Mach?
{NHW} Un Micronúcleo no tiene nada que ver con el tamaño del núcleo. Más bien, se refiere a los servicios que éste presta. Se admite generalmente que es un conjunto de interfaces que permiten a los procesos comunicarse entre sí y una forma de comunicarse con el hardware. Los \"drivers por software\", como me gusta llamarlos, se implementan en el espacio de usuario como servidores. Los ejemplos más obvios de estos son la pila TCP/IP, el sistema de ficheros ext2 y NFS. En el caso de the Hurd, los usuarios ya tienen acceso a unos servicios que, en un núcleo monolítico, nunca podrían usar, pero ahora, como el servidor se ejecuta en el espacio de usuario, es como si el usuario lo hubiera iniciado, pudiendo entonces, por ejemplo, montar un sistema de ficheros ftp en su directorio home.
Para más información sobre el diseño de the Hurd, lea el artículo de Thomas Bushnell, BSG: ``Hacia una nueva estrategia en el diseño de sistemas operativos'', disponible en:
http://www.gnu.ai.mit.edu/software/hurd/hurd-paper.html
{NHW} \"Hurd\", como acrónimo, viene de \"Hird of Unix-Replacing Daemons\". Hird, a su vez, viene de \"Hurd of Interfaces Representing Depth\". Nosotros consideramos \"Hurd\" más o menos como si fuera un nombre propio en Inglés: requiere un artículo, como en \"the Hurd\". Por ejemplo: \"The ext2 filesystem is provided by the Hurd, not by Mach.\". Nótese que las formas siguientes son incorrectas: \"Hurd\", \"HURD\", \"The HURD\", y \"the hurd\".
Decimos \"the GNU Hurd\" en vez de \"the Hurd\" cuando queremos remarcar que the Hurd es un paquete de GNU. Una vez que esto está claro, usamos la forma apocopada, sin \"GNU\".
El sistema operativo entero no sólo incluye el núcleo y los servidores del sistema, si no también muchos más programas. Este sistema se llama \"GNU\", o \"el sistema operativo GNU\". Los programas de GNU se pueden ejecutar también en núcleos de otros sistemas operativos. Hablamos de \"GNU/Hurd\" cuando queremos ponér énfasis en el hecho de que es el sistema GNU ejecutándose sobre Hurd, y como contraste con el sistema GNU/Linux que usa Linux como núcleo.
Para terminar, hay un \"Debian GNU/Hurd\". Esto se refiere a la distribución del sistema GNU creada por los desarrolladores de Debian. Por ejemplo: \"¿Qué usas en tu computador de escritorio? Debian GNU/Hurd, por supuesto\".
Los franceses normalmente escriben \"le Hurd\"-- esto es porque tratan el nombre como masculino singular, en mayúsculas como en Inglés.
Cuando nos referimos al micronúcleo, decimos \"Mach\" y lo usamos como nombre propio. Por ejemplo: \"Mach uses the device drivers found in version 2.0.x of Linux.\". A veces se dice \"The Mach microkernel\" en vez de \"Mach\".
{NHW} Hay cuatro listas de correo principales:
bug-hurd@gnu.org: Desarrollo de the Hurd y Mach.
help-hurd@gnu.org: Preguntas generales sobre the Hurd.
web-hurd@gnu.org: Mantenimiento de las páginas web de the Hurd en http://www.gnu.ai.mit.edu/software/hurd/hurd.html
debian-hurd@lists.debian.org: Toda clase de cosas referidas a Debian GNU/Hurd (especialmente cuestiones de portado del código).
Puede suscribirse de la manera habitual.
{NHW} Use el sistema de reporte de errores de Debian. Puede encontrar más sobre él en http://www.debian.org/Bugs.
{NHW} Sí, de hecho, hay varias:.
<hurd>/tasks
<hurd>/TODO
{NHW} Nadie parece saberlo. De todas formas, the Hurd es definitivamente ejecutable, pruébelo y ayúdenos a alcanzar nuevas versiones.
{MB} La distinción entre \"/\" y \"/usr\" tiene razones históricas. Nos remontamos a cuando los sistemas Unix eran inicializados desde dos cintas, una pequeña cinta root y una gran cinta user. Hoy en día, nos gusta usar particiones diferentes para esos dos espacios. The Hurd se deshace de esa basura histórica. Creemos que hemos encontrado una solución más flexible llamada shadow filesystems. Desafortunadamente, el soporte para los shadowed filesystems no está todavía implementado.
{NHW} Como GNU/Hurd es un port oficial e inestable de Debian, puede encontrar los binarios en su mirror local de Debian. De todas formas, hay varios paquetes básicos que no compilan limpiamente a partir del código fuente y tiene varios apaños(hacks) desafortunados. Se puede encontrar en:
ftp://alpha.gnu.org/gnu/hurd/debian
Una vez instalado correctamente, puede configurar apt en los ficheros añadiendo las líneas siguientes a su fichero /etc/apt/sources.list. Por ejemplo:
deb ftp://alpha.gnu.org/gnu/hurd/debian unstable main deb http://http.us.debian.org/debian unstable main
Como descargar todos los paquetes puede durar bastante tiempo (hay más de un gigabyte en ficheros), Philip Charles ha creado CDs de Debian GNU/Hurd. Pueden encontrarse distribuidores en:
http://www.debian.org/ports/hurd/hurd-cd
{NHW} Consulte alguna de las guías de instalación. La guía más actualizada puede está disponible en:
http://web.walfield.org/papers/hurd-installation-guide/
{NHW} Por el momento, the GNU Hurd sólo se ejecuta sobre máquinas IA32, de todas formas, portarlo a otras arquitecturas no debería de ser difícil: el código há sido escrito en todo momento teniendo en mente su portabilidad.
Con respecto a los drivers, GNU Mach usa un subconjunto de los drivers del núcleo Linux 2.0.x. Puede encontrar una guía relativamente completa de la compatibilidad con el hardware en:
http://www.freesoftware.fsf.org/thug/gnumach_hardware.html
Si usted tiene problemas, es probable que:
Esté usando IRQ sharing; GNU Mach no lo soporta en absoluto.
Un driver de un dispositivo está monopolizando el hardware e activando accidentalmente el dispositivo incorrecto.
En el primer caso, debería empezar a quitar dispositivos o jugar con la BIOS. En el segundo caso, GNU Mach no soporta módulos cargables del núcleo. Por lo tanto, usted tendrá que compilar un nuevo núcleo y sólo activar aquellos drivers de dispositivos que en realidad necesite.
{MB} Debería usar un sistema de ficheros ext2. Usted también puede usar ufs, al estilo de BSD. El número del tipo de la partición ext2 es 0x83 (el mismo que en Linux), no 0x63 (GNU HURD). Thomas explica el porqué de que 0x63 sea una mala elección:
Algún día puede que hagamos un nuevo formato de sistema de fichero, que probablemente se llamará the GNU Hurd filesystem format, y que bien podría usar ese código de partición.
Prescindiendo de lo dicho, señala Roland, siempre es un error usar ese código para una partición ext2.
{MB,NHW} Sabía que me iba a preguntar eso. Si yo tuviera que reducir este FAQ a sólo una pregunta, habría elegido ésta. Es muy fácil, pero debe saber que en realidad hay varios convenios de nomenclatura incompatibles.
Primero, the Hurd: si el disco en cuestión es un disco SCSI, debe saber el número del dispositivo SCSI; si es un disco IDE, debe saber en qué controladora está el disco y si es maestro o esclavo. The Hurd usa el convenio de nomenclatura de BSD, en el cuál los discos están ordenados de acuerdo a su localización física, numéricamente, empezando desde cero. Este esquema de nomenclatura es bastante similar al encontrado en Linux. Ahí, el disco maestro en la controladora primaria se designa por \"hda\" y el esclavo por \"hdb\". En la controladora secundaria, se designan al maestro y al esclavo como \"hdc\" y \"hdd\" respectivamente. Bajo the Hurd, `hda' se convertirá en \"hd0\", \"hdb\" será referenciado como \"hd1\", etc.
En the Hurd, al igual que en BSD, se llama \"tajadas(slices)\" a las particiones y están numeradas empezando desde el 1. De esta forma, para dar nombre a una partición, tomaremos el nombre del disco, añadiremos una \"s\" y el número de partición. De nuevo, es parecido a Linux, excepto en que no hay \"s\". Por ejemplo, \"hda1\" sería \"hd0s1\".
GRUB, el cargador de arranque, usa una nomenclatura totalmente diferente: pregunta a la BIOS y añade cada disco en orden a un array. Tanto los discos como las particiones se enumeran usando arrays que empiezan por cero. El formato es: \"hd (<disco>, <partición>)\". De esta manera, \"hd (0, 1)\" se refiere a la segunda partición del primer lector detectado por la BIOS. Como Grub tiene auto-completar, no hay mucho donde dudar.
{MB} No, no por el momento. Los servidores de sistema de ficheros necesitan ser modificados para que no mapeen todo el espacio de almacenamiento en la memoria, lo que no es demasiado difícil. Para ficheros grandes, se necesita modificar algunas interfaces, lo que es un poco más difícil pero se puede hacer.
{NHW} Normalmente, mucha; si se agota, Mach se inestabiliza(pánico del núcleo). Yo tengo al menos 128 MB de ram y 256 MB de swap en todas las máquinas con GNU/Hurd.
{NHW} Sí. El paginador por defecto reconoce y respeta las particiones de intercambio de Linux. Paginará sobre una partición raw(volcado directo), i.e. en el caso de que no reconociera la partición swap de Linux. Por lo tanto: TENGA CUIDADO.
{MB} Olvidó poner como propietario del sistema de ficheros de la partición de the GNU/Hurd a \"hurd\". The Hurd usa información adicional en los inodos para posicionar los traductores. Para realizar esto, la partición debe ser marcada como \"propiedad de the Hurd\". Esto se hace normalmente pasando la opción \"-o hurd\" a \"mke2fs\" al crear el sistema ext desde otro sistema operativo(los sistemas de ficheros creados en GNU/Hurd activan esta opción automáticamente). Si usted no consigue hacerlo, puede también usar el script \"e2os\".
{MB} Es divertido, ¿no cree? Además del servidor de \"terminal\" de rescate en \"/tmp/console\", otro servidor de \"terminal\" fue iniciado y está tomando la entrada del teclado. Después de un reinicio, este problema desaparece puesto que sólo permanecerá un servidor de \"terminal\". Si \"tar\" soportara un traductor, no tendríamos este problema... Incluso si no ha experimentado este problema justo después de la instalación, reinicie inmediatamente para no dar con este error accidentalmente.
{MB} A una partición de intercambio se le llama también fichero de paginación. Normalmente, basta con añadir una partición de intercambio a \"/etc/fstab\", de la misma forma en la que lo haría en Linux. Puede paginar en una partición de intercambio de Linux y the Hurd respetará la firma de intercambio de Linux (ambas versiones). The Hurd puede felizmente paginar en cualquier otro espacio de disco que usted asigne mediante volcado directo(raw) y sobreescribir todo lo que encuentre. Así que tenga cuidado!
Si usted quiere paginar en un fichero o asegurarse de que antes verifica la firma de intercambio de Linux, deberá editar \"/boot/servers.boot\". Su sintaxis es: el nombre del fichero del dispositivo de la partición más, opcionalmente, el fichero de intercambio dentro de una partición ext2fs, seguido por un espacio y por una de las siguientes: \"$(add-raw-paging-file)\", \"$(add-linux-paging-file)\", o \"$(add-paging-file)\". La primera opción funciona con cualquier partición o fichero y no respeta ninguna firma ni otros datos. La segunda, hará una verificación de seguridad y sólo usará el fichero en el caso de que se hubiera encontrado una firma de intercambio de Linux. La tercera, busca una firma de intercambio primero, y usa una paginación de volcado directo(raw) en el caso de que no la hubiera encontrado. Ésta es la opción por defecto para las entradas de \"/etc/fstab\".
{MB} En el primer caso, asegúrese de que GNU Mach detectó su tarjeta de red. Y tanto en el primero como en el segundo caso, necesitará configurar \"pfinet\". Puede encontrar la documentación necesaria en:
http://www.debian.org/ports/hurd/hurd-doc-server#pfinet
No se olvide de rellenar \"/etc/resolv.conf\", \"/etc/hosts\", etc.
Por supuesto, tan sólo necesita hacerlo si la rutina de instalación no lo ha hecho por usted.
{MB} Déselas al núcleo (i.e. en la línea de comandos de GRUB) y éste se lo pasará automáticamente a \"serverboot\".
{MB} Sí, al menos a partir de \"e2fsprogs-1.05\". Compruebe antes la versión con \"e2fsck -V\".
{NHW} No intente defragmentar su partición porque esta utilidad no entiende de traductores.
{MB} Use \"settrans -fgc /servers/socket/1 /hurd/pflocal\", con eso debería funcionar.
{NHW} No hay ni páginas del manual(man) ni nodos de información(info) para los comandos y traductores de the Hurd. La documentación se encuentra dentro de los binarios y puede ser leída pasando la opción \"--help\" a un determinado comando. Por ejemplo:
# /hurd/ext2fs --help
mostrará qué tipos de opciones acepta el traductor de ext2fs.
{MB} Hay un texto sobre traductores disponible en:
http://www.debian.org/ports/hurd/hurd-doc-translator
Léaselo y pregunte en las listas de correo para más información.
{MB} En the Hurd existe el concepto de usuario no registrado(not-logged). Este usuario no tiene ni ids de usuario ni ids de grupos. Esto viene del hecho de que the Hurd soporta conjuntos de uid y gid, y por lo tanto, una posibilidad es el conjunto vacío. Mejor que denegar el acceso en este caso, los sistemas de ficheros de the Hurd ofrecen una cuarta terna de permisos (i.e. rwx) que es usada para determinar los privilegios de los usuarios sin credenciales. Ésta, no obstante, debe ser activada fichero por fichero. Por defecto, se usa la terna de permisos para \"otros(other)\".
El login shell de the Hurd es una sesión de consola(shell) que se ejecuta sin uids ni gids. Para restringir el acceso a sus ficheros, puede activar y cambiar la cuarta terna de permisos, o también puede cambiar la login shell del usuario \"login\" en el archivo de passwords a \"/bin/loginpr\" que implementa la petición estándar de registro.
{NHW} Eche un vistazo a:
ftp://alpha.gnu.org/gnu/hurd/contrib/marcus/keymap.tar.gz
{NHW} Si usted está usando el micronúcleo GNU Mach, puede cambiar su terminal a \"mach-color\". Por ejemplo:
# export TERM=mach-color
{NHW} No hay soporte para consolas virtuales por el momento. Puede, no obstante, usar \"screen\". Es mucho más flexible de todas formas.
Kalle Olavi Niemitalo <tosi@ees2.oulu.fi> empezó a trabajar en un texto en color. Su objetivo era el de proporcionar un programa lleno de características que multiplexe la consola en el espacio de usuario leyendo del dispositivo /dev/kdb. Véase:
http://stekt.oulu.fi/~tosi/
{MB} Aquí tiene algunas opciones útiles para añadir a su fichero ~/.screenrc para conseguir emular las terminales virtuales de Linux de una forma más fidedigna:
bindkey ^[O0 select 0 bindkey ^[O1 select 1 bindkey ^[O2 select 2 bindkey ^[O3 select 3 bindkey ^[O4 select 4 bindkey ^[O5 select 5 bindkey ^[O6 select 6 bindkey ^[O7 select 7 bindkey ^[O8 select 8 bindkey ^[O9 select 9
# Desafortunadamente, Mach ignora los modificadores con los # cursores. Esto se puede arreglar; no obstante, por el momento, # usaremos otras teclas para retroceder y bifurcar. # ^[, es ALT y \",\" # ^[. es ALT y \".\" bindkey ^[, prev bindkey ^[. next
{MB} ¡Funciona! Los paquetes están disponibles en cualquier mirror ftp de Debian. XFree86 4.0.2 está disponible, al igual que algunos de los servidores de la v3. Las instrucciones de cómo utilizar los paquetes están en el archivo de la lista de correo:
http://lists.debian.org/debian-hurd-0007/msg00013.html
{MB} Pruebe con \"export LD_LIBRARY_PATH=/usr/X11R6/lib\". Es un problema del enlazador(linker). GNU/Hurd espera que se use `RPATH' , no obstante, Debian toma ciertas medidas para evitarlo. Nótese que esto no es atajado en los binarios suid por razones de seguridad. Esperamos corregirlo mediante el uso de \"RUNPATH\", que está especificado en el nuevo estándar ELF.
{MB} Dos es el núcleo, tres es el paginador por defecto y cuatro es el sistema de ficheros raíz(root).
{MB} Pruebe con \"ps Aux\".
{MB} Interrúmpalo y pásele la opción \"-M\".
{NHW} Por defecto, \"ps\" obtiene información del servidor proc y de los propios procesos(por medio de su puerto de mensajes). Si un proceso se ha colgado, no será capaz de responder a su puerto de mensajes y por lo tanto, ps esperará indefinidamente la respuesta. La opción \"-M\" le dice a ps que no pida información que pueda requerir el uso de puertos de mensaje.
{MB} \"fdisk\" y \"dmesg\" no han sido portados todavía.
En vez de \"free\", use \"vmstat\" y \"vminfo\".
Para los mensajes del núcleo, lea directamente \"/dev/klog\". Dese cuenta de que, una vez leído, habrá desaparecido su contenido para siempre.
{NHW} \"ifconfig\" no existe. Pruebe a usar:
# /hurd/pfinet --help
Para dhcp, eche un vistazo a hurd/trans/pump.c; este es el comienzo de un cliente dhcp para the Hurd.
{MB} No. Puede que se haga una emulación de ese sistema de ficheros algún día para programas que lo necesiten. Si se está preguntando sobre el directorio \"/proc\" vacío, es un vestigio de un paquete de GNU/Linux (específicamente, \"base-files\").
Puede probar el hardware disponible con la utilidad devprobe.
{NHW} Funciona, sólo tiene que ponerle a que sistema de ficheros se refiere. E.g.
# df /
{NHW} Pruebe a pasarle la bandera \"-ap\" a settrans. Por defecto, settrans sólo activa un traductor pasivo, de esta forma, ninguna salida se mostrará en su terminal. Usando `-ap', sin embargo, activa ambos traductores, activo y pasivo, lo que significa que el traductor empieza inmediatamente y su stderr está conectada a su terminal.
Adicionalmente, el mayor problema es pasar rutas relativas a traductores pasivos. Usted no puede predecir cuál será el directorio de trabajo de un traductor cuando éste se ha activado como traductor pasivo.
{MB} Es importante entender que no hay nada especial para los directorios en the Hurd, son tan sólo archivos. Esto concuerda con el concepto de traductor en el cual el traductor puede aparecer como un directorio pero comportarse también como un archivo.
{MB} La versión actual de GNU Mach no soporta APM, lo siento. Por favor, desactive APM en la configuración de su BIOS.
{MB} El paginador por defecto(default pager) gestiona la ubicación de memoria virtual. Si no puede ubicar una página nueva por falta de memoria, pueden ocurrir cosas terribles. Cuando vea algún error referido a este tema, o necesita más memoria(asegúrese de que tiene memoria de intercambio(swap)) o bien es que ha encontrado un agujero en la memoria(memory leak).
{MB} Esto proviene de \"strerror(EGRATUITOUS)\". Si usted consulta la documentación de glibc, le dirá que este código de error no tiene ningún propósito. Esto, sin embargo,no es del todo cierto. Usted sólo obtiene ese código cuando pasa algo terrible. Thomas explica:
Más exactamente, `EGRATUITOUS' oficialmente significa que algún servidor ha respondido de una forma imposible o violando el protocolo. Hay algunos casos en que the Hurd devuelve `EGRATUITOUS', pero en los que se podría haber cogido probablemente otro en vez de ese.
Si usted puede reproducir este mensaje de error, por favor, reporte el fallo.
{NHW} En este caso, /dev/hd0s1 no ha sido desmontado límpiamente. The Hurd ejecutará \"fsk -p\" en el arranque, en todas las particiones que encuentre en /etc/fstab, y por lo tanto, debe considerar el añadir esta partición a ese fichero. Si está seguro de que la partición está bien, puede ejecutar:
# fsysopts /home --writable
para pedirle al traductor de /home que cambie del modo de sólo-lectura al modo de lectura/escritura. Ténga en cuenta que el comando será enviado al sistema de fichero y no al dispositivo de almacenamiento (e.g. /dev/hd0s1).
{MB} Pase la opción \"-H\" a init (añádalo en la línea de comando de arranque(boot)), e \"init\" le dirá a Mach que entre en el debugger del núcleo en vez de reiniciar. En la petición de comandos del debugger (\"db>\"), puede escribir \"reboot\" en cualquier momento para reiniciar.
{NHW} Muchos, eche un vistazo al archivo de Debian. Muchos programas, no obstante, no es que necesariamente necesiten ser portados; si no que nunca se han compilado.
{NHW} Portar aplicaciones a GNU/Hurd es relativamente fácil asumiendo que la aplicación cumpla POSIX, ya que GNU/Hurd intenta por todos los medios ser un sistema operativo conforme a POSIX.
El error más común cometido por los programadores es asumir que MAXPATHLEN y PATH_MAX están definidas. En la mayoría de sistemas operativos, tienen un valor de algunos miles, sin embargo, en GNU/Hurd, no hay un máximo, y, por lo tanto, no están definidas. Lo que se debe hacer es mandar un patch al autor original que ubique la memoria dinámicamente.
{NHW} Jeff Bailey hace un importante esfuerzo para compilar todos los paquetes de Debian. Eche un vistazo a:
http://people.debian.org/~jbailey/oasis/group/Debian/index.html
para ver lo que ya está hecho y cómo puede usted ayudar.
{NHW} El código fuente está almacenado en un CVS en:
:pserver:anoncvs@subversions.gnu.org:/cvsroot/hurd
No necesita ninguna clave para entrar. Los módulos que le interesan son: \"hurd\", \"gnumach\" y \"mig\".
Puede encontrar una interfaz web en: http://savannah.gnu.org/cgi-bin/viewcvs/hurd/
Para obtener el código fuente del paquete Debian más reciente, consulte en cualquier mirror de Debian.
{NHW} Sí. Si usted está ejecutando Debian GNU/Linux en una arquitectura IA32, es muy fácil porque hay compilador cruzado muy barato; todo lo que necesita es instalar los paquetes de Debian de gcc-i386-gnu y mig-i386-gnu. Cuando esté ejecutando configure, tendrá que especificar las herramientas directamente:
# MIG=/usr/bin/i386-gnu-mig CC=/usr/bin/i386-gnu-gcc \ ../src/hurd/configure ...
Si usted está ejecutando otra distribución, tendrá que hacerlo por el camino largo. Puede encontrar instrucciones en el CÓMO-HACER de la Compilación Cruzada en:
http://hurddocs.sourceforge.net/howto/cross.html
Farid Hajji <farid.hajji@ob.kamp.net> támbien nos habla de sus experiencias en:
http://lists.debian.org/debian-hurd-0012/msg00062.html
{NHW} Sí, no se ha probado el incorporar el árbol de código fuente. Pruebe con:
# ../src/hurd/configure ...
{NHW} Hay dos versiones de Mach: GNU Mach and OSKit-Mach. El primero usa los drivers de Linux 2.0.x mientras que el otro usa el OSKit de la Universidad de Utah. Si todo sale bien, OSKit-Mach será estable y se convertirá en el núcleo oficial. Puede encontrar más sobre el OSKit en:
http://www.cs.utah.edu/flux/oskit
{NHW} Se escribieron varios libros sobre el núcleo Mach(Mach kernel). La información que contenían todavía es pertinente y debe ser considerada como bibliografía básica por los programadores(hackers) potenciales. Puede encontrarse en:
http://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/publications.html
La documentación de the Hurd es bastante insuficiente. El comienzo de un libro, \"The GNU Hurd\" está en el directorio doc del código fuente de the Hurd. Puede leerlo mediante:
# info hurd
Aunque lo más importante es, por supuesto, el código fuente; no quiere decir, sin embargo, que no apreciemos que la gente escriba más documentación. Para iniciarse, eche un vistazo a <hurd>/doc/navigating.
{NHW} Desafortunadamente, usted tiene que comprar el estándar POSIX a la IEEE. Puede encontrar The Single Unix Specification versión 2, un superconjunto de POSIX, disponible de forma gratuita en internet. Pruebe:
http://www.unix-systems.org/online.html
{NHW} Si son parches de the Hurd, Mach o MiG, envíelos a la lista de correo bug-hurd.
Si son de otros paquetes, el BTS de Debian es buen sitio. En este caso, asegúrese de avisar a la lista de correo debian-hurd del fallo.
{MB} Todos los parches deben ser enviados en formato diff de contexto unificado(opción \"-u\" de GNU diff). Nos sería de gran ayuda que también usase la opción \"-p\" que incluye información de la función cambiada por el parche. Los cambios similares pueden ser agrupados juntos en un fichero, pero los cambios que no tienen nada que ver entre sí deben ser enviados en ficheros separados. Los parches pueden ser incluídos en el mensaje o como un adjunto MIME. No deben estar comprimidos y/o empaquetados a no ser que sean muy grandes, y si son muy grandes probablemente es mejor ponerlos en-linea en algún sitio y mandar sólamente una URL.
Escriba una entrada en el fichero de modificaciones(ChangeLog) para cada cambio, seguido del formato de los archivos existentes. Por ejemplo:
2000-12-02 Marcus Brinkmann <marcus@gnu.org> * ops.c (op_readlink): Antes de volver,mira si el buffer apuntado por transp es nuestro. Si no, le hacemos munmap. (op_read): Lo mismo para bp. (op_readdir): No ubica un buffer aquí. En vez de ello, inicializa BUF y BUFSIZE a 0 y deja que lo haga el servidor(eh, MiG). munmap a BUF antes de retornar.
El nombre del fichero y el nombre de la función cambiada debería de ser escrita entera, y no abreviada o cambiada de otra forma(como foo.{c,h}), porque haría imposible la búsqueda de los cambios de un fichero o función. El nombre de las variables locales se escriben en mayúsculas. Hay dos espacios entre frases. Puede usar ``C-x 4 a'' en Emacs para añadir una entrada nueva a ChangeLog. Si hace esto con la marca en una función, Emacs pondrá automáticamente el nombre de fichero y de la función por usted.
No mande un parche para el fichero ChangeLog. Mejor incluya las entradas de ChangeLog en el mensaje que contiene el parche. Distintos parches para los ficheros ChangeLog normalmente están en conflicto.
Si tiene el árbol de código fuente original en el directorio \"hurd-orig\", y el árbol de código fuente modificado en el directorio \"hurd\", el comando siguiente producirá un buen parche (por favor, asegúrese de que no hay ficheros de más(como copias de seguridad) en el árbol modificado, o no ponga la opción \"-N\"). Necesitará recoger las entradas de ChangeLog de manera separada.
# diff -x ChangeLog -Nurp hurd-orig hurd
Las respuestas fueron dadas por:
{NHW} Neal H Walfield <neal@cs.uml.edu>
{MB} Marcus Brinkmann <Marcus.Brinkmann@ruhr-uni-bochum.de>