diff --git a/es_ES.ISO8859-1/books/handbook/kerneldebug/chapter.sgml b/es_ES.ISO8859-1/books/handbook/kerneldebug/chapter.sgml
new file mode 100644
index 0000000000..8c1f5e4181
--- /dev/null
+++ b/es_ES.ISO8859-1/books/handbook/kerneldebug/chapter.sgml
@@ -0,0 +1,618 @@
+
+
+
+ Depurando el Kernel
+
+ Contribución de &a.paul; y &a.joerg;
+
+
+ Depuración de un Kernel Crash Dump con kgdb
+
+ Aquí se dan instrucciones para hacer funcionar la depuración del
+ kernel sobre un crash dump. En ellos se asume que usted tiene suficiente
+ espacio de swap para un crash dump. Si usted tiene varias particiones
+ de swap y la primera es demasiado pequeña para albergar un dump, puede
+ configurar su kernel para que use un dispositivo alternativo (en la línea
+ config kernel=, o puede especificar una alternativa
+ usando el comando &man.dumpon.8;. La mejor manera de usar &man.dumpon.8;
+ es asignar la variable dumpdev en
+ /etc/rc.conf. Generalmente usted va a querer
+ especificar uno de los dispositivos de swap especificados en
+ /etc/fstab. Actualmente no se soportan dumps a
+ dispositivos que no sean de swap, como por ejemplo una unidad de cinta.
+ Configure su kernel usando config -g. Vea Configuración del Kernel para más detalles
+ sobre la configuración del kernel FreeBSD.
+
+ Use el comando &man.dumpon.8; para decirle al kernel donde hacer
+ el dump (Tenga en cuenta que esto debera hacerse luego de configurar
+ la partición como dispositivo de swap usando &man.swapon.8;). Esto se
+ hace normalmente usando los archivos /etc/rc.conf
+ y /etc/rc. Como alternativa se puede fijar el
+ dispositivo usando la cláusula dump en la línea
+ config de su archivo de configuración del kernel.
+ Esta práctica esta en desuso y sólo debería ser usada para obtener
+ un dump de un kernel que falla durante el inicio.
+
+
+ En adelante, el término kgdb se referirá al
+ gdb corriendo en “kernel debug mode”.
+ Esto puede lograrse ya sea iniciando al gdb con
+ la opción , o enlazandolo y arrancandolo con el
+ nombre kgdb. Esto no se hace por default, y
+ la idea está basicamente en desuso ya que a la gente de GNU no le
+ gusta que sus herramientas se comporten distinto cuando se las llama
+ por otro nombre. Esta posibilidad podrá perfectamente ser descontinuada
+ en futuras versiones.
+
+
+ Una vez que el kernel ha sido compilado haga una copia, digamos
+ kernel.debug, y luego corra strip
+ -g sobre el original. Instale el original normalmente. Usted
+ tambien podría instalar el kernel sin hacer el strip,
+ pero los tiempos de busqueda de algunos programas en la tabla de
+ símbolos aumentarán sensiblemente, y dado que el kernel se carga completo
+ en memoria durante el inicio y no puede intercambiarse a disco luego,
+ se desperdiciarán varios megabytes de memoria.
+
+ Si usted esta probando un nuevo kernel, por ejemplo tipeando el
+ nombre del nuevo kernel en el prompt de inicio, pero necesita arrancar
+ otro para tener su sistema funcionando de nuevo, arranquelo solo en modo
+ monousuario usando la opción en el prompt de inicio
+ , y luego siga los siguientes pasos:
+
+ &prompt.root; fsck -p
+&prompt.root; mount -a -t ufs # asi su file system para /var/crash se puede escribir
+&prompt.root; savecore -N /kernel.panicked /var/crash
+&prompt.root; exit # ...a modo multiusuario
+
+ Esto instruye a &man.savecore.8; que use otro kernel para la
+ extracción de nombres de símbolo. De otro modo usaria el kernel en uso
+ y probablemente no haga nada ya que los símbolos del kernel y los del
+ dump son diferentes.
+
+ Ahora, luego de un crash dump, vaya a
+ /sys/compile/WHATEVER y corra
+ kgdb. desde kgdb haga:
+
+ symbol-file kernel.debug
+exec-file /var/crash/kernel.0
+core-file /var/crash/vmcore.0
+
+ y voila, ya puede depurar el crash dump usando las fuentes
+ del kernel como lo hace con cualquier otro programa.
+
+ A continuación se muestra el log de una sesión de
+ kgdb que ilustra el procedimiento. Las líneas
+ fueron numeradas para referencia, y las largas fueron cortadas para
+ mejorar la legibilidad. Mas alla de esto es el registro de un error real
+ tomado durante el desarrollo del driver pcvt de consola.
+
+ 1:Script started on Fri Dec 30 23:15:22 1994
+ 2:&prompt.root; cd /sys/compile/URIAH
+ 3:&prompt.root; kgdb kernel /var/crash/vmcore.1
+ 4:Reading symbol data from /usr/src/sys/compile/URIAH/kernel
+...done.
+ 5:IdlePTD 1f3000
+ 6:panic: because you said to!
+ 7:current pcb at 1e3f70
+ 8:Reading in symbols for ../../i386/i386/machdep.c...done.
+ 9:(kgdb)where
+10:#0 boot (arghowto=256) (../../i386/i386/machdep.c line 767)
+11:#1 0xf0115159 in panic ()
+12:#2 0xf01955bd in diediedie () (../../i386/i386/machdep.c line 698)
+13:#3 0xf010185e in db_fncall ()
+14:#4 0xf0101586 in db_command (-266509132, -266509516, -267381073)
+15:#5 0xf0101711 in db_command_loop ()
+16:#6 0xf01040a0 in db_trap ()
+17:#7 0xf0192976 in kdb_trap (12, 0, -272630436, -266743723)
+18:#8 0xf019d2eb in trap_fatal (...)
+19:#9 0xf019ce60 in trap_pfault (...)
+20:#10 0xf019cb2f in trap (...)
+21:#11 0xf01932a1 in exception:calltrap ()
+22:#12 0xf0191503 in cnopen (...)
+23:#13 0xf0132c34 in spec_open ()
+24:#14 0xf012d014 in vn_open ()
+25:#15 0xf012a183 in open ()
+26:#16 0xf019d4eb in syscall (...)
+27:(kgdb)up 10
+28:Reading in symbols for ../../i386/i386/trap.c...done.
+29:#10 0xf019cb2f in trap (frame={tf_es = -260440048, tf_ds = 16, tf_\
+30:edi = 3072, tf_esi = -266445372, tf_ebp = -272630356, tf_isp = -27\
+31:2630396, tf_ebx = -266427884, tf_edx = 12, tf_ecx = -266427884, tf\
+32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, tf_eip = -26\
+33:6672343, tf_cs = -266469368, tf_eflags = 66066, tf_esp = 3072, tf_\
+34:ss = -266427884}) (../../i386/i386/trap.c line 283)
+35:283 (void) trap_pfault(&frame, FALSE);
+36:(kgdb)frame frame->tf_ebp frame->tf_eip
+37:Reading in symbols for ../../i386/isa/pcvt/pcvt_drv.c...done.
+38:#0 0xf01ae729 in pcopen (dev=3072, flag=3, mode=8192, p=(struct p\
+39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c line 403)
+40:403 return ((*linesw[tp->t_line].l_open)(dev, tp));
+41:(kgdb)list
+42:398
+43:399 tp->t_state |= TS_CARR_ON;
+44:400 tp->t_cflag |= CLOCAL; /* cannot be a modem (:-) */
+45:401
+46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200)
+47:403 return ((*linesw[tp->t_line].l_open)(dev, tp));
+48:404 #else
+49:405 return ((*linesw[tp->t_line].l_open)(dev, tp, flag));
+50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */
+51:407 }
+52:(kgdb)print tp
+53:Reading in symbols for ../../i386/i386/cons.c...done.
+54:$1 = (struct tty *) 0x1bae
+55:(kgdb)print tp->t_line
+56:$2 = 1767990816
+57:(kgdb)up
+58:#1 0xf0191503 in cnopen (dev=0x00000000, flag=3, mode=8192, p=(st\
+59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c line 126)
+60: return ((*cdevsw[major(dev)].d_open)(dev, flag, mode, p));
+61:(kgdb)up
+62:#2 0xf0132c34 in spec_open ()
+63:(kgdb)up
+64:#3 0xf012d014 in vn_open ()
+65:(kgdb)up
+66:#4 0xf012a183 in open ()
+67:(kgdb)up
+68:#5 0xf019d4eb in syscall (frame={tf_es = 39, tf_ds = 39, tf_edi =\
+69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_isp = -272629788, tf\
+70:_ebx = 7086, tf_edx = 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \
+71:tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_eflags = 582, tf_esp \
+72:= -272638456, tf_ss = 39}) (../../i386/i386/trap.c line 673)
+73:673 error = (*callp->sy_call)(p, args, rval);
+74:(kgdb)up
+75:Initial frame selected; you cannot go up.
+76:(kgdb)quit
+77:&prompt.root; exit
+78:exit
+79:
+80:Script done on Fri Dec 30 23:18:04 1994
+ Comentarios al listado anterior:
+
+
+
+ línea 6:
+
+
+ Este es un dump tomado desde el DDB (vea abajo), a partir del
+ comentario del panic “because you said to!”, y un
+ listado de la pila bastante largo; la razón incial para entrar al
+ DDB fue un trap de falta de pagina.
+
+
+
+
+ línea 20:
+
+
+ Esta es la ubicación de la función trap()
+ en el listado de la pila.
+
+
+
+
+ línea 36:
+
+
+ Se fuerza el uso de un nuevo marco de pila; esto ya no es
+ necesario ahora. Actualmente se supone que los marcos de pila apuntan a
+ las ubicaciones correctas, aun en caso de un trap. (No tengo un
+ dump más nuevo a mano <g>, mi kernel no ha hecho un panic
+ desde hace bastante tiempo.) Mirando al código en la línea 403
+ del código fuente, hay una alta probabilidad de que la referencia
+ al puntero “tp” sea erronea, o el acceso al arreglo
+ estuviera fuera de sus límites.
+
+
+
+
+ línea 52:
+
+
+ El puntero se ve sospechoso, pero contiene una dirección
+ válida.
+
+
+
+
+ línea 56:
+
+
+ De todos modos, obviamente apunta a basura, asi que encontramos
+ nuestro error! (Para los que no esten familiarizados con esa pieza
+ de código en particular: tp->t_line hace
+ referencia a la disciplina de línea de este dispositivo de consola,
+ el cual debe ser un entero por demás pequeño)
+
+
+
+
+
+
+ Depurando un crash dump con DDD
+
+ Tambien es posible examinar un crash dump del kernel con un debugger
+ gráfico como ddd. Agregue la opción a la línea de comando del ddd que usaría
+ normalmente. Por ejemplo;
+
+ &prompt.root; ddd -k /var/crash/kernel.0 /var/crash/vmcore.0
+
+ De esta manera usted debería poder analizar el crash dump usando
+ la interfaz gráfica del ddd.
+
+
+
+ Analisis Post-mortem de un Dump
+
+ Que sucede si un kernel hace un dump de su memoria que usted
+ no esperaba, y por lo tanto no estaba compilado usando
+ config -g? No todo esta perdido aquí. Do not panic!
+
+
+ N.del T.: El autor hace un juego con la palabra panic! que
+ prefiero dejar sin traducir.
+
+
+ Por supuesto, aun necesita habilitar los crash dumps. Vea más arriba
+ las opciones que debe especificar para esto.
+
+ Vaya a su directorio de configuración del kernel
+ (/usr/src/sys/arq/conf)
+ y edite su archivo de configuración. Quite las marcas de comentario
+ (o agregue, si no existe) la siguiente línea
+
+
+makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols
+
+ Recompile el kernel. Algunos otros archivos seran recompilados,
+ por ejemplo trap.o, a causa del cambio de la fecha
+ del archivo Makefile. Con un poco de suerte, la opción no cambiará nada del código generado, al final usted tendra
+ un kernel con el mismo código que tiene problemas ahora pero con ciertos
+ símbolos para depuración. Por lo menos usted debería verificar el tamaño
+ anterior y el nuevo con el comando &man.size.1;. Si hay diferencia
+ probablemente sea el momento de darse por vencido.
+
+ Ahora puede examinar el dump como se describió anteriormente. Los
+ símbolos pueden estar incompletos para algunas partes, como se puede ver
+ en el listado de pila del ejemplo anterior donde algunas funciones
+ se muestran sin numeros de línea ni listas de argumentos. Si necesita
+ más símbolos borre los archivos objeto apropiados y repita la sesión de
+ kgdb hasta que haya averiguado lo suficiente.
+
+ No se garantiza que todo esto funcione, pero irá bastante bien la
+ en mayoría de los casos.
+
+
+
+ Depuración En-línea del Kernel Usando DDB
+
+ Si bien el kgdb provee un muy alto nivel de
+ interfaz de usuario como depurador post-mortem, hay cosas que no puede
+ hacer. Siendo las más importantes poder marcar puntos de interrupción
+ y ejecutar código del kernel paso a paso.
+
+ Si usted necesita hacer una depuración a bajo nivel de su kernel hay
+ disponible un debugger en-línea llamado DDB. Permite poner puntos de
+ interrupción, ejecutar paso a paso las funciones del kernel, examinar y
+ cambiar variables, etc. Sin embargo, no puede acceder al código fuente
+ del kernel y sólo tiene acceso a los símbolos globales y estáticos, no
+ a toda la información de depuración como el kgdb.
+
+ Para configurar su kernel para que incluya el DDB, agregue la opción
+
+
+options DDB
+
+ a su archivo de configuración, y recompile (vea Configuración del Kernel para más
+ detalles sobre como configurar el kernel de FreeBSD.)
+
+
+ Notese que si usted tiene una versión vieja del boot block,
+ sus símbolos de debugger podrían no ser cargados. Actualize su
+ boot block; los mas recientes cargan los símbolos del DDB
+ automágicamente.
+
+
+ Una vez que su kernel con DDB esta corriendo, hay varias maneras
+ de entrar al DDB. La primera y más temprana es tipear la opción
+ directamente en el prompt de inicio. El kernel
+ se iniciará en modo de depuración e ingresará al DDB antes de cualquier
+ detección de dispositivos. De aquí en adelante usted podrá
+ depurar hasta las funciones probe/attach de los dispositivos.
+
+ El segundo escenario es una combinación de teclas, generalmente
+ Ctrl-Alt-Esc. En el caso de las syscons, esto puede modificarse,
+ algunos mapas de teclado distribuidos lo hacen, por lo que hay que
+ prestar atención. Hay disponible una opción para consolas en puertos
+ serie que permite el uso de la señal BREAK en la línea para entrar al
+ DDB (options BREAK_TO_DEBUGGER en el archivo de
+ configuración del kernel). Esto no es el default ya que hay un montón
+ de adaptadores serie dando vueltas que generan condiciones BREAK
+ sin necesidad, por ejemplo cuando se desenchufa el cable.
+
+ La tercera forma es que un panic salte al DDB si el kernel está
+ configurado para usarlo. Por este motivo, no es recomendable configurar
+ un kernel con DDB para una máquina funcionando sin atención.
+
+ Los comandos del DDB se asemejan remotamente a algunos de los
+ del gdb. Lo primero que usted probablemente
+ necesite hacer es poner un punto de interrupción:
+
+ b nombre-de-función
+b dirección
+
+ Por default los números se toman en hexadecimal, pero para
+ distinguirlos de los nombres de símbolo los números hexadecimales
+ que empiezan con las letras a-f se deben preceder
+ con 0x (para los demás números esto es opcional).
+ Tambien se admiten expresiones sencillas, por ejemplo:
+ nombre-de-función + 0x103.
+
+ Para que el kernel interrumpido continue ejecutandose, solo
+ tipee:
+
+ c
+
+ Para ver un listado de la pila, use:
+
+ trace
+
+
+ Notese que cuando se entra al DDB con una combinación de teclas
+ el kernel está atendiendo una interrupción, por lo que el listado
+ de la pila podría no serle de mucha utilidad.
+
+
+ Si quiere quitar un punto de interrupción, use
+
+
+ del
+del expresión-dirección-de-memoria
+
+ La primera forma se aceptará inmediatamente despues de llegar
+ a un punto de interrupción, y borra el punto actual. La segunda
+ puede quitar cualquier punto de interrupción, pero se debe
+ especificar la dirección exacta; esta se puede obtener de:
+
+ show b
+
+ Para ejecutar el kernel paso a paso, intente:
+
+ s
+
+ Esto entrará dentro de las funciones, pero puede hacer
+ que DDB las siga hasta llegar a la instrucción de retorno
+ correspondiente usando:
+
+ n
+
+
+ Esto es distinto de la instrucción next
+ del gdb; es más parecido a la instrucción
+ finish.
+
+
+ Para examinar los datos en la memoria use (por ejemplo):
+
+ x/wx 0xf0133fe0,40
+x/hd db_symtab_space
+x/bc termbuf,10
+x/s stringbuf
+
+ para acceder a palabras/medias palabras/bytes, y para mostrar
+ en hexadecimal/decimal/caracteres/strings. El número luego de la coma
+ es la cantidad de objetos. Para mostrar los siguientes 0x10
+ items, simplemente use:
+
+ x ,10
+
+ Del mismo modo, use
+
+ x/ia foofunc,10
+
+ para desensamblar las primeras 0x10 instrucciones de
+ foofunc, y mostrarlas junto con su
+ desplazamiento desde el comienzo de foofunc.
+
+ Para modificar memoria, use el comando write:
+
+ w/b termbuf 0xa 0xb 0
+w/w 0xf0010030 0 0
+
+ El modificador
+ (b/h/w)
+ especifica el tamaño de los datos a ser escritos, la primera expresión
+ a continuación es la dirección donde escribir y el resto es interpretado
+ como datos para escribir en las direcciones de memoria sucesivas.
+
+ Si quiere conocer el valor actual de los registros del
+ procesador, use:
+
+ show reg
+
+ O, puede mostrar un solo registro usando:
+
+ p $eax
+
+ y modificarlo haciendo:
+
+ set $eax new-value
+
+ Si usted quisiera llamar alguna función del kernel desde
+ el DDB, solo debe decir:
+
+ call func(arg1, arg2, ...)
+
+ El valor devuelto será impreso en la pantalla.
+
+ Para un resumen de los procesos corriendo al estilo &man.ps.1;
+ use:
+
+ ps
+
+ Usted ya ha examinado la causa de que su kernel falle, y quiere
+ reiniciar su equipo. Recuerde que, dependiendo de lo severo de las
+ fallas que ocurrieron, algunas partes del kernel podrían no funcionar
+ como se espera. Siga una de las siguientes acciones para apagar y
+ reiniciar su equipo:
+
+ call diediedie()
+
+ Esto causará que su kernel haga un crash dump y reinicie, asi
+ luego podrá analizar el dump a un nivel más alto con el kgdb. Este
+ comando suele tener que acompañarse por otra instrucción
+ continue. Para hacer esto hay un alias:
+ panic.
+
+ call boot(0)
+
+ La cual podría ser una buena manera de apagar ordenadamente el
+ sistema, hacer un sync() de todos los discos,
+ y finalmente reiniciar. En tanto las interfaces de disco y de
+ filesystem del kernel no esten dañadas, esta podría ser una buena
+ manera de hacer un apagado bastante prolijo.
+
+ call cpu_reset()
+
+ Es la ultima salida de los desastres y es practicamente lo
+ mismo que presionar el Gran Boton Rojo.
+
+ Si usted necesita un breve sumario de los comandos, tipee:
+
+ help
+
+ De todos modos, es altamente recomendable tener una copia impresa
+ de la página &man.ddb.4; del manual a mano antes de la sesión de
+ depuración. Recuerde que es bastante difícil leer el manual en línea
+ mientras se está ejecutando el kernel paso a paso.
+
+
+
+ Depuración En-Línea Usando El GDB remoto
+
+ Esta característica ha sido soportada desde FreeBSD 2.2, y ya está
+ en verdad muy bien pulida.
+
+ El GDB ha soportado depuración remota desde
+ hace mucho tiempo. Esto se hace usando un protocolo muy simple a
+ traves de una línea serie. A diferencia de los otros metodos descriptos
+ anteriormente, hacen falta dos máquinas para hacer esto. Una va a
+ proveer el entorno de depuración, incluyendo todos los archivos fuente,
+ y una copia del ejecutable del kernel con todos los símbolos y la otra
+ será la máquina a depurar que simplemente corre una copia de exactamente
+ el mismo kernel (pero sin los símbolos de depuración).
+
+ Usted debería configurar el kernel en cuestión con config
+ -g, incluir en la configuración, y
+ compilarla como siempre. Esto arrojará un ejecutable enorme, debido a la
+ información de depuración. Copie este kernel a la máquina a depurar,
+ quitele los simbolos con strip -x, e inicielo usando
+ la opción en el prompt de inicio. Conecte el primer
+ puerto serie de la máquina a cualquier puerto serie de la máquina que
+ correrá el debugger. Ahora en la máquina que corre el debugger, vaya al
+ directorio de compilación del kernel a depurar, y arranque el gdb:
+
+ &prompt.user; gdb -k kernel
+GDB is free software and you are welcome to distribute copies of it
+ under certain conditions; type "show copying" to see the conditions.
+There is absolutely no warranty for GDB; type "show warranty" for details.
+GDB 4.16 (i386-unknown-freebsd),
+Copyright 1996 Free Software Foundation, Inc...
+(kgdb)
+
+ Inicie la sesión de depuración remota haciendo
+ (asumiendo que se usa el primer puerto serie):
+
+ (kgdb)target remote /dev/cuaa0
+
+ Ahora en la máquina a depurar (que entró al DDB justo antes de
+ empezar a detectar los dispositivos), tipee:
+
+ Debugger("Boot flags requested debugger")
+Stopped at Debugger+0x35: movb $0, edata+0x51bc
+db>gdb
+
+ El DDB responderá diciendo:
+
+ Next trap will enter GDB remote protocol mode
+
+ Cada vez que tipee gdb, el modo se alternará
+ entre el GDB remoto y el DDB local. Para forzar un siguiente trap
+ inmediatamente, simplemente tipee s (avanza un paso).
+ la máquina del debugger ahora ganará control sobre el kernel a depurar:
+
+
+ Remote debugging using /dev/cuaa0
+Debugger (msg=0xf01b0383 "Boot flags requested debugger")
+ at ../../i386/i386/db_interface.c:257
+(kgdb)
+
+ Esta sesión puede usarse casi como cualquier otra sesión de GDB,
+ incluyendo acceso completo al código fuente, ejecutarlo en modo-gud
+ dentro de una ventana de Emacs (lo cual brinda la posibilidad de
+ mostrar automáticamente el código fuente en otra ventana de Emacs)
+ etc.
+
+ El GDB remoto tambien puede usarse para depurar LKMs. Primero
+ compile el LKM con los simbolos de depuración:
+
+ &prompt.root; cd /usr/src/lkm/linux
+&prompt.root; make clean; make COPTS=-g
+
+ Luego instale esta versión del módulo en la máquina a depurar,
+ carguelo y use modstat para averiguar donde fue
+ cargado:
+
+ &prompt.root; linux
+&prompt.root; modstat
+Type Id Off Loadaddr Size Info Rev Module Name
+EXEC 0 4 f5109000 001c f510f010 1 linux_mod
+
+ Tome la dirección de carga (loadaddr) del módulo y sumele
+ 0x20 (probablemente para contar el encabezado a.out). Esta es la
+ dirección donde el código del módulo fue reubicado. Use el comando
+ add-symbol-file en el GDB para informarle al
+ debugger acerca del módulo:
+
+ (kgdb)add-symbol-file /usr/src/lkm/linux/linux_mod.o 0xf5109020
+add symbol table from file "/usr/src/lkm/linux/linux_mod.o" at
+text_addr = 0xf5109020? (y or n) y
+(kgdb)
+
+ Ahora tiene acceso a todos los símbolos en el LKM.
+
+
+
+ Depurando Un Driver de Consola
+
+ Dado que el DDB necesita un driver de consola sobre el que correr,
+ las cosas son mas complicadas si lo que falla es el propio driver de
+ consola. Usted podría entonces recordar el uso de una consola en puerto serie
+ (ya sea con un sector de inicio modificado, o especificando en el prompt Boot:) y colgar una terminal
+ estándar en su primer puerto serie. El DDB funciona en cualquier
+ driver de consola configurado, por supuesto tambien en una consola de
+ puerto serie.
+
+
+
+
+
diff --git a/es_ES.ISO8859-1/books/handbook/kernelopts/chapter.sgml b/es_ES.ISO8859-1/books/handbook/kernelopts/chapter.sgml
new file mode 100644
index 0000000000..6af9af0617
--- /dev/null
+++ b/es_ES.ISO8859-1/books/handbook/kernelopts/chapter.sgml
@@ -0,0 +1,165 @@
+
+
+
+ Añadir nuevas opciones de configuración al kernel
+
+ Contribuci´n de &a.joerg;
+
+
+ Antes de leer esta sección se debe estar familiarizado con
+ la sección sobre configuración
+ del kernel.
+
+
+
+ Ante todo ¿Qué es una opción del
+ kernel?
+
+ El uso de opciones del kernel se describe básicamente en la sección
+ configuración del kernel.
+ También hay una discusión sobre opciones “estilo historico” y
+ “estilo moderno”. El objetivo final es que en algún momento
+ todas las opciones soportadas por el kernel se hayan convertido al estilo
+ moderno, así para la gente que hizo un make depend exitoso
+ en su directorio de compilación del kernel luego de correr &man.config.8;,
+ el proceso de build automaticamente seleccionará las opciones modificadas y
+ solo recompilara los archivos donde se usan. El paso de eliminar el viejo
+ directorio de compilación cada vez que se corre &man.config.8; como aún se
+ hace podrá entonces ser eliminado nuevamente.
+
+ Básicamente una opción del kernel no es más que la definición de una
+ macro del preprocesador C para el proceso de compilación del kernel. Para
+ hacer la compilación verdaderamente opcional, la parte correspondiente del
+ código fuente del kernel (o archivo .h del kernel) debe estar
+ escrita con el concepto de opción en mente, por ejemplo el default para la opción
+ debe haber sido hecho modificable. Esto se hace generalmente con algo como:
+
+
+#ifndef THIS_OPTION
+#define THIS_OPTION (valor_por_default)
+#endif /* THIS_OPTION */
+
+ De esta manera, un administrador seleccionando otro valor para la opción
+ en su archivo de configuración dejará sin efecto el default, y lo reemplazará
+ con su nuevo valor. Como es claro, el nuevo valor será sustituido en el código
+ fuente durante la ejecución del preprocesador, por lo que debe ser una
+ expresión C válida en el contexto en el que habría sido usado el default.
+
+
+ También es posible crear opciones sin valor que simplemente activen o
+ desactiven una parte del código rodeandola con
+
+
+#ifdef THAT_OPTION
+
+[código fuente específico]
+
+#endif
+
+ Con solo mencionar THAT_OPTION en el archivo de
+ configuración (con o sin valor) activará la parte del código correspondiente.
+
+ Quien esté familiarizado con el lenguaje C se dará cuenta de que todo
+ podría ser tratado como una “opción de configuración” si hay
+ por lo menos un #ifdef referenciandolo...
+ De todos modos, es poco probable que mucha gente ponga
+
+
+options notyet,notdef
+
+ en su archivo de configuración, y luego se pregunten por que la kernel
+ compilation les da errores. :-)
+
+ Como es claro, usar nombres arbitrarios para las opciones hace que sea
+ muy difícil rastrear su uso por todo el árbol de código fuente. Esa es la
+ razón que impulsa el esquema de opciones estilo-moderno,
+ donde cada opción va en un archivo .h separado en el
+ directorio de compilación del kernel, el cual por convención se llamará
+ opt_foo.h. De esta forma
+ las dependencias usuales del Makefile pueden aplicarse, y el make
+ puede determinar que se necesita recompilar cuando una opción fue
+ cambiada.
+
+ El mecanismo de opciones estilo antiguo tiene aún una ventaja para
+ opciones locales o tal vez experimentales que tendrán por anticipado poco
+ tiempo de vida: ya que es facil agregar un nuevo #ifdef
+ al código fuente del kernel, esto ya lo ha convertido en una opción de
+ configuración. En este caso el administrador que use tal opción es responsable
+ de conocer sus implicaciones ( y tal vez forzar la recompilación de partes
+ del kernel a mano). Una vez que la tansición de todas las opciones soportadas
+ haya sido hecha, &man.config.8; advertirá cuando aparezca una opción no
+ soportada en el archivo de configuración, pero sin embargo la incluirá en
+ el Makefile del kernel.
+
+
+
+ Y ahora ¿Qué debo hacer para eso?
+
+ Primero, edite sys/conf/options (o
+ sys/i386/conf/options.<arq>,
+ Ej: sys/i386/conf/options.i386), y seleccione un archivo
+ opt_foo.h donde
+ su nueva opción cabría mejor.
+
+ Si ya hay algo que se acerque al proposito de la nueva opción, elijalo.
+ Por ejemplo, las opciones que modifican la conducta general del subsistema
+ SCSI pueden ir dentro de opt_scsi.h. Por default,
+ con solo mencionar una opción en el archivo de opciones apropiado,
+ digamos FOO, implica que su valor irá dentro del
+ archivo correspondiente opt_foo.h. Esto puede ser
+ reemplazado en el lado derecho de una regla especificando otro nombre de
+ archivo.
+
+ Si no hay ningún
+ opt_foo.h ya
+ disponible para la nueva opción, invente un nuevo nombre. Hágalo
+ significativo, y comente la nueva sección en el archivo
+ options[.<arq>].
+ &man.config.8; automaticamente tomará el cambio, y creará el archivo
+ la próxima vez que se corra. La mayoría de las opciones deberían ir en
+ un archivo .h individual.
+
+ Meter demasiadas opciones en un solo archivo
+ opt_foo.h causará que
+ se tengan que recompilar demasiados archivos del kernel cuando se cambie
+ una de las opciones en el archivo de configuración.
+
+ Por último, averigüe que archivos del kernel dependen de la nueva
+ opción. A menos que usted haya inventado recientemente su opción, y
+ aún no existe en ningún lado &prompt.user;
+ find /usr/src/sys -name
+ type f | xargs fgrep NEW_OPTION le será de
+ ayuda para encontrarlos. Edite todos esos archivos y agregue
+ #include "opt_foo.h"al comienzo,
+ antes de todos los #include <xxx.h>. Este
+ orden es más importante en tanto las opciones podrían reemplazar los
+ defaults de los archivos .h regulares, si los defaults
+ son de la forma #ifndef NEW_OPTION #define NEW_OPTION (something)
+ #endif en el .h regular.
+
+ Agregar una opción que reemplaza algo en un archivo header del sistema
+ (un archivo ubicado en /usr/include/sys/) es
+ casi siempre un error.
+ opt_foo.h no puede ser
+ incluido dentro de estos archivos dado que esto dañaría al header
+ muy seriamente, pero si no se incluye entonces otros lugares que lo
+ incluyen podrían tener valores inconsistentes para la opción. Sí, hay
+ precedentes de esto actualmente, pero eso no los hace más correctos.
+
+
+
+
+
diff --git a/es_ES.ISO8859-1/books/handbook/pgpkeys/chapter.sgml b/es_ES.ISO8859-1/books/handbook/pgpkeys/chapter.sgml
new file mode 100755
index 0000000000..474ff0c135
--- /dev/null
+++ b/es_ES.ISO8859-1/books/handbook/pgpkeys/chapter.sgml
@@ -0,0 +1,517 @@
+
+
+
+
+ PGP keys
+
+ En caso de que necesites verificar una firma o enviar un mail
+ encriptado a alguno de los responsables o miembros del core team,
+ aquí tienes una serie de claves para uso.
+
+
+
+ Responsables
+
+
+
+ Responsable de Seguridad de FreeBSD security-officer@freebsd.org
+
+
+FreeBSD Security Officer <security-officer@freebsd.org>
+Fingerprint = 41 08 4E BB DB 41 60 71 F9 E5 0E 98 73 AF 3F 11
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3i
+
+mQCNAzF7MY4AAAEEAK7qBgPuBejER5HQbQlsOldk3ZVWXlRj54raz3IbuAUrDrQL
+h3g57T9QY++f3Mot2LAf5lDJbsMfWrtwPrPwCCFRYQd6XH778a+l4ju5axyjrt/L
+Ciw9RrOC+WaPv3lIdLuqYge2QRC1LvKACIPNbIcgbnLeRGLovFUuHi5z0oilAAUR
+tDdGcmVlQlNEIFNlY3VyaXR5IE9mZmljZXIgPHNlY3VyaXR5LW9mZmljZXJAZnJl
+ZWJzZC5vcmc+iQCVAwUQMX6yrOJgpPLZnQjrAQHyowQA1Nv2AY8vJIrdp2ttV6RU
+tZBYnI7gTO3sFC2bhIHsCvfVU3JphfqWQ7AnTXcD2yPjGcchUfc/EcL1tSlqW4y7
+PMP4GHZp9vHog1NAsgLC9Y1P/1cOeuhZ0pDpZZ5zxTo6TQcCBjQA6KhiBFP4TJql
+3olFfPBh3B/Tu3dqmEbSWpuJAJUDBRAxez3C9RVb+45ULV0BAak8A/9JIG/jRJaz
+QbKom6wMw852C/Z0qBLJy7KdN30099zMjQYeC9PnlkZ0USjQ4TSpC8UerYv6IfhV
+nNY6gyF2Hx4CbEFlopnfA1c4yxtXKti1kSN6wBy/ki3SmqtfDhPQ4Q31p63cSe5A
+3aoHcjvWuqPLpW4ba2uHVKGP3g7SSt6AOYkAlQMFEDF8mz0ff6kIA1j8vQEBmZcD
+/REaUPDRx6qr1XRQlMs6pfgNKEwnKmcUzQLCvKBnYYGmD5ydPLxCPSFnPcPthaUb
+5zVgMTjfjS2fkEiRrua4duGRgqN4xY7VRAsIQeMSITBOZeBZZf2oa9Ntidr5PumS
+9uQ9bvdfWMpsemk2MaRG9BSoy5Wvy8VxROYYUwpT8Cf2iQCVAwUQMXsyqWtaZ42B
+sqd5AQHKjAQAvolI30Nyu3IyTfNeCb/DvOe9tlOn/o+VUDNJiE/PuBe1s2Y94a/P
+BfcohpKC2kza3NiW6lLTp00OWQsuu0QAPc02vYOyseZWy4y3Phnw60pWzLcFdemT
+0GiYS5Xm1o9nAhPFciybn9j1q8UadIlIq0wbqWgdInBT8YI/l4f5sf6JAJUDBRAx
+ezKXVS4eLnPSiKUBAc5OBACIXTlKqQC3B53qt7bNMV46m81fuw1PhKaJEI033mCD
+ovzyEFFQeOyRXeu25Jg9Bq0Sn37ynISucHSmt2tUD5W0+p1MUGyTqnfqejMUWBzO
+v4Xhp6a8RtDdUMBOTtro16iulGiRrCKxzVgEl4i+9Z0ZiE6BWlg5AetoF5n3mGk1
+lw==
+=ipyA
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+
+ &a.imp;
+
+
+Warner Losh <imp@village.org>
+ aka <imp@freebsd.org>
+Fingerprint = D4 31 FD B9 F7 90 17 E8 37 C5 E7 7F CF A6 C1 B9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAzDzTiAAAAEEAK8D7KWEbVFUrmlqhUEnAvphNIqHEbqqT8s+c5f5c2uHtlcH
+V4mV2TlUaDSVBN4+/D70oHmZc4IgiQwMPCWRrSezg9z/MaKlWhaslc8YT6Xc1q+o
+EP/fAdKUrq49H0QQbkQk6Ks5wKW6v9AOvdmsS6ZJEcet6d9G4dxynu/2qPVhAAUR
+tCBNLiBXYXJuZXIgTG9zaCA8aW1wQHZpbGxhZ2Uub3JnPokAlQMFEDM/SK1VLh4u
+c9KIpQEBFPsD/1n0YuuUPvD4CismZ9bx9M84y5sxLolgFEfP9Ux196ZSeaPpkA0g
+C9YX/IyIy5VHh3372SDWN5iVSDYPwtCmZziwIV2YxzPtZw0nUu82P/Fn8ynlCSWB
+5povLZmgrWijTJdnUWI0ApVBUTQoiW5MyrNN51H3HLWXGoXMgQFZXKWYiQCVAwUQ
+MzmhkfUVW/uOVC1dAQG3+AP/T1HL/5EYF0ij0yQmNTzt1cLt0b1e3N3zN/wPFFWs
+BfrQ+nsv1zw7cEgxLtktk73wBGM9jUIdJu8phgLtl5a0m9UjBq5oxrJaNJr6UTxN
+a+sFkapTLT1g84UFUO/+8qRB12v+hZr2WeXMYjHAFUT18mp3xwjW9DUV+2fW1Wag
+YDKJAJUDBRAzOYK1s1pi61mfMj0BARBbA/930CHswOF0HIr+4YYUs1ejDnZ2J3zn
+icTZhl9uAfEQq++Xor1x476j67Z9fESxyHltUxCmwxsJ1uOJRwzjyEoMlyFrIN4C
+dE0C8g8BF+sRTt7VLURLERvlBvFrVZueXSnXvmMoWFnqpSpt3EmN6TNaLe8Cm87a
+k6EvQy0dpnkPKokAlQMFEDD9Lorccp7v9qj1YQEBrRUD/3N4cCMWjzsIFp2Vh9y+
+RzUrblyF84tJyA7Rr1p+A7dxf7je3Zx5QMEXosWL1WGnS5vC9YH2WZwv6sCU61gU
+rSy9z8KHlBEHh+Z6fdRMrjd9byPf+n3cktT0NhS23oXB1ZhNZcB2KKhVPlNctMqO
+3gTYx+Nlo6xqjR+J2NnBYU8p =7fQV
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+
+
+ Miembros del Core Team
+
+
+
+ &a.asami;
+
+
+Satoshi Asami <asami@cs.berkeley.edu>
+ aka <asami@FreeBSD.ORG>
+Fingerprint = EB 3C 68 9E FB 6C EB 3F DB 2E 0F 10 8F CE 79 CA
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAzPVyoQAAAEEAL7W+kipxB171Z4SVyyL9skaA7hG3eRsSOWk7lfvfUBLtPog
+f3OKwrApoc/jwLf4+Qpdzv5DLEt/6Hd/clskhJ+q1gMNHyZ5ABmUxrTRRNvJMTrb
+3fPU3oZj7sL/MyiFaT1zF8EaMP/iS2ZtcFsbYOqGeA8E/58uk4NA0SoeCNiJAAUR
+tCVTYXRvc2hpIEFzYW1pIDxhc2FtaUBjcy5iZXJrZWxleS5lZHU+iQCVAwUQM/AT
++EqGN2HYnOMZAQF11QP/eSXb2FuTb1yX5yoo1Im8YnIk1SEgCGbyEbOMMBznVNDy
+5g2TAD0ofLxPxy5Vodjg8rf+lfMVtO5amUH6aNcORXRncE83T10JmeM6JEp0T6jw
+zOHKz8jRzygYLBayGsNIJ4BGxa4LeaGxJpO1ZEvRlNkPH/YEXK5oQmq9/DlrtYOJ
+AEUDBRAz42JT8ng6GBbVvu0BAU8nAYCsJ8PiJpRUGlrz6rxjX8hqM1v3vqFHLcG+
+G52nVMBSy+RZBgzsYIPwI5EZtWAKb22JAJUDBRAz4QBWdbtuOHaj97EBAaQPA/46
++NLUp+Wubl90JoonoXocwAg88tvAUVSzsxPXj0lvypAiSI2AJKsmn+5PuQ+/IoQy
+lywRsxiQ5GD7C72SZ1yw2WI9DWFeAi+qa4b8n9fcLYrnHpyCY+zxEpu4pam8FJ7H
+JocEUZz5HRoKKOLHErzXDiuTkkm72b1glmCqAQvnB4kAlQMFEDPZ3gyDQNEqHgjY
+iQEBFfUEALu2C0uo+1Z7C5+xshWRYY5xNCzK20O6bANVJ+CO2fih96KhwsMof3lw
+fDso5HJSwgFd8WT/sR+Wwzz6BAE5UtgsQq5GcsdYQuGI1yIlCYUpDp5sgswNm+OA
+bX5a+r4F/ZJqrqT1J56Mer0VVsNfe5nIRsjd/rnFAFVfjcQtaQmjiQCVAwUQM9uV
+mcdm8Q+/vPRJAQELHgP9GqNiMpLQlZig17fDnCJ73P0e5t/hRLFehZDlmEI2TK7j
+Yeqbw078nZgyyuljZ7YsbstRIsWVCxobX5eH1kX+hIxuUqCAkCsWUY4abG89kHJr
+XGQn6X1CX7xbZ+b6b9jLK+bJKFcLSfyqR3M2eCyscSiZYkWKQ5l3FYvbUzkeb6K0
+IVNhdG9zaGkgQXNhbWkgPGFzYW1pQEZyZWVCU0QuT1JHPg==
+=39SC
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.jmb;
+
+
+Jonathan M. Bresler <jmb@FreeBSD.org>
+f16 Fingerprint16 = 31 57 41 56 06 C1 40 13 C5 1C E3 E5 DC 62 0E FB
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: PGPfreeware 5.0i for non-commercial use
+
+mQCNAzG2GToAAAEEANI6+4SJAAgBpl53XcfEr1M9wZyBqC0tzpie7Zm4vhv3hO8s
+o5BizSbcJheQimQiZAY4OnlrCpPxijMFSaihshs/VMAz1qbisUYAMqwGEO/T4QIB
+nWNo0Q/qOniLMxUrxS1RpeW5vbghErHBKUX9GVhxbiVfbwc4wAHbXdKX5jjdAAUR
+tCVKb25hdGhhbiBNLiBCcmVzbGVyIDxqbWJARnJlZUJTRC5PUkc+iQCVAwUQNbtI
+gAHbXdKX5jjdAQHamQP+OQr10QRknamIPmuHmFYJZ0jU9XPIvTTMuOiUYLcXlTdn
+GyTUuzhbEywgtOldW2V5iA8platXThtqC68NsnN/xQfHA5xmFXVbayNKn8H5stDY
+2s/4+CZ06mmJfqYmONF1RCbUk/M84rVT3Gn2tydsxFh4Pm32lf4WREZWRiLqmw+J
+AJUDBRA0DfF99RVb+45ULV0BAcZ0BACCydiSUG1VR0a5DBcHdtin2iZMPsJUPRqJ
+tWvP6VeI8OFpNWQ4LW6ETAvn35HxV2kCcQMyht1kMD+KEJz7r8Vb94TS7KtZnNvk
+2D1XUx8Locj6xel5c/Lnzlnnp7Bp1XbJj2u/NzCaZQ0eYBdP/k7RLYBYHQQln5x7
+BOuiRJNVU4kAlQMFEDQLcShVLh4uc9KIpQEBJv4D/3mDrD0MM9EYOVuyXik3UGVI
+8quYNA9ErVcLdt10NjYc16VI2HOnYVgPRag3Wt7W8wlXShpokfC/vCNt7f5JgRf8
+h2a1/MjQxtlD+4/Js8k7GLa53oLon6YQYk32IEKexoLPwIRO4L2BHWa3GzHJJSP2
+aTR/Ep90/pLdAOu/oJDUiQCVAwUQMqyL0LNaYutZnzI9AQF25QP9GFXhBrz2tiWz
+2+0gWbpcGNnyZbfsVjF6ojGDdmsjJMyWCGw49XR/vPKYIJY9EYo4t49GIajRkISQ
+NNiIz22fBAjT2uY9YlvnTJ9NJleMfHr4dybo7oEKYMWWijQzGjqf2m8wf9OaaofE
+KwBX6nxcRbKsxm/BVLKczGYl3XtjkcuJAJUDBRA1ol5TZWCprDT5+dUBATzXA/9h
+/ZUuhoRKTWViaistGJfWi26FB/Km5nDQBr/Erw3XksQCMwTLyEugg6dahQ1u9Y5E
+5tKPxbB69eF+7JXVHE/z3zizR6VL3sdRx74TPacPsdhZRjChEQc0htLLYAPkJrFP
+VAzAlSlm7qd+MXf8fJovQs6xPtZJXukQukPNlhqZ94kAPwMFEDSH/kF4tXKgazlt
+bxECfk4AoO+VaFVfguUkWX10pPSSfvPyPKqiAJ4xn8RSIe1ttmnqkkDMhLh00mKj
+lLQuSm9uYXRoYW4gTS4gQnJlc2xlciA8Sm9uYXRoYW4uQnJlc2xlckBVU2kubmV0
+PokAlQMFEDXbdSkB213Sl+Y43QEBV/4D/RLJNTrtAqJ1ATxXWv9g8Cr3/YF0GTmx
+5dIrJOpBup7eSSmiM/BL9Is4YMsoVbXCI/8TqA67TMICvq35PZU4wboQB8DqBAr+
+gQ8578M7Ekw1OAF6JXY6AF2P8k7hMcVBcVOACELPT/NyPNByG5QRDoNmlsokJaWU
+/2ls4QSBZZlb
+=zbCw
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.ache;
+
+
+Andrey A. Chernov <ache@FreeBSD.org>
+ aka <ache@nagual.pp.ru>
+Key fingerprint = 33 03 9F 48 33 7B 4A 15 63 48 88 0A C4 97 FD 49
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3ia
+
+mQCNAiqUMGQAAAEEAPGhcD6A2Buey5LYz0sphDLpVgOZc/bb9UHAbaGKUAGXmafs
+Dcb2HnsuYGgX/zrQXuCi/wIGtXcZWB97APtKOhFsZnPinDR5n/dde/mw9FnuhwqD
+m+rKSL1HlN0z/Msa5y7g16760wHhSR6NoBSEG5wQAHIMMq7Q0uJgpPLZnQjrAAUT
+tCVBbmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucHAucnU+iQCVAwUQM2Ez
+u+JgpPLZnQjrAQEyugP8DPnS8ixJ5OeuYgPFQf5sy6l+LrB6hyaS+lgsUPahWjNY
+cnaDmfda/q/BV5d4+y5rlQe/pjnYG7/yQuAR3jhlXz8XDrqlBOnW9AtYjDt5rMfJ
+aGFTGXAPGZ6k6zQZE0/YurT8ia3qjvuZm3Fw4NJrHRx7ETHRvVJDvxA6Ggsvmr20
+JEFuZHJleSBBLiBDaGVybm92IDxhY2hlQEZyZWVCU0Qub3JnPokAlQMFEDR5uVbi
+YKTy2Z0I6wEBLgED/2mn+hw4/3peLx0Sb9LNx//NfCCkVefSf2G9Qwhx6dvwbX7h
+mFca97h7BQN4GubU1Z5Ffs6TeamSBrotBYGmOCwvJ6S9WigF9YHQIQ3B4LEjskAt
+pcjU583y42zM11kkvEuQU2Gde61daIylJyOxsgpjSWpkxq50fgY2kLMfgl/ftCZB
+bmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuaWV0enNjaGUubmV0PokAlQMFEDR5svDi
+YKTy2Z0I6wEBOTQD/0OTCAXIjuak363mjERvzSkVsNtIH9hA1l0w6Z95+iH0fHrW
+xXKT0vBZE0y0Em+S3cotLL0bMmVE3F3D3GyxhBVmgzjyx0NYNoiQjYdi+6g/PV30
+Cn4vOO6hBBpSyI6vY6qGNqcsawuRtHNvK/53MpOfKwSlICEBYQimcZhkci+EtCJB
+bmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucnU+iQCVAwUQMcm5HeJgpPLZ
+nQjrAQHwvQP9GdmAf1gdcuayHEgNkc11macPH11cwWjYjzA2YoecFMGV7iqKK8QY
+rr1MjbGXf8DAG8Ubfm0QbI8Lj8iG3NgqIru0c72UuHGSn/APfGGG0AtPX5UK/k7B
+gI0Ca2po6NA5nrSp8tDsdEz/4gyea84RXl2prtTf5Jj07hflbRstGXK0MkFuZHJl
+eSBBLiBDaGVybm92LCBCbGFjayBNYWdlIDxhY2hlQGFzdHJhbC5tc2suc3U+iQCV
+AwUQMCsAo5/rGryoL8h3AQHq1QQAidyNFqA9hvrmMcjpY7csJVFlGvj574Wj4GPa
+o3pZeuQaMBmsWqaXLYnWU/Aldb6kTz6+nRcQX50zFH0THSPfApwEW7yybSTI5apJ
+mWT3qhKN2vmLNg2yNzhqLTzHLD1lH3i1pfQq8WevrNfjLUco5S/VuekTma/osnzC
+Cw7fQzCJAJUDBRAwKvwoa1pnjYGyp3kBARihBACoXr3qfG65hFCyKJISmjOvaoGr
+anxUIkeDS0yQdTHzhQ+dwB1OhhK15E0Nwr0MKajLMm90n6+Zdb5y/FIjpPriu8dI
+rlHrWZlewa88eEDM+Q/NxT1iYg+HaKDAE171jmLpSpCL0MiJtO0i36L3ekVD7Hv8
+vffOZHPSHirIzJOZTYkAlQMFEDAau6zFLUdtDb+QbQEBQX8D/AxwkYeFaYxZYMFO
+DHIvSk23hAsjCmUA2Uil1FeWAusb+o8xRfPDc7TnosrIifJqbF5+fcHCG5VSTGlh
+Bhd18YWUeabf/h9O2BsQX55yWRuB2x3diJ1xI/VVdG+rxlMCmE4ZR1Tl9x+Mtun9
+KqKVpB39VlkCBYQ3hlgNt/TJUY4riQCVAwUQMBHMmyJRltlmbQBRAQFQkwP/YC3a
+hs3ZMMoriOlt3ZxGNUUPTF7rIER3j+c7mqGG46dEnDB5sUrkzacpoLX5sj1tGR3b
+vz9a4vmk1Av3KFNNvrZZ3/BZFGpq3mCTiAC9zsyNYQ8L0AfGIUO5goCIjqwOTNQI
+AOpNsJ5S+nMAkQB4YmmNlI6GTb3D18zfhPZ6uciJAJUCBRAwD0sl4uW74fteFRkB
+AWsAA/9NYqBRBKbmltQDpyK4+jBAYjkXBJmARFXKJYTlnTgOHMpZqoVyW96xnaa5
+MzxEiu7ZWm5oL10QDIp1krkBP2KcmvfSMMHb5aGCCQc2/P8NlfXAuHtNGzYiI0UA
+Iwi8ih/S1liVfvnqF9uV3d3koE7VsQ9OA4Qo0ZL2ggW+/gEaYIkAlQMFEDAOz6qx
+/IyHe3rl4QEBIvYD/jIr8Xqo/2I5gncghSeFR01n0vELFIvaF4cHofGzyzBpYsfA
++6pgFI1IM+LUF3kbUkAY/2uSf9U5ECcaMCTWCwVgJVO+oG075SHEM4buhrzutZiM
+1dTyTaepaPpTyRMUUx9ZMMYJs7sbqLId1eDwrJxUPhrBNvf/w2W2sYHSY8cdiQCV
+AwUQMAzqgHcdkq6JcsfBAQGTxwQAtgeLFi2rhSOdllpDXUwz+SS6bEjFTWgRsWFM
+y9QnOcqryw7LyuFmWein4jasjY033JsODfWQPiPVNA3UEnXVg9+n8AvNMPO8JkRv
+Cn1eNg0VaJy9J368uArio93agd2Yf/R5r+QEuPjIssVk8hdcy/luEhSiXWf6bLMV
+HEA0J+OJAJUDBRAwDUi+4mCk8tmdCOsBAatBBACHB+qtW880seRCDZLjl/bT1b14
+5po60U7u6a3PEBkY0NA72tWDQuRPF/Cn/0+VdFNxQUsgkrbwaJWOoi0KQsvlOm3R
+rsxKbn9uvEKLxExyKH3pxp76kvz/lEWwEeKvBK+84Pb1lzpG3W7u2XDfi3VQPTi3
+5SZMAHc6C0Ct/mjNlYkAlQMFEDAMrPD7wj+NsTMUOQEBJckD/ik4WsZzm2qOx9Fw
+erGq7Zwchc+Jq1YeN5PxpzqSf4AG7+7dFIn+oe6X2FcIzgbYY+IfmgJIHEVjDHH5
++uAXyb6l4iKc89eQawO3t88pfHLJWbTzmnvgz2cMrxt94HRvgkHfvcpGEgbyldq6
+EB33OunazFcfZFRIcXk1sfyLDvYE
+=1ahV
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.jkh;
+
+
+Jordan K. Hubbard <jkh@FreeBSD.org>
+Fingerprint = 3C F2 27 7E 4A 6C 09 0A 4B C9 47 CD 4F 4D 0B 20
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3ia
+
+mQCNAzFjX0IAAAEEAML+nm9/kDNPp43ZUZGjYkm2QLtoC1Wxr8JulZXqk7qmhYcQ
+jvX+fyoriJ6/7ZlnLe2oG5j9tZOnRLPvMaz0g9CpW6Dz3nkXrNPkmOFV9B8D94Mk
+tyFeRJFqnkCuqBj6D+H8FtBwEeeTecSh2tJ0bZZTXnAMhxeOdvUVW/uOVC1dAAUR
+tCNKb3JkYW4gSy4gSHViYmFyZCA8amtoQEZyZWVCU0Qub3JnPokBFQMFEDXCTXQM
+j46yp4IfPQEBwO8IAIN0J09AXBf86dFUTFGcAMrEQqOF5IL+KGorAjzuYxERhKfD
+ZV7jA+sCQqxkWfcVcE20kVyVYqzZIkio9a5zXP6TwA247JkPt54S1PmMDYHNlRIY
+laXlNoji+4q3HP2DfHqXRT2859rYpm/fG/v6pWkos5voPKcZ2OFEp9W+Ap88oqw+
+5rx4VetZNJq1Epmis4INj6XqNqj85+MOOIYE+f445ohDM6B/Mxazd6cHFGGIR+az
+VjZ6lCDMLjzhB5+FqfrDLYuMjqkMTR5z9DL+psUvPlCkYbQ11NEWtEmiIWjUcNJN
+GCxGzv5bXk0XPu3ADwbPkFE2usW1cSM7AQFiwuyJAJUDBRAxe+Q9a1pnjYGyp3kB
+AV7XA/oCSL/Cc2USpQ2ckwkGpyvIkYBPszIcabSNJAzm2hsU9Qa6WOPxD8olDddB
+uJNiW/gznPC4NsQ0N8Zr4IqRX/TTDVf04WhLmd8AN9SOrVv2q0BKgU6fLuk979tJ
+utrewH6PR2qBOjAaR0FJNk4pcYAHeT+e7KaKy96YFvWKIyDvc4kAlQMFEDF8ldof
+f6kIA1j8vQEBDH4D/0Zm0oNlpXrAE1EOFrmp43HURHbij8n0Gra1w9sbfo4PV+/H
+U8ojTdWLy6r0+prH7NODCkgtIQNpqLuqM8PF2pPtUJj9HwTmSqfaT/LMztfPA6PQ
+csyT7xxdXl0+4xTDl1avGSJfYsI8XCAy85cTs+PQwuyzugE/iykJO1Bnj/paiQCV
+AwUQMXvlBvUVW/uOVC1dAQF2fQP/RfYC6RrpFTZHjo2qsUHSRk0vmsYfwG5NHP5y
+oQBMsaQJeSckN4n2JOgR4T75U4vS62aFxgPLJP3lOHkU2Vc7xhAuBvsbGr5RP8c5
+LvPOeUEyz6ZArp1KUHrtcM2iK1FBOmY4dOYphWyWMkDgYExabqlrAq7FKZftpq/C
+BiMRuaw=
+=C/Jw
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.phk;
+
+
+Poul-Henning Kamp <phk@FreeBSD.org>
+Fingerprint = A3 F3 88 28 2F 9B 99 A2 49 F4 E2 FA 5A 78 8B 3E
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3ia
+
+mQCNAzAdpMIAAAEEALHDgrFUwhZtb7PbXg3upELoDVEUPFRwnmpJH1rRqyROUGcI
+ooVe7u+FQlIs5OsXK8ECs/5Wpe2UrZSzHvjwBYOND5H42YtI5UULZLRCo5bFfTVA
+K9Rpo5icfTsYihrzU2nmnycwFMk+jYXyT/ZDYWDP/BM9iLjj0x9/qQgDWPy9AAUR
+tCNQb3VsLUhlbm5pbmcgS2FtcCA8cGhrQEZyZWVCU0Qub3JnPokAlQMFEDQQ0aZ1
+u244dqP3sQEBu4ID/jXFFeJgs2MdTDNOZM/FbfDhI4qxAbYUsqS3+Ra16yd8Wd/A
+jV+IHJE2NomFWl8UrUjCGinXiwzPgK1OfFJrS9Og1wQLvAl0X84BA8MTP9BQr4w7
+6I/RbksgUSrVCIO8MJwlydjSPocWGBeXlVjbZxXzyuJk7H+TG+zuI5BuBcNIiQCV
+AwUQMwYr2rNaYutZnzI9AQHiIQP/XxtBWFXaBRgVLEhRNpS07YdU+LsZGlLOZehN
+9L4UnJFHQQPNOpMey2gF7Y95aBOw5/1xS5vlQpwmRFCntWsm/gqdzK6rulfr1r5A
+y94LO5TAC6ucNu396Y4vo1TyD1STnRC466KlvmtQtAtFGgXlORWLL9URLzcRFd1h
+D0yXd9aJAJUDBRAxfo19a1pnjYGyp3kBAQqyA/4v64vP3l1F0Sadn6ias761hkz/
+SMdTuLzILmofSCC4o4KWMjiWJHs2Soo41QlZi1+xMHzV32JKiwFlGtPHqL+EHyXy
+Q4H3vmf9/1KF+0XCaMtgI0wWUMziPSTJK8xXbRRmMDK/0F4TnVVaUhnmf+h5K7O6
+XdmejDTa0X/NWcicmIkAlQMFEDF8lef1FVv7jlQtXQEBcnwD/0ro1PpUtlkLmreD
+tsGTkNa7MFLegrYRvDDrHOwPZH152W2jPUncY+eArQJakeHiTDmJNpFagLZglhE0
+bqJyca+UwCXX+6upAclWHEBMg2byiWMMqyPVEEnpUoHM1sIkgdNWlfQAmipRBfYh
+2LyCgWvR8CbtwPYIFvUmGgB3MR87iQCVAwUQMUseXB9/qQgDWPy9AQGPkwP/WEDy
+El2Gkvua9COtMAifot2vTwuvWWpNopIEx0Ivey4aVbRLD90gGCJw8OGDEtqFPcNV
+8aIiy3fYVKXGZZjvCKd7zRfhNmQn0eLDcymq2OX3aPrMc2rRlkT4Jx425ukR1gsO
+qiQAgw91aWhY8dlw/EKzk8ojm52x4VgXaBACMjaJAJUDBRAxOUOg72G56RHVjtUB
+AbL4A/9HOn5Qa0lq9tKI/HkSdc5fGQD/66VdCBAb292RbB7CS/EM07MdbcqRRYIa
+0+0gwQ3OdsWPdCVgH5RIhp/WiC+UPkR1cY8N9Mg2kTwJfZZfNqN+BgWlgRMPN27C
+OhYNl8Q33Nl9CpBLrZWABF44jPeT0EvvTzP/5ZQ7T75EsYKYiYkAlQMFEDDmryQA
+8tkJ67sbQQEBPdsEALCj6v1OBuJLLJTlxmmrkqAZPVzt5QdeO3Eqa2tcPWcU0nqP
+vHYMzZcZ7oFg58NZsWrhSQQDIB5e+K65Q/h6dC7W/aDskZd64jxtEznX2kt0/MOr
+8OdsDis1K2f9KQftrAx81KmVwW4Tqtzl7NWTDXt44fMOtibCwVq8v2DFkTJy
+=JKbP
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.rich;
+
+
+Rich Murphey <rich@FreeBSD.org>
+fingerprint = AF A0 60 C4 84 D6 0C 73 D1 EF C0 E9 9D 21 DB E4
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAy97V+MAAAEEALiNM3FCwm3qrCe81E20UOSlNclOWfZHNAyOyj1ahHeINvo1
+FBF2Gd5Lbj0y8SLMno5yJ6P4F4r+x3jwHZrzAIwMs/lxDXRtB0VeVWnlj6a3Rezs
+wbfaTeSVyh5JohEcKdoYiMG5wjATOwK/NAwIPthB1RzRjnEeer3HI3ZYNEOpAAUR
+tCRSaWNoIE11cnBoZXkgPHJpY2hAbGFtcHJleS51dG1iLmVkdT6JAJUDBRAve15W
+vccjdlg0Q6kBAZTZBACcNd/LiVnMFURPrO4pVRn1sVQeokVX7izeWQ7siE31Iy7g
+Sb97WRLEYDi686osaGfsuKNA87Rm+q5F+jxeUV4w4szoqp60gGvCbD0KCB2hWraP
+/2s2qdVAxhfcoTin/Qp1ZWvXxFF7imGA/IjYIfB42VkaRYu6BwLEm3YAGfGcSw==
+=QoiM
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.jdp;
+
+
+John D. Polstra <jdp@polstra.com>
+Fingerprint = 54 3A 90 59 6B A4 9D 61 BF 1D 03 09 35 8D F6 0D
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAzMElMEAAAEEALizp6ZW9QifQgWoFmG3cXhzQ1+Gt+a4S1adC/TdHdBvw1M/
+I6Ok7TC0dKF8blW3VRgeHo4F3XhGn+n9MqIdboh4HJC5Iiy63m98sVLJSwyGO4oM
+dkEGyyCLxqP6h/DU/tzNBdqFzetGtYvU4ftt3RO0a506cr2CHcdm8Q+/vPRJAAUR
+tCFKb2huIEQuIFBvbHN0cmEgPGpkcEBwb2xzdHJhLmNvbT6JAJUDBRAzBNBE9RVb
++45ULV0BAWgiA/0WWO3+c3qlptPCHJ3DFm6gG/qNKsY94agL/mHOr0fxMP5l2qKX
+O6a1bWkvGoYq0EwoKGFfn0QeHiCl6jVi3CdBX+W7bObMcoi+foqZ6zluOWBC1Jdk
+WQ5/DeqQGYXqbYjqO8voCScTAPge3XlMwVpMZTv24u+nYxtLkE0ZcwtY9IkAlQMF
+EDMEt/DHZvEPv7z0SQEBXh8D/2egM5ckIRpGz9kcFTDClgdWWtlgwC1iI2p9gEhq
+aufy+FUJlZS4GSQLWB0BlrTmDC9HuyQ+KZqKFRbVZLyzkH7WFs4zDmwQryLV5wkN
+C4BRRBXZfWy8s4+zT2WQD1aPO+ZsgRauYLkJgTvXTPU2JCN62Nsd8R7bJS5tuHEm
+7HGmiQCVAwUQMwSvHB9/qQgDWPy9AQFAhAQAgJ1AlbKITrEoJ0+pLIsov3eQ348m
+SVHEBGIkU3Xznjr8NzT9aYtq4TIzt8jplqP3QoV1ka1yYpZf0NjvfZ+ffYp/sIaU
+wPbEpgtmHnVWJAebMbNs/Ad1w8GDvxEt9IaCbMJGZnHmfnEqOBIxF7VBDPHHoJxM
+V31K/PIoYsHAy5w=
+=cHFa
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.guido;
+
+
+Guido van Rooij <guido@gvr.win.tue.nl>
+Fingerprint = 16 79 09 F3 C0 E4 28 A7 32 62 FA F6 60 31 C0 ED
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAzGeO84AAAEEAKKAY91Na//DXwlUusr9GVESSlVwVP6DyH1wcZXhfN1fyZHq
+SwhMCEdHYoojQds+VqD1iiZQvv1RLByBgj622PDAPN4+Z49HjGs7YbZsUNuQqPPU
+wRPpP6ty69x1hPKq1sQIB5MS4radpCM+4wbZbhxv7l4rP3RWUbNaYutZnzI9AAUR
+tCZHdWlkbyB2YW4gUm9vaWogPGd1aWRvQGd2ci53aW4udHVlLm5sPokAlQMFEDMG
+Hcgff6kIA1j8vQEBbYgD/jm9xHuUuY+iXDkOzpCXBYACYEZDV913MjtyBAmaVqYo
+Rh5HFimkGXe+rCo78Aau0hc57fFMTsJqnuWEqVt3GRq28hSK1FOZ7ni9/XibHcmN
+rt2yugl3hYpClijo4nrDL1NxibbamkGW/vFGcljS0jqXz6NDVbGx5Oo7HBByxByz
+iQCVAwUQMhmtVjt/x7zOdmsfAQFuVQQApsVUTigT5YWjQA9Nd5Z0+a/oVtZpyw5Z
+OljLJP3vqJdMa6TidhfcatjHbFTve5x1dmjFgMX/MQTd8zf/+Xccy/PX4+lnKNpP
+eSf1Y4aK+E8KHmBGd6GzX6CIboyGYLS9e3kGnN06F2AQtaLyJFgQ71wRaGuyKmQG
+FwTn7jiKb1aJAJUDBRAyEOLXPt3iN6QQUSEBATwQA/9jqu0Nbk154+Pn+9mJX/YT
+fYR2UqK/5FKCqgL5Nt/Deg2re0zMD1f8F9Dj6vuAAxq8hnOkIHKlWolMjkRKkzJi
+mSPEWl3AuHJ31k948J8it4f8kq/o44usIA2KKVMlI63Q/rmNdfWCyiYQEVGcRbTm
+GTdZIHYCOgV5dOo4ebFqgYkAlQMFEDIE1nMEJn15jgpJ0QEBW6kEAKqN8XSgzTqf
+CrxFXT07MlHhfdbKUTNUoboxCGCLNW05vf1A8F5fdE5i14LiwkldWIzPxWD+Sa3L
+fNPCfCZTaCiyGcLyTzVfBHA18MBAOOX6JiTpdcm22jLGUWBf/aJK3yz/nfbWntd/
+LRHysIdVp29lP5BF+J9/Lzbb/9LxP1taiQCVAwUQMgRXZ44CzbsJWQz9AQFf7gP/
+Qa2FS5S6RYKG3rYanWADVe/ikFV2lxuM1azlWbsmljXvKVWGe6cV693nS5lGGAjx
+lbd2ADwXjlkNhv45HLWFm9PEveO9Jjr6tMuXVt8N2pxiX+1PLUN9CtphTIU7Yfjn
+s6ryZZfwGHSfIxNGi5ua2SoXhg0svaYnxHxXmOtH24iJAJUDBRAyAkpV8qaAEa3W
+TBkBARfQBAC+S3kbulEAN3SI7/A+A/dtl9DfZezT9C4SRBGsl2clQFMGIXmMQ/7v
+7lLXrKQ7U2zVbgNfU8smw5h2vBIL6f1PyexSmc3mz9JY4er8KeZpcf6H0rSkHl+i
+d7TF0GvuTdNPFO8hc9En+GG6QHOqbkB4NRZ6cwtfwUMhk2FHXBnjF4kAlQMFEDH5
+FFukUJAsCdPmTQEBe74EAMBsxDnbD9cuI5MfF/QeTNEG4BIVUZtAkDme4Eg7zvsP
+d3DeJKCGeNjiCWYrRTCGwaCWzMQk+/+MOmdkI6Oml+AIurJLoHceHS9jP1izdP7f
+N2jkdeJSBsixunbQWtUElSgOQQ4iF5kqwBhxtOfEP/L9QsoydRMR1yB6WPD75H7V
+iQCVAwUQMZ9YNGtaZ42Bsqd5AQH0PAQAhpVlAc3ZM/KOTywBSh8zWKVlSk3q/zGn
+k7hJmFThnlhH1723+WmXE8aAPJi+VXOWJUFQgwELJ6R8jSU2qvk2m1VWyYSqRKvc
+VRQMqT2wjss0GE1Ngg7tMrkRHT0il7E2xxIb8vMrIwmdkbTfYqBUhhGnsWPHZHq7
+MoA1/b+rK7CJAJUDBRAxnvXh3IDyptUyfLkBAYTDA/4mEKlIP/EUX2Zmxgrd/JQB
+hqcQlkTrBAaDOnOqe/4oewMKR7yaMpztYhJs97i03Vu3fgoLhDspE55ooEeHj0r4
+cOdiWfYDsjSFUYSPNVhW4OSruMA3c29ynMqNHD7hpr3rcCPUi7J2RncocOcCjjK2
+BQb/9IAUNeK4C9gPxMEZLokAlQMFEDGeO86zWmLrWZ8yPQEBEEID/2fPEUrSX3Yk
+j5TJPFZ9MNX0lEo7AHYjnJgEbNI4pYm6C3PnMlsYfCSQDHuXmRQHAOWSdwOLvCkN
+F8eDaF3M6u0urgeVJ+KVUnTz2+LZoZs12XSZKCte0HxjbvPpWMTTrYyimGezH79C
+mgDVjsHaYOx3EXF0nnDmtXurGioEmW1J
+=mSvM
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.peter;
+
+
+Peter Wemm <peter@FreeBSD.org>
+ aka <peter@spinner.dialix.com>
+ aka <peter@haywire.dialix.com>
+ aka <peter@perth.dialix.oz.au>
+Key fingerprint = 47 05 04 CA 4C EE F8 93 F6 DB 02 92 6D F5 58 8A
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3ia
+
+mQCNAy9/FJwAAAEEALxs9dE9tFd0Ru1TXdq301KfEoe5uYKKuldHRBOacG2Wny6/
+W3Ill57hOi2+xmq5X/mHkapywxvy4cyLdt31i4GEKDvxpDvEzAYcy2n9dIup/eg2
+kEhRBX9G5k/LKM4NQsRIieaIEGGgCZRm0lINqw495aZYrPpO4EqGN2HYnOMZAAUT
+tCVQZXRlciBXZW1tIDxwZXRlckBoYXl3aXJlLmRpYWxpeC5jb20+iQCVAwUQMwWT
+cXW7bjh2o/exAQEFkQP+LIx5zKlYp1uR24xGApMFNrNtjh+iDIWnxxb2M2Kb6x4G
+9z6OmbUCoDTGrX9SSL2Usm2RD0BZfyv9D9QRWC2TSOPkPRqQgIycc11vgbLolJJN
+eixqsxlFeKLGEx9eRQCCbo3dQIUjc2yaOe484QamhsK1nL5xpoNWI1P9zIOpDiGJ
+AJUDBRAxsRPqSoY3Ydic4xkBAbWLA/9q1Fdnnk4unpGQsG31Qbtr4AzaQD5m/JHI
+4gRmSmbj6luJMgNG3fpO06Gd/Z7uxyCJB8pTst2a8C/ljOYZxWT+5uSzkQXeMi5c
+YcI1sZbUpkHtmqPW623hr1PB3ZLA1TIcTbQW+NzJsxQ1Pc6XG9fGkT9WXQW3Xhet
+AP+juVTAhLQlUGV0ZXIgV2VtbSA8cGV0ZXJAcGVydGguZGlhbGl4Lm96LmF1PokA
+lQMFEDGxFCFKhjdh2JzjGQEB6XkD/2HOwfuFrnQUtdwFPUkgtEqNeSr64jQ3Maz8
+xgEtbaw/ym1PbhbCk311UWQq4+izZE2xktHTFClJfaMnxVIfboPyuiSF99KHiWnf
+/Gspet0S7m/+RXIwZi1qSqvAanxMiA7kKgFSCmchzas8TQcyyXHtn/gl9v0khJkb
+/fv3R20btB5QZXRlciBXZW1tIDxwZXRlckBGcmVlQlNELm9yZz6JAJUDBRAxsRJd
+SoY3Ydic4xkBAZJUA/4i/NWHz5LIH/R4IF/3V3LleFyMFr5EPFY0/4mcv2v+ju9g
+brOEM/xd4LlPrx1XqPeZ74JQ6K9mHR64RhKR7ZJJ9A+12yr5dVqihe911KyLKab9
+4qZUHYi36WQu2VtLGnw/t8Jg44fQSzbBF5q9iTzcfNOYhRkSD3BdDrC3llywO7Ql
+UGV0ZXIgV2VtbSA8cGV0ZXJAc3Bpbm5lci5kaWFsaXguY29tPokAlQMFEDGxEi1K
+hjdh2JzjGQEBdA4EAKmNFlj8RF9HQsoI3UabnvYqAWN5wCwEB4u+Zf8zq6OHic23
+TzoK1SPlmSdBE1dXXQGS6aiDkLT+xOdeewNs7nfUIcH/DBjSuklAOJzKliXPQW7E
+kuKNwy4eq5bl+j3HB27i+WBXhn6OaNNQY674LGaR41EGq44Wo5ATcIicig/z
+=gv+h
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.joerg;
+
+
+Type Bits/KeyID Date User ID
+pub 1024/76A3F7B1 1996/04/27 Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
+ Key fingerprint = DC 47 E6 E4 FF A6 E9 8F 93 21 E0 7D F9 12 D6 4E
+ Joerg Wunsch <joerg_wunsch@interface-business.de>
+ Joerg Wunsch <j@uriah.heep.sax.de>
+ Joerg Wunsch <j@interface-business.de>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3ia
+
+mQCNAzGCFeAAAAEEAKmRBU2Nvc7nZy1Ouid61HunA/5hF4O91cXm71/KPaT7dskz
+q5sFXvPJPpawwvqHPHfEbAK42ZaywyFp59L1GaYj87Pda+PlAYRJyY2DJl5/7JPe
+ziq+7B8MdvbX6D526sdmcR+jPXPbHznASjkx9DPmK+7TgFujyXW7bjh2o/exAAUR
+tC1Kb2VyZyBXdW5zY2ggPGpvZXJnX3d1bnNjaEB1cmlhaC5oZWVwLnNheC5kZT6J
+AJUDBRA0FFkBs1pi61mfMj0BAfDCA/oCfkjrhvRwRCpSL8klJ1YDoUJdmw+v4nJc
+pw3OpYXbwKOPLClsE7K3KCQscHel7auf91nrekAwbrXv9Clp0TegYeAQNjw5vZ9f
+L6UZ5l3fH8E2GGA7+kqgNWs1KxAnG5GdUvJ9viyrWm8dqWRGo+loDWlZ12L2OgAD
+fp7jVZTI1okAlQMFEDQPrLoff6kIA1j8vQEB2XQEAK/+SsQPCT/X4RB/PBbxUr28
+GpGJMn3AafAaA3plYw3nb4ONbqEw9tJtofAn4UeGraiWw8nHYR2DAzoAjR6OzuX3
+TtUV+57BIzrTPHcNkb6h8fPuHU+dFzR+LNoPaGJsFeov6w+Ug6qS9wa5FGDAgaRo
+LHSyBxcRVoCbOEaS5S5EiQCVAwUQM5BktWVgqaw0+fnVAQGKPwP+OiWho3Zm2GKp
+lEjiZ5zx3y8upzb+r1Qutb08jr2Ewja04hLg0fCrt6Ad3DoVqxe4POghIpmHM4O4
+tcW92THQil70CLzfCxtfUc6eDzoP3krD1/Gwpm2hGrmYA9b/ez9+r2vKBbnUhPmC
+glx5pf1IzHU9R2XyQz9Xu7FI2baOSZqJAJUDBRAyCIWZdbtuOHaj97EBAVMzA/41
+VIph36l+yO9WGKkEB+NYbYOz2W/kyi74kXLvLdTXcRYFaCSZORSsQKPGNMrPZUoL
+oAKxE25AoCgl5towqr/sCcu0A0MMvJddUvlQ2T+ylSpGmWchqoXCN7FdGyxrZ5zz
+xzLIvtcio6kaHd76XxyJpltCASupdD53nEtxnu8sRrQxSm9lcmcgV3Vuc2NoIDxq
+b2VyZ193dW5zY2hAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPokAlQMFEDIIhfR1u244
+dqP3sQEBWoID/RhBm+qtW+hu2fqAj9d8CVgEKJugrxZIpXuCKFvO+bCgQtogt9EX
++TJh4s8UUdcFkyEIu8CT2C3Rrr1grvckfxvrTgzSzvtYyv1072X3GkVY+SlUMBMA
+rdl1qNW23oT7Q558ajnsaL065XJ5m7HacgTTikiofYG8i1s7TrsEeq6PtCJKb2Vy
+ZyBXdW5zY2ggPGpAdXJpYWguaGVlcC5zYXguZGU+iQCVAwUQMaS91D4gHQUlG9CZ
+AQGYOwQAhPpiobK3d/fz+jWrbQgjkoO+j39glYGXb22+6iuEprFRs/ufKYtjljNT
+NK3B4DWSkyIPawcuO4Lotijp6jke2bsjFSSashGWcsJlpnwsv7EeFItT3oWTTTQQ
+ItPbtNyLW6M6xB+jLGtaAvJqfOlzgO9BLfHuA2LY+WvbVW447SWJAJUDBRAxqWRs
+dbtuOHaj97EBAXDBA/49rzZB5akkTSbt/gNd38OJgC+H8N5da25vV9dD3KoAvXfW
+fw7OxIsxvQ/Ab+rJmukrrWxPdsC+1WU1+1rGa4PvJp/VJRDes2awGrn+iO7/cQoS
+IVziC27JpcbvjLvLVcBIiy1yT/RvJ+87a3jPRHt3VFGcpFh4KykxxSNiyGygl4kA
+lQMFEDGCUB31FVv7jlQtXQEB5KgD/iIJZe5lFkPr2B/Cr7BKMVBot1/JSu05NsHg
+JZ3uK15w4mVtNPZcFi/dKbn+qRM6LKDFe/GF0HZD/ZD1FJt8yQjzF2w340B+F2GG
+EOwnClqZDtEAqnIBzM/ECQQqH+6Bi8gpkFZrFgg5eON7ikqmusDnOlYStM/CBfgp
+SbR8kDmFtCZKb2VyZyBXdW5zY2ggPGpAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPokA
+lQMFEDHioSdlYKmsNPn51QEByz8D/10uMrwP7MdaXnptd1XNFhpaAPYTVAOcaKlY
+OGI/LLR9PiU3FbqXO+7INhaxFjBxa0Tw/p4au5Lq1+Mx81edHniJZNS8tz3I3goi
+jIC3+jn2gnVAWnK5UZUTUVUn/JLVk/oSaIJNIMMDaw4J9xPVVkb+Fh1A+XqtPsVa
+YESrNp0+iQCVAwUQMwXkzcdm8Q+/vPRJAQEA4QQAgNNX1HFgXrMetDb+w6yEGQDk
+JCDAY9b6mA2HNeKLQAhsoZl4HwA1+iuQaCgo3lyFC+1Sf097OUTs74z5X1vCedqV
+oFw9CxI3xuctt3pJCbbN68flOlnq0WdYouWWGlFwLlh5PEy//VtwX9lqgsizlhzi
+t+fX6BT4BgKi5baDhrWJAJUDBRAyCKveD9eCJxX4hUkBAebMA/9mRPy6K6i7TX2R
+jUKSl2p5oYrXPk12Zsw4ijuktslxzQhOCyMSCGK2UEC4UM9MXp1H1JZQxN/DcfnM
+7VaUt+Ve0wZ6DC9gBSHJ1hKVxHe5XTj26mIr4rcXNy2XEDMK9QsnBxIAZnBVTjSO
+LdhqqSMp3ULLOpBlRL2RYrqi27IXr4kAlQMFEDGpbnd1u244dqP3sQEBJnQD/RVS
+Azgf4uorv3fpbosI0LE3LUufAYGBSJNJnskeKyudZkNkI5zGGDwVneH/cSkKT4OR
+ooeqcTBxKeMaMuXPVl30QahgNwWjfuTvl5OZ8orsQGGWIn5FhqYXsKkjEGxIOBOf
+vvlVQ0UbcR0N2+5F6Mb5GqrXZpIesn7jFJpkQKPU
+=97h7
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+
+
+
diff --git a/es_ES.ISO8859-1/books/handbook/policies/chapter.sgml b/es_ES.ISO8859-1/books/handbook/policies/chapter.sgml
new file mode 100755
index 0000000000..d76ecbbe6d
--- /dev/null
+++ b/es_ES.ISO8859-1/books/handbook/policies/chapter.sgml
@@ -0,0 +1,392 @@
+
+
+
+ Guías y políticas del árbol de código fuente
+
+ Contribución de &a.phk;.
+
+ Este capítulo documenta la política por la que se rige el
+ árbol de código fuente de FreeBSD.
+
+
+ MAINTAINER en Makefiles
+
+ Junio 1996.
+
+ Si una parte en particular de la distribución FreeBSD es mantenida por
+ una persona o grupo de personas, pueden comunicar este hecho al mundo añadiendo
+ esta línea
+
+
+MAINTAINER= email-addresses
+
+ a los Makefiles que cubren esta parte del árbol de
+ código fuente.
+
+ La semántica de es como sigue:
+
+ El mantenedor posee y es responsable de ese código. Esto significa que
+ él es responsable de arreglar errores y responder reportes de problemas relacionados
+ con esa parte del código, y en el caso de contribución de software, de revisar
+ nuevas versiones, según sea necesario.
+
+ Los cambios en directorios que tienen un mantenedor definido deberán ser
+ enviados al mantenedor para ser revisados antes de ser incluidos.
+ Sólo si el mantenedor no responde durante un periodo de tiempo inaceptable, a
+ varios mensajes, será aceptable incluir cambios sin la revisión del
+ mantenedor. Sin embargo, se sugiere que los cambios sean revisados por alguien más
+ si es posible.
+
+ No es aceptable, por supuesto, añadir una persona o grupo como mantenedor a
+ menos que estén de acuerdo en asumir esta tarea. Por otro lado, no tiene
+ porqué ser un committer, pudiendo ser fácilmente un grupo de personas.
+
+
+
+ Software de Contribución
+
+ Contribucion de &a.phk; y &a.obrien;.
+
+ Junio 1996.
+
+ Algunas partes de la distribución de FreeBSD consisten en software
+ que está siendo mantenido activamente fuera del proyecto FreeBSD. Por razones
+ históricas, llamamos a esto software de contribución.
+ Algunos ejemplos son perl, gcc y patch.
+
+ En los últimos dos años, se han usado diferentes métodos para
+ tratar con este tipo de software y todos tienen algunas ventajas e inconvenientes. No
+ ha emergido ningún claro ganador.
+
+ Ya que este es el caso, después de algo de debate uno de estos
+ métodos ha sido seleccionado como el método “oficial”
+ y será requerido para futuras importaciones de este tipo de software.
+ Más aún, se sugiere firmemente que el software de contribución existente
+ converja con este modelo en el futuro, ya que tiene ventajas significativas
+ sobre el antiguo método, incluyendo la habilidad de obtener fácilmente
+ diferencias relativas a la versión “oficial” del fuente por todos
+ (aún sin acceso cvs). Esto hará significativamente mas fácil el
+ devolver cambios a los desarrolladores primarios del software de contribución.
+
+ Finalmente, sin embargo, quedan las personas que están haciendo el
+ trabajo. Si usar este modelo es particularmente incompatible con el paquete con el cual
+ se trata, se pueden conceder excepciones a esta regla solo con la aprobación del
+ core team y con el consenso general de los otros desarrolladores. La habilidad de mantener
+ el paquete en el futuro será un asunto clave en las decisiones.
+
+
+ Debido a algunas desafortunadas limitaciones de diseño con el formato de
+ archivo RCS y el uso de las ramas "vendors" con el CVS, son
+ fuertemente desaprobados cambios cosméticos, triviales y/o
+ menores en archivos que estén siendo seguidos por la rama "vendor".
+ Los "arreglos de sintaxis" están incluidos explícitamente aquí
+ bajo la categoría "cosméticos" y deben ser evitados en archivos con
+ revisión 1.1.x.x. El impacto que puede tener la modificación de un
+ sólo carácter en el repositorio puede ser bastante dramático.
+
+
+ El lenguaje de programación Tcl será usado
+ como un ejemplo sobre como este modelo trabaja:
+
+ src/contrib/tcl contiene los fuentes distribuidos
+ por los mantenedores de este programa. Las partes que no son enteramente
+ aplicables a FreeBSD pueden ser eliminadas. En el caso del Tcl, los subdirectorios
+ mac, win y compat fueron
+ eliminados antes de la importación
+
+ src/lib/libtcl contiene sólo un Makefile
+ estilo bmake que usa las reglas estándar bsd.lib.mk makefile
+ para producir la librería e instalar la documentación.
+
+ src/usr.bin/tclsh contiene sólo un
+ Makefile estilo bmake que producirá e instalará
+ el programa tclsh y sus páginas man asociadas usando las
+ reglas estándar bsd.prog.mk
+
+ src/tools/tools/tcl_bmake contiene un par de shell scripts que
+ pueden ser de ayuda cuando el software tcl necesita actualización. Estos no son
+ parte integral o de instalación del software.
+
+ Lo importante aquí es que el directorio
+ src/contrib/tcl se crea de acuerdo a las reglas:
+ se supone que debe contener las fuentes tal y como se distribuyen (en una rama vendor
+ adecuada del CVS y sin expansión de claves RCS) con tan pocos cambios
+ específicos para FreeBSD como sea posible. La herramienta "easy-import"
+ (importación fácil) en freefall ayudará haciendo la
+ importación, pero si hay dudas acerca de como hacerlo, es imperativo que se pregunte
+ primero y no hacerlo esperando que “funcione”. El CVS no perdona accidentes de
+ importación y se requiere un gran esfuerzo para arreglar grandes errores.
+
+ Debido a las limitaciones de diseño previamente mencionadas de las
+ ramas "vendor" del CVS, se requiere que los parches “oficiales”
+ del vendedor sean aplicados a los fuentes originales de distribución y el
+ resultado reimportado otra vez en la rama vendor correspondiente. Los parches oficiales
+ nunca deben ser usados en la versión disponible en el CVS de FreeBSD e integrados,
+ ya que esto destruye la coherencia de la rama vendor y hace que la importación de
+ futuras versiones sea más complicada por la aparición de conflictos.
+
+
+ Ya que muchos paquetes contienen archivos cuya intención es la
+ compatibilidad con otras arquitecturas y ambientes distintos a FreeBSD,
+ es permisible eliminar partes del árbol de distribución que no son de
+ interés para FreeBSD con el fin de ahorrar espacio. Los archivos que
+ contienen notas de copyright y notas de la versión, información en algo
+ aplicable a los archivos que quedan no deberán ser eliminados.
+
+
+ Si parece más fácil, los bmake
+ Makefiles pueden ser producidos automaticamente desde el árbol
+ de distribución por alguna utilidad, algo que podría hacer
+ aun más fácil el actualizar a una nueva versión. Si esto es hecho,
+ asegúrese de revisar tales utilidades (como sea necesario) en el directorio
+ src/tools junto con el mismo port para que esté disponible
+ para los futuros mantenedores.
+
+ En el nivel de directorio src/contrib/tcl
+ debe ser añdido un archivo llamado FREEBSD-upgrade
+ debiendo presentar cosas como:
+
+
+
+ Qué archivos se han dejado fuera de la importación
+
+
+
+ De donde fue obtenida la distribución original y/o el
+ servidor oficial principal.
+
+
+
+ Dónde enviar parches a los autores originales
+
+
+
+ Una visión general de los cambios específicos que se han hecho
+ para FreeBSD.
+
+
+
+ Sin embargo, por favor no importar FREEBSD-upgrade
+ (actualización) con los fuentes de contribución. En su lugar,
+ usar cvs add FREEBSD-upgrade ; cvs ci después del prompt
+ inicial. Más abajo existe un ejemplo de sintaxis de
+ src/contrib/cpio:
+
+
+Este directorio contiene códigos fuente virgen de los archivos originales de
+distribución en una rama "vendor". No tratar, bajo ninguna circunstancia,
+de actualizar los archivos en este directorio con parches y un cvs commit.
+Nuevas versiones o versiones oficiales de parches deben ser importadas.
+Por favor recuerdar importar con "-ko" para prevenir que el CVS corrompa
+el Id del RCS de algun vendor.
+
+Para la importación del GNU cpio 2.4.2, se eliminaron los siguientes archivos:
+
+ INSTALL cpio.info mkdir.c
+ Makefile.in cpio.texi mkinstalldirs
+
+Para actualizar a una versión más nueva de cpio, cuando esté disponible:
+ 1. Descomprimir la nueva versión en un directorio vacío.
+ [No hacer NINGUN cambio a los archivos.]
+
+ 2. Eliminar los archivos listados arriba y cualquier otro que no se relacione
+ con FreeBSD.
+
+ 3. Usar el comando:
+ cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
+ src/contrib/cpio GNU cpio_<version>
+
+ Por ejemplo, para importar la versión 2.4.2, usar:
+ cvs import -ko -m 'Virgin import of GNU v2.4.2' \
+ src/contrib/cpio GNU cpio_2_4_2
+
+ 4. Seguir las instrucciones del paso 3 para resolver cualquier conflicto entre
+ cambios locales de FreeBSD y la nueva versión.
+
+NO desviarse, bajo ninguna circunstancia, de este procedimiento.
+
+Para hacer cambios locales al cpio, simplemente aplicar el patch y commit a la rama
+principal (también conocida como HEAD). Nunca hacer cambios locales
+en la rama GNU.
+
+Todos los cambios locales deberían ser enviados a "cpio@gnu.ai.mit.edu" para
+su inclusión en la nueva versión release.
+
+obrien@FreeBSD.org - 30 March 1997
+
+
+
+ Archivos "adicionales" (encumbered)
+
+ Ocasionalmente podría ser necesario incluir un archivo "adicional" en el
+ código fuente de FreeBSD. Por ejemplo, si un dispositivo requiere que una
+ pequeña pieza de código binario sea cargada antes de que el dispositivo
+ funcione, y no tenemos los fuentes de ese código, entonces se dice que el archivo
+ binario es "encumbered".
+ Las siguientes políticas se aplican al incluir archivos encumbered en
+ en el árbol fuente FreeBSD.
+
+
+
+ Cualquier archivo que sea interpretado o ejecutado por la CPU del
+ sistema y no en formato fuente es encumbered.
+
+
+
+ Cualquier archivo con una licencia más restrictiva que BSD o GNU
+ es encumbered.
+
+
+
+ Un archivo que contiene datos binarios descargables para que el
+ hardware lo use no es encumbered, a menos que (1) o (2) se apliquen
+ a él. Debe ser guardado en un formato ASCII neutral a la arquitectura
+ (se recomienda file2c o uuencodeado).
+
+
+
+ Cualquier archivo encumbered requiere aprobación específica del
+ Core team antes de ser añadido al
+ repositorio CVS.
+
+
+
+ Los archivos encumbered van en src/contrib
+ o src/sys/contrib.
+
+
+
+ El módulo entero debería ser mantenido en su conjunto. No hay excusa en
+ separarlo, a menos que haya intercambio de código con código no encumbered.
+
+
+
+
+ Los archivos objeto son nombrados
+ arch/filename.o.uu>
+ .
+
+
+
+ Archivos del Kernel:
+
+
+
+ Siempre deben ser referenciados en conf/files.* (para
+ simplicidad del build).
+
+
+
+ Siempre debería estar en LINT, pero el Core team decide caso por caso si
+ debería ser comentado o no. El Core team puede, por supuesto, cambiar
+ su opinión más adelante.
+
+
+
+ El Ingeniero de Release
+ decide si va o no a la release.
+
+
+
+
+
+ Archivos de usuario:
+
+
+
+ El Core team decide si
+ el código debería ser parte de make world.
+
+
+
+ El Ingeniero de la Release
+ decide si va a la release.
+
+
+
+
+
+
+
+ Librerías compartidas
+
+ Contribuido por &a.asami;, &a.peter;, y &a.obrien; 9
+ Diciembre 1996.
+
+ Si se está añadiendo soporte para librerías compartidas a un puerto u
+ otra pieza de software que no tiene uno, los números de versión deben
+ seguir estas reglas. Generalmente, los números resultantes no tendrán nada
+ que ver con la versión release del software.
+
+ Los tres principios de la construcción de librerías compartidas son:
+
+
+
+ Comenzando desde 1.0
+
+
+
+ Si hay un cambio que sea compatible con versiones anteriores,
+ eliminar el número menor
+
+
+
+ Si hay un cambio incompatible, quitar el número mayor
+
+
+
+ Por ejemplo, funciones añadidas y solució de errores resultan en la
+ eliminación del numero de versión menor, mientras que las funciones borradas,
+ sintaxis cambiada de llamada de función, etc, forzarán que el número
+ de versión mayor cambie.
+
+ Usar los números de versión de la forma mayor.menor
+ (x.y). Nuestro
+ lincador dinámico no gestiona correctamente números de versión
+ de la forma x.y.z
+ . Cualquier número de versión después de y
+ (es decir, el tercer dígito) es totalmente ignorado cuando
+ se comparan números de versión de librerías compartidas
+ para decidir con que librería enlazar. Dadas 2 librerías compartidas
+ que difieren sólo en la “micro” revisión,
+ ld.so enlazará con la mas alta. Es decir:
+ si se enlaza con libfoo.so.3.3.3, el lincador
+ sólo reconoce 3.3 en los encabezados,
+ y enlazará con cualquiera que comience con libfoo.so.3.
+ (cualquier cosa >=3).(el más alto
+ disponible).
+
+ ld.so siempre usará la revisión
+ “menor” más alta. Es decir: usará
+ libc.so.2.2 en preferencia a
+ libc.so.2.0, aun si el programa estaba
+ inicialmente enlazado con libc.so.2.0.
+
+
+ Para librerías no portables, es también nuestra política cambiar
+ el número de versión de librería compartida solo una vez entre releases.
+ Cuando se hace un cambio a una librería del sistema que requiere
+ que se quite el número de versión, revisar los logs commit del
+ Makefile. Es responsabilidad del miembro del commit asegurarse de que
+ el primer cambio desde la release hará que se actualice el número de versión
+ de la librería compartida en el Makefile, y cualquier
+ subsecuente cambio no lo hará.
+
+
+
+
diff --git a/es_ES.ISO8859-1/books/handbook/ports/chapter.sgml b/es_ES.ISO8859-1/books/handbook/ports/chapter.sgml
new file mode 100755
index 0000000000..814a82ac73
--- /dev/null
+++ b/es_ES.ISO8859-1/books/handbook/ports/chapter.sgml
@@ -0,0 +1,2091 @@
+
+
+
+
+ Instalando Aplicaciones: La colección de Ports
+
+ Contribuido por &a.jraynard;.
+
+ La colección de Ports de FreeBSD te permite compilar e instalar
+ una gran cantidad de programas con el mínimo esfuerzo.
+
+ Debido a las diferencias entre los estándars abiertos, conseguir
+ que un programa funcione en una versión diferente de Unix puede ser
+ tedioso y complicado, como debe saber todo aquel que lo haya intentado.
+ Tendrás suerte si el programa que quieres compila limpiamente,
+ instala todos los componentes donde debe instalarlos y funciona todo
+ correctamente al primer intento.
+
+ Algunas distribuciones de software han intentado solucionar este
+ problema incluyendo unos scripts de configuración. Algunos de estos
+ scripts son muy inteligentes, pero tienen tendencia a anunciar que tu
+ sistema es algo que nunca has oido y hacen preguntas que suenan a un
+ exámen final de programación en Unix.
+
+ Afortunadamente, con la colección de Ports, todo el trabajo
+ duro ya está hecho, y solo tienes que teclear el comando
+ make install para tener un programa perfectamente
+ instalado y en funcionamiento.
+
+
+ ¿Porqué tener una Colección de Ports?
+
+ El sistema base de FreeBSD incluye una gran variedad de
+ herramientas y utilidades de sistema, pero muchos de los programas
+ populares no están en la distribución base del sistema,
+ por buenas razones:
+
+
+
+ Programas con los que algunos usuarios no puede vivir sin ellos y
+ otros usuarios ni los conocen, como cierto editor basado en Lisp.
+
+
+
+ Programas demasiado especializados para ser incluidos en la
+ distribución base del sistema (CAD, bases de datos, etc).
+
+
+
+ Programas que se pueden incluir en la categoría
+ “Tengo que mirarlo cuando tenga un rato libre”
+ (algunos lenguajes, por ejemplo).
+
+
+
+ Programas que son demasiado divertidos para ser incluidos en
+ un sistema operativo serio como FreeBSD ;-)
+
+
+
+ Por muchos programas que se incluyesen en el sistema base, la
+ gente siempre quiere más, y se debe crear una línea
+ de separación en algún momento (de otra manera, las
+ distribuciones de FreeBSD serín enormes).
+
+
+
+ Obviamente no sería razonable que cada usuario se portase
+ manualmente sus programas favoritos (sin mencionar la enorme cantidad de
+ trabajo duplicado), así que el proyecto FreeBSD ha usado un
+ ingenioso sistema que mediante herramientas estándar permite
+ automatizar todo el proceso.
+
+ Esta es una excelente ilustración de como el
+ “Unix way” trabaja en la prática combinando una serie
+ de simples pero muy flexibles herramientas y consiguiendo algo muy
+ potente.
+
+
+
+ ¿Cómo funciona la Colección de Ports?
+
+ Los programas en Internet se suelen distribuir como un tarball consistente en un Makefile y el
+ código fuente del programa, incluyendo algunas instrucciones (las
+ cuales no siempre son tan instructivas como debieras), y un script de
+ configuración.
+
+ El escenario habitual es que bajas el tarball vía FTP, lo
+ extraes en algún directorio, lees las instrucciones, haces los
+ cambios que parezcan necesarios, ejecutas el script de configuración
+ y usas el programa make para compilar e instalar el
+ programa desde el código fuente.
+
+ Los ports de FreeBSD siguen usando el mecanismo del tarball, pero
+ usan un esqueleto en el que guardan
+ la información necesaria para que el programa funcione correctamente
+ en FreeBSD. Los ports también tienen su propio y personalizado
+ Makefile para practicamente todos
+ los ports puedan ser compilados de la misma manera.
+
+ Si miras el esqueleto de un port (ya sea en tu sistema
+ FreeBSD o en
+ el servidor FTP) y esperas encontrar todo tipo de combinaciones
+ de ciencia avanzada, puede que te decepciones, ya que sólo
+ encontrarás uno o dos ficheros y directorios de lo más
+ habitual. (En un momento veremos como obtener un port).
+
+ “¿Cómo es posible que esto pueda hacer algo?
+ ” Oigo como lloras. “No hay código fuente!”
+
+ Lo creas o no, gentil lector, todo quedará entendido (o eso
+ espero). Veamos que pasa si intentamos instalar un port. He elegido el
+ programa ElectricFence, una útil
+ herramienta para desarrolladores, ya que el esqueleto es más
+ claro que muchos otros.
+
+
+ Si intentas ejecutar esto, necesitas estar como root.
+
+
+ &prompt.root; cd /usr/ports/devel/ElectricFence
+&prompt.root; make install
+>> Checksum OK for ElectricFence-2.0.5.tar.gz.
+===> Extracting for ElectricFence-2.0.5
+===> Patching for ElectricFence-2.0.5
+===> Applying FreeBSD patches for ElectricFence-2.0.5
+===> Configuring for ElectricFence-2.0.5
+===> Building for ElectricFence-2.0.5
+[lots of compiler output...]
+===> Installing for ElectricFence-2.0.5
+===> Warning: your umask is "0002". If this is not desired, set it to
+ an appropriate value and install this port again by ``make reinstall''.
+install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib
+install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3
+===> Compressing manual pages for ElectricFence-2.0.5
+===> Registering installation for ElectricFence-2.0.5
+
+ Para evitar confusiones, he borrado todas las líneas
+ correspondientes a la compilación del programa.
+
+ Si has realizado la instalación de este port, habrás
+ obtenido algo así en pantalla:
+
+ &prompt.root; make install
+>> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system.
+>> Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.
+
+ El programa make notifica que no tienes una copia
+ en local del código fuente e intenta bajarlo por FTP. En el
+ ejemplo, ya tenía el código en el ordenador, por lo que no
+ ha sido necesario obtenerlo de Internet.
+
+ Vayamos revisando que ha hecho el programa make
+
+
+
+
+ Localizar el tarball con el código fuente.
+ Si no está disponible localmente, intenta obtenerlo desde
+ un servidor FTP.
+
+
+
+ Ejecutar un test de checksum
+ para asegurar que el tarball del código fuente es correcto.
+
+
+
+ Extraer el tarball en un directorio temporal.
+
+
+
+ Aplicar todos los parches
+ necesarios para que el código fuente compile y funcione bajo
+ FreeBSD.
+
+
+
+ Ejecutar cualquier script de configuración requerido por
+ el proceso de compillación, además de responder
+ correctamente a cualquiera de las preguntas realizadas por éste.
+
+
+
+
+ (Finalmente!) Compilar el código.
+
+
+
+ Instalar los ejecutables del programa y otros archivos de
+ soporte, páginas man, etc, bajo la jerarquía
+ /usr/local, donde no se mezclarán con los
+ programas de sistema. Esto también asegura que todos los ports
+ que instales estarán en el mismo lugar, evitando que queden
+ repartidos por diferentes lugares del disco.
+
+
+
+ Registrar la instalación en una base de datos. Esto
+ significa que, si no te gusta el programa, puedes borrar todos sus programas y archivos
+ de tu sistema.
+
+
+
+ Vuelve a mirar la salida del programa make antes
+ mostrada e intenta localizar los pasos descritos. Y si no estabas impresionado
+ antes, deberías estarlo ahora.
+
+
+
+ Obteniendo un Port de FreeBSD
+
+ Hay dos maneras de obtener un port de FreeBSD para un programa. Uno
+ requiere el CDROM de FreeBSD, y el otro
+ requiere una conexión a Internet.
+
+
+
+ Compilar los PORTS desde CDROM
+
+ Asumiendo que tu CDROM de FreeBSD está en el lector y montado
+ en /cdrom (y must estar
+ montado en /cdrom), deberís poder compilar
+ toda la colección de ports sin problemas, ya que ésta
+ encontraría los tarballs en
+ /cdrom/ports/distfiles/ (si existen allí)
+ en lugar de obtenerlos de Internet.
+
+ Otra manera de hacer esto, si sólo quieres usar los
+ esqueletos del CDROM, es poner la variables del fichero
+ /etc/make.conf de la siguiente manera:
+
+
+PORTSDIR= /cdrom/ports
+DISTDIR= /tmp/distfiles
+WRKDIRPREFIX= /tmp
+
+ Substituye /tmp por cualquier directorio en
+ el que tengas suficiente espacio. Entonces, entra en el subdirectorio
+ apropiado bajo /cdrom/ports y teclea
+ make install como hasta ahora.
+ WRKDIRPREFIX hará que el port sea compilado
+ bajo /tmp/cdrom/ports; por ejemplo,
+ games/oneko será compilado bajo
+ /tmp/cdrom/ports/games/oneko.
+
+
+ Hay algunos ports para los que no podemos dar el código
+ fuente original en el CDROM debido a limitaciones de licencia. Es estos
+ casos, tendrás que mirar en la sección Compilando los ports usando una conexión a
+ Internet.
+
+
+
+
+ Compilando los Ports desde Internet
+
+ Si no tienes CDROM o quieres estar seguro de instalar la
+ última versión del port que te interesa, necesitarás
+ bajarte el esqueleto de ese port.
+
+
+ Primero, si estás usando una versión release de
+ FreeBSD, asegúrate de tener instalado el kit de actualización
+ apropiado para tu release. Para conocer el kit apropiado, mira en
+ la página web de
+ ports. Estos packages incluyen ficheros que han sido actualizados
+ desde la release y que serán necesarios para compilar los nuevos
+ ports.
+
+ La clave para los esqueletos es que el servidor FTP de FreeBSD puede
+ crear tarballs al momento.
+ Aquí tienes cómo trabaja, usando como ejemplo el programa
+ gnats en el directorio de bases de datos (el texto entre corchetes son
+ comentarios. No los teclees si intentas ejecutar el ejemplo):
+
+ &prompt.root; cd /usr/ports
+&prompt.root; mkdir databases
+&prompt.root; cd databases
+&prompt.root; ftp ftp.freebsd.org
+[log in as `ftp' and give your email address when asked for a
+password. Remember to use binary (also known as image) mode!]
+>cd /pub/FreeBSD/ports/ports/databases
+>get gnats.tar
+[tars up the gnats skeleton for us]
+>quit
+&prompt.root; tar xf gnats.tar
+[extract the gnats skeleton]
+&prompt.root; cd gnats
+&prompt.root; make install
+[build and install gnats]
+
+ ¿Qué ha ocurrido aquí?. Hemos conectado con
+ el servidor FTP de la manera habitual y entrado en el subdirectorio
+ databases. Al enviar el comando
+ get gnats.tar, el servidor FTP ha empaquetado en
+ formato tarred el directorio
+ gnats.
+
+ A continuación hemos extraido el esqueleto de gnats y
+ entrado en el directorio para compilar el port. Como hemos explicado
+ anteriormente, el programa
+ make ha detectado que el código fuente no
+ estaba disponible localmente y lo ha bajado de Internet antes de
+ extraerlo, aplicar los parches necesarios, compilarlo e instalarlo.
+
+ Intentemos ahora algo más ambicioso. En lugar de obtener el
+ esqueleto de un simple port, obtengamos todos los de un directorio, por
+ ejemplo los esqueletos de todas las bases de datos de la colección
+ de ports. El proceso es muy parecido:
+
+ &prompt.root; cd /usr/ports
+&prompt.root; ftp ftp.freebsd.org
+[log in as `ftp' and give your email address when asked for a
+password. Remember to use binary (also known as image) mode!]
+>cd /pub/FreeBSD/ports/ports
+>get databases.tar
+[tars up the databases directory for us]
+>quit
+&prompt.root; tar xf databases.tar
+[extract all the database skeletons]
+&prompt.root; cd databases
+&prompt.root; make install
+[build and install all the database ports]
+
+ Con media docena de sencillos comandos, tenenemos instalada toda
+ una serie de programas de bases de datos en nuestra máquina
+ FreeBSD. Todo lo que hemos hecho diferente de la instalación de
+ un sólo port ha sido bajarnos todo un directorio y compilarlo
+ todo de una sola vez. Impresionante, ¿no?.
+
+ Si tienes pensado instalar muchos ports, es buena idea bajarse
+ la colección de ports completa.
+
+
+
+
+ Esqueletos
+
+ Un grupo de hackers compulsivos que ha olvidado comer en un intento
+ de llegar a un punto prefijado?. No, un esqueleto aquí es la
+ expresión mínima que incluye todo lo necesario para que los
+ ports realicen su mágico trabajo.
+
+
+ Makefile
+
+ El componente más importante del esqueleto es el Makefile.
+ Este contiene diferentes declaraciones que especifican cómo
+ debe ser compilado e instalado un port. Aquí está el
+ Makefile para el port ElectricFence:
+
+
+# New ports collection makefile for: Electric Fence
+# Version required: 2.0.5
+# Date created: 13 November 1997
+# Whom: jraynard
+#
+# $Id$
+#
+
+DISTNAME= ElectricFence-2.0.5
+CATEGORIES= devel
+MASTER_SITES= ${MASTER_SITE_SUNSITE}
+MASTER_SITE_SUBDIR= devel/lang/c
+
+MAINTAINER= jraynard@freebsd.org
+
+MAN3= libefence.3
+
+do-install:
+ ${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib
+ ${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3
+
+.include <bsd.port.mk>
+
+ Las líneas que empiezan con el símbolo "#"
+ son comentarios para facilitar las cosas a los lectores humanos (como
+ en la mayoría de los scripts en Unix).
+
+ DISTNAME especifica el nombre del tarball, pero sin la extensión.
+
+
+ CATEGORIES indica que tipo de programa es. En
+ este caso, una utilidad para desarrolladores. Mira en la sección
+ categorías de este
+ handbook para ver una lista completa.
+
+ MASTER_SITES es la URL(s) del servidor FTP
+ principal, usado para obtener el tarball si no está disponible
+ en el sistema local. Este servidor se considera fiable, y normalmente es
+ desde el que se distribuye de manera oficial el programa.
+
+ MAINTAINER es la dirección de email de
+ la persona responsable de actualizar el esqueleto, si, por ejemplo,
+ aparece una nueva versión del programa.
+
+ Pasando por alto las siguientes líneas, la línea
+ .include <bsd.port.mk> indica que las otras
+ declaraciones o comandos necesarios para compilar el port están
+ en un fichero estándar llamado bsd.port.mk.
+ Como éstas son las mismas para todos los ports, no hay necesidad
+ de duplicarlos en todos los ports, así que se mantienen en un
+ solo fichero.
+
+ Este no es el lugar para entrar en detalle sobre el funcionamiento
+ del Makefile; es suficiente con decir que la línea que comienza
+ con MAN3 asegura que la página man de
+ ElectricFence sea compilada después de la instalación, para
+ ayudar a conservar tu preciado espacio en disco. El port original no
+ contenía el objeto install, así que
+ las tres líneas a partir de do-install
+ aseguran que los ficheros producidos por este port sean instalados
+ en el lugar correcto.
+
+
+
+ El directorio files
+
+ El fichero que contiene el checksum del port se llama
+ md5, ya que se usa el algoritmo MD5 para comprobar
+ el checksum de los ports. Está en el directorio llamado
+ files.
+
+ Este directorio puede contener otros ficheros necesarios para
+ compilar el port y que no pueden situarse en ningun otro lugar.
+
+
+
+ El directorio patches
+
+ Este directorio contiene los patches necesarios para hacer
+ que todo funcione correctamente bajo FreeBSD.
+
+
+
+ El directorio pkg
+
+ Este programa contiene tres archivos muy comunes:
+
+
+
+ COMMENT — una descripción
+ muy corta del programa.
+
+
+
+ DESCR — una descripción
+ más detallada.
+
+
+
+ PLIST — una lista de todos los
+ archivos que serán creados cuando el programa esté
+ instalado.
+
+
+
+
+
+
+ ¿Qué hacer cuando un port no funciona?
+
+ Oh, puedes hacer una de estas cuatro (4) cosas:
+
+
+
+ Solucionarlo tú mismo. Los detalles técnicos de como
+ trabajan los ports se pueden encontrar en Portando aplicaciones.
+
+
+
+ Quejarte. Sólo hacerlo por email.
+ Enví el mail a la dirección &a.ports; y por favor,
+ indica el nombre/versión del port, dónde obtuviste el
+ código fuente y cual ha sido el texto de error.
+
+
+
+ Olvidarlo. Este el sistema más fácil para alguno
+ de los pocos ports que puedan clasificarse como esenciales.
+
+
+
+ Obtener el package compilado desde un servidor FTP. La
+ colección principal de packages está en el servidor
+ principal de FreeBSD en el directorio
+ packages, pero por favor, mira primero en tu mirror local.
+ Estos programas suelen dar menos problemas que intentar compilar el
+ código fuente y es, sobre todo, mucho más rápido.
+ Usa el programa &man.pkg.add.1; para instalar un package en tu
+ sistema.
+
+
+
+
+
+ Algunas Preguntas y Respuestas
+
+
+
+ P. Pensaba que esto iba a ser una discusión sobre modems
+
+
+ R. Ah. Debes estar pensando en los puertos serie que hay en la
+ parte trasera de tu ordenador. Aquí usamos la palabra
+ “port” para definir el resultado de “portar”
+ un programa de una versión de Unix a otra. (Desafortunadamente
+ es un mal hábito de los informáticos el usar la misma
+ palabra para referirse a cosas completamente diferentes).
+
+
+
+ P. Pensaba que usabais los packages para instalar los programas
+ extras
+
+ R. Sí, esa es la manera más rápida y
+ fácil de instalarlos.
+
+
+
+ P. Entonces, ¿Porqué usar los ports?
+
+ R. Por diferentes razones:
+
+
+
+ Las condiciones de la licencia de algunos programas requieren
+ que sean distribuidos como código fuente y no en formato
+ binario.
+
+
+
+ Algunas personas no confían en las distribuciones
+ binarias. Al menos, con el código fuente puedes (en
+ teoría) repasarlo y detectar problemas potenciales
+ tú mismo.
+
+
+
+ Si tienes algunos parches locales, necesitas el código
+ fuente para poder añadirlos tú mismo.
+
+
+
+ Posiblemente tengas opiniones diferentes a las de otros
+ usuarios en lo que respecta a las opciones de optimización
+ en la compilación, creación de versiones de debug,
+ etc.
+
+
+
+ A algunos usuarios les gusta tener el código fuente
+ para poder leerlo, retocarlo, destrozarlo (dentro de los
+ términos de la licencia, claro), y cosas así.
+
+
+
+
+
+ P. ¿Qué es un patch
+ (parche)?
+
+ R. Un parche es un pequeño fichero (normalmente) que
+ especifica como pasar de una versión de un archivo a otra.
+ Contiene texto que especifica cosas como “borrar línea
+ 23”, “añadir estas dos líneas después
+ de la línea 468” o “cambia la línea 197
+ por esta”. También se conoce como “diff” ya
+ que se genera por un programa llamado así.
+
+
+
+ P. Qué es un tarball?
+
+ R. Es un archivo terminado en .tar o
+ .tar.gz (con variaciones como
+ .tar.Z, o también .tgz
+ si intentas adecuar el nombre del archivo a un sistema de archivos
+ DOS).
+
+ Básicamente, es un árbol de directorios que ha
+ sido archivado en un solo fichero (.tar) y
+ opcionalmente comprimido (.gz). Esta
+ técnica se usó originalmente para
+ Tape ARchives (archivos de
+ cinta) y de aquí el nombre tar, pero ahora
+ es de uso general en la distribución deil código
+ fuente de programas a través de Internet.
+
+ Puedes ver que archivos hay en ellos, o bién extraerlos
+ tú mismo, usando el programa estándar de Unix tar,
+ incluido en el sistema base de FreeBSD, así:
+
+ &prompt.user; tar tvzf foobar.tar.gz
+
+&prompt.user; tar xzvf foobar.tar.gz
+&prompt.user; tar tvf foobar.tar
+&prompt.user; tar xvf foobar.tar
+
+
+
+ P. ¿Y el checksum?
+
+ R. Es un número que se genera a partir de todo el
+ contenido del archivo que quieres chequear. Si cambia alguno de
+ los carácteres, el checksum no será el mismo, así
+ que una simple comparación te permitirá conocer la
+ diferencia.
+
+
+
+ P. He hecho lo que indicais para
+ compilar los ports desde el CDROM y todo ha funcionado
+ bién hasta que he intentado instalar el port kermit:
+
+ &prompt.root; make install
+>> cku190.tar.gz doesn't seem to exist on this system.
+>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.
+
+ ¿Porqué no puedo encontrarlo?
+
+ R. Los términos de la licencia del programa kermit no nos
+ permiten incluir el tarball en el CDROM, así que tendrás
+ que bajarlo a mano. La razón por la que han salido esos errores
+ es que no estabas conectado a Internet en el momento de la
+ instalación. Una vez lo hayas bajado de cualquiera de los
+ servidores arriba mencionados, puedes empezar de nuevo el proceso
+ (intenta escoger el servidor más cercano a tí para
+ ganar tiempo y ahorrar ancho de banda de Internet).
+
+
+
+ P. He hecho lo que explicais, pero cuando intento poner el
+ archivo en /usr/ports/distfiles aparece un error
+ que indica que no tengo permisos.
+
+ R. El mecanismo de ports busca el tarball en
+ /usr/ports/distfiles, pero no podrás copiar
+ nada ahí por que es un link al CDROM, el cual es de sólo
+ lectura. Puedes indicar que busque el port en cualquier otro
+ directorio haciendo
+
+ &prompt.root; make DISTDIR=/where/you/put/it install
+
+
+
+ P. ¿Sólo funciona el esquema de ports si
+ están en /usr/ports? Mi administrador de
+ sistema dice que tengo que poner los archivos en
+ /u/people/guests/wurzburger, pero parece que
+ así no funciona.
+
+ R. Puedes usar las variables PORTSDIR y
+ PREFIX para indicarle al mecanismo de ports que
+ use directorios diferentes. Por ejemplo,
+
+ &prompt.root; make PORTSDIR=/u/people/guests/wurzburger/ports install
+
+ compilará el port en
+ /u/people/guests/wurzburger/ports e
+ instalará todos los archivos bajo
+ /usr/local.
+
+ &prompt.root; make PREFIX=/u/people/guests/wurzburger/local install
+
+ compilará el port en /usr/ports y
+ lo instalará en
+ /u/people/guests/wurzburger/local.
+
+ Y por supuesto
+
+ &prompt.root; make PORTSDIR=.../ports PREFIX=.../local install
+
+ combinará los dos (es demasiado extenso para escribirlo
+ en la página, pero seguro que te haces una idea).
+
+ Si no quieres tener que teclear todo esto cada vez que instalas
+ un ports, es una buena idea poner estas variables como variables de
+ entorno.
+
+
+
+ P. No tengo el CDROM de FreeBSD pero me gustaría disponer
+ de todos los tarball en mi sistema para no tener que esperar a que
+ se bajen de Internet cada vez que instalo un port. Hay alguna manera
+ sencilla de hacerlo?
+
+ R. Para obtener todos los tarball de la colección completa
+ de ports haz
+
+ &prompt.root; cd /usr/ports
+&prompt.root; make fetch
+
+ Para todos los tarball de un directorio de ports, haz
+
+ &prompt.root; cd /usr/ports/directory
+&prompt.root; make fetch
+
+ y para un solo port, bueno, creo que ya lo has adivinado.
+
+
+
+ P. Sé que probablemente es más rápido
+ obtener los tarballs desde un mirror de FreeBSD cercano. ¿Hay
+ alguna manera de obtener los ports de otros servidores diferentes a los
+ establecidos en MASTER_SITES?
+
+ R. Sí. Si sabes, por ejemplo que ftp.FreeBSD.ORG te es más cercano que los
+ servidores listados en MASTER_SITES, haz como en el
+ siguiente ejemplo.
+
+ &prompt.root; cd /usr/ports/directory
+&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch
+
+
+
+ P. Quiero saber que ficheros va a necesitar el programa
+ make antes de que intente bajarlos.
+
+ R. make fetch-list mostrará una lista
+ de los ficheros necesarios para el port.
+
+
+
+ P. ¿Hay alguna manera de parar la compilación del
+ port?. Quiero hacer algunos retoques en el código fuente antes
+ de instalarlo, pero es un poco pesado tener que estar atento y pulsar
+ control-C cada vez.
+
+ R. Ejecutando make extract, el port
+ parará después de haber obtenido y extraido el
+ código fuente.
+
+
+
+ P. Estoy intentando crear mi propio port y quiero poder parar
+ la compilación hasta poder asegurarme de que mis parches
+ funcionan correctamente. ¿Hay alguna comando como
+ make extract, pero para parches?
+
+ R. Sí, make patch es lo que quieres.
+ Probablemente también encontrarás muy útil la
+ opción PATCH_DEBUG. Y ya de paso, gracias
+ por el esfuerzo!.
+
+
+
+ P. He oido que algunas opciones de compilación pueden
+ causar errores. ¿Es cierto?. ¿Cómo puedo
+ asegurarme de que compilo los ports con las opciones correctas?.
+
+ R. Sí, con la versión 2.6.3 de
+ gcc (la versión incluida en FreeBSD 2.1.0 y
+ 2.1.5), la opción puede crear problemas
+ a no ser que uses también la opción
+ . (Muchos de los ports no usan
+ ). Deberís poder
+ especificar las opciones de compilación con algo como
+
+ &prompt.root; make CFLAGS='-O2 -fno-strength-reduce'install
+
+ o editando el fichero /etc/make.conf, pero
+ desafortunadamente no todos los ports respetan esto. La forma más
+ segura es hacer make configure, entrar en el
+ directorio de los fuentes e inspeccionar a mano los Makefiles, pero
+ puede ser muy tedioso si los fuentes tienen muchos subdirectorios, cada
+ uno con su propio Makefile.
+
+
+
+ P. Hay tantos ports que resulta complicado encontrar el que
+ quiero. ¿Hay alguna lista de los ports disponibles?
+
+ R. Mira el archivo INDEX en
+ /usr/ports. También puedes hacer
+ búsquedas de palabras en la colección de ports. Por
+ ejemplo puedes encontrar ports referentes al lenguaje de
+ programación LISP usando:
+
+ &prompt.user; cd /usr/ports
+&prompt.user; make search key=lisp
+
+
+
+ P. Iba a instalar el port foo pero de pronto
+ el sistema paró la compilación y comenzó a
+ compilar el port bar. ¿Qué
+ está pasando?
+
+ R. El port foo necesita algo que ofrece el
+ port bar, por ejemplo, si foo
+ usa gráficos, bar puede tener
+ librerías con rutinas de procesamiento gráfico
+ útiles. O puede ser que bar sea una
+ herramienta necesaria para compilar el port foo.
+
+
+
+
+ P. Instalé el programa
+ grizzle desde los ports, y, francamente, me parece
+ una pérdida de espacio en disco, Quiero borrarlo pero no
+ sé dónde están todos los ficheros.
+ ¿alguna idea?
+
+ R. No hay problema, sólo haz
+
+ &prompt.root; pkg_delete grizzle-6.5
+
+
+
+ P. Espera un momento; necesitas saber el número de
+ versión para usar ese comando. No creerás que voy a ser
+ capaz de recordarlo, ¿no?
+
+ R. No, desde luego. Puedes encontrar el número de
+ versión haciendo
+
+ &prompt.root; pkg_info -a | grep grizzle
+Information for grizzle-6.5:
+grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.
+
+
+
+ P. Hablando de espacio en disco, el directorio de ports parece
+ que cada vez ocupa más espacio. ¿Es recomendable
+ borrar cosas?
+
+ R. Sí, si ya tienes instalado el programa y crees que no
+ vas a necesitarlo de nuevo. La mejor manera de hacerlo es
+
+ &prompt.root; cd /usr/ports
+&prompt.root; make clean
+
+ lo que entrará en todos los subdirectorios de ports y
+ borrará todo excepto el esqueleto de cada port.
+
+
+
+
+ P. He hecho lo que comentais y todavía tengo todos esos
+ tarballs o como le llameis en el directorio
+ distfiles. ¿Puedo borrar esos archivos?
+
+
+ R. Sí, si estás seguro de haber terminado con
+ ellos.
+
+
+
+ P. Me gusta tener muchos programas para poder jugar con ellos.
+ ¿Hay alguna manera de instalar todos los ports de una vez?
+
+
+ R. Sólo haz
+
+ &prompt.root; cd /usr/ports
+&prompt.root; make install
+
+
+
+ P. Bién, lo he intentado, pero pensando que tardaría
+ mucho me fuí a dormir y cuando he vuelto esta mañna he
+ visto que sólo había instalado tres ports y medio.
+ ¿Ha ido algo mal?
+
+ R. No, el problema es que algunos ports necesitan hacer preguntas
+ que no podemos responder por tí y necesitan tener a alguien
+ "a mano" para poder responderlas.
+
+
+
+ P. Realmente, no quiero perder todo un día delante del
+ monitor. ¿Alguna idea mejor?
+
+ R. Bueno, haz esto antes de irte a dormir
+
+ &prompt.root cd /usr/ports
+&prompt.root; make -DBATCH install
+
+ Esto instalará todos los ports que no
+ requieran participación por parte del usuario. Entonces,
+ cuando vuelvas haz
+
+ &prompt.root; cd /usr/ports
+&prompt.root; make -DIS_INTERACTIVE install
+
+ para terminar el trabajo.
+
+
+
+ P. En el trabajo, estamos usando el programa
+ frobble, que está en la colección de
+ ports, pero lo hemos alterado un poco para cubrir nuestras necesidades.
+ ¿Hay alguna manera sencilla de hacer nuestros propios packages
+ de manera que podamos distribuirlos más fácilmente en
+ nuestros servidores?
+
+ R. No hay problema, asumiendo que sabes como hacer los parches
+ para tus cambios:
+
+ &prompt.root; cd /usr/ports/somewhere/frobble
+&prompt.root; make extract
+&prompt.root; cd work/frobble-2.8
+[Apply your patches]
+&prompt.root; cd ../..
+&prompt.root; make package
+
+
+
+ P. Este sistema de ports es realmente fantástici. Estoy
+ desesperado por saber como lo habeis hecho. ¿Cuál es el
+ secreto?R. No hay nada secreto, lo tienes todo en los ficheros
+ bsd.ports.mk y
+ bsd.ports.subdir.mk en tu directorio de makefiles.
+
+
+ Los lectores con aversión a intrincados shell-scripts
+ están avisados de no seguir este link...)
+
+
+
+
+
+
+ Haciendo tú mismo un port
+
+ Contribuido por &a.jkh;, &a.gpalmer;, &a.asami; &a.obrien;
+ y &a.hoek;. 28 de Agosto de 1996.
+
+ Así que, ¿ahora estás interesado en hacer un
+ port?. Bién!
+
+ Lo que viene a continuación son algunas guís para crear
+ un nuevo port para FreeBSD. La mayoría del trabajo es hecha por el
+ fichero /usr/ports/Mk/bsd.port.mk que incluyen todos
+ los Makefile de los ports. Por favor, mira en este fichero para más
+ información sobre la manera de trabajar de la colección de
+ ports. Aunque no uses los Makefiles de manera habitualm, está
+ bién comentado, y podrás conocer una gran cantidad de cosas
+ a través de él.
+
+
+ Sólo una pequeña parte de las variables
+ sobreescribibles (VAR)
+ se mencionan en este documento. Muchas (si no todas) están
+ documentadas al inicio del fichero bsd.port.mk.
+ Este fichero usa una tabulación no estándar.
+ Emacs y Vim
+ deberín reconocer la configuración al cargar el fichero.
+ vi or ex se pueden configurar
+ para que usen los valores correctos tecleando
+ :set tabstop=4 una vez que el fichero ha sido
+ cargado.
+
+
+
+ Haciendo Ports rápidamente
+
+ Esta sección te explica cómo hacer un port
+ rápidamente. En muchos casos no es suficiente, pero ya lo iremos
+ viendo.
+
+ Primero, obtén el tarball original y ponlo en
+ DISTDIR, que por defecto apunta a
+ /usr/ports/distfiles.
+
+
+ Los siguientes comentarios asumen que el software compila
+ sin problema alguno en FreeBSD, y no se requiere absolutamente
+ ningún cambio para que el port funcione en tu sistema
+ FreeBSD. Si has necesitado modificar alguna cosa, tendrás que
+ referirte también por la siguiente sección.
+
+
+
+ Escribiendo el Makefile
+
+ El Makefile debería ser algo como
+ esto:
+
+
+# New ports collection makefile for: oneko
+# Version required: 1.1b
+# Date created: 5 December 1994
+# Whom: asami
+#
+# $Id$
+#
+
+DISTNAME= oneko-1.1b
+CATEGORIES= games
+MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
+
+MAINTAINER= asami@FreeBSD.ORG
+
+MAN1= oneko.1
+MANCOMPRESSED= yes
+USE_IMAKE= yes
+
+.include <bsd.port.mk>
+
+ Prueba de entenderlo tú mismo. No te preocupes por los
+ contenidos de la línea $Id$, ya
+ que serán completadas automaticamente por el CVS cuando el port
+ sea importado a la colección de ports principal. Puedes
+ encontrar información más detallada en la sección
+ Makefile de ejemplo.
+
+
+
+ Escribiendo los ficheros de descripción
+
+ Hay tres ficheros de descripción que son requeridos por
+ cualquier port. Los ficheros son COMMENT,
+ DESCR y PLIST. Estos ficheros
+ deben estar en el subdirectorio pkg.
+
+
+ COMMENT
+
+ Descripción corta del port.
+ Por favor no incluir el nombre del package
+ (o número de versión del software) en el comentario.
+ Aquí tienes un ejemplo:
+
+
+A cat chasing a mouse all over the screen.
+
+
+
+ DESCR
+
+ Esta es una descripción más detallada del
+ port. Uno o varios párrafos explicando claramente que
+ hace el port es suficiente.
+
+
+ Este no es un manual o una
+ descripción en profundidad de cómo usar o compilar
+ el port! Por favorm, ten cuidado si lo estás
+ copiando del README o del man. Si
+ el software portado tiene una página web oficial,
+ deberías listarlo aquí.
+
+
+ Te recomendamos que pongas tu nombre o firma al final de
+ este fichero de la manerae siguiente:
+
+
+This is a port of oneko, in which a cat chases a poor mouse all over
+the screen.
+ :
+(etc.)
+
+http://www.oneko.org/
+
+- Satoshi
+asami@cs.berkeley.edu
+
+
+
+ PLIST
+
+ Este fichero lista todos los ficheros instalados por el port.
+ También se llama “packing list” por que el
+ package es generado con los ficheros listados aquí. Los
+ paths son relativos al prefijo de instalación (normalmente
+ /usr/local o /usr/X11R6).
+ Si estás usando las variables
+ MANn (como
+ deberís hacer), no listes ninguna página man
+ aquí.
+
+ Aquí tienes un pequeño ejemplo:
+
+
+bin/oneko
+lib/X11/app-defaults/Oneko
+lib/X11/oneko/cat1.xpm
+lib/X11/oneko/cat2.xpm
+lib/X11/oneko/mouse.xpm
+@dirrm lib/X11/oneko
+
+ Mira en el man de &man.pkg.create.1; para más detalles
+ sobre la "lista de empaquetado".
+
+
+ Deberís listar todos los ficheros, pero no los nombres
+ de los directorios. De la misma manera, si el port crea directorios
+ por sí mismo durante la instalación, asegúrate
+ de añadir las líneas @dirrm
+ cuando sea necesario para eliminarlos cuando el port sea
+ desinstalado.
+
+ Es recomendable que mantengas todos los nobres de fichero en
+ este archivo ordenados alfabéticamente. Hará que la
+ verificación de cambios cuando actualices el port sea mucho
+ más sencilla.
+
+
+
+
+
+ Creando el fichero de checksum
+
+ Solo teclea make checksum. Las reglas del
+ programa make para los ports generarán automáticamente
+ el fichero files/md5.
+
+
+
+ Testeando los ports
+
+ Debes asegurarte de que las reglas de los ports hagan
+ exactamente lo que quieres que hagan, incluyendo el empaquetado
+ del port. Estos son los puntos importantes que necesitas verificar:
+
+
+
+
+ PLIST no contiene nada que no sea
+ instalado por tu port
+
+
+
+ PLIST contiene absolutamente todos
+ los ficheros instalados por tu port
+
+
+
+ Tu port puede ser instalado múltiples veces
+ usando el parámetro reinstall
+
+
+
+ Tu port se elimina
+ a sí mismo al usar el parámetro deinstall
+
+
+
+
+ Orden de test recomendado
+
+
+ make install
+
+
+
+ make package
+
+
+
+ make deinstall
+
+
+
+ pkg_add `make package-name`
+
+
+
+ make deinstall
+
+
+
+ make reinstall
+
+
+
+ make package
+
+
+
+ Asegúrate de que no existe ningún warning en
+ los comandos package y
+ deinstall. Después del paso 3, mira
+ si todos los nuevos directorios han sido eliminados correctamente.
+ también, intenta usar el software después del paso 4,
+ para asegurarte de que funciona correctamente cuando es instalado desde
+ un package.
+
+
+
+ Probando tu port con portlint
+
+ Por favor, usa el comando portlint para
+ ver si tu port cumple nuestras normas. El programa
+ portlint forma parte de la colección de
+ ports. En particular, debes probar que el
+ Makefile es correcto y que el
+ package es nombrado
+ apropiadamente.
+
+
+
+ Enviando un port
+
+ Primero, asegúrate de haber leido la sección
+ Do's and Dont's.
+
+ Ahora que ya tienes tu port, solo queda incluirlo en la
+ colección de ports principal de FreeBSD y que todo el mundo
+ lo tenga a su alcance. No necesitamos tu directorio
+ work o el archivo de package
+ pkgname.tgz, así que bórralos
+ ahora. A continuación, simplemente incluye la salida de
+ shar `find port_dir` en un "bug report" y
+ envialo con el programa &man.send-pr.1; (mira en
+ Bug Reports y comentarios generales para más información sobre &man.send-pr.1;. Si el port
+ descomprimido es mayor de 20Kb deberías comprimirlo en un
+ fichero tar y usar el comando &man.uuencode.1; antes de incluirlo en
+ el bug report. Clasifica el bug report en la categoría
+ ports y clase change-request.
+ No marques el port como confidencial!)
+
+ Una vez más, no incluyas el código
+ fuente original, el directorio work, o el
+ package creado con make package.
+
+
+ En el pasado, te recomendabamos enviar el nuevo port a nuestro
+ servidor ftp (ftp.freebsd.org). Esto
+ ya no es recomendando ya que el permiso de lectura se ha desactivado
+ en el directorio incoming por la cantidad de
+ software pirata que se enviaba.
+
+
+ Miraremos tu port, nos pondremos en contacto contigo si es
+ necesario y lo añadiremos en la colección principal.
+ Tu nombre aparecerá en la lista
+ “Additional FreeBSD contributors” en el Handbook de
+ FreeBSD y otros ficheros. ¿No es genial?!? :)
+
+
+
+
+ Ports paso a paso
+
+ Bién, así que no ha sido tan simple, y el port
+ ha necesitado algunas modificaciones para funcionar. En esta
+ sección, explicaremos, paso a paso, como modificarlo para
+ que pueda funcionar en el entorno de los ports.
+
+
+ Cócomo funcionan las cosas
+
+ Primero, esta es la secuencia de eventos que ocurren cuando
+ un usuario teclea make en el directorio de ports.
+ Si tienes otra ventana con el fichero bsd.port.mk
+ te resultará más sencillo entender todo el proceso.
+
+ Pero no te preocupes si realmente no entiendes todo lo que
+ hace el fichero bsd.port.mk... no hay mucha gente
+ que realmente lo entienda...
+ :>
+
+
+
+
+ El objeto fetch es ejecutado. El
+ objeto fetch es el responsable de asegurar
+ que el tarball necesario existe localmente en el directorio
+ DISTDIR. Si fetch
+ no puede encontrar los ficheros requeridos en
+ DISTDIR localizará el URL de
+ MASTER_SITES, la cual existe en el Makefile,
+ al igual que en nuestro servidor principal ftp ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/,
+ que usamos como servidor de backup. A continuación
+ intentará obtener el archivo de la distribución
+ con FETCH, asumiendo que el servidor de
+ origen tiene conexión directa a Internet. Si este paso
+ termina correctamente, grabará el archivo en
+ DISTDIR para su uso futuro.
+
+
+
+ El objeto extract es ejecutado.
+ Busca el archivo de distribución del port
+ (normalmente un tarball comprimido con gzip) en
+ DISTDIR y lo descomprime en un sibdirectorio
+ temporal especificado por la variable WRKDIR
+ (normalmente work).
+
+
+
+ Se ejecuta el objeto patch. Primero
+ se aplican todos los parches definidos en
+ PATCHFILES. A continuación, si no se
+ han encontrado parches en PATCHDIR (que por
+ defecto está definido como el subdirectorio
+ patches), son aplicados en orden
+ alfabético.
+
+
+
+ Se ejecuta el objeto configure.
+ Este puede hacer cualquiera de las siguientes funciones.
+
+
+
+ Si existe, se ejecuta
+ scripts/configure.
+
+
+
+ Si USE_IMAKE está
+ definido, se ejecuta XMKMF (por
+ defecto: xmkmf -a).
+
+
+
+
+
+ Se ejecuta el objeto build. Este es
+ responsable de descender por los directorios de trabajo privados
+ del port (WRKSRC) y compilarlos. Si se ha
+ definido USE_GMAKE se usa el comando
+ make, en caso contrario, se usará el
+ comando de sistema make.
+
+
+
+ Las anteriores, son las acciones por defecto. Además,
+ puedes definir los objetos
+ pre-algo o
+ post-something,
+ o poner scripts con esos nombres. En el subdirectorio
+ scripts, y serán ejecutados antes o
+ después de las acciones por defecto.
+
+ Por ejemplo, si tienes definido un objeto
+ post-extract en tu Makefile, y un fichero
+ pre-build en el subdirectorio
+ scripts, el objeto
+ post-extract será llamado después
+ de las acciones de extracción regulares, y el script
+ pre-build será ejecutado antes que las
+ reglas por defecto de compilación. Es recomendable que uses
+ objetos de Makefile en caso de que las acciones
+ a realizar sean suficientemente simples, ya que así
+ resultará mucho más sencillo saber que tipo de acciones
+ no regulares requiere el port.
+
+ Las acciones por defecto son ejecutadas por los objetos
+ do-something del
+ fichero bsd.port.mk. Por ejemplo, los mandatos
+ para extraer un port están en el objeto
+ do-extract. Si necesitas algo no incluido
+ en el objeto por defecto, puedes solucionarlo redefiniendo el objeto
+ do-something en
+ tu Makefile.
+
+
+ Los objetos “principales” (por ejemplo,
+ extract,
+ configure, etc.) no hacen nada más
+ que asegurar que se han completado todos los procesos y llamar a los
+ objetos o scripts reales, y no se espera que sean modificados. Si
+ quieres modificar la extracción, cambia el objeto
+ do-extract, pero nunca modifiques
+ el objeto extract!
+
+
+ Ahora que entiendes lo que pasa cuando un usuario teclea
+ make, déjanos explicarte los pasos
+ recomendados para crear el port perfecto.
+
+
+
+ Obteniendo los fuentes originales
+
+ Obtén los fuentes originales (normalmente) en un
+ archivo comprimido
+ (foo.tar.gz o
+ foo.tar.Z) y copialo
+ en el directorio DISTDIR. Usa siempre dónde
+ y cuando puedas los fuentes procedentes del servidor
+ principal de la distribución.
+
+ Si no puedes encontrar un servidor ftp/http con una buena
+ conexión a Internet, o sólo encuentras servidores
+ que tienen los fuentes en irritantes formatos no estándar,
+ puedes poner una copia funcional del archivo en un servidor ftp
+ o http bajo tu control (tu página personal, por ejemplo).
+ Asegúrate de usar el valor correcto en la variable
+ MASTER_SITES para que refleje tu elección.
+
+
+ Si no puedes encontrar ningún lugar en el que poner
+ el fichero de distribución (si eres committer de FreeBSD,
+ puedes ponerlo en el directorio public_html/
+ del servidor freefall), nosotros podemos
+ albergarlo en
+ ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/
+ como último recurso. Por favor, usa la variable
+ MASTER_SITE_LOCAL para referirte a este servidor y
+ subdirectorio. Envía un mail a &a.ports; si no estás
+ seguro de qué hacer.
+
+ Si tu archivo de distribución cambia continuamente sin
+ una buena razón, considera poner el archivo en tu página
+ personal y listarlo como el primer MASTER_SITES.
+ Esto evitará que los usuarios obtengan errores del tipo
+ checksum mismatch, y también
+ reducirá la carga de trabajo de las personas que hacen el
+ mantenimiento de nuestro servidor FTP. De la misma manera, si existe un
+ solo servidor como distribuidor principal del programa, es
+ recomendable que albergues una copia de la distribución en
+ tu servidor y lo listes como segundo
+ MASTER_SITES.
+
+ Si tu port requiere algunos parches adicionales que están
+ disponibles en Internet, bájalos y ponlos en
+ DISTDIR. No te preocupes si provienen de un
+ lugar diferente del que obtuviste el tarball principal, tenemos una
+ manera de solucionar este problema (consulta la descripción de
+ PATCHFILES).
+
+
+
+ Modificando el port
+
+ Descomprime una copia del tarball en un directorio privado y
+ haz todos los cambios necesarios para que el port compile en la
+ versión actual de FreeBSD. Mantén una lista
+ completa de todas las modificaciones que realizas para
+ poder automatizar el proceso. Todo, incluyendo borrar, añadir
+ o modificar ficheros debe poder hacerse de manera automática
+ usando un script o parche.
+
+ Si tu port requiere una importante interacción o
+ personalización para compilar o instalar, puedes mirar la
+ clásica aplicación Configure
+ de Larry Wall y hacer algo así tu mismo. El objetivo de la
+ nueva colección de ports es hacer que cada port sea tan
+ “plug-and-play” como sea posible para el usuario final,
+ usando el mínimo espacio en disco posible.
+
+
+ Aunque no se haya mencionado explícitamente, los
+ parches, scripts y otros archivos que hayas creado o contribuido
+ a la colección de ports de FreeBSD están cubiertos
+ por las condiciones estándar del copyright BSD.
+
+
+
+
+ Parcheando
+
+ En la preparación del port, los archivos que han sido
+ añdidos o modificados pueden recorrerse con un diff recursivo.
+ Cada serie de parches que quieras aplicar deben estar integrados en un
+ archivo llamado
+ patch-xx donde
+ xx marca la secuencia en que los parches
+ serán aplicados — éstos se aplican en
+ órden alfabético, así
+ primero será aa, segundo
+ ab ,etc. Estos archivos deben estar en
+ PATCHDIR, desde donde serán
+ automáticamente aplicados. Todos los parches deben ser relativos
+ a WRKSRC (generalmente es el directorio en el que
+ se descomprime el port, siendo éste el lugar donde se compila).
+ Para hacer que la solución de problemas y actualizaciones sea
+ más sencilla, deberís evitar tener más de un
+ parche aplicable a un mismo archivo (por ejemplo,
+ patch-aa y patch-ab
+ modificando ambos al archivo
+ WRKSRC/foobar.c).
+
+
+
+ Configurando
+
+ Incluye cualquier proceso de personalización adicional
+ en el script configure y guardalo en el
+ subdirectorio scripts. Como se ha mencionado
+ anteriormente, también puedes hacer esto como un objeto del
+ Makefile y/o un script con el nombre
+ pre-configure o
+ post-configure.
+
+
+
+ Gestionando las entradas de usuario
+
+ Si tu port requiere entradas por parte del usuario para la
+ compilación, configuración o instalación,
+ activa la variable IS_INTERACTIVE en tu
+ Makefile. Esto permitirá no compilar tu port si el usuario
+ usa la variable BATCH en su entorno (y si el usuario
+ activa la variable INTERACTIVE, entonces
+ sólo serán compilados los ports
+ que requieren interacción por parte del usuario).
+
+ También es recomendable desactivar el script interactivo
+ si un número razonable de respuestas por defecto son
+ aplicables al port (consultar la variable
+ PACKAGE_BUILDING). Esto nos permitirá
+ compilar el package para los CD-ROMs y ftp.
+
+
+
+
+ Configurando el Makefile
+
+ Configurar el Makefile es bastante sencillo, y de nuevo, te
+ sugerimos que consultes los ejemplos existentes antes de empezar.
+ También hay un
+ Makefile de ejemplo en este
+ handbook, así que, consultalo y, por favor, sigue el órden
+ de las variables y secciones del ejemplo para que tu port sea más
+ fácil de leer para otras personas.
+
+ Ahora, considera los siguientes problemas a medida que haces
+ el diseño de tu nuevo Makefile:
+
+
+ Los fuentes originales
+
+ Reside en DISTDIR como un tarball
+ estándar en formato gzip? Si es así puedes pasar al
+ siguiente paso. En caso contrario, deberías considerar la
+ posibilidad de sobreescribir alguna de las variables
+ EXTRACT_CMD,
+ EXTRACT_BEFORE_ARGS,
+ EXTRACT_AFTER_ARGS,
+ EXTRACT_SUFX, o DISTFILES,
+ dependiendo del formato del archivo de distribución del port.
+ (El caso más común es
+ EXTRACT_SUFX=.tar.Z, cuando el tarball está
+ comprimido con compress y no con gzip.)
+
+ En el peor de los casos, puedes crearte tu propio objeto
+ do-extract para sobreescribir el objeto
+ por defecto.
+
+
+
+ DISTNAME
+
+ El valor de DISTNAME debe ser el nombre
+ base del port. Las reglas por defecto esperan que la lista de archivos
+ de la distribución (DISTFILES) se llame
+ DISTNAMEEXTRACT_SUFX, el cual, si
+ es un tarball normal, seráa algo como
+ foozolix-1.0.tar.gz para usar el valor
+ DISTNAME=foozolix-1.0.
+
+ Las reglas por defecto también esperan extraer el
+ tarball en un subdirectorio llamado
+ work/DISTNAME, por ejemplo
+ work/foozolix-1.0/.
+
+ Todos estos valores pueden sobreescribirse; simplemente muestran
+ los valores más habituales. Para un port que requiera
+ múltiples archivos de distribución, simplemente usa
+ explícitamente DISTFILES. Si solo una parte
+ de los DISTFILES son archivos extraibles, entonces
+ usa EXTRACT_ONLY para referenciarlos, lo que
+ sobreescribirá la lista DISTFILES
+ cuando realice la extracción, y el resto de archivos se
+ dejarán en DISTDIR tal y como están
+ para su uso posterior.
+
+
+
+
+ PKGNAME
+
+ Si DISTNAME no sigue las normas de nombre para un package,
+ deberís asignar a la variable PKGNAME un valor
+ más correcto.
+
+
+
+ CATEGORIES
+
+ Cuando se crea un package, se incluye en el directorio
+ /usr/ports/packages/All creandose links desde uno
+ o más subdirectorios de /usr/ports/packages.
+ Los nombres de estos subdirectorios están especificados por la
+ variable CATEGORIES. Se utiliza para facilitar al
+ usuario la orientación dentro de la colección de ports y
+ packages. Por favor, consulta las categorías existentes y
+ elige las que sean aplicables a tu port.
+
+ Esta lista también determina en que lugar del árbol
+ de ports se importa el port. Si especificas más de una
+ categoría, se asume que los archivos del port estarán en
+ el subdirectorio con el nombre en la primera categoría.
+ Consulta la sección categorías para saber como
+ escoger la catergoría adecuada.
+
+ Si tu port pertenece realmente a una categorín
+ inexistente, puedes crear una nueva. En este caso, por favor,
+ envía un mail a &a.ports; para proponer una nueva
+ categoría.
+
+
+ No hay chequeo de error para los nombres de categorías.
+ make package creará un nuevo directorio
+ si tecleas mal el nombre de la categorí, así que
+ se cuidadoso!
+
+
+
+
+ MASTER_SITES
+
+ Guarda la parte del directorio del URL -ftp/hhtp que apunta al
+ tarball original en MASTER_SITES. No olvidar la
+ barra final (/)!
+
+ Las macros make intentaran usar esta
+ especificación para obtener el archivo de distribución
+ con FETCH si no lo pueden encontrar en el sistema.
+
+ Se recomienda poner diferentes servidores en la lista, preferiblemente
+ de continentes diferentes. Esto protegerá de posibles problemas de red
+ en grandes áreas, y se está pensando en la posibilidad de
+ añadir soporte para determinar automáticamente el servidor
+ principal más cercano para obtener el archivo desde él.
+
+ Si el tarball original forma parte de uno de estos servidores populares:
+ X-contrib, GNU, Perl CPAN, TeX CTAN o Linux Sunsite, se debe hacer referencia
+ a estos servidores usando
+ MASTER_SITE_XCONTRIB,
+ MASTER_SITE_GNU,
+ MASTER_SITE_PERL_CPAN,
+ MASTER_SITE_TEX_CTAN, y
+ MASTER_SITE_SUNSITE. Simplemente poner
+ MASTER_SITE_SUBDIR al path interno del servidor. Aquí
+ hay un ejemplo:
+
+
+MASTER_SITES= ${MASTER_SITE_XCONTRIB}
+MASTER_SITE_SUBDIR= applications
+
+
+ El usuario también puede usar las variables
+ MASTER_SITE_* en el archivo /etc/make.conf
+ para sobreescribir nuestras selecciones, y usar en su lugar el mirror que
+ prefiera de estos servidores.
+
+
+
+ PATCHFILES
+
+ Si el port requiere parches adicionales que están disponibles
+ por ftp o http, poner PATCHFILES a los nombres de archivos
+ y PATCH_SITES a la URL del directorio que los contiene
+ (el formato es el mismo que en MASTER_SITES).
+
+ Si el parche no es relativo a la raíz del árbol
+ (WKRSRC) porque contiene alguna información extra
+ sobre paths, usar la variable PATCH_DIST_STRIP. Por ejemplo,
+ si todos los path del parche contienen foozolix-1.0/
+ delante del nombre de archivo, usar PATCH_DIST_STRIP=-p1.
+
+ No preocuparse si los parches están comprimidos, serán
+ descomprimidos automáticamente si el nombre de archivo termina en
+ .gz o .Z.
+
+ Si el parche se distribuye con otros archivos, como documentación, en
+ un tarball gzip, no se puede usar PATCHFILES. Si este es el caso,
+ añadir el nombre y situación del tarball a DISTFILES
+ y MASTER_SITES. A continuación, desde el objeto
+ pre-patch, aplicar el parche ejecutando mandato
+ patch desde él, el copiando al archivo del parche en
+ el directorio PATCHDIR llamandolo
+ patch-xx.
+
+
+ Tener en cuenta que el tarball será extraido del fuente regular,
+ por lo que no es necesario extraerlo explícitamente si es un tarball
+ comprimido con gzip o compress. Si se hace lo último, tener cuidado de
+ no sobreescribir algo ya existente en ese directorio. No olvidarse de añadir
+ un mandato para borrar el parche copiado en el objeto
+ pre-clean
+
+
+
+
+ MAINTAINER
+
+ Poner aquí la dirección de mail. Por favor. :)
+
+ Para una descripción detallada de la responsabilidad de los
+ "maintainers", consultar la sección
+ MAINTAINER en Makefiles.
+
+
+
+ Dependencias
+
+ Muchos ports dependen de otros. Hay cinco variables que se pueden usar para
+ asegurar que existen todos los requerimientos necesarios en la máquina
+ del usuario. También hay algunas variables de dependencia pre-soportadas
+ para casos comunes, mas algunos controles de dependencia.
+
+
+ LIB_DEPENDS
+
+ Esta variable especifica las librerías compartidas de las que
+ depende el port. Es una lista de registros de
+ lib:dir:target
+ donde lib es el nombre de la librerí
+ compartida, y dir es el directorio en el cual encontrarla
+ en caso de no estar disponible y target es el objeto a
+ llamar en ese directorio. Por ejemplo,
+ LIB_DEPENDS=jpeg.9:${PORTSDIR}/graphics/jpeg:install
+ comprobará la existencia de la librería jpeg versión 9,
+ descendiendo al subdirectorio graphics/jpeg de la colección
+ de ports para compilarlo e instalarlo en caso de que no sea encontrado en el
+ sistema. El objeto target puede omitirse si es igual a
+ DEPENDS_TARGET (el cual, por defecto, tiene el valor
+ install).
+
+
+ La parte lib es un argumento dado a
+ ldconfig -r | grep -wF. Es posible que no existan
+ expresiones regulares en esta variable.
+
+
+ La dependencia se comprueba dos veces, una durante la ejecución de
+ extract y otra durante la ejecución de
+ install. También, se incluye el nombre de la
+ dependencia en el package, de manera que pkg_add
+ la instale automáticamente si no está en el sistema del usuario.
+
+
+
+ RUN_DEPENDS
+
+ Esta variable especifica ejecutables o archivos de los que depende la
+ compilació y/o ejecución de este port. Es una lista de tuples
+ path:dir:target
+ donde path es el nombre del ejecutable o archivo,
+ dir es el directorio en el que encontrarlo en caso
+ de no estar disponible y target es el objeto a llamar
+ en ese directorio. Si path empieza con una barra
+ (/), se trata como un archivo comprobando su existencia con
+ test -e; en caso contrario, se asume que es un ejecutable, y
+ se usa which -s para determinar si el programa existe en el
+ path del usuario.
+
+ Por ejemplo,
+
+
+RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
+ wish8.0:${PORTSDIR}/x11-toolkits/tk80
+
+ comprobará si existe el directorio o archivo
+ /usr/local/etc/innd, compilando e instalandolo desde
+ el directorio news/inn del árbol de ports en
+ caso de no existir. También se comprueba la existencia del
+ ejecutable wish8.0 en el path, descendiendo al subdirectorio
+ x11-toolkits/tk80 de los ports para compilarlo e
+ instalarlo si no existe.
+
+
+ En este caso, innd es un ejecutable; si un ejecutable
+ está situado en un lugar diferente al esperado (fuera del path), es
+ necesario incluir el path completo.
+
+
+ La dependencia se comprueba desde el objeto install.
+ El nombre de la dependencia también es incluido en el package para que
+ pkg_add lo instale automáticamente si no existe en el
+ sistema del usuario. La parte target puede omitirse si
+ es el mismo DEPENDS_TARGET.
+
+
+
+ BUILD_DEPENDS
+
+ Esta variable especifica los ejecutables o archivos que este port necesita
+ para compilar. Igual que RUN_DEPENDS, es una lista de tuples
+ path:dir:target.
+ Por ejemplo, BUILD_DEPENDS=
+ unzip:${PORTSDIR}/archivers/unzip comprobará la existencia de
+ un ejecutable llamado unzip, descendiendo al subdirectorio
+ archivers/unzip en caso de no existir, para compilarlo e
+ instalarlo.
+
+
+ Compilación en este caso, se refiere a todo el proceso; desde la
+ extracción hasta la compilación final. La dependencia se comprueba
+ en el objeto extract. La parte
+ target puede omitirse si la misma que
+ DEPENDS_TARGET
+
+
+
+
+ FETCH_DEPENDS
+
+ Esta variable especifica ejecutables o archivos que se requieren para obtener
+ este port. Como los dos anteriores, es una lista de tuples
+ path:dir:target.
+ Por ejemplo, FETCH_DEPENDS=
+ ncftp2:${PORTSDIR}/net/ncftp2 comprobará la existencia de un
+ ejecutable llamado ncftp2, descendiendo al subdirectorio
+ net/ncftp2 de los ports para compilarlo e instalarlo en caso de
+ no existir.
+
+ La dependencia es comprobada en el objeto fetch.
+ La parte target puede omitirse si es la misma que
+ DEPENDS_TARGET.
+
+
+
+ DEPENDS
+
+ Si hay una dependencia que no se puede incluir en las cuatro categorías
+ anteriores, o el port necesita tener extraidos los fuentes de otro port para poder
+ ser instalado, usar esta variable. Esta es una lista compuesta de
+ dir:target,
+ ya que no no hay nada que comprobar, al contrario que las cuatro anteriores. La parte
+ target puede omitirse si es la misma que
+ DEPENDS_TARGET.
+
+
+
+ Variables de dependencia comunes
+
+ Definir USE_XLIB=yes si el port requiere la instalación
+ del sistema X Window (implícito en USE_IMAKE). Definir
+ USE_GMAKE=yes si el port requiere el make de
+ GNU en lugar del make de BSD. Definir USE_AUTOCONF=yes
+ si el port requiere la ejecución del autoconf de GNU. Definir
+ USE_QT=yes si el port usa el último kit qt. Usar
+ USE_PERL5=yes si el port requiere la versión 5 del
+ lenguaje perl. (Este último es especialmente importante ya que unas versiones
+ de FreeBSD contienen perl5 como parte del sistema y otras no.)
+
+
+
+ Notas sobre dependencias
+
+ Cómo se ha mencionado anteriormente, el objeto por defecto a llamar cuando
+ se require una dependencia es DEPENDS_TARGET. Por defecto es
+ install. Esta es una variable de usuario; nunca se define en los
+ Makefile de los ports. Si un port necesita gestionar las
+ dependencias de manera especial, usar la parte :target de las
+ variables *_DEPENDS en lugar de redefinir
+ DEPENDS_TARGET.
+
+ Cuando se ejecuta make clean, sus dependencias también
+ son "limpiadas". Si se quiere evitar esto, hay que definir la variable
+ NOCLEANDEPENDS en el entorno.
+
+ Para depender incondicionalmente de un port, es imprescindible usar la cadena de
+ texto nonexistent como primer campo de
+ BUILD_DEPENDS o RUN_DEPENDS. Usar esto sólo
+ cuando es necesario disponer del código fuente de otro port. Se puede ahorrar
+ tiempo de compilación especificando el objeto. Por ejemplo:
+
+
+BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract
+
+ siempre descenderá al port JPEG y lo extraerá.
+
+ No usar DEPENDS a no ser que no exista otra manera de obtener
+ los resultados deseados. Hará que el otro port siempre sea compilado (e
+ instalado, por defecto), y la dependencia sea añadia al package. Si esto es lo
+ que realmente se necesita, es recomendable usar BUILD_DEPENDS
+ y RUN_DEPENDS.
+
+
+
+
+ Mecanismos de creación
+
+ Si el package usa GNU make, definir
+ USE_GMAKE=yes. Si el package usa configure,
+ definir HAS_CONFIGURE=yes. Si el package usa GNU
+ configure, definir GNU_CONFIGURE=yes (esto
+ implica HAS_CONFIGURE). Si se quieren pasar argumentos extra a
+ configure (el argumento por defecto es
+ --prefix=${PREFIX} para GNU
+ configure y vacío para no GNU
+ configure), definir los argumentos extra en
+ CONFIGURE_ARGS. Si el package usa GNU
+ autoconf, definir USE_AUTOCONF=yes. Esto
+ implica GNU_CONFIGURE, y causará la ejecución de
+ autoconf antes que configure.
+
+ Si el package es una aplicación X que crea archivos
+ Makefiles desde Imakefiles
+ usando imake, definir USE_IMAKE=yes. Esto
+ hará que durante el proceso de configuración se ejecute el
+ mandato xmkmf -a. Si el argumento es
+ problemático para el port, definir XMKMF=xmkmf. Si el
+ port usa el mandato imake pero no entiende el objeto
+ install.man, definir
+ NO_INSTALL_MANPAGES=yes.
+
+ Si el código fuente incluido en el Makefile del
+ port tiene algo más que el objeto all como
+ objeto principal de creación, definir ALL_TARGET
+ correctamente. Hacer lo mismo con install y
+ INSTALL_TARGET.
+
+
+
+
+ Consideraciones especiales
+
+ Hay más cosas a tener en cuenta a la hora de crear un port. Esta
+ sección explica las más comunes.
+
+
+ ldconfig
+
+ Si el port instala una librería compartida, añadir un objeto
+ post-install al Makefile para
+ que ejecute ${LDCONFIG} -m en el directorio donde
+ se ha instalado la nueva librería (normalmente
+ PREFIX/lib) para registrarla en el
+ caché de librerías compartido.
+
+ También, añadir un par
+ @exec /sbin/ldconfig -m y
+ @unexec /sbin/ldconfig -R al archivo pkg/PLIST
+ para que el usuario que ha instalado el port pueda usar la librería compartida
+ inmediatamente. Estas líneas deben estar inmediatamente después de la
+ línea de la propia librería compartida, como en:
+
+
+lib/libtvl80.so.1
+@exec /sbin/ldconfig -m %D/lib
+@unexec /sbin/ldconfig -R
+
+ Nunca, nunca, nunca añadir una línea
+ que ponga ldconfig sin argumentos en el
+ Makefile o pkg/PLIST. Esto hará
+ que el caché de librerías compartidas se resetee sólo con
+ los contenidos de /usr/lib, probablemente, dejando el sistema
+ inestable ("Ayuda, xinit no ha vuelto a funcionar desde que instalé este
+ port"). Cualquiera que haga esto, será troceado en 65.536 partes con un
+ cuchillo poco afilado, permaneciendo por toda la eterniadad en lo más
+ profundo del infierno (y no necesariamente en este órden)
+
+
+
+
+ Soporte ELF
+
+ Desde la transición de FreeBSD a formato ELF después de la
+ version 3.0-RELEASE, fue necesario convertir muchos ports para que generasen
+ librerías compartidas en formato ELF. Para complicar más el
+ trabajo, los sistemas 3.0 pueden ejecutar ELF y a.out, y se quiere mantener,
+ etraoficialmente, tanto como sea posible, el soporte para versiones 2.2. A
+ continuación se explica como convertir ports que sólo soportan
+ a.out para que soporten compilaciones a.out y ELF.
+
+ Una parte de esta lista sólo es aplicable durante la conversión,
+ pero se mantendrá durante un tiempo como referencia en caso de querer
+ actualizar algún port antiguo.
+
+
+ Mover las librerías a.out
+
+ Las librerías a.out deben moverse de /usr/local/lib
+ y similares a un subdirectorio aout. (Si no se mueven, los
+ ports ELF sobreescribirán las librerías a.out). El objeto
+ move-aout-libs del archivo
+ src/Makefile en 3.0-CURRENT (llamado desde
+ aout-to-elf) hará este paso en nuestro lugar.
+ Sólo moverá las librerías a.out en los directorios
+ estándar.
+
+
+
+ Formato
+
+ La colección de ports compilará los packages en el mismo
+ formato en el que esté la máquina. Esto significa a.out para
+ 2.2 y a.out o ELF para 3.0 dependiendo de lo que devuelva la variable
+ `objformat`. De la misma manera, una vez se mueven las
+ librerías a un subdirectorio, ya no será posible compilar
+ librerías a.out.
+
+
+ Si un port sólo funciona para a.out, definir
+ BROKEN_ELF. Estos ports serán pasados por alto
+ durante la compilación en sistemas ELF.
+
+
+
+
+ PORTOBJFORMAT
+
+ bsd.port.mk definirá
+ PORTOBJFORMAT a aout o
+ elf y lo exportará en las variables de
+ entorno CONFIGURE_ENV, SCRIPTS_ENV y
+ MAKE_ENV. (Siempre será
+ aout en 2.2-STABLE). También se pasa a
+ PLIST_SUB como
+ PORTOBJFORMAT=${PORTOBJFORMAT}. (Consultar los comentarios
+ sobre ldconfig de las líneas anteriores).
+
+ La variable se defina usando esta línea en
+ bsd.port.mk:
+
+
+PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aout
+
+ Los procesos de compilación de los ports deberían usar esta
+ variable para decidir que hacer. De todas maneras, si el script
+ configure del port detecta automáticamente un sistema
+ ELF, no es necesario hacer referencia a PORTOBJFORMAT.
+
+
+
+
+
+
+
+ pkgname
+ a
+
+
+
+ pkgname
+ a
+
+
+
+ pkgname
+ a
+
+
+
+ pkgname
+ a
+
+
+
+ pkgname
+ a
+
+
+
+ pkgname
+ a
+
+
+
+
+
diff --git a/es_ES.ISO8859-1/books/handbook/quotas/chapter.sgml b/es_ES.ISO8859-1/books/handbook/quotas/chapter.sgml
new file mode 100755
index 0000000000..663003ebee
--- /dev/null
+++ b/es_ES.ISO8859-1/books/handbook/quotas/chapter.sgml
@@ -0,0 +1,243 @@
+
+
+
+ Cuotas de disco
+
+ Contribuido por &a.mpp;. 26 Febrero
+ 1996
+
+ Las cuotas constituyen una prestación del sistema operativo que
+ le permite limitar la cantidad de espacio en disco y/o el número de
+ archivos de que un usuario puede disponer en un determinado sistema de archivos.
+ Habitualmente se utiliza en sistemas multiusuario en los que resulta deseable
+ limitar la cantidad de recursos de que puede disponer cada usuario o grupo de
+ usuarios. De este modo se impide que un usuario agote todo el espacio disponible
+ en un disco.
+
+
+ Configurando su sistema para habilitar las cuotas de disco
+
+ Antes de intentar usar las cuotas de disco es necesario asegurarse de que
+ se encuentran habilitadas en el núcleo del sistema operativo. Esto se
+ consigue añadiendo la siguiente línea al archivo de configuración
+ del núcleo:
+
+
+options QUOTA
+
+ El núcleo que se incluye de serie (GENERIC) no
+ tiene esta función activada por defecto, por lo que tendrá que
+ configurar, crear e instalar un núcleo a medida para utilizar las cuotas
+ de disco. Puede acudir a la sección Configurando
+ el núcleo de FreeBSD, donde encontrará más información
+ acerca de la configuración del núcleo.
+
+ A continuación, necesitará habilitar las cuotas de disco en
+ /etc/sysconfig. Esto se hace cambiando la línea:
+
+
+quotas=NO
+
+ por:
+
+
+quotas=YES
+
+ Si está utilizando FreeBSD 2.2.2 o posterior, el archivo de
+ configuración será /etc/rc.conf y el nombre de
+ la variable habrá cambiado a:
+
+
+check_quotas=YES
+
+ Finalmente, necesitará editar /etc/fstab para
+ habilitar las cuotas de disco de forma individualizada para cada sistema de archivos.
+ Es aquí donde puede habilitar cuotas para usuarios, grupos o ambos y para
+ todos sus sistemas de archivos.
+
+ Para habilitar las cuotas de disco para un determinado usuario en un sistema
+ de archivos, añada la opción userquota en el archivo
+ /etc/fstab, en el campo de opciones del registro correspondiente
+ al sistema de archivos para el cual quiere habilitar las cuotas. Por ejemplo:
+
+
+/dev/da1s2g /home ufs rw,userquota 1 2
+
+ Análogamente, para habilitar las cuotas para grupos emplee la opción
+ groupquota en lugar de userquota. Para
+ habilitar ambas, cuotas de usuario y de grupo, cambie el registro del siguiente modo:
+
+
+
+/dev/da1s2g /home ufs rw,userquota,groupquota 1 2
+
+ Por defecto, los archivos relacionados con las cuotas se almacenan en el
+ directorio raíz del sistema de archivos con los nombres
+ quota.user y quota.group, para las cuotas
+ de usuarios y de grupos, respectivamente. Consulte man fstab para
+ más información. Aunque esa página man afirma que se puede
+ especificar un emplazamiento alternativo para los archivos relacionados con las
+ cuotas, esto no es recomendable ya que las diversas utilidades de las cuotas no
+ parecen adaptarse convenientemente a este cambio.
+
+ En este momento debería reiniciar su sistema con el nuevo núcleo.
+ /etc/rc ejecutará automáticamente los comandos
+ apropiados para crear los archivos iniciales de las cuotas para todas las cuotas que
+ haya activado en /etc/fstab, por lo que no hace falta crear
+ manualmente ningún archivo de cuotas de logitud cero.
+
+ Durante el funcionamiento normal del sistema, no debería ser necesario ejecutar
+ manualmente los comandos quotacheck, quotaon,
+ o quotaoff. Sin embargo, puede interesarle leer sus páginas
+ man para familiarizarse con su funcionamiento.
+
+
+
+ Fijando los límites de las cuotas
+
+ Una vez haya configurado su sistema para habilitar las cuotas, compruebe que
+ realmente han sido habilitadas. Una forma de hacerlo fácilmente es ejecutar
+
+ &prompt.root; quota -v
+
+ Debería aparecer una línea describiendo la utilización de
+ los discos y los límites actuales de cuotas para cada sistema de archivos en
+ el que estén activadas las cuotas.
+
+ Ya está listo para comenzar a asignar límites de cuota con el
+ mandato edquota.
+
+ Tiene varias opciones acerca de cómo aplicar límites a la cantidad
+ de espacio en disco de que un usuario o grupo puede disponer y la cantidad de archivos
+ que pueden crear. Puede limitar la cantidad de disco utilizada en función del
+ espacio físico usado (cuotas de bloque), en función de los archivos
+ (cuotas de inode) o en función de una combinación de ambos. Cada uno de
+ estos límites se divide en dos categorías: límites flexibles y
+ rígidos.
+
+ Los límites rígidos no pueden ser sobrepasados. Cuando un usuario
+ alcanza su límite rígido, ya no puede disponer de más espacio en
+ el sistema de archivos en cuestión. Por ejemplo, si el usuario tiene un
+ límite rígido de 500 bloques en un determinado sistema de archivos y
+ ya está utilizando 490 bloques, el usuario sólo puede asignar 10 bloques
+ adicionales. Cualquier intento de asignar 11 bloques fracasará.
+
+ Por otra parte, los límites flexibles pueden ser sobrepasados por un
+ periodo de tiempo limitado. Este periodo de tiempo se conoce como el periodo de gracia,
+ que dura una semana por defecto. Si un usuario permanece por encima de su límite
+ flexible más allá del periodo de gracia, el límite flexible se
+ convertirá en un límite rígido y no se permitirá realizar
+ nuevas asignaciones. Cuando el usuario se vuelva a situar por debajo del límite
+ flexible, el periodo de gracia se reiniciará.
+
+ A continuación se muestra un ejemplo de lo que podrá ver cuando
+ ejecute el comando edquota. Cuando se invoca el comando
+ edquota, se inicia el editor espeficado en la variable de entorno
+ EDITOR, o el editor vi en caso de que la variable
+ EDITOR no se encuentre definida, permitiéndole editar los
+ límites de las cuotas de disco.
+
+ &prompt.root; edquota -u test
+
+
+Quotas for user test:
+/usr: blocks in use: 65, limits (soft = 50, hard = 75)
+ inodes in use: 7, limits (soft = 50, hard = 60)
+/usr/var: blocks in use: 0, limits (soft = 50, hard = 75)
+ inodes in use: 0, limits (soft = 50, hard = 60)
+
+ Normalmente verá dos líneas por cada sistema de archivos que
+ tenga activadas las cuotas de disco. Una línea para los límites de
+ bloques y otra para los límites de inodes. Para modificar los límites
+ de las cuotas, simplemente cambie el valor que quiere actualizar. Por ejemplo, para
+ elevar el límite de bloques de este usuario de un límite flexible de
+ 50 y un límite rígido de 75 a un límite flexible de 500 y a un
+ límite rígido de 600, cambie:
+
+ /usr: blocks in use: 65, limits (soft = 50, hard = 75)
+ por: /usr: blocks in use: 65, limits (soft = 500, hard = 600)
+
+
+ Los nuevos límites estarán vigentes cuando salga del editor.
+
+ En ocasiones resulta deseable imponer límites en las cuotas de disco
+ a un intervalo de UIDs (número de identificación de usuario). Esto
+ se puede hacer empleando la opción del comando
+ edquota. En primer lugar, asigne el límite deseado al
+ usuario y luego ejecute edquota -p protouser UID_inicial-UID_final.
+ Por ejemplo, si el usuario test está sujeto a límites
+ en la cuota de disco, el siguiente comando puede ser empleado para duplicar esos
+ límites para los UIDs comprendidos entre 10000 y 19999:
+
+ &prompt.root; edquota -p test 10000-19999
+
+ La capacidad de especificar intervalos de UIDs se añadió al
+ sistema después de que la versión 2.1 fuese distribuida. Si necesita
+ esta función en un sistema 2.1, deberá conseguir una copia más
+ reciente de edquota.
+
+ Consulte man edquota, donde encontrará información
+ más detallada.
+
+
+
+ Comprobando los límites en las cuotas y la utilización de
+ los discos
+
+ Puede utilizar el comando quota, o bien el comando
+ repquota para comprobar los límites en las cuotas y la
+ utilización de los discos. El comando quota puede ser
+ empleado para comprobar cuotas individuales y de grupo, así como la
+ utilización de los discos. Sólo el administrador del sistema puede
+ examinar las cuotas y la utilización de los discos por otros usuarios o por
+ grupos de los que no es miembro. El comando repquota puede ser
+ empleado para obtener un resumen de todas las cuotas y la utilización de los
+ discos para sistemas de archivos que tengan las cuotas habilitadas.
+
+ A continuación se muestra un ejemplo de la salida del comando
+ quota -v para un usuario que está sujeto a límites
+ en la cuota de disco en dos sistemas de archivos.
+
+
+
+Disk quotas for user test (uid 1002):
+ Filesystem blocks quota limit grace files quota limit grace
+ /usr 65* 50 75 5days 7 50 60
+ /usr/var 0 50 75 0 50 60
+
+ En el ejemplo anterior, en el sistema de archivos /usr el
+ usuario ya ha sobrepasado en 15 bloques su límite flexible (fijado en 50 bloques)
+ y aún dispone de 5 días del periodo de gracia. Observe la presencia de un
+ asterisco *, lo cual indica que el usuario ha sobrepasado su
+ límite en la cuota de disco.
+
+ Normalmente, aquellos sistemas de archivos en los que el usuario no esté
+ utilizando espacio no figurarán en la salida del comando quota,
+ aunque el usuario tenga asignado un límite en la cuota de disco para esos
+ sistemas de archivos. La opción mostrará esos
+ sistemas de archivos, como ha sucedido con /usr/var en el ejemplo
+ anterior.
+
+
+
+ * Cuotas a través de NFS
+
+ Esta sección se encuentra en desarrollo.
+
+
+
+
+
diff --git a/es_ES.ISO8859-1/books/handbook/staff/chapter.sgml b/es_ES.ISO8859-1/books/handbook/staff/chapter.sgml
new file mode 100755
index 0000000000..ef959663eb
--- /dev/null
+++ b/es_ES.ISO8859-1/books/handbook/staff/chapter.sgml
@@ -0,0 +1,802 @@
+
+
+
+
+ Staff del Proyecto FreeBSD
+
+ El Proyecto FreeBSD está gestionado y operado por los
+ siguientes grupos de personas:
+
+
+
+ El Core Team de FreeBSD
+
+ El core team de FreeBSD constituye el “Grupo de
+ directores”, responsable de decidir el camino a seguir y
+ mantener al proyecto en la dirección correcta, así
+ cómo gestionar áreas
+ específicas del proyecto.
+
+ (por órden alfabético de apellido):
+
+
+
+
+
+ &a.asami;
+
+
+
+ &a.jmb;
+
+
+
+ &a.ache;
+
+
+
+ &a.bde;
+
+
+
+ &a.gibbs;
+
+
+
+ &a.dg;
+
+
+
+ &a.jkh;
+
+
+
+ &a.phk;
+
+
+
+ &a.rich;
+
+
+
+ &a.gpalmer;
+
+
+
+ &a.jdp;
+
+
+
+ &a.guido;
+
+
+
+ &a.sos;
+
+
+
+ &a.peter;
+
+
+
+ &a.wollman;
+
+
+
+ &a.joerg;
+
+
+
+
+
+
+
+
+ Los desarrolladores de FreeBSD
+
+ Estas son las personas que tienen privilegios de committes y
+ hacen el trabajo de ingeniería en el árbol de
+ código fuente de FreeBSD. Todos los miembros del core team
+ también son desarrolladores.
+
+
+
+
+ &a.ugen;
+
+
+
+ &a.mbarkah;
+
+
+
+ &a.stb;
+
+
+
+ &a.pb;
+
+
+
+ &a.abial;
+
+
+
+ &a.jb;
+
+
+
+ &a.torstenb;
+
+
+
+ &a.dburr;
+
+
+
+ &a.charnier;
+
+
+
+ &a.luoqi;
+
+
+
+ &a.ejc;
+
+
+
+ &a.kjc;
+
+
+
+ &a.gclarkii;
+
+
+
+ &a.archie
+
+
+
+ &a.cracauer;
+
+
+
+ &a.adam;
+
+
+
+ &a.dillon;
+
+
+
+ &a.dufault;
+
+
+
+ &a.uhclem;
+
+
+
+ &a.tegge;
+
+
+
+ &a.eivind;
+
+
+
+ &a.julian;
+
+
+
+ &a.rse;
+
+
+
+ &a.se;
+
+
+
+ &a.sef;
+
+
+
+ &a.fenner;
+
+
+
+ &a.jfieber;
+
+
+
+ &a.jfitz;
+
+
+
+ &a.scrappy;
+
+
+
+ &a.lars;
+
+
+
+ &a.billf;
+
+
+
+ &a.tg;
+
+
+
+ &a.brandon;
+
+
+
+ &a.graichen;
+
+
+
+ &a.jgreco;
+
+
+
+ &a.rgrimes;
+
+
+
+ &a.jmg;
+
+
+
+ &a.hanai;
+
+
+
+ &a.thepish;
+
+
+
+ &a.jhay;
+
+
+
+ &a.helbig;
+
+
+
+ &a.ghelmer;
+
+
+
+ &a.erich;
+
+
+
+ &a.nhibma;
+
+
+
+ &a.flathill;
+
+
+
+ &a.hosokawa;
+
+
+
+ &a.hsu;
+
+
+
+ &a.mph;
+
+
+
+ &a.itojun;
+
+
+
+ &a.mjacob;
+
+
+
+ &a.gj;
+
+
+
+ &a.nsj;
+
+
+
+ &a.ljo;
+
+
+
+ &a.kato;
+
+
+
+ &a.andreas;
+
+
+
+ &a.motoyuki;
+
+
+
+ &a.jkoshy;
+
+
+
+ &a.kuriyama;
+
+
+
+ &a.grog;
+
+
+
+ &a.jlemon;
+
+
+
+ &a.truckman;
+
+
+
+ &a.imp;
+
+
+
+ &a.smace;
+
+
+
+ &a.mckay;
+
+
+
+ &a.mckusick;
+
+
+
+ &a.ken;
+
+
+
+ &a.tedm;
+
+
+
+ &a.amurai;
+
+
+
+ &a.markm;
+
+
+
+ &a.max;
+
+
+
+ &a.alex;
+
+
+
+ &a.rnordier;
+
+
+
+ &a.davidn;
+
+
+
+ &a.obrien;
+
+
+
+ &a.danny;
+
+
+
+ &a.ljo;
+
+
+
+ &a.fsmp;
+
+
+
+ &a.smpatel;
+
+
+
+ &a.wpaul;
+
+
+
+ &a.jmacd;
+
+
+
+ &a.wes;
+
+
+
+ &a.steve;
+
+
+
+ &a.mpp;
+
+
+
+ &a.dfr;
+
+
+
+ &a.jraynard;
+
+
+
+ &a.darrenr;
+
+
+
+ &a.csgr;
+
+
+
+ &a.martin;
+
+
+
+ &a.paul;
+
+
+
+ &a.roberto;
+
+
+
+ &a.chuckr;
+
+
+
+ &a.dima;
+
+
+
+ &a.sada;
+
+
+
+ &a.wosch;
+
+
+
+ &a.ats;
+
+
+
+ &a.jseger;
+
+
+
+ &a.vanilla;
+
+
+
+ &a.msmith;
+
+
+
+ &a.des;
+
+
+
+ &a.brian;
+
+
+
+ &a.stark;
+
+
+
+ &a.karl;
+
+
+
+ &a.dt;
+
+
+
+ &a.cwt;
+
+
+
+ &a.pst;
+
+
+
+ &a.hoek;
+
+
+
+ &a.nectar;
+
+
+
+ &a.swallace;
+
+
+
+ &a.dwhite;
+
+
+
+ &a.nate;
+
+
+
+ &a.yokota;
+
+
+
+ &a.jmz;
+
+
+
+ &a.archie;
+
+
+
+
+
+
+
+
+ El Proyecto de Documentación de FreeBSD
+
+ El Proyecto
+ de Documentación es responsable de diferentes
+ servicios, siendo ejecutado cada uno por un responsable y sus
+ ayudantes (si los tiene):
+
+
+
+ Responsable del Proyecto de Documentación
+
+
+ &a.nik;
+
+
+
+
+ Webmaster
+
+
+ &a.wosch;
+
+
+
+ Editor del Handbook & FAQ
+
+
+ &a.faq;
+
+
+
+
+ Editor de Noticias
+
+
+ &a.nsj;
+
+ Ayudante: &a.john;
+
+
+
+
+
+ Editor del FreeBSD Really-Quick NewsLetter
+
+
+ Chris Coleman chrisc@vmunix.com
+
+
+
+ Editor de la Galería y sección Comercial
+
+
+ &a.nsj;
+
+ Ayudante: &a.cawimm;
+
+
+
+
+ Style Police & Art Director
+
+
+ &a.opsys;
+
+
+
+ Ingeniero de las Bases de Datos
+
+
+ &a.mayo;
+
+
+
+ Ingeniero de CGI
+
+
+ &a.stb;
+
+
+
+ Bottle Washing
+
+
+ &a.nsj;
+
+
+
+
+ COnversión de LinuxDoc a DocBook
+
+
+ &a.nik;
+
+
+
+
+
+
+
+
+ Quién es responsable de qué
+
+
+
+ Arquitecto Principal
+
+ &a.dg;
+
+
+
+
+ Responsable del Proyecto de Documentación
+
+
+ &a.nik;
+
+
+
+
+ Internationalización
+
+
+ &a.ache;
+
+
+
+
+ Networking
+
+
+ &a.wollman;
+
+
+
+
+ Postmaster
+
+
+ &a.jmb;
+
+
+
+
+ Coordinador de Release
+
+
+ &a.jkh;
+
+
+
+
+ Relaciones Públicas & Corporativas
+
+
+ &a.jkh;
+
+
+
+
+ Responsable de Seguridad
+
+
+ &a.guido;
+
+
+
+
+ >Responsables del CVS
+
+
+ Principal: &a.peter;
+
+ Asistente: &a.jdp;
+
+ Internacional (Crypto): &a.markm;
+
+
+
+
+ Responsable de Ports
+
+
+ &a.asami;
+
+
+
+
+ XFree86 Project, Inc.
+
+
+ &a.rich;
+
+
+
+
+ Soporte Usenet
+
+
+ &a.joerg;
+
+
+
+
+ Administrador GNATS
+
+
+ &a.steve;
+
+
+
+
+
+ Webmaster
+
+ &a.wosch;
+
+
+
+
+
+
+
+
+
+
+
diff --git a/es_ES.ISO_8859-1/books/handbook/kerneldebug/chapter.sgml b/es_ES.ISO_8859-1/books/handbook/kerneldebug/chapter.sgml
new file mode 100644
index 0000000000..8c1f5e4181
--- /dev/null
+++ b/es_ES.ISO_8859-1/books/handbook/kerneldebug/chapter.sgml
@@ -0,0 +1,618 @@
+
+
+
+ Depurando el Kernel
+
+ Contribución de &a.paul; y &a.joerg;
+
+
+ Depuración de un Kernel Crash Dump con kgdb
+
+ Aquí se dan instrucciones para hacer funcionar la depuración del
+ kernel sobre un crash dump. En ellos se asume que usted tiene suficiente
+ espacio de swap para un crash dump. Si usted tiene varias particiones
+ de swap y la primera es demasiado pequeña para albergar un dump, puede
+ configurar su kernel para que use un dispositivo alternativo (en la línea
+ config kernel=, o puede especificar una alternativa
+ usando el comando &man.dumpon.8;. La mejor manera de usar &man.dumpon.8;
+ es asignar la variable dumpdev en
+ /etc/rc.conf. Generalmente usted va a querer
+ especificar uno de los dispositivos de swap especificados en
+ /etc/fstab. Actualmente no se soportan dumps a
+ dispositivos que no sean de swap, como por ejemplo una unidad de cinta.
+ Configure su kernel usando config -g. Vea Configuración del Kernel para más detalles
+ sobre la configuración del kernel FreeBSD.
+
+ Use el comando &man.dumpon.8; para decirle al kernel donde hacer
+ el dump (Tenga en cuenta que esto debera hacerse luego de configurar
+ la partición como dispositivo de swap usando &man.swapon.8;). Esto se
+ hace normalmente usando los archivos /etc/rc.conf
+ y /etc/rc. Como alternativa se puede fijar el
+ dispositivo usando la cláusula dump en la línea
+ config de su archivo de configuración del kernel.
+ Esta práctica esta en desuso y sólo debería ser usada para obtener
+ un dump de un kernel que falla durante el inicio.
+
+
+ En adelante, el término kgdb se referirá al
+ gdb corriendo en “kernel debug mode”.
+ Esto puede lograrse ya sea iniciando al gdb con
+ la opción , o enlazandolo y arrancandolo con el
+ nombre kgdb. Esto no se hace por default, y
+ la idea está basicamente en desuso ya que a la gente de GNU no le
+ gusta que sus herramientas se comporten distinto cuando se las llama
+ por otro nombre. Esta posibilidad podrá perfectamente ser descontinuada
+ en futuras versiones.
+
+
+ Una vez que el kernel ha sido compilado haga una copia, digamos
+ kernel.debug, y luego corra strip
+ -g sobre el original. Instale el original normalmente. Usted
+ tambien podría instalar el kernel sin hacer el strip,
+ pero los tiempos de busqueda de algunos programas en la tabla de
+ símbolos aumentarán sensiblemente, y dado que el kernel se carga completo
+ en memoria durante el inicio y no puede intercambiarse a disco luego,
+ se desperdiciarán varios megabytes de memoria.
+
+ Si usted esta probando un nuevo kernel, por ejemplo tipeando el
+ nombre del nuevo kernel en el prompt de inicio, pero necesita arrancar
+ otro para tener su sistema funcionando de nuevo, arranquelo solo en modo
+ monousuario usando la opción en el prompt de inicio
+ , y luego siga los siguientes pasos:
+
+ &prompt.root; fsck -p
+&prompt.root; mount -a -t ufs # asi su file system para /var/crash se puede escribir
+&prompt.root; savecore -N /kernel.panicked /var/crash
+&prompt.root; exit # ...a modo multiusuario
+
+ Esto instruye a &man.savecore.8; que use otro kernel para la
+ extracción de nombres de símbolo. De otro modo usaria el kernel en uso
+ y probablemente no haga nada ya que los símbolos del kernel y los del
+ dump son diferentes.
+
+ Ahora, luego de un crash dump, vaya a
+ /sys/compile/WHATEVER y corra
+ kgdb. desde kgdb haga:
+
+ symbol-file kernel.debug
+exec-file /var/crash/kernel.0
+core-file /var/crash/vmcore.0
+
+ y voila, ya puede depurar el crash dump usando las fuentes
+ del kernel como lo hace con cualquier otro programa.
+
+ A continuación se muestra el log de una sesión de
+ kgdb que ilustra el procedimiento. Las líneas
+ fueron numeradas para referencia, y las largas fueron cortadas para
+ mejorar la legibilidad. Mas alla de esto es el registro de un error real
+ tomado durante el desarrollo del driver pcvt de consola.
+
+ 1:Script started on Fri Dec 30 23:15:22 1994
+ 2:&prompt.root; cd /sys/compile/URIAH
+ 3:&prompt.root; kgdb kernel /var/crash/vmcore.1
+ 4:Reading symbol data from /usr/src/sys/compile/URIAH/kernel
+...done.
+ 5:IdlePTD 1f3000
+ 6:panic: because you said to!
+ 7:current pcb at 1e3f70
+ 8:Reading in symbols for ../../i386/i386/machdep.c...done.
+ 9:(kgdb)where
+10:#0 boot (arghowto=256) (../../i386/i386/machdep.c line 767)
+11:#1 0xf0115159 in panic ()
+12:#2 0xf01955bd in diediedie () (../../i386/i386/machdep.c line 698)
+13:#3 0xf010185e in db_fncall ()
+14:#4 0xf0101586 in db_command (-266509132, -266509516, -267381073)
+15:#5 0xf0101711 in db_command_loop ()
+16:#6 0xf01040a0 in db_trap ()
+17:#7 0xf0192976 in kdb_trap (12, 0, -272630436, -266743723)
+18:#8 0xf019d2eb in trap_fatal (...)
+19:#9 0xf019ce60 in trap_pfault (...)
+20:#10 0xf019cb2f in trap (...)
+21:#11 0xf01932a1 in exception:calltrap ()
+22:#12 0xf0191503 in cnopen (...)
+23:#13 0xf0132c34 in spec_open ()
+24:#14 0xf012d014 in vn_open ()
+25:#15 0xf012a183 in open ()
+26:#16 0xf019d4eb in syscall (...)
+27:(kgdb)up 10
+28:Reading in symbols for ../../i386/i386/trap.c...done.
+29:#10 0xf019cb2f in trap (frame={tf_es = -260440048, tf_ds = 16, tf_\
+30:edi = 3072, tf_esi = -266445372, tf_ebp = -272630356, tf_isp = -27\
+31:2630396, tf_ebx = -266427884, tf_edx = 12, tf_ecx = -266427884, tf\
+32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, tf_eip = -26\
+33:6672343, tf_cs = -266469368, tf_eflags = 66066, tf_esp = 3072, tf_\
+34:ss = -266427884}) (../../i386/i386/trap.c line 283)
+35:283 (void) trap_pfault(&frame, FALSE);
+36:(kgdb)frame frame->tf_ebp frame->tf_eip
+37:Reading in symbols for ../../i386/isa/pcvt/pcvt_drv.c...done.
+38:#0 0xf01ae729 in pcopen (dev=3072, flag=3, mode=8192, p=(struct p\
+39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c line 403)
+40:403 return ((*linesw[tp->t_line].l_open)(dev, tp));
+41:(kgdb)list
+42:398
+43:399 tp->t_state |= TS_CARR_ON;
+44:400 tp->t_cflag |= CLOCAL; /* cannot be a modem (:-) */
+45:401
+46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200)
+47:403 return ((*linesw[tp->t_line].l_open)(dev, tp));
+48:404 #else
+49:405 return ((*linesw[tp->t_line].l_open)(dev, tp, flag));
+50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */
+51:407 }
+52:(kgdb)print tp
+53:Reading in symbols for ../../i386/i386/cons.c...done.
+54:$1 = (struct tty *) 0x1bae
+55:(kgdb)print tp->t_line
+56:$2 = 1767990816
+57:(kgdb)up
+58:#1 0xf0191503 in cnopen (dev=0x00000000, flag=3, mode=8192, p=(st\
+59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c line 126)
+60: return ((*cdevsw[major(dev)].d_open)(dev, flag, mode, p));
+61:(kgdb)up
+62:#2 0xf0132c34 in spec_open ()
+63:(kgdb)up
+64:#3 0xf012d014 in vn_open ()
+65:(kgdb)up
+66:#4 0xf012a183 in open ()
+67:(kgdb)up
+68:#5 0xf019d4eb in syscall (frame={tf_es = 39, tf_ds = 39, tf_edi =\
+69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_isp = -272629788, tf\
+70:_ebx = 7086, tf_edx = 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \
+71:tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_eflags = 582, tf_esp \
+72:= -272638456, tf_ss = 39}) (../../i386/i386/trap.c line 673)
+73:673 error = (*callp->sy_call)(p, args, rval);
+74:(kgdb)up
+75:Initial frame selected; you cannot go up.
+76:(kgdb)quit
+77:&prompt.root; exit
+78:exit
+79:
+80:Script done on Fri Dec 30 23:18:04 1994
+ Comentarios al listado anterior:
+
+
+
+ línea 6:
+
+
+ Este es un dump tomado desde el DDB (vea abajo), a partir del
+ comentario del panic “because you said to!”, y un
+ listado de la pila bastante largo; la razón incial para entrar al
+ DDB fue un trap de falta de pagina.
+
+
+
+
+ línea 20:
+
+
+ Esta es la ubicación de la función trap()
+ en el listado de la pila.
+
+
+
+
+ línea 36:
+
+
+ Se fuerza el uso de un nuevo marco de pila; esto ya no es
+ necesario ahora. Actualmente se supone que los marcos de pila apuntan a
+ las ubicaciones correctas, aun en caso de un trap. (No tengo un
+ dump más nuevo a mano <g>, mi kernel no ha hecho un panic
+ desde hace bastante tiempo.) Mirando al código en la línea 403
+ del código fuente, hay una alta probabilidad de que la referencia
+ al puntero “tp” sea erronea, o el acceso al arreglo
+ estuviera fuera de sus límites.
+
+
+
+
+ línea 52:
+
+
+ El puntero se ve sospechoso, pero contiene una dirección
+ válida.
+
+
+
+
+ línea 56:
+
+
+ De todos modos, obviamente apunta a basura, asi que encontramos
+ nuestro error! (Para los que no esten familiarizados con esa pieza
+ de código en particular: tp->t_line hace
+ referencia a la disciplina de línea de este dispositivo de consola,
+ el cual debe ser un entero por demás pequeño)
+
+
+
+
+
+
+ Depurando un crash dump con DDD
+
+ Tambien es posible examinar un crash dump del kernel con un debugger
+ gráfico como ddd. Agregue la opción a la línea de comando del ddd que usaría
+ normalmente. Por ejemplo;
+
+ &prompt.root; ddd -k /var/crash/kernel.0 /var/crash/vmcore.0
+
+ De esta manera usted debería poder analizar el crash dump usando
+ la interfaz gráfica del ddd.
+
+
+
+ Analisis Post-mortem de un Dump
+
+ Que sucede si un kernel hace un dump de su memoria que usted
+ no esperaba, y por lo tanto no estaba compilado usando
+ config -g? No todo esta perdido aquí. Do not panic!
+
+
+ N.del T.: El autor hace un juego con la palabra panic! que
+ prefiero dejar sin traducir.
+
+
+ Por supuesto, aun necesita habilitar los crash dumps. Vea más arriba
+ las opciones que debe especificar para esto.
+
+ Vaya a su directorio de configuración del kernel
+ (/usr/src/sys/arq/conf)
+ y edite su archivo de configuración. Quite las marcas de comentario
+ (o agregue, si no existe) la siguiente línea
+
+
+makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols
+
+ Recompile el kernel. Algunos otros archivos seran recompilados,
+ por ejemplo trap.o, a causa del cambio de la fecha
+ del archivo Makefile. Con un poco de suerte, la opción no cambiará nada del código generado, al final usted tendra
+ un kernel con el mismo código que tiene problemas ahora pero con ciertos
+ símbolos para depuración. Por lo menos usted debería verificar el tamaño
+ anterior y el nuevo con el comando &man.size.1;. Si hay diferencia
+ probablemente sea el momento de darse por vencido.
+
+ Ahora puede examinar el dump como se describió anteriormente. Los
+ símbolos pueden estar incompletos para algunas partes, como se puede ver
+ en el listado de pila del ejemplo anterior donde algunas funciones
+ se muestran sin numeros de línea ni listas de argumentos. Si necesita
+ más símbolos borre los archivos objeto apropiados y repita la sesión de
+ kgdb hasta que haya averiguado lo suficiente.
+
+ No se garantiza que todo esto funcione, pero irá bastante bien la
+ en mayoría de los casos.
+
+
+
+ Depuración En-línea del Kernel Usando DDB
+
+ Si bien el kgdb provee un muy alto nivel de
+ interfaz de usuario como depurador post-mortem, hay cosas que no puede
+ hacer. Siendo las más importantes poder marcar puntos de interrupción
+ y ejecutar código del kernel paso a paso.
+
+ Si usted necesita hacer una depuración a bajo nivel de su kernel hay
+ disponible un debugger en-línea llamado DDB. Permite poner puntos de
+ interrupción, ejecutar paso a paso las funciones del kernel, examinar y
+ cambiar variables, etc. Sin embargo, no puede acceder al código fuente
+ del kernel y sólo tiene acceso a los símbolos globales y estáticos, no
+ a toda la información de depuración como el kgdb.
+
+ Para configurar su kernel para que incluya el DDB, agregue la opción
+
+
+options DDB
+
+ a su archivo de configuración, y recompile (vea Configuración del Kernel para más
+ detalles sobre como configurar el kernel de FreeBSD.)
+
+
+ Notese que si usted tiene una versión vieja del boot block,
+ sus símbolos de debugger podrían no ser cargados. Actualize su
+ boot block; los mas recientes cargan los símbolos del DDB
+ automágicamente.
+
+
+ Una vez que su kernel con DDB esta corriendo, hay varias maneras
+ de entrar al DDB. La primera y más temprana es tipear la opción
+ directamente en el prompt de inicio. El kernel
+ se iniciará en modo de depuración e ingresará al DDB antes de cualquier
+ detección de dispositivos. De aquí en adelante usted podrá
+ depurar hasta las funciones probe/attach de los dispositivos.
+
+ El segundo escenario es una combinación de teclas, generalmente
+ Ctrl-Alt-Esc. En el caso de las syscons, esto puede modificarse,
+ algunos mapas de teclado distribuidos lo hacen, por lo que hay que
+ prestar atención. Hay disponible una opción para consolas en puertos
+ serie que permite el uso de la señal BREAK en la línea para entrar al
+ DDB (options BREAK_TO_DEBUGGER en el archivo de
+ configuración del kernel). Esto no es el default ya que hay un montón
+ de adaptadores serie dando vueltas que generan condiciones BREAK
+ sin necesidad, por ejemplo cuando se desenchufa el cable.
+
+ La tercera forma es que un panic salte al DDB si el kernel está
+ configurado para usarlo. Por este motivo, no es recomendable configurar
+ un kernel con DDB para una máquina funcionando sin atención.
+
+ Los comandos del DDB se asemejan remotamente a algunos de los
+ del gdb. Lo primero que usted probablemente
+ necesite hacer es poner un punto de interrupción:
+
+ b nombre-de-función
+b dirección
+
+ Por default los números se toman en hexadecimal, pero para
+ distinguirlos de los nombres de símbolo los números hexadecimales
+ que empiezan con las letras a-f se deben preceder
+ con 0x (para los demás números esto es opcional).
+ Tambien se admiten expresiones sencillas, por ejemplo:
+ nombre-de-función + 0x103.
+
+ Para que el kernel interrumpido continue ejecutandose, solo
+ tipee:
+
+ c
+
+ Para ver un listado de la pila, use:
+
+ trace
+
+
+ Notese que cuando se entra al DDB con una combinación de teclas
+ el kernel está atendiendo una interrupción, por lo que el listado
+ de la pila podría no serle de mucha utilidad.
+
+
+ Si quiere quitar un punto de interrupción, use
+
+
+ del
+del expresión-dirección-de-memoria
+
+ La primera forma se aceptará inmediatamente despues de llegar
+ a un punto de interrupción, y borra el punto actual. La segunda
+ puede quitar cualquier punto de interrupción, pero se debe
+ especificar la dirección exacta; esta se puede obtener de:
+
+ show b
+
+ Para ejecutar el kernel paso a paso, intente:
+
+ s
+
+ Esto entrará dentro de las funciones, pero puede hacer
+ que DDB las siga hasta llegar a la instrucción de retorno
+ correspondiente usando:
+
+ n
+
+
+ Esto es distinto de la instrucción next
+ del gdb; es más parecido a la instrucción
+ finish.
+
+
+ Para examinar los datos en la memoria use (por ejemplo):
+
+ x/wx 0xf0133fe0,40
+x/hd db_symtab_space
+x/bc termbuf,10
+x/s stringbuf
+
+ para acceder a palabras/medias palabras/bytes, y para mostrar
+ en hexadecimal/decimal/caracteres/strings. El número luego de la coma
+ es la cantidad de objetos. Para mostrar los siguientes 0x10
+ items, simplemente use:
+
+ x ,10
+
+ Del mismo modo, use
+
+ x/ia foofunc,10
+
+ para desensamblar las primeras 0x10 instrucciones de
+ foofunc, y mostrarlas junto con su
+ desplazamiento desde el comienzo de foofunc.
+
+ Para modificar memoria, use el comando write:
+
+ w/b termbuf 0xa 0xb 0
+w/w 0xf0010030 0 0
+
+ El modificador
+ (b/h/w)
+ especifica el tamaño de los datos a ser escritos, la primera expresión
+ a continuación es la dirección donde escribir y el resto es interpretado
+ como datos para escribir en las direcciones de memoria sucesivas.
+
+ Si quiere conocer el valor actual de los registros del
+ procesador, use:
+
+ show reg
+
+ O, puede mostrar un solo registro usando:
+
+ p $eax
+
+ y modificarlo haciendo:
+
+ set $eax new-value
+
+ Si usted quisiera llamar alguna función del kernel desde
+ el DDB, solo debe decir:
+
+ call func(arg1, arg2, ...)
+
+ El valor devuelto será impreso en la pantalla.
+
+ Para un resumen de los procesos corriendo al estilo &man.ps.1;
+ use:
+
+ ps
+
+ Usted ya ha examinado la causa de que su kernel falle, y quiere
+ reiniciar su equipo. Recuerde que, dependiendo de lo severo de las
+ fallas que ocurrieron, algunas partes del kernel podrían no funcionar
+ como se espera. Siga una de las siguientes acciones para apagar y
+ reiniciar su equipo:
+
+ call diediedie()
+
+ Esto causará que su kernel haga un crash dump y reinicie, asi
+ luego podrá analizar el dump a un nivel más alto con el kgdb. Este
+ comando suele tener que acompañarse por otra instrucción
+ continue. Para hacer esto hay un alias:
+ panic.
+
+ call boot(0)
+
+ La cual podría ser una buena manera de apagar ordenadamente el
+ sistema, hacer un sync() de todos los discos,
+ y finalmente reiniciar. En tanto las interfaces de disco y de
+ filesystem del kernel no esten dañadas, esta podría ser una buena
+ manera de hacer un apagado bastante prolijo.
+
+ call cpu_reset()
+
+ Es la ultima salida de los desastres y es practicamente lo
+ mismo que presionar el Gran Boton Rojo.
+
+ Si usted necesita un breve sumario de los comandos, tipee:
+
+ help
+
+ De todos modos, es altamente recomendable tener una copia impresa
+ de la página &man.ddb.4; del manual a mano antes de la sesión de
+ depuración. Recuerde que es bastante difícil leer el manual en línea
+ mientras se está ejecutando el kernel paso a paso.
+
+
+
+ Depuración En-Línea Usando El GDB remoto
+
+ Esta característica ha sido soportada desde FreeBSD 2.2, y ya está
+ en verdad muy bien pulida.
+
+ El GDB ha soportado depuración remota desde
+ hace mucho tiempo. Esto se hace usando un protocolo muy simple a
+ traves de una línea serie. A diferencia de los otros metodos descriptos
+ anteriormente, hacen falta dos máquinas para hacer esto. Una va a
+ proveer el entorno de depuración, incluyendo todos los archivos fuente,
+ y una copia del ejecutable del kernel con todos los símbolos y la otra
+ será la máquina a depurar que simplemente corre una copia de exactamente
+ el mismo kernel (pero sin los símbolos de depuración).
+
+ Usted debería configurar el kernel en cuestión con config
+ -g, incluir en la configuración, y
+ compilarla como siempre. Esto arrojará un ejecutable enorme, debido a la
+ información de depuración. Copie este kernel a la máquina a depurar,
+ quitele los simbolos con strip -x, e inicielo usando
+ la opción en el prompt de inicio. Conecte el primer
+ puerto serie de la máquina a cualquier puerto serie de la máquina que
+ correrá el debugger. Ahora en la máquina que corre el debugger, vaya al
+ directorio de compilación del kernel a depurar, y arranque el gdb:
+
+ &prompt.user; gdb -k kernel
+GDB is free software and you are welcome to distribute copies of it
+ under certain conditions; type "show copying" to see the conditions.
+There is absolutely no warranty for GDB; type "show warranty" for details.
+GDB 4.16 (i386-unknown-freebsd),
+Copyright 1996 Free Software Foundation, Inc...
+(kgdb)
+
+ Inicie la sesión de depuración remota haciendo
+ (asumiendo que se usa el primer puerto serie):
+
+ (kgdb)target remote /dev/cuaa0
+
+ Ahora en la máquina a depurar (que entró al DDB justo antes de
+ empezar a detectar los dispositivos), tipee:
+
+ Debugger("Boot flags requested debugger")
+Stopped at Debugger+0x35: movb $0, edata+0x51bc
+db>gdb
+
+ El DDB responderá diciendo:
+
+ Next trap will enter GDB remote protocol mode
+
+ Cada vez que tipee gdb, el modo se alternará
+ entre el GDB remoto y el DDB local. Para forzar un siguiente trap
+ inmediatamente, simplemente tipee s (avanza un paso).
+ la máquina del debugger ahora ganará control sobre el kernel a depurar:
+
+
+ Remote debugging using /dev/cuaa0
+Debugger (msg=0xf01b0383 "Boot flags requested debugger")
+ at ../../i386/i386/db_interface.c:257
+(kgdb)
+
+ Esta sesión puede usarse casi como cualquier otra sesión de GDB,
+ incluyendo acceso completo al código fuente, ejecutarlo en modo-gud
+ dentro de una ventana de Emacs (lo cual brinda la posibilidad de
+ mostrar automáticamente el código fuente en otra ventana de Emacs)
+ etc.
+
+ El GDB remoto tambien puede usarse para depurar LKMs. Primero
+ compile el LKM con los simbolos de depuración:
+
+ &prompt.root; cd /usr/src/lkm/linux
+&prompt.root; make clean; make COPTS=-g
+
+ Luego instale esta versión del módulo en la máquina a depurar,
+ carguelo y use modstat para averiguar donde fue
+ cargado:
+
+ &prompt.root; linux
+&prompt.root; modstat
+Type Id Off Loadaddr Size Info Rev Module Name
+EXEC 0 4 f5109000 001c f510f010 1 linux_mod
+
+ Tome la dirección de carga (loadaddr) del módulo y sumele
+ 0x20 (probablemente para contar el encabezado a.out). Esta es la
+ dirección donde el código del módulo fue reubicado. Use el comando
+ add-symbol-file en el GDB para informarle al
+ debugger acerca del módulo:
+
+ (kgdb)add-symbol-file /usr/src/lkm/linux/linux_mod.o 0xf5109020
+add symbol table from file "/usr/src/lkm/linux/linux_mod.o" at
+text_addr = 0xf5109020? (y or n) y
+(kgdb)
+
+ Ahora tiene acceso a todos los símbolos en el LKM.
+
+
+
+ Depurando Un Driver de Consola
+
+ Dado que el DDB necesita un driver de consola sobre el que correr,
+ las cosas son mas complicadas si lo que falla es el propio driver de
+ consola. Usted podría entonces recordar el uso de una consola en puerto serie
+ (ya sea con un sector de inicio modificado, o especificando en el prompt Boot:) y colgar una terminal
+ estándar en su primer puerto serie. El DDB funciona en cualquier
+ driver de consola configurado, por supuesto tambien en una consola de
+ puerto serie.
+
+
+
+
+
diff --git a/es_ES.ISO_8859-1/books/handbook/kernelopts/chapter.sgml b/es_ES.ISO_8859-1/books/handbook/kernelopts/chapter.sgml
new file mode 100644
index 0000000000..6af9af0617
--- /dev/null
+++ b/es_ES.ISO_8859-1/books/handbook/kernelopts/chapter.sgml
@@ -0,0 +1,165 @@
+
+
+
+ Añadir nuevas opciones de configuración al kernel
+
+ Contribuci´n de &a.joerg;
+
+
+ Antes de leer esta sección se debe estar familiarizado con
+ la sección sobre configuración
+ del kernel.
+
+
+
+ Ante todo ¿Qué es una opción del
+ kernel?
+
+ El uso de opciones del kernel se describe básicamente en la sección
+ configuración del kernel.
+ También hay una discusión sobre opciones “estilo historico” y
+ “estilo moderno”. El objetivo final es que en algún momento
+ todas las opciones soportadas por el kernel se hayan convertido al estilo
+ moderno, así para la gente que hizo un make depend exitoso
+ en su directorio de compilación del kernel luego de correr &man.config.8;,
+ el proceso de build automaticamente seleccionará las opciones modificadas y
+ solo recompilara los archivos donde se usan. El paso de eliminar el viejo
+ directorio de compilación cada vez que se corre &man.config.8; como aún se
+ hace podrá entonces ser eliminado nuevamente.
+
+ Básicamente una opción del kernel no es más que la definición de una
+ macro del preprocesador C para el proceso de compilación del kernel. Para
+ hacer la compilación verdaderamente opcional, la parte correspondiente del
+ código fuente del kernel (o archivo .h del kernel) debe estar
+ escrita con el concepto de opción en mente, por ejemplo el default para la opción
+ debe haber sido hecho modificable. Esto se hace generalmente con algo como:
+
+
+#ifndef THIS_OPTION
+#define THIS_OPTION (valor_por_default)
+#endif /* THIS_OPTION */
+
+ De esta manera, un administrador seleccionando otro valor para la opción
+ en su archivo de configuración dejará sin efecto el default, y lo reemplazará
+ con su nuevo valor. Como es claro, el nuevo valor será sustituido en el código
+ fuente durante la ejecución del preprocesador, por lo que debe ser una
+ expresión C válida en el contexto en el que habría sido usado el default.
+
+
+ También es posible crear opciones sin valor que simplemente activen o
+ desactiven una parte del código rodeandola con
+
+
+#ifdef THAT_OPTION
+
+[código fuente específico]
+
+#endif
+
+ Con solo mencionar THAT_OPTION en el archivo de
+ configuración (con o sin valor) activará la parte del código correspondiente.
+
+ Quien esté familiarizado con el lenguaje C se dará cuenta de que todo
+ podría ser tratado como una “opción de configuración” si hay
+ por lo menos un #ifdef referenciandolo...
+ De todos modos, es poco probable que mucha gente ponga
+
+
+options notyet,notdef
+
+ en su archivo de configuración, y luego se pregunten por que la kernel
+ compilation les da errores. :-)
+
+ Como es claro, usar nombres arbitrarios para las opciones hace que sea
+ muy difícil rastrear su uso por todo el árbol de código fuente. Esa es la
+ razón que impulsa el esquema de opciones estilo-moderno,
+ donde cada opción va en un archivo .h separado en el
+ directorio de compilación del kernel, el cual por convención se llamará
+ opt_foo.h. De esta forma
+ las dependencias usuales del Makefile pueden aplicarse, y el make
+ puede determinar que se necesita recompilar cuando una opción fue
+ cambiada.
+
+ El mecanismo de opciones estilo antiguo tiene aún una ventaja para
+ opciones locales o tal vez experimentales que tendrán por anticipado poco
+ tiempo de vida: ya que es facil agregar un nuevo #ifdef
+ al código fuente del kernel, esto ya lo ha convertido en una opción de
+ configuración. En este caso el administrador que use tal opción es responsable
+ de conocer sus implicaciones ( y tal vez forzar la recompilación de partes
+ del kernel a mano). Una vez que la tansición de todas las opciones soportadas
+ haya sido hecha, &man.config.8; advertirá cuando aparezca una opción no
+ soportada en el archivo de configuración, pero sin embargo la incluirá en
+ el Makefile del kernel.
+
+
+
+ Y ahora ¿Qué debo hacer para eso?
+
+ Primero, edite sys/conf/options (o
+ sys/i386/conf/options.<arq>,
+ Ej: sys/i386/conf/options.i386), y seleccione un archivo
+ opt_foo.h donde
+ su nueva opción cabría mejor.
+
+ Si ya hay algo que se acerque al proposito de la nueva opción, elijalo.
+ Por ejemplo, las opciones que modifican la conducta general del subsistema
+ SCSI pueden ir dentro de opt_scsi.h. Por default,
+ con solo mencionar una opción en el archivo de opciones apropiado,
+ digamos FOO, implica que su valor irá dentro del
+ archivo correspondiente opt_foo.h. Esto puede ser
+ reemplazado en el lado derecho de una regla especificando otro nombre de
+ archivo.
+
+ Si no hay ningún
+ opt_foo.h ya
+ disponible para la nueva opción, invente un nuevo nombre. Hágalo
+ significativo, y comente la nueva sección en el archivo
+ options[.<arq>].
+ &man.config.8; automaticamente tomará el cambio, y creará el archivo
+ la próxima vez que se corra. La mayoría de las opciones deberían ir en
+ un archivo .h individual.
+
+ Meter demasiadas opciones en un solo archivo
+ opt_foo.h causará que
+ se tengan que recompilar demasiados archivos del kernel cuando se cambie
+ una de las opciones en el archivo de configuración.
+
+ Por último, averigüe que archivos del kernel dependen de la nueva
+ opción. A menos que usted haya inventado recientemente su opción, y
+ aún no existe en ningún lado &prompt.user;
+ find /usr/src/sys -name
+ type f | xargs fgrep NEW_OPTION le será de
+ ayuda para encontrarlos. Edite todos esos archivos y agregue
+ #include "opt_foo.h"al comienzo,
+ antes de todos los #include <xxx.h>. Este
+ orden es más importante en tanto las opciones podrían reemplazar los
+ defaults de los archivos .h regulares, si los defaults
+ son de la forma #ifndef NEW_OPTION #define NEW_OPTION (something)
+ #endif en el .h regular.
+
+ Agregar una opción que reemplaza algo en un archivo header del sistema
+ (un archivo ubicado en /usr/include/sys/) es
+ casi siempre un error.
+ opt_foo.h no puede ser
+ incluido dentro de estos archivos dado que esto dañaría al header
+ muy seriamente, pero si no se incluye entonces otros lugares que lo
+ incluyen podrían tener valores inconsistentes para la opción. Sí, hay
+ precedentes de esto actualmente, pero eso no los hace más correctos.
+
+
+
+
+
diff --git a/es_ES.ISO_8859-1/books/handbook/pgpkeys/chapter.sgml b/es_ES.ISO_8859-1/books/handbook/pgpkeys/chapter.sgml
new file mode 100755
index 0000000000..474ff0c135
--- /dev/null
+++ b/es_ES.ISO_8859-1/books/handbook/pgpkeys/chapter.sgml
@@ -0,0 +1,517 @@
+
+
+
+
+ PGP keys
+
+ En caso de que necesites verificar una firma o enviar un mail
+ encriptado a alguno de los responsables o miembros del core team,
+ aquí tienes una serie de claves para uso.
+
+
+
+ Responsables
+
+
+
+ Responsable de Seguridad de FreeBSD security-officer@freebsd.org
+
+
+FreeBSD Security Officer <security-officer@freebsd.org>
+Fingerprint = 41 08 4E BB DB 41 60 71 F9 E5 0E 98 73 AF 3F 11
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3i
+
+mQCNAzF7MY4AAAEEAK7qBgPuBejER5HQbQlsOldk3ZVWXlRj54raz3IbuAUrDrQL
+h3g57T9QY++f3Mot2LAf5lDJbsMfWrtwPrPwCCFRYQd6XH778a+l4ju5axyjrt/L
+Ciw9RrOC+WaPv3lIdLuqYge2QRC1LvKACIPNbIcgbnLeRGLovFUuHi5z0oilAAUR
+tDdGcmVlQlNEIFNlY3VyaXR5IE9mZmljZXIgPHNlY3VyaXR5LW9mZmljZXJAZnJl
+ZWJzZC5vcmc+iQCVAwUQMX6yrOJgpPLZnQjrAQHyowQA1Nv2AY8vJIrdp2ttV6RU
+tZBYnI7gTO3sFC2bhIHsCvfVU3JphfqWQ7AnTXcD2yPjGcchUfc/EcL1tSlqW4y7
+PMP4GHZp9vHog1NAsgLC9Y1P/1cOeuhZ0pDpZZ5zxTo6TQcCBjQA6KhiBFP4TJql
+3olFfPBh3B/Tu3dqmEbSWpuJAJUDBRAxez3C9RVb+45ULV0BAak8A/9JIG/jRJaz
+QbKom6wMw852C/Z0qBLJy7KdN30099zMjQYeC9PnlkZ0USjQ4TSpC8UerYv6IfhV
+nNY6gyF2Hx4CbEFlopnfA1c4yxtXKti1kSN6wBy/ki3SmqtfDhPQ4Q31p63cSe5A
+3aoHcjvWuqPLpW4ba2uHVKGP3g7SSt6AOYkAlQMFEDF8mz0ff6kIA1j8vQEBmZcD
+/REaUPDRx6qr1XRQlMs6pfgNKEwnKmcUzQLCvKBnYYGmD5ydPLxCPSFnPcPthaUb
+5zVgMTjfjS2fkEiRrua4duGRgqN4xY7VRAsIQeMSITBOZeBZZf2oa9Ntidr5PumS
+9uQ9bvdfWMpsemk2MaRG9BSoy5Wvy8VxROYYUwpT8Cf2iQCVAwUQMXsyqWtaZ42B
+sqd5AQHKjAQAvolI30Nyu3IyTfNeCb/DvOe9tlOn/o+VUDNJiE/PuBe1s2Y94a/P
+BfcohpKC2kza3NiW6lLTp00OWQsuu0QAPc02vYOyseZWy4y3Phnw60pWzLcFdemT
+0GiYS5Xm1o9nAhPFciybn9j1q8UadIlIq0wbqWgdInBT8YI/l4f5sf6JAJUDBRAx
+ezKXVS4eLnPSiKUBAc5OBACIXTlKqQC3B53qt7bNMV46m81fuw1PhKaJEI033mCD
+ovzyEFFQeOyRXeu25Jg9Bq0Sn37ynISucHSmt2tUD5W0+p1MUGyTqnfqejMUWBzO
+v4Xhp6a8RtDdUMBOTtro16iulGiRrCKxzVgEl4i+9Z0ZiE6BWlg5AetoF5n3mGk1
+lw==
+=ipyA
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+
+ &a.imp;
+
+
+Warner Losh <imp@village.org>
+ aka <imp@freebsd.org>
+Fingerprint = D4 31 FD B9 F7 90 17 E8 37 C5 E7 7F CF A6 C1 B9
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAzDzTiAAAAEEAK8D7KWEbVFUrmlqhUEnAvphNIqHEbqqT8s+c5f5c2uHtlcH
+V4mV2TlUaDSVBN4+/D70oHmZc4IgiQwMPCWRrSezg9z/MaKlWhaslc8YT6Xc1q+o
+EP/fAdKUrq49H0QQbkQk6Ks5wKW6v9AOvdmsS6ZJEcet6d9G4dxynu/2qPVhAAUR
+tCBNLiBXYXJuZXIgTG9zaCA8aW1wQHZpbGxhZ2Uub3JnPokAlQMFEDM/SK1VLh4u
+c9KIpQEBFPsD/1n0YuuUPvD4CismZ9bx9M84y5sxLolgFEfP9Ux196ZSeaPpkA0g
+C9YX/IyIy5VHh3372SDWN5iVSDYPwtCmZziwIV2YxzPtZw0nUu82P/Fn8ynlCSWB
+5povLZmgrWijTJdnUWI0ApVBUTQoiW5MyrNN51H3HLWXGoXMgQFZXKWYiQCVAwUQ
+MzmhkfUVW/uOVC1dAQG3+AP/T1HL/5EYF0ij0yQmNTzt1cLt0b1e3N3zN/wPFFWs
+BfrQ+nsv1zw7cEgxLtktk73wBGM9jUIdJu8phgLtl5a0m9UjBq5oxrJaNJr6UTxN
+a+sFkapTLT1g84UFUO/+8qRB12v+hZr2WeXMYjHAFUT18mp3xwjW9DUV+2fW1Wag
+YDKJAJUDBRAzOYK1s1pi61mfMj0BARBbA/930CHswOF0HIr+4YYUs1ejDnZ2J3zn
+icTZhl9uAfEQq++Xor1x476j67Z9fESxyHltUxCmwxsJ1uOJRwzjyEoMlyFrIN4C
+dE0C8g8BF+sRTt7VLURLERvlBvFrVZueXSnXvmMoWFnqpSpt3EmN6TNaLe8Cm87a
+k6EvQy0dpnkPKokAlQMFEDD9Lorccp7v9qj1YQEBrRUD/3N4cCMWjzsIFp2Vh9y+
+RzUrblyF84tJyA7Rr1p+A7dxf7je3Zx5QMEXosWL1WGnS5vC9YH2WZwv6sCU61gU
+rSy9z8KHlBEHh+Z6fdRMrjd9byPf+n3cktT0NhS23oXB1ZhNZcB2KKhVPlNctMqO
+3gTYx+Nlo6xqjR+J2NnBYU8p =7fQV
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+
+
+ Miembros del Core Team
+
+
+
+ &a.asami;
+
+
+Satoshi Asami <asami@cs.berkeley.edu>
+ aka <asami@FreeBSD.ORG>
+Fingerprint = EB 3C 68 9E FB 6C EB 3F DB 2E 0F 10 8F CE 79 CA
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAzPVyoQAAAEEAL7W+kipxB171Z4SVyyL9skaA7hG3eRsSOWk7lfvfUBLtPog
+f3OKwrApoc/jwLf4+Qpdzv5DLEt/6Hd/clskhJ+q1gMNHyZ5ABmUxrTRRNvJMTrb
+3fPU3oZj7sL/MyiFaT1zF8EaMP/iS2ZtcFsbYOqGeA8E/58uk4NA0SoeCNiJAAUR
+tCVTYXRvc2hpIEFzYW1pIDxhc2FtaUBjcy5iZXJrZWxleS5lZHU+iQCVAwUQM/AT
++EqGN2HYnOMZAQF11QP/eSXb2FuTb1yX5yoo1Im8YnIk1SEgCGbyEbOMMBznVNDy
+5g2TAD0ofLxPxy5Vodjg8rf+lfMVtO5amUH6aNcORXRncE83T10JmeM6JEp0T6jw
+zOHKz8jRzygYLBayGsNIJ4BGxa4LeaGxJpO1ZEvRlNkPH/YEXK5oQmq9/DlrtYOJ
+AEUDBRAz42JT8ng6GBbVvu0BAU8nAYCsJ8PiJpRUGlrz6rxjX8hqM1v3vqFHLcG+
+G52nVMBSy+RZBgzsYIPwI5EZtWAKb22JAJUDBRAz4QBWdbtuOHaj97EBAaQPA/46
++NLUp+Wubl90JoonoXocwAg88tvAUVSzsxPXj0lvypAiSI2AJKsmn+5PuQ+/IoQy
+lywRsxiQ5GD7C72SZ1yw2WI9DWFeAi+qa4b8n9fcLYrnHpyCY+zxEpu4pam8FJ7H
+JocEUZz5HRoKKOLHErzXDiuTkkm72b1glmCqAQvnB4kAlQMFEDPZ3gyDQNEqHgjY
+iQEBFfUEALu2C0uo+1Z7C5+xshWRYY5xNCzK20O6bANVJ+CO2fih96KhwsMof3lw
+fDso5HJSwgFd8WT/sR+Wwzz6BAE5UtgsQq5GcsdYQuGI1yIlCYUpDp5sgswNm+OA
+bX5a+r4F/ZJqrqT1J56Mer0VVsNfe5nIRsjd/rnFAFVfjcQtaQmjiQCVAwUQM9uV
+mcdm8Q+/vPRJAQELHgP9GqNiMpLQlZig17fDnCJ73P0e5t/hRLFehZDlmEI2TK7j
+Yeqbw078nZgyyuljZ7YsbstRIsWVCxobX5eH1kX+hIxuUqCAkCsWUY4abG89kHJr
+XGQn6X1CX7xbZ+b6b9jLK+bJKFcLSfyqR3M2eCyscSiZYkWKQ5l3FYvbUzkeb6K0
+IVNhdG9zaGkgQXNhbWkgPGFzYW1pQEZyZWVCU0QuT1JHPg==
+=39SC
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.jmb;
+
+
+Jonathan M. Bresler <jmb@FreeBSD.org>
+f16 Fingerprint16 = 31 57 41 56 06 C1 40 13 C5 1C E3 E5 DC 62 0E FB
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: PGPfreeware 5.0i for non-commercial use
+
+mQCNAzG2GToAAAEEANI6+4SJAAgBpl53XcfEr1M9wZyBqC0tzpie7Zm4vhv3hO8s
+o5BizSbcJheQimQiZAY4OnlrCpPxijMFSaihshs/VMAz1qbisUYAMqwGEO/T4QIB
+nWNo0Q/qOniLMxUrxS1RpeW5vbghErHBKUX9GVhxbiVfbwc4wAHbXdKX5jjdAAUR
+tCVKb25hdGhhbiBNLiBCcmVzbGVyIDxqbWJARnJlZUJTRC5PUkc+iQCVAwUQNbtI
+gAHbXdKX5jjdAQHamQP+OQr10QRknamIPmuHmFYJZ0jU9XPIvTTMuOiUYLcXlTdn
+GyTUuzhbEywgtOldW2V5iA8platXThtqC68NsnN/xQfHA5xmFXVbayNKn8H5stDY
+2s/4+CZ06mmJfqYmONF1RCbUk/M84rVT3Gn2tydsxFh4Pm32lf4WREZWRiLqmw+J
+AJUDBRA0DfF99RVb+45ULV0BAcZ0BACCydiSUG1VR0a5DBcHdtin2iZMPsJUPRqJ
+tWvP6VeI8OFpNWQ4LW6ETAvn35HxV2kCcQMyht1kMD+KEJz7r8Vb94TS7KtZnNvk
+2D1XUx8Locj6xel5c/Lnzlnnp7Bp1XbJj2u/NzCaZQ0eYBdP/k7RLYBYHQQln5x7
+BOuiRJNVU4kAlQMFEDQLcShVLh4uc9KIpQEBJv4D/3mDrD0MM9EYOVuyXik3UGVI
+8quYNA9ErVcLdt10NjYc16VI2HOnYVgPRag3Wt7W8wlXShpokfC/vCNt7f5JgRf8
+h2a1/MjQxtlD+4/Js8k7GLa53oLon6YQYk32IEKexoLPwIRO4L2BHWa3GzHJJSP2
+aTR/Ep90/pLdAOu/oJDUiQCVAwUQMqyL0LNaYutZnzI9AQF25QP9GFXhBrz2tiWz
+2+0gWbpcGNnyZbfsVjF6ojGDdmsjJMyWCGw49XR/vPKYIJY9EYo4t49GIajRkISQ
+NNiIz22fBAjT2uY9YlvnTJ9NJleMfHr4dybo7oEKYMWWijQzGjqf2m8wf9OaaofE
+KwBX6nxcRbKsxm/BVLKczGYl3XtjkcuJAJUDBRA1ol5TZWCprDT5+dUBATzXA/9h
+/ZUuhoRKTWViaistGJfWi26FB/Km5nDQBr/Erw3XksQCMwTLyEugg6dahQ1u9Y5E
+5tKPxbB69eF+7JXVHE/z3zizR6VL3sdRx74TPacPsdhZRjChEQc0htLLYAPkJrFP
+VAzAlSlm7qd+MXf8fJovQs6xPtZJXukQukPNlhqZ94kAPwMFEDSH/kF4tXKgazlt
+bxECfk4AoO+VaFVfguUkWX10pPSSfvPyPKqiAJ4xn8RSIe1ttmnqkkDMhLh00mKj
+lLQuSm9uYXRoYW4gTS4gQnJlc2xlciA8Sm9uYXRoYW4uQnJlc2xlckBVU2kubmV0
+PokAlQMFEDXbdSkB213Sl+Y43QEBV/4D/RLJNTrtAqJ1ATxXWv9g8Cr3/YF0GTmx
+5dIrJOpBup7eSSmiM/BL9Is4YMsoVbXCI/8TqA67TMICvq35PZU4wboQB8DqBAr+
+gQ8578M7Ekw1OAF6JXY6AF2P8k7hMcVBcVOACELPT/NyPNByG5QRDoNmlsokJaWU
+/2ls4QSBZZlb
+=zbCw
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.ache;
+
+
+Andrey A. Chernov <ache@FreeBSD.org>
+ aka <ache@nagual.pp.ru>
+Key fingerprint = 33 03 9F 48 33 7B 4A 15 63 48 88 0A C4 97 FD 49
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3ia
+
+mQCNAiqUMGQAAAEEAPGhcD6A2Buey5LYz0sphDLpVgOZc/bb9UHAbaGKUAGXmafs
+Dcb2HnsuYGgX/zrQXuCi/wIGtXcZWB97APtKOhFsZnPinDR5n/dde/mw9FnuhwqD
+m+rKSL1HlN0z/Msa5y7g16760wHhSR6NoBSEG5wQAHIMMq7Q0uJgpPLZnQjrAAUT
+tCVBbmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucHAucnU+iQCVAwUQM2Ez
+u+JgpPLZnQjrAQEyugP8DPnS8ixJ5OeuYgPFQf5sy6l+LrB6hyaS+lgsUPahWjNY
+cnaDmfda/q/BV5d4+y5rlQe/pjnYG7/yQuAR3jhlXz8XDrqlBOnW9AtYjDt5rMfJ
+aGFTGXAPGZ6k6zQZE0/YurT8ia3qjvuZm3Fw4NJrHRx7ETHRvVJDvxA6Ggsvmr20
+JEFuZHJleSBBLiBDaGVybm92IDxhY2hlQEZyZWVCU0Qub3JnPokAlQMFEDR5uVbi
+YKTy2Z0I6wEBLgED/2mn+hw4/3peLx0Sb9LNx//NfCCkVefSf2G9Qwhx6dvwbX7h
+mFca97h7BQN4GubU1Z5Ffs6TeamSBrotBYGmOCwvJ6S9WigF9YHQIQ3B4LEjskAt
+pcjU583y42zM11kkvEuQU2Gde61daIylJyOxsgpjSWpkxq50fgY2kLMfgl/ftCZB
+bmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuaWV0enNjaGUubmV0PokAlQMFEDR5svDi
+YKTy2Z0I6wEBOTQD/0OTCAXIjuak363mjERvzSkVsNtIH9hA1l0w6Z95+iH0fHrW
+xXKT0vBZE0y0Em+S3cotLL0bMmVE3F3D3GyxhBVmgzjyx0NYNoiQjYdi+6g/PV30
+Cn4vOO6hBBpSyI6vY6qGNqcsawuRtHNvK/53MpOfKwSlICEBYQimcZhkci+EtCJB
+bmRyZXkgQS4gQ2hlcm5vdiA8YWNoZUBuYWd1YWwucnU+iQCVAwUQMcm5HeJgpPLZ
+nQjrAQHwvQP9GdmAf1gdcuayHEgNkc11macPH11cwWjYjzA2YoecFMGV7iqKK8QY
+rr1MjbGXf8DAG8Ubfm0QbI8Lj8iG3NgqIru0c72UuHGSn/APfGGG0AtPX5UK/k7B
+gI0Ca2po6NA5nrSp8tDsdEz/4gyea84RXl2prtTf5Jj07hflbRstGXK0MkFuZHJl
+eSBBLiBDaGVybm92LCBCbGFjayBNYWdlIDxhY2hlQGFzdHJhbC5tc2suc3U+iQCV
+AwUQMCsAo5/rGryoL8h3AQHq1QQAidyNFqA9hvrmMcjpY7csJVFlGvj574Wj4GPa
+o3pZeuQaMBmsWqaXLYnWU/Aldb6kTz6+nRcQX50zFH0THSPfApwEW7yybSTI5apJ
+mWT3qhKN2vmLNg2yNzhqLTzHLD1lH3i1pfQq8WevrNfjLUco5S/VuekTma/osnzC
+Cw7fQzCJAJUDBRAwKvwoa1pnjYGyp3kBARihBACoXr3qfG65hFCyKJISmjOvaoGr
+anxUIkeDS0yQdTHzhQ+dwB1OhhK15E0Nwr0MKajLMm90n6+Zdb5y/FIjpPriu8dI
+rlHrWZlewa88eEDM+Q/NxT1iYg+HaKDAE171jmLpSpCL0MiJtO0i36L3ekVD7Hv8
+vffOZHPSHirIzJOZTYkAlQMFEDAau6zFLUdtDb+QbQEBQX8D/AxwkYeFaYxZYMFO
+DHIvSk23hAsjCmUA2Uil1FeWAusb+o8xRfPDc7TnosrIifJqbF5+fcHCG5VSTGlh
+Bhd18YWUeabf/h9O2BsQX55yWRuB2x3diJ1xI/VVdG+rxlMCmE4ZR1Tl9x+Mtun9
+KqKVpB39VlkCBYQ3hlgNt/TJUY4riQCVAwUQMBHMmyJRltlmbQBRAQFQkwP/YC3a
+hs3ZMMoriOlt3ZxGNUUPTF7rIER3j+c7mqGG46dEnDB5sUrkzacpoLX5sj1tGR3b
+vz9a4vmk1Av3KFNNvrZZ3/BZFGpq3mCTiAC9zsyNYQ8L0AfGIUO5goCIjqwOTNQI
+AOpNsJ5S+nMAkQB4YmmNlI6GTb3D18zfhPZ6uciJAJUCBRAwD0sl4uW74fteFRkB
+AWsAA/9NYqBRBKbmltQDpyK4+jBAYjkXBJmARFXKJYTlnTgOHMpZqoVyW96xnaa5
+MzxEiu7ZWm5oL10QDIp1krkBP2KcmvfSMMHb5aGCCQc2/P8NlfXAuHtNGzYiI0UA
+Iwi8ih/S1liVfvnqF9uV3d3koE7VsQ9OA4Qo0ZL2ggW+/gEaYIkAlQMFEDAOz6qx
+/IyHe3rl4QEBIvYD/jIr8Xqo/2I5gncghSeFR01n0vELFIvaF4cHofGzyzBpYsfA
++6pgFI1IM+LUF3kbUkAY/2uSf9U5ECcaMCTWCwVgJVO+oG075SHEM4buhrzutZiM
+1dTyTaepaPpTyRMUUx9ZMMYJs7sbqLId1eDwrJxUPhrBNvf/w2W2sYHSY8cdiQCV
+AwUQMAzqgHcdkq6JcsfBAQGTxwQAtgeLFi2rhSOdllpDXUwz+SS6bEjFTWgRsWFM
+y9QnOcqryw7LyuFmWein4jasjY033JsODfWQPiPVNA3UEnXVg9+n8AvNMPO8JkRv
+Cn1eNg0VaJy9J368uArio93agd2Yf/R5r+QEuPjIssVk8hdcy/luEhSiXWf6bLMV
+HEA0J+OJAJUDBRAwDUi+4mCk8tmdCOsBAatBBACHB+qtW880seRCDZLjl/bT1b14
+5po60U7u6a3PEBkY0NA72tWDQuRPF/Cn/0+VdFNxQUsgkrbwaJWOoi0KQsvlOm3R
+rsxKbn9uvEKLxExyKH3pxp76kvz/lEWwEeKvBK+84Pb1lzpG3W7u2XDfi3VQPTi3
+5SZMAHc6C0Ct/mjNlYkAlQMFEDAMrPD7wj+NsTMUOQEBJckD/ik4WsZzm2qOx9Fw
+erGq7Zwchc+Jq1YeN5PxpzqSf4AG7+7dFIn+oe6X2FcIzgbYY+IfmgJIHEVjDHH5
++uAXyb6l4iKc89eQawO3t88pfHLJWbTzmnvgz2cMrxt94HRvgkHfvcpGEgbyldq6
+EB33OunazFcfZFRIcXk1sfyLDvYE
+=1ahV
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.jkh;
+
+
+Jordan K. Hubbard <jkh@FreeBSD.org>
+Fingerprint = 3C F2 27 7E 4A 6C 09 0A 4B C9 47 CD 4F 4D 0B 20
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3ia
+
+mQCNAzFjX0IAAAEEAML+nm9/kDNPp43ZUZGjYkm2QLtoC1Wxr8JulZXqk7qmhYcQ
+jvX+fyoriJ6/7ZlnLe2oG5j9tZOnRLPvMaz0g9CpW6Dz3nkXrNPkmOFV9B8D94Mk
+tyFeRJFqnkCuqBj6D+H8FtBwEeeTecSh2tJ0bZZTXnAMhxeOdvUVW/uOVC1dAAUR
+tCNKb3JkYW4gSy4gSHViYmFyZCA8amtoQEZyZWVCU0Qub3JnPokBFQMFEDXCTXQM
+j46yp4IfPQEBwO8IAIN0J09AXBf86dFUTFGcAMrEQqOF5IL+KGorAjzuYxERhKfD
+ZV7jA+sCQqxkWfcVcE20kVyVYqzZIkio9a5zXP6TwA247JkPt54S1PmMDYHNlRIY
+laXlNoji+4q3HP2DfHqXRT2859rYpm/fG/v6pWkos5voPKcZ2OFEp9W+Ap88oqw+
+5rx4VetZNJq1Epmis4INj6XqNqj85+MOOIYE+f445ohDM6B/Mxazd6cHFGGIR+az
+VjZ6lCDMLjzhB5+FqfrDLYuMjqkMTR5z9DL+psUvPlCkYbQ11NEWtEmiIWjUcNJN
+GCxGzv5bXk0XPu3ADwbPkFE2usW1cSM7AQFiwuyJAJUDBRAxe+Q9a1pnjYGyp3kB
+AV7XA/oCSL/Cc2USpQ2ckwkGpyvIkYBPszIcabSNJAzm2hsU9Qa6WOPxD8olDddB
+uJNiW/gznPC4NsQ0N8Zr4IqRX/TTDVf04WhLmd8AN9SOrVv2q0BKgU6fLuk979tJ
+utrewH6PR2qBOjAaR0FJNk4pcYAHeT+e7KaKy96YFvWKIyDvc4kAlQMFEDF8ldof
+f6kIA1j8vQEBDH4D/0Zm0oNlpXrAE1EOFrmp43HURHbij8n0Gra1w9sbfo4PV+/H
+U8ojTdWLy6r0+prH7NODCkgtIQNpqLuqM8PF2pPtUJj9HwTmSqfaT/LMztfPA6PQ
+csyT7xxdXl0+4xTDl1avGSJfYsI8XCAy85cTs+PQwuyzugE/iykJO1Bnj/paiQCV
+AwUQMXvlBvUVW/uOVC1dAQF2fQP/RfYC6RrpFTZHjo2qsUHSRk0vmsYfwG5NHP5y
+oQBMsaQJeSckN4n2JOgR4T75U4vS62aFxgPLJP3lOHkU2Vc7xhAuBvsbGr5RP8c5
+LvPOeUEyz6ZArp1KUHrtcM2iK1FBOmY4dOYphWyWMkDgYExabqlrAq7FKZftpq/C
+BiMRuaw=
+=C/Jw
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.phk;
+
+
+Poul-Henning Kamp <phk@FreeBSD.org>
+Fingerprint = A3 F3 88 28 2F 9B 99 A2 49 F4 E2 FA 5A 78 8B 3E
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3ia
+
+mQCNAzAdpMIAAAEEALHDgrFUwhZtb7PbXg3upELoDVEUPFRwnmpJH1rRqyROUGcI
+ooVe7u+FQlIs5OsXK8ECs/5Wpe2UrZSzHvjwBYOND5H42YtI5UULZLRCo5bFfTVA
+K9Rpo5icfTsYihrzU2nmnycwFMk+jYXyT/ZDYWDP/BM9iLjj0x9/qQgDWPy9AAUR
+tCNQb3VsLUhlbm5pbmcgS2FtcCA8cGhrQEZyZWVCU0Qub3JnPokAlQMFEDQQ0aZ1
+u244dqP3sQEBu4ID/jXFFeJgs2MdTDNOZM/FbfDhI4qxAbYUsqS3+Ra16yd8Wd/A
+jV+IHJE2NomFWl8UrUjCGinXiwzPgK1OfFJrS9Og1wQLvAl0X84BA8MTP9BQr4w7
+6I/RbksgUSrVCIO8MJwlydjSPocWGBeXlVjbZxXzyuJk7H+TG+zuI5BuBcNIiQCV
+AwUQMwYr2rNaYutZnzI9AQHiIQP/XxtBWFXaBRgVLEhRNpS07YdU+LsZGlLOZehN
+9L4UnJFHQQPNOpMey2gF7Y95aBOw5/1xS5vlQpwmRFCntWsm/gqdzK6rulfr1r5A
+y94LO5TAC6ucNu396Y4vo1TyD1STnRC466KlvmtQtAtFGgXlORWLL9URLzcRFd1h
+D0yXd9aJAJUDBRAxfo19a1pnjYGyp3kBAQqyA/4v64vP3l1F0Sadn6ias761hkz/
+SMdTuLzILmofSCC4o4KWMjiWJHs2Soo41QlZi1+xMHzV32JKiwFlGtPHqL+EHyXy
+Q4H3vmf9/1KF+0XCaMtgI0wWUMziPSTJK8xXbRRmMDK/0F4TnVVaUhnmf+h5K7O6
+XdmejDTa0X/NWcicmIkAlQMFEDF8lef1FVv7jlQtXQEBcnwD/0ro1PpUtlkLmreD
+tsGTkNa7MFLegrYRvDDrHOwPZH152W2jPUncY+eArQJakeHiTDmJNpFagLZglhE0
+bqJyca+UwCXX+6upAclWHEBMg2byiWMMqyPVEEnpUoHM1sIkgdNWlfQAmipRBfYh
+2LyCgWvR8CbtwPYIFvUmGgB3MR87iQCVAwUQMUseXB9/qQgDWPy9AQGPkwP/WEDy
+El2Gkvua9COtMAifot2vTwuvWWpNopIEx0Ivey4aVbRLD90gGCJw8OGDEtqFPcNV
+8aIiy3fYVKXGZZjvCKd7zRfhNmQn0eLDcymq2OX3aPrMc2rRlkT4Jx425ukR1gsO
+qiQAgw91aWhY8dlw/EKzk8ojm52x4VgXaBACMjaJAJUDBRAxOUOg72G56RHVjtUB
+AbL4A/9HOn5Qa0lq9tKI/HkSdc5fGQD/66VdCBAb292RbB7CS/EM07MdbcqRRYIa
+0+0gwQ3OdsWPdCVgH5RIhp/WiC+UPkR1cY8N9Mg2kTwJfZZfNqN+BgWlgRMPN27C
+OhYNl8Q33Nl9CpBLrZWABF44jPeT0EvvTzP/5ZQ7T75EsYKYiYkAlQMFEDDmryQA
+8tkJ67sbQQEBPdsEALCj6v1OBuJLLJTlxmmrkqAZPVzt5QdeO3Eqa2tcPWcU0nqP
+vHYMzZcZ7oFg58NZsWrhSQQDIB5e+K65Q/h6dC7W/aDskZd64jxtEznX2kt0/MOr
+8OdsDis1K2f9KQftrAx81KmVwW4Tqtzl7NWTDXt44fMOtibCwVq8v2DFkTJy
+=JKbP
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.rich;
+
+
+Rich Murphey <rich@FreeBSD.org>
+fingerprint = AF A0 60 C4 84 D6 0C 73 D1 EF C0 E9 9D 21 DB E4
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAy97V+MAAAEEALiNM3FCwm3qrCe81E20UOSlNclOWfZHNAyOyj1ahHeINvo1
+FBF2Gd5Lbj0y8SLMno5yJ6P4F4r+x3jwHZrzAIwMs/lxDXRtB0VeVWnlj6a3Rezs
+wbfaTeSVyh5JohEcKdoYiMG5wjATOwK/NAwIPthB1RzRjnEeer3HI3ZYNEOpAAUR
+tCRSaWNoIE11cnBoZXkgPHJpY2hAbGFtcHJleS51dG1iLmVkdT6JAJUDBRAve15W
+vccjdlg0Q6kBAZTZBACcNd/LiVnMFURPrO4pVRn1sVQeokVX7izeWQ7siE31Iy7g
+Sb97WRLEYDi686osaGfsuKNA87Rm+q5F+jxeUV4w4szoqp60gGvCbD0KCB2hWraP
+/2s2qdVAxhfcoTin/Qp1ZWvXxFF7imGA/IjYIfB42VkaRYu6BwLEm3YAGfGcSw==
+=QoiM
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.jdp;
+
+
+John D. Polstra <jdp@polstra.com>
+Fingerprint = 54 3A 90 59 6B A4 9D 61 BF 1D 03 09 35 8D F6 0D
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAzMElMEAAAEEALizp6ZW9QifQgWoFmG3cXhzQ1+Gt+a4S1adC/TdHdBvw1M/
+I6Ok7TC0dKF8blW3VRgeHo4F3XhGn+n9MqIdboh4HJC5Iiy63m98sVLJSwyGO4oM
+dkEGyyCLxqP6h/DU/tzNBdqFzetGtYvU4ftt3RO0a506cr2CHcdm8Q+/vPRJAAUR
+tCFKb2huIEQuIFBvbHN0cmEgPGpkcEBwb2xzdHJhLmNvbT6JAJUDBRAzBNBE9RVb
++45ULV0BAWgiA/0WWO3+c3qlptPCHJ3DFm6gG/qNKsY94agL/mHOr0fxMP5l2qKX
+O6a1bWkvGoYq0EwoKGFfn0QeHiCl6jVi3CdBX+W7bObMcoi+foqZ6zluOWBC1Jdk
+WQ5/DeqQGYXqbYjqO8voCScTAPge3XlMwVpMZTv24u+nYxtLkE0ZcwtY9IkAlQMF
+EDMEt/DHZvEPv7z0SQEBXh8D/2egM5ckIRpGz9kcFTDClgdWWtlgwC1iI2p9gEhq
+aufy+FUJlZS4GSQLWB0BlrTmDC9HuyQ+KZqKFRbVZLyzkH7WFs4zDmwQryLV5wkN
+C4BRRBXZfWy8s4+zT2WQD1aPO+ZsgRauYLkJgTvXTPU2JCN62Nsd8R7bJS5tuHEm
+7HGmiQCVAwUQMwSvHB9/qQgDWPy9AQFAhAQAgJ1AlbKITrEoJ0+pLIsov3eQ348m
+SVHEBGIkU3Xznjr8NzT9aYtq4TIzt8jplqP3QoV1ka1yYpZf0NjvfZ+ffYp/sIaU
+wPbEpgtmHnVWJAebMbNs/Ad1w8GDvxEt9IaCbMJGZnHmfnEqOBIxF7VBDPHHoJxM
+V31K/PIoYsHAy5w=
+=cHFa
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.guido;
+
+
+Guido van Rooij <guido@gvr.win.tue.nl>
+Fingerprint = 16 79 09 F3 C0 E4 28 A7 32 62 FA F6 60 31 C0 ED
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.2
+
+mQCNAzGeO84AAAEEAKKAY91Na//DXwlUusr9GVESSlVwVP6DyH1wcZXhfN1fyZHq
+SwhMCEdHYoojQds+VqD1iiZQvv1RLByBgj622PDAPN4+Z49HjGs7YbZsUNuQqPPU
+wRPpP6ty69x1hPKq1sQIB5MS4radpCM+4wbZbhxv7l4rP3RWUbNaYutZnzI9AAUR
+tCZHdWlkbyB2YW4gUm9vaWogPGd1aWRvQGd2ci53aW4udHVlLm5sPokAlQMFEDMG
+Hcgff6kIA1j8vQEBbYgD/jm9xHuUuY+iXDkOzpCXBYACYEZDV913MjtyBAmaVqYo
+Rh5HFimkGXe+rCo78Aau0hc57fFMTsJqnuWEqVt3GRq28hSK1FOZ7ni9/XibHcmN
+rt2yugl3hYpClijo4nrDL1NxibbamkGW/vFGcljS0jqXz6NDVbGx5Oo7HBByxByz
+iQCVAwUQMhmtVjt/x7zOdmsfAQFuVQQApsVUTigT5YWjQA9Nd5Z0+a/oVtZpyw5Z
+OljLJP3vqJdMa6TidhfcatjHbFTve5x1dmjFgMX/MQTd8zf/+Xccy/PX4+lnKNpP
+eSf1Y4aK+E8KHmBGd6GzX6CIboyGYLS9e3kGnN06F2AQtaLyJFgQ71wRaGuyKmQG
+FwTn7jiKb1aJAJUDBRAyEOLXPt3iN6QQUSEBATwQA/9jqu0Nbk154+Pn+9mJX/YT
+fYR2UqK/5FKCqgL5Nt/Deg2re0zMD1f8F9Dj6vuAAxq8hnOkIHKlWolMjkRKkzJi
+mSPEWl3AuHJ31k948J8it4f8kq/o44usIA2KKVMlI63Q/rmNdfWCyiYQEVGcRbTm
+GTdZIHYCOgV5dOo4ebFqgYkAlQMFEDIE1nMEJn15jgpJ0QEBW6kEAKqN8XSgzTqf
+CrxFXT07MlHhfdbKUTNUoboxCGCLNW05vf1A8F5fdE5i14LiwkldWIzPxWD+Sa3L
+fNPCfCZTaCiyGcLyTzVfBHA18MBAOOX6JiTpdcm22jLGUWBf/aJK3yz/nfbWntd/
+LRHysIdVp29lP5BF+J9/Lzbb/9LxP1taiQCVAwUQMgRXZ44CzbsJWQz9AQFf7gP/
+Qa2FS5S6RYKG3rYanWADVe/ikFV2lxuM1azlWbsmljXvKVWGe6cV693nS5lGGAjx
+lbd2ADwXjlkNhv45HLWFm9PEveO9Jjr6tMuXVt8N2pxiX+1PLUN9CtphTIU7Yfjn
+s6ryZZfwGHSfIxNGi5ua2SoXhg0svaYnxHxXmOtH24iJAJUDBRAyAkpV8qaAEa3W
+TBkBARfQBAC+S3kbulEAN3SI7/A+A/dtl9DfZezT9C4SRBGsl2clQFMGIXmMQ/7v
+7lLXrKQ7U2zVbgNfU8smw5h2vBIL6f1PyexSmc3mz9JY4er8KeZpcf6H0rSkHl+i
+d7TF0GvuTdNPFO8hc9En+GG6QHOqbkB4NRZ6cwtfwUMhk2FHXBnjF4kAlQMFEDH5
+FFukUJAsCdPmTQEBe74EAMBsxDnbD9cuI5MfF/QeTNEG4BIVUZtAkDme4Eg7zvsP
+d3DeJKCGeNjiCWYrRTCGwaCWzMQk+/+MOmdkI6Oml+AIurJLoHceHS9jP1izdP7f
+N2jkdeJSBsixunbQWtUElSgOQQ4iF5kqwBhxtOfEP/L9QsoydRMR1yB6WPD75H7V
+iQCVAwUQMZ9YNGtaZ42Bsqd5AQH0PAQAhpVlAc3ZM/KOTywBSh8zWKVlSk3q/zGn
+k7hJmFThnlhH1723+WmXE8aAPJi+VXOWJUFQgwELJ6R8jSU2qvk2m1VWyYSqRKvc
+VRQMqT2wjss0GE1Ngg7tMrkRHT0il7E2xxIb8vMrIwmdkbTfYqBUhhGnsWPHZHq7
+MoA1/b+rK7CJAJUDBRAxnvXh3IDyptUyfLkBAYTDA/4mEKlIP/EUX2Zmxgrd/JQB
+hqcQlkTrBAaDOnOqe/4oewMKR7yaMpztYhJs97i03Vu3fgoLhDspE55ooEeHj0r4
+cOdiWfYDsjSFUYSPNVhW4OSruMA3c29ynMqNHD7hpr3rcCPUi7J2RncocOcCjjK2
+BQb/9IAUNeK4C9gPxMEZLokAlQMFEDGeO86zWmLrWZ8yPQEBEEID/2fPEUrSX3Yk
+j5TJPFZ9MNX0lEo7AHYjnJgEbNI4pYm6C3PnMlsYfCSQDHuXmRQHAOWSdwOLvCkN
+F8eDaF3M6u0urgeVJ+KVUnTz2+LZoZs12XSZKCte0HxjbvPpWMTTrYyimGezH79C
+mgDVjsHaYOx3EXF0nnDmtXurGioEmW1J
+=mSvM
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.peter;
+
+
+Peter Wemm <peter@FreeBSD.org>
+ aka <peter@spinner.dialix.com>
+ aka <peter@haywire.dialix.com>
+ aka <peter@perth.dialix.oz.au>
+Key fingerprint = 47 05 04 CA 4C EE F8 93 F6 DB 02 92 6D F5 58 8A
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3ia
+
+mQCNAy9/FJwAAAEEALxs9dE9tFd0Ru1TXdq301KfEoe5uYKKuldHRBOacG2Wny6/
+W3Ill57hOi2+xmq5X/mHkapywxvy4cyLdt31i4GEKDvxpDvEzAYcy2n9dIup/eg2
+kEhRBX9G5k/LKM4NQsRIieaIEGGgCZRm0lINqw495aZYrPpO4EqGN2HYnOMZAAUT
+tCVQZXRlciBXZW1tIDxwZXRlckBoYXl3aXJlLmRpYWxpeC5jb20+iQCVAwUQMwWT
+cXW7bjh2o/exAQEFkQP+LIx5zKlYp1uR24xGApMFNrNtjh+iDIWnxxb2M2Kb6x4G
+9z6OmbUCoDTGrX9SSL2Usm2RD0BZfyv9D9QRWC2TSOPkPRqQgIycc11vgbLolJJN
+eixqsxlFeKLGEx9eRQCCbo3dQIUjc2yaOe484QamhsK1nL5xpoNWI1P9zIOpDiGJ
+AJUDBRAxsRPqSoY3Ydic4xkBAbWLA/9q1Fdnnk4unpGQsG31Qbtr4AzaQD5m/JHI
+4gRmSmbj6luJMgNG3fpO06Gd/Z7uxyCJB8pTst2a8C/ljOYZxWT+5uSzkQXeMi5c
+YcI1sZbUpkHtmqPW623hr1PB3ZLA1TIcTbQW+NzJsxQ1Pc6XG9fGkT9WXQW3Xhet
+AP+juVTAhLQlUGV0ZXIgV2VtbSA8cGV0ZXJAcGVydGguZGlhbGl4Lm96LmF1PokA
+lQMFEDGxFCFKhjdh2JzjGQEB6XkD/2HOwfuFrnQUtdwFPUkgtEqNeSr64jQ3Maz8
+xgEtbaw/ym1PbhbCk311UWQq4+izZE2xktHTFClJfaMnxVIfboPyuiSF99KHiWnf
+/Gspet0S7m/+RXIwZi1qSqvAanxMiA7kKgFSCmchzas8TQcyyXHtn/gl9v0khJkb
+/fv3R20btB5QZXRlciBXZW1tIDxwZXRlckBGcmVlQlNELm9yZz6JAJUDBRAxsRJd
+SoY3Ydic4xkBAZJUA/4i/NWHz5LIH/R4IF/3V3LleFyMFr5EPFY0/4mcv2v+ju9g
+brOEM/xd4LlPrx1XqPeZ74JQ6K9mHR64RhKR7ZJJ9A+12yr5dVqihe911KyLKab9
+4qZUHYi36WQu2VtLGnw/t8Jg44fQSzbBF5q9iTzcfNOYhRkSD3BdDrC3llywO7Ql
+UGV0ZXIgV2VtbSA8cGV0ZXJAc3Bpbm5lci5kaWFsaXguY29tPokAlQMFEDGxEi1K
+hjdh2JzjGQEBdA4EAKmNFlj8RF9HQsoI3UabnvYqAWN5wCwEB4u+Zf8zq6OHic23
+TzoK1SPlmSdBE1dXXQGS6aiDkLT+xOdeewNs7nfUIcH/DBjSuklAOJzKliXPQW7E
+kuKNwy4eq5bl+j3HB27i+WBXhn6OaNNQY674LGaR41EGq44Wo5ATcIicig/z
+=gv+h
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ &a.joerg;
+
+
+Type Bits/KeyID Date User ID
+pub 1024/76A3F7B1 1996/04/27 Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
+ Key fingerprint = DC 47 E6 E4 FF A6 E9 8F 93 21 E0 7D F9 12 D6 4E
+ Joerg Wunsch <joerg_wunsch@interface-business.de>
+ Joerg Wunsch <j@uriah.heep.sax.de>
+ Joerg Wunsch <j@interface-business.de>
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: 2.6.3ia
+
+mQCNAzGCFeAAAAEEAKmRBU2Nvc7nZy1Ouid61HunA/5hF4O91cXm71/KPaT7dskz
+q5sFXvPJPpawwvqHPHfEbAK42ZaywyFp59L1GaYj87Pda+PlAYRJyY2DJl5/7JPe
+ziq+7B8MdvbX6D526sdmcR+jPXPbHznASjkx9DPmK+7TgFujyXW7bjh2o/exAAUR
+tC1Kb2VyZyBXdW5zY2ggPGpvZXJnX3d1bnNjaEB1cmlhaC5oZWVwLnNheC5kZT6J
+AJUDBRA0FFkBs1pi61mfMj0BAfDCA/oCfkjrhvRwRCpSL8klJ1YDoUJdmw+v4nJc
+pw3OpYXbwKOPLClsE7K3KCQscHel7auf91nrekAwbrXv9Clp0TegYeAQNjw5vZ9f
+L6UZ5l3fH8E2GGA7+kqgNWs1KxAnG5GdUvJ9viyrWm8dqWRGo+loDWlZ12L2OgAD
+fp7jVZTI1okAlQMFEDQPrLoff6kIA1j8vQEB2XQEAK/+SsQPCT/X4RB/PBbxUr28
+GpGJMn3AafAaA3plYw3nb4ONbqEw9tJtofAn4UeGraiWw8nHYR2DAzoAjR6OzuX3
+TtUV+57BIzrTPHcNkb6h8fPuHU+dFzR+LNoPaGJsFeov6w+Ug6qS9wa5FGDAgaRo
+LHSyBxcRVoCbOEaS5S5EiQCVAwUQM5BktWVgqaw0+fnVAQGKPwP+OiWho3Zm2GKp
+lEjiZ5zx3y8upzb+r1Qutb08jr2Ewja04hLg0fCrt6Ad3DoVqxe4POghIpmHM4O4
+tcW92THQil70CLzfCxtfUc6eDzoP3krD1/Gwpm2hGrmYA9b/ez9+r2vKBbnUhPmC
+glx5pf1IzHU9R2XyQz9Xu7FI2baOSZqJAJUDBRAyCIWZdbtuOHaj97EBAVMzA/41
+VIph36l+yO9WGKkEB+NYbYOz2W/kyi74kXLvLdTXcRYFaCSZORSsQKPGNMrPZUoL
+oAKxE25AoCgl5towqr/sCcu0A0MMvJddUvlQ2T+ylSpGmWchqoXCN7FdGyxrZ5zz
+xzLIvtcio6kaHd76XxyJpltCASupdD53nEtxnu8sRrQxSm9lcmcgV3Vuc2NoIDxq
+b2VyZ193dW5zY2hAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPokAlQMFEDIIhfR1u244
+dqP3sQEBWoID/RhBm+qtW+hu2fqAj9d8CVgEKJugrxZIpXuCKFvO+bCgQtogt9EX
++TJh4s8UUdcFkyEIu8CT2C3Rrr1grvckfxvrTgzSzvtYyv1072X3GkVY+SlUMBMA
+rdl1qNW23oT7Q558ajnsaL065XJ5m7HacgTTikiofYG8i1s7TrsEeq6PtCJKb2Vy
+ZyBXdW5zY2ggPGpAdXJpYWguaGVlcC5zYXguZGU+iQCVAwUQMaS91D4gHQUlG9CZ
+AQGYOwQAhPpiobK3d/fz+jWrbQgjkoO+j39glYGXb22+6iuEprFRs/ufKYtjljNT
+NK3B4DWSkyIPawcuO4Lotijp6jke2bsjFSSashGWcsJlpnwsv7EeFItT3oWTTTQQ
+ItPbtNyLW6M6xB+jLGtaAvJqfOlzgO9BLfHuA2LY+WvbVW447SWJAJUDBRAxqWRs
+dbtuOHaj97EBAXDBA/49rzZB5akkTSbt/gNd38OJgC+H8N5da25vV9dD3KoAvXfW
+fw7OxIsxvQ/Ab+rJmukrrWxPdsC+1WU1+1rGa4PvJp/VJRDes2awGrn+iO7/cQoS
+IVziC27JpcbvjLvLVcBIiy1yT/RvJ+87a3jPRHt3VFGcpFh4KykxxSNiyGygl4kA
+lQMFEDGCUB31FVv7jlQtXQEB5KgD/iIJZe5lFkPr2B/Cr7BKMVBot1/JSu05NsHg
+JZ3uK15w4mVtNPZcFi/dKbn+qRM6LKDFe/GF0HZD/ZD1FJt8yQjzF2w340B+F2GG
+EOwnClqZDtEAqnIBzM/ECQQqH+6Bi8gpkFZrFgg5eON7ikqmusDnOlYStM/CBfgp
+SbR8kDmFtCZKb2VyZyBXdW5zY2ggPGpAaW50ZXJmYWNlLWJ1c2luZXNzLmRlPokA
+lQMFEDHioSdlYKmsNPn51QEByz8D/10uMrwP7MdaXnptd1XNFhpaAPYTVAOcaKlY
+OGI/LLR9PiU3FbqXO+7INhaxFjBxa0Tw/p4au5Lq1+Mx81edHniJZNS8tz3I3goi
+jIC3+jn2gnVAWnK5UZUTUVUn/JLVk/oSaIJNIMMDaw4J9xPVVkb+Fh1A+XqtPsVa
+YESrNp0+iQCVAwUQMwXkzcdm8Q+/vPRJAQEA4QQAgNNX1HFgXrMetDb+w6yEGQDk
+JCDAY9b6mA2HNeKLQAhsoZl4HwA1+iuQaCgo3lyFC+1Sf097OUTs74z5X1vCedqV
+oFw9CxI3xuctt3pJCbbN68flOlnq0WdYouWWGlFwLlh5PEy//VtwX9lqgsizlhzi
+t+fX6BT4BgKi5baDhrWJAJUDBRAyCKveD9eCJxX4hUkBAebMA/9mRPy6K6i7TX2R
+jUKSl2p5oYrXPk12Zsw4ijuktslxzQhOCyMSCGK2UEC4UM9MXp1H1JZQxN/DcfnM
+7VaUt+Ve0wZ6DC9gBSHJ1hKVxHe5XTj26mIr4rcXNy2XEDMK9QsnBxIAZnBVTjSO
+LdhqqSMp3ULLOpBlRL2RYrqi27IXr4kAlQMFEDGpbnd1u244dqP3sQEBJnQD/RVS
+Azgf4uorv3fpbosI0LE3LUufAYGBSJNJnskeKyudZkNkI5zGGDwVneH/cSkKT4OR
+ooeqcTBxKeMaMuXPVl30QahgNwWjfuTvl5OZ8orsQGGWIn5FhqYXsKkjEGxIOBOf
+vvlVQ0UbcR0N2+5F6Mb5GqrXZpIesn7jFJpkQKPU
+=97h7
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+
+
+
diff --git a/es_ES.ISO_8859-1/books/handbook/policies/chapter.sgml b/es_ES.ISO_8859-1/books/handbook/policies/chapter.sgml
new file mode 100755
index 0000000000..d76ecbbe6d
--- /dev/null
+++ b/es_ES.ISO_8859-1/books/handbook/policies/chapter.sgml
@@ -0,0 +1,392 @@
+
+
+
+ Guías y políticas del árbol de código fuente
+
+ Contribución de &a.phk;.
+
+ Este capítulo documenta la política por la que se rige el
+ árbol de código fuente de FreeBSD.
+
+
+ MAINTAINER en Makefiles
+
+ Junio 1996.
+
+ Si una parte en particular de la distribución FreeBSD es mantenida por
+ una persona o grupo de personas, pueden comunicar este hecho al mundo añadiendo
+ esta línea
+
+
+MAINTAINER= email-addresses
+
+ a los Makefiles que cubren esta parte del árbol de
+ código fuente.
+
+ La semántica de es como sigue:
+
+ El mantenedor posee y es responsable de ese código. Esto significa que
+ él es responsable de arreglar errores y responder reportes de problemas relacionados
+ con esa parte del código, y en el caso de contribución de software, de revisar
+ nuevas versiones, según sea necesario.
+
+ Los cambios en directorios que tienen un mantenedor definido deberán ser
+ enviados al mantenedor para ser revisados antes de ser incluidos.
+ Sólo si el mantenedor no responde durante un periodo de tiempo inaceptable, a
+ varios mensajes, será aceptable incluir cambios sin la revisión del
+ mantenedor. Sin embargo, se sugiere que los cambios sean revisados por alguien más
+ si es posible.
+
+ No es aceptable, por supuesto, añadir una persona o grupo como mantenedor a
+ menos que estén de acuerdo en asumir esta tarea. Por otro lado, no tiene
+ porqué ser un committer, pudiendo ser fácilmente un grupo de personas.
+
+
+
+ Software de Contribución
+
+ Contribucion de &a.phk; y &a.obrien;.
+
+ Junio 1996.
+
+ Algunas partes de la distribución de FreeBSD consisten en software
+ que está siendo mantenido activamente fuera del proyecto FreeBSD. Por razones
+ históricas, llamamos a esto software de contribución.
+ Algunos ejemplos son perl, gcc y patch.
+
+ En los últimos dos años, se han usado diferentes métodos para
+ tratar con este tipo de software y todos tienen algunas ventajas e inconvenientes. No
+ ha emergido ningún claro ganador.
+
+ Ya que este es el caso, después de algo de debate uno de estos
+ métodos ha sido seleccionado como el método “oficial”
+ y será requerido para futuras importaciones de este tipo de software.
+ Más aún, se sugiere firmemente que el software de contribución existente
+ converja con este modelo en el futuro, ya que tiene ventajas significativas
+ sobre el antiguo método, incluyendo la habilidad de obtener fácilmente
+ diferencias relativas a la versión “oficial” del fuente por todos
+ (aún sin acceso cvs). Esto hará significativamente mas fácil el
+ devolver cambios a los desarrolladores primarios del software de contribución.
+
+ Finalmente, sin embargo, quedan las personas que están haciendo el
+ trabajo. Si usar este modelo es particularmente incompatible con el paquete con el cual
+ se trata, se pueden conceder excepciones a esta regla solo con la aprobación del
+ core team y con el consenso general de los otros desarrolladores. La habilidad de mantener
+ el paquete en el futuro será un asunto clave en las decisiones.
+
+
+ Debido a algunas desafortunadas limitaciones de diseño con el formato de
+ archivo RCS y el uso de las ramas "vendors" con el CVS, son
+ fuertemente desaprobados cambios cosméticos, triviales y/o
+ menores en archivos que estén siendo seguidos por la rama "vendor".
+ Los "arreglos de sintaxis" están incluidos explícitamente aquí
+ bajo la categoría "cosméticos" y deben ser evitados en archivos con
+ revisión 1.1.x.x. El impacto que puede tener la modificación de un
+ sólo carácter en el repositorio puede ser bastante dramático.
+
+
+ El lenguaje de programación Tcl será usado
+ como un ejemplo sobre como este modelo trabaja:
+
+ src/contrib/tcl contiene los fuentes distribuidos
+ por los mantenedores de este programa. Las partes que no son enteramente
+ aplicables a FreeBSD pueden ser eliminadas. En el caso del Tcl, los subdirectorios
+ mac, win y compat fueron
+ eliminados antes de la importación
+
+ src/lib/libtcl contiene sólo un Makefile
+ estilo bmake que usa las reglas estándar bsd.lib.mk makefile
+ para producir la librería e instalar la documentación.
+
+ src/usr.bin/tclsh contiene sólo un
+ Makefile estilo bmake que producirá e instalará
+ el programa tclsh y sus páginas man asociadas usando las
+ reglas estándar bsd.prog.mk
+
+ src/tools/tools/tcl_bmake contiene un par de shell scripts que
+ pueden ser de ayuda cuando el software tcl necesita actualización. Estos no son
+ parte integral o de instalación del software.
+
+ Lo importante aquí es que el directorio
+ src/contrib/tcl se crea de acuerdo a las reglas:
+ se supone que debe contener las fuentes tal y como se distribuyen (en una rama vendor
+ adecuada del CVS y sin expansión de claves RCS) con tan pocos cambios
+ específicos para FreeBSD como sea posible. La herramienta "easy-import"
+ (importación fácil) en freefall ayudará haciendo la
+ importación, pero si hay dudas acerca de como hacerlo, es imperativo que se pregunte
+ primero y no hacerlo esperando que “funcione”. El CVS no perdona accidentes de
+ importación y se requiere un gran esfuerzo para arreglar grandes errores.
+
+ Debido a las limitaciones de diseño previamente mencionadas de las
+ ramas "vendor" del CVS, se requiere que los parches “oficiales”
+ del vendedor sean aplicados a los fuentes originales de distribución y el
+ resultado reimportado otra vez en la rama vendor correspondiente. Los parches oficiales
+ nunca deben ser usados en la versión disponible en el CVS de FreeBSD e integrados,
+ ya que esto destruye la coherencia de la rama vendor y hace que la importación de
+ futuras versiones sea más complicada por la aparición de conflictos.
+
+
+ Ya que muchos paquetes contienen archivos cuya intención es la
+ compatibilidad con otras arquitecturas y ambientes distintos a FreeBSD,
+ es permisible eliminar partes del árbol de distribución que no son de
+ interés para FreeBSD con el fin de ahorrar espacio. Los archivos que
+ contienen notas de copyright y notas de la versión, información en algo
+ aplicable a los archivos que quedan no deberán ser eliminados.
+
+
+ Si parece más fácil, los bmake
+ Makefiles pueden ser producidos automaticamente desde el árbol
+ de distribución por alguna utilidad, algo que podría hacer
+ aun más fácil el actualizar a una nueva versión. Si esto es hecho,
+ asegúrese de revisar tales utilidades (como sea necesario) en el directorio
+ src/tools junto con el mismo port para que esté disponible
+ para los futuros mantenedores.
+
+ En el nivel de directorio src/contrib/tcl
+ debe ser añdido un archivo llamado FREEBSD-upgrade
+ debiendo presentar cosas como:
+
+
+
+ Qué archivos se han dejado fuera de la importación
+
+
+
+ De donde fue obtenida la distribución original y/o el
+ servidor oficial principal.
+
+
+
+ Dónde enviar parches a los autores originales
+
+
+
+ Una visión general de los cambios específicos que se han hecho
+ para FreeBSD.
+
+
+
+ Sin embargo, por favor no importar FREEBSD-upgrade
+ (actualización) con los fuentes de contribución. En su lugar,
+ usar cvs add FREEBSD-upgrade ; cvs ci después del prompt
+ inicial. Más abajo existe un ejemplo de sintaxis de
+ src/contrib/cpio:
+
+
+Este directorio contiene códigos fuente virgen de los archivos originales de
+distribución en una rama "vendor". No tratar, bajo ninguna circunstancia,
+de actualizar los archivos en este directorio con parches y un cvs commit.
+Nuevas versiones o versiones oficiales de parches deben ser importadas.
+Por favor recuerdar importar con "-ko" para prevenir que el CVS corrompa
+el Id del RCS de algun vendor.
+
+Para la importación del GNU cpio 2.4.2, se eliminaron los siguientes archivos:
+
+ INSTALL cpio.info mkdir.c
+ Makefile.in cpio.texi mkinstalldirs
+
+Para actualizar a una versión más nueva de cpio, cuando esté disponible:
+ 1. Descomprimir la nueva versión en un directorio vacío.
+ [No hacer NINGUN cambio a los archivos.]
+
+ 2. Eliminar los archivos listados arriba y cualquier otro que no se relacione
+ con FreeBSD.
+
+ 3. Usar el comando:
+ cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
+ src/contrib/cpio GNU cpio_<version>
+
+ Por ejemplo, para importar la versión 2.4.2, usar:
+ cvs import -ko -m 'Virgin import of GNU v2.4.2' \
+ src/contrib/cpio GNU cpio_2_4_2
+
+ 4. Seguir las instrucciones del paso 3 para resolver cualquier conflicto entre
+ cambios locales de FreeBSD y la nueva versión.
+
+NO desviarse, bajo ninguna circunstancia, de este procedimiento.
+
+Para hacer cambios locales al cpio, simplemente aplicar el patch y commit a la rama
+principal (también conocida como HEAD). Nunca hacer cambios locales
+en la rama GNU.
+
+Todos los cambios locales deberían ser enviados a "cpio@gnu.ai.mit.edu" para
+su inclusión en la nueva versión release.
+
+obrien@FreeBSD.org - 30 March 1997
+
+
+
+ Archivos "adicionales" (encumbered)
+
+ Ocasionalmente podría ser necesario incluir un archivo "adicional" en el
+ código fuente de FreeBSD. Por ejemplo, si un dispositivo requiere que una
+ pequeña pieza de código binario sea cargada antes de que el dispositivo
+ funcione, y no tenemos los fuentes de ese código, entonces se dice que el archivo
+ binario es "encumbered".
+ Las siguientes políticas se aplican al incluir archivos encumbered en
+ en el árbol fuente FreeBSD.
+
+
+
+ Cualquier archivo que sea interpretado o ejecutado por la CPU del
+ sistema y no en formato fuente es encumbered.
+
+
+
+ Cualquier archivo con una licencia más restrictiva que BSD o GNU
+ es encumbered.
+
+
+
+ Un archivo que contiene datos binarios descargables para que el
+ hardware lo use no es encumbered, a menos que (1) o (2) se apliquen
+ a él. Debe ser guardado en un formato ASCII neutral a la arquitectura
+ (se recomienda file2c o uuencodeado).
+
+
+
+ Cualquier archivo encumbered requiere aprobación específica del
+ Core team antes de ser añadido al
+ repositorio CVS.
+
+
+
+ Los archivos encumbered van en src/contrib
+ o src/sys/contrib.
+
+
+
+ El módulo entero debería ser mantenido en su conjunto. No hay excusa en
+ separarlo, a menos que haya intercambio de código con código no encumbered.
+
+
+
+
+ Los archivos objeto son nombrados
+ arch/filename.o.uu>
+ .
+
+
+
+ Archivos del Kernel:
+
+
+
+ Siempre deben ser referenciados en conf/files.* (para
+ simplicidad del build).
+
+
+
+ Siempre debería estar en LINT, pero el Core team decide caso por caso si
+ debería ser comentado o no. El Core team puede, por supuesto, cambiar
+ su opinión más adelante.
+
+
+
+ El Ingeniero de Release
+ decide si va o no a la release.
+
+
+
+
+
+ Archivos de usuario:
+
+
+
+ El Core team decide si
+ el código debería ser parte de make world.
+
+
+
+ El Ingeniero de la Release
+ decide si va a la release.
+
+
+
+
+
+
+
+ Librerías compartidas
+
+ Contribuido por &a.asami;, &a.peter;, y &a.obrien; 9
+ Diciembre 1996.
+
+ Si se está añadiendo soporte para librerías compartidas a un puerto u
+ otra pieza de software que no tiene uno, los números de versión deben
+ seguir estas reglas. Generalmente, los números resultantes no tendrán nada
+ que ver con la versión release del software.
+
+ Los tres principios de la construcción de librerías compartidas son:
+
+
+
+ Comenzando desde 1.0
+
+
+
+ Si hay un cambio que sea compatible con versiones anteriores,
+ eliminar el número menor
+
+
+
+ Si hay un cambio incompatible, quitar el número mayor
+
+
+
+ Por ejemplo, funciones añadidas y solució de errores resultan en la
+ eliminación del numero de versión menor, mientras que las funciones borradas,
+ sintaxis cambiada de llamada de función, etc, forzarán que el número
+ de versión mayor cambie.
+
+ Usar los números de versión de la forma mayor.menor
+ (x.y). Nuestro
+ lincador dinámico no gestiona correctamente números de versión
+ de la forma x.y.z
+ . Cualquier número de versión después de y
+ (es decir, el tercer dígito) es totalmente ignorado cuando
+ se comparan números de versión de librerías compartidas
+ para decidir con que librería enlazar. Dadas 2 librerías compartidas
+ que difieren sólo en la “micro” revisión,
+ ld.so enlazará con la mas alta. Es decir:
+ si se enlaza con libfoo.so.3.3.3, el lincador
+ sólo reconoce 3.3 en los encabezados,
+ y enlazará con cualquiera que comience con libfoo.so.3.
+ (cualquier cosa >=3).(el más alto
+ disponible).
+
+ ld.so siempre usará la revisión
+ “menor” más alta. Es decir: usará
+ libc.so.2.2 en preferencia a
+ libc.so.2.0, aun si el programa estaba
+ inicialmente enlazado con libc.so.2.0.
+
+
+ Para librerías no portables, es también nuestra política cambiar
+ el número de versión de librería compartida solo una vez entre releases.
+ Cuando se hace un cambio a una librería del sistema que requiere
+ que se quite el número de versión, revisar los logs commit del
+ Makefile. Es responsabilidad del miembro del commit asegurarse de que
+ el primer cambio desde la release hará que se actualice el número de versión
+ de la librería compartida en el Makefile, y cualquier
+ subsecuente cambio no lo hará.
+
+
+
+
diff --git a/es_ES.ISO_8859-1/books/handbook/ports/chapter.sgml b/es_ES.ISO_8859-1/books/handbook/ports/chapter.sgml
new file mode 100755
index 0000000000..814a82ac73
--- /dev/null
+++ b/es_ES.ISO_8859-1/books/handbook/ports/chapter.sgml
@@ -0,0 +1,2091 @@
+
+
+
+
+ Instalando Aplicaciones: La colección de Ports
+
+ Contribuido por &a.jraynard;.
+
+ La colección de Ports de FreeBSD te permite compilar e instalar
+ una gran cantidad de programas con el mínimo esfuerzo.
+
+ Debido a las diferencias entre los estándars abiertos, conseguir
+ que un programa funcione en una versión diferente de Unix puede ser
+ tedioso y complicado, como debe saber todo aquel que lo haya intentado.
+ Tendrás suerte si el programa que quieres compila limpiamente,
+ instala todos los componentes donde debe instalarlos y funciona todo
+ correctamente al primer intento.
+
+ Algunas distribuciones de software han intentado solucionar este
+ problema incluyendo unos scripts de configuración. Algunos de estos
+ scripts son muy inteligentes, pero tienen tendencia a anunciar que tu
+ sistema es algo que nunca has oido y hacen preguntas que suenan a un
+ exámen final de programación en Unix.
+
+ Afortunadamente, con la colección de Ports, todo el trabajo
+ duro ya está hecho, y solo tienes que teclear el comando
+ make install para tener un programa perfectamente
+ instalado y en funcionamiento.
+
+
+ ¿Porqué tener una Colección de Ports?
+
+ El sistema base de FreeBSD incluye una gran variedad de
+ herramientas y utilidades de sistema, pero muchos de los programas
+ populares no están en la distribución base del sistema,
+ por buenas razones:
+
+
+
+ Programas con los que algunos usuarios no puede vivir sin ellos y
+ otros usuarios ni los conocen, como cierto editor basado en Lisp.
+
+
+
+ Programas demasiado especializados para ser incluidos en la
+ distribución base del sistema (CAD, bases de datos, etc).
+
+
+
+ Programas que se pueden incluir en la categoría
+ “Tengo que mirarlo cuando tenga un rato libre”
+ (algunos lenguajes, por ejemplo).
+
+
+
+ Programas que son demasiado divertidos para ser incluidos en
+ un sistema operativo serio como FreeBSD ;-)
+
+
+
+ Por muchos programas que se incluyesen en el sistema base, la
+ gente siempre quiere más, y se debe crear una línea
+ de separación en algún momento (de otra manera, las
+ distribuciones de FreeBSD serín enormes).
+
+
+
+ Obviamente no sería razonable que cada usuario se portase
+ manualmente sus programas favoritos (sin mencionar la enorme cantidad de
+ trabajo duplicado), así que el proyecto FreeBSD ha usado un
+ ingenioso sistema que mediante herramientas estándar permite
+ automatizar todo el proceso.
+
+ Esta es una excelente ilustración de como el
+ “Unix way” trabaja en la prática combinando una serie
+ de simples pero muy flexibles herramientas y consiguiendo algo muy
+ potente.
+
+
+
+ ¿Cómo funciona la Colección de Ports?
+
+ Los programas en Internet se suelen distribuir como un tarball consistente en un Makefile y el
+ código fuente del programa, incluyendo algunas instrucciones (las
+ cuales no siempre son tan instructivas como debieras), y un script de
+ configuración.
+
+ El escenario habitual es que bajas el tarball vía FTP, lo
+ extraes en algún directorio, lees las instrucciones, haces los
+ cambios que parezcan necesarios, ejecutas el script de configuración
+ y usas el programa make para compilar e instalar el
+ programa desde el código fuente.
+
+ Los ports de FreeBSD siguen usando el mecanismo del tarball, pero
+ usan un esqueleto en el que guardan
+ la información necesaria para que el programa funcione correctamente
+ en FreeBSD. Los ports también tienen su propio y personalizado
+ Makefile para practicamente todos
+ los ports puedan ser compilados de la misma manera.
+
+ Si miras el esqueleto de un port (ya sea en tu sistema
+ FreeBSD o en
+ el servidor FTP) y esperas encontrar todo tipo de combinaciones
+ de ciencia avanzada, puede que te decepciones, ya que sólo
+ encontrarás uno o dos ficheros y directorios de lo más
+ habitual. (En un momento veremos como obtener un port).
+
+ “¿Cómo es posible que esto pueda hacer algo?
+ ” Oigo como lloras. “No hay código fuente!”
+
+ Lo creas o no, gentil lector, todo quedará entendido (o eso
+ espero). Veamos que pasa si intentamos instalar un port. He elegido el
+ programa ElectricFence, una útil
+ herramienta para desarrolladores, ya que el esqueleto es más
+ claro que muchos otros.
+
+
+ Si intentas ejecutar esto, necesitas estar como root.
+
+
+ &prompt.root; cd /usr/ports/devel/ElectricFence
+&prompt.root; make install
+>> Checksum OK for ElectricFence-2.0.5.tar.gz.
+===> Extracting for ElectricFence-2.0.5
+===> Patching for ElectricFence-2.0.5
+===> Applying FreeBSD patches for ElectricFence-2.0.5
+===> Configuring for ElectricFence-2.0.5
+===> Building for ElectricFence-2.0.5
+[lots of compiler output...]
+===> Installing for ElectricFence-2.0.5
+===> Warning: your umask is "0002". If this is not desired, set it to
+ an appropriate value and install this port again by ``make reinstall''.
+install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.a /usr/local/lib
+install -c -o bin -g bin -m 444 /usr/ports/devel/ElectricFence/work/ElectricFence-2.0.5/libefence.3 /usr/local/man/man3
+===> Compressing manual pages for ElectricFence-2.0.5
+===> Registering installation for ElectricFence-2.0.5
+
+ Para evitar confusiones, he borrado todas las líneas
+ correspondientes a la compilación del programa.
+
+ Si has realizado la instalación de este port, habrás
+ obtenido algo así en pantalla:
+
+ &prompt.root; make install
+>> ElectricFence-2.0.5.tar.gz doesn't seem to exist on this system.
+>> Attempting to fetch from ftp://ftp.doc.ic.ac.uk/Mirrors/sunsite.unc.edu/pub/Linux/devel/lang/c/.
+
+ El programa make notifica que no tienes una copia
+ en local del código fuente e intenta bajarlo por FTP. En el
+ ejemplo, ya tenía el código en el ordenador, por lo que no
+ ha sido necesario obtenerlo de Internet.
+
+ Vayamos revisando que ha hecho el programa make
+
+
+
+
+ Localizar el tarball con el código fuente.
+ Si no está disponible localmente, intenta obtenerlo desde
+ un servidor FTP.
+
+
+
+ Ejecutar un test de checksum
+ para asegurar que el tarball del código fuente es correcto.
+
+
+
+ Extraer el tarball en un directorio temporal.
+
+
+
+ Aplicar todos los parches
+ necesarios para que el código fuente compile y funcione bajo
+ FreeBSD.
+
+
+
+ Ejecutar cualquier script de configuración requerido por
+ el proceso de compillación, además de responder
+ correctamente a cualquiera de las preguntas realizadas por éste.
+
+
+
+
+ (Finalmente!) Compilar el código.
+
+
+
+ Instalar los ejecutables del programa y otros archivos de
+ soporte, páginas man, etc, bajo la jerarquía
+ /usr/local, donde no se mezclarán con los
+ programas de sistema. Esto también asegura que todos los ports
+ que instales estarán en el mismo lugar, evitando que queden
+ repartidos por diferentes lugares del disco.
+
+
+
+ Registrar la instalación en una base de datos. Esto
+ significa que, si no te gusta el programa, puedes borrar todos sus programas y archivos
+ de tu sistema.
+
+
+
+ Vuelve a mirar la salida del programa make antes
+ mostrada e intenta localizar los pasos descritos. Y si no estabas impresionado
+ antes, deberías estarlo ahora.
+
+
+
+ Obteniendo un Port de FreeBSD
+
+ Hay dos maneras de obtener un port de FreeBSD para un programa. Uno
+ requiere el CDROM de FreeBSD, y el otro
+ requiere una conexión a Internet.
+
+
+
+ Compilar los PORTS desde CDROM
+
+ Asumiendo que tu CDROM de FreeBSD está en el lector y montado
+ en /cdrom (y must estar
+ montado en /cdrom), deberís poder compilar
+ toda la colección de ports sin problemas, ya que ésta
+ encontraría los tarballs en
+ /cdrom/ports/distfiles/ (si existen allí)
+ en lugar de obtenerlos de Internet.
+
+ Otra manera de hacer esto, si sólo quieres usar los
+ esqueletos del CDROM, es poner la variables del fichero
+ /etc/make.conf de la siguiente manera:
+
+
+PORTSDIR= /cdrom/ports
+DISTDIR= /tmp/distfiles
+WRKDIRPREFIX= /tmp
+
+ Substituye /tmp por cualquier directorio en
+ el que tengas suficiente espacio. Entonces, entra en el subdirectorio
+ apropiado bajo /cdrom/ports y teclea
+ make install como hasta ahora.
+ WRKDIRPREFIX hará que el port sea compilado
+ bajo /tmp/cdrom/ports; por ejemplo,
+ games/oneko será compilado bajo
+ /tmp/cdrom/ports/games/oneko.
+
+
+ Hay algunos ports para los que no podemos dar el código
+ fuente original en el CDROM debido a limitaciones de licencia. Es estos
+ casos, tendrás que mirar en la sección Compilando los ports usando una conexión a
+ Internet.
+
+
+
+
+ Compilando los Ports desde Internet
+
+ Si no tienes CDROM o quieres estar seguro de instalar la
+ última versión del port que te interesa, necesitarás
+ bajarte el esqueleto de ese port.
+
+
+ Primero, si estás usando una versión release de
+ FreeBSD, asegúrate de tener instalado el kit de actualización
+ apropiado para tu release. Para conocer el kit apropiado, mira en
+ la página web de
+ ports. Estos packages incluyen ficheros que han sido actualizados
+ desde la release y que serán necesarios para compilar los nuevos
+ ports.
+
+ La clave para los esqueletos es que el servidor FTP de FreeBSD puede
+ crear tarballs al momento.
+ Aquí tienes cómo trabaja, usando como ejemplo el programa
+ gnats en el directorio de bases de datos (el texto entre corchetes son
+ comentarios. No los teclees si intentas ejecutar el ejemplo):
+
+ &prompt.root; cd /usr/ports
+&prompt.root; mkdir databases
+&prompt.root; cd databases
+&prompt.root; ftp ftp.freebsd.org
+[log in as `ftp' and give your email address when asked for a
+password. Remember to use binary (also known as image) mode!]
+>cd /pub/FreeBSD/ports/ports/databases
+>get gnats.tar
+[tars up the gnats skeleton for us]
+>quit
+&prompt.root; tar xf gnats.tar
+[extract the gnats skeleton]
+&prompt.root; cd gnats
+&prompt.root; make install
+[build and install gnats]
+
+ ¿Qué ha ocurrido aquí?. Hemos conectado con
+ el servidor FTP de la manera habitual y entrado en el subdirectorio
+ databases. Al enviar el comando
+ get gnats.tar, el servidor FTP ha empaquetado en
+ formato tarred el directorio
+ gnats.
+
+ A continuación hemos extraido el esqueleto de gnats y
+ entrado en el directorio para compilar el port. Como hemos explicado
+ anteriormente, el programa
+ make ha detectado que el código fuente no
+ estaba disponible localmente y lo ha bajado de Internet antes de
+ extraerlo, aplicar los parches necesarios, compilarlo e instalarlo.
+
+ Intentemos ahora algo más ambicioso. En lugar de obtener el
+ esqueleto de un simple port, obtengamos todos los de un directorio, por
+ ejemplo los esqueletos de todas las bases de datos de la colección
+ de ports. El proceso es muy parecido:
+
+ &prompt.root; cd /usr/ports
+&prompt.root; ftp ftp.freebsd.org
+[log in as `ftp' and give your email address when asked for a
+password. Remember to use binary (also known as image) mode!]
+>cd /pub/FreeBSD/ports/ports
+>get databases.tar
+[tars up the databases directory for us]
+>quit
+&prompt.root; tar xf databases.tar
+[extract all the database skeletons]
+&prompt.root; cd databases
+&prompt.root; make install
+[build and install all the database ports]
+
+ Con media docena de sencillos comandos, tenenemos instalada toda
+ una serie de programas de bases de datos en nuestra máquina
+ FreeBSD. Todo lo que hemos hecho diferente de la instalación de
+ un sólo port ha sido bajarnos todo un directorio y compilarlo
+ todo de una sola vez. Impresionante, ¿no?.
+
+ Si tienes pensado instalar muchos ports, es buena idea bajarse
+ la colección de ports completa.
+
+
+
+
+ Esqueletos
+
+ Un grupo de hackers compulsivos que ha olvidado comer en un intento
+ de llegar a un punto prefijado?. No, un esqueleto aquí es la
+ expresión mínima que incluye todo lo necesario para que los
+ ports realicen su mágico trabajo.
+
+
+ Makefile
+
+ El componente más importante del esqueleto es el Makefile.
+ Este contiene diferentes declaraciones que especifican cómo
+ debe ser compilado e instalado un port. Aquí está el
+ Makefile para el port ElectricFence:
+
+
+# New ports collection makefile for: Electric Fence
+# Version required: 2.0.5
+# Date created: 13 November 1997
+# Whom: jraynard
+#
+# $Id$
+#
+
+DISTNAME= ElectricFence-2.0.5
+CATEGORIES= devel
+MASTER_SITES= ${MASTER_SITE_SUNSITE}
+MASTER_SITE_SUBDIR= devel/lang/c
+
+MAINTAINER= jraynard@freebsd.org
+
+MAN3= libefence.3
+
+do-install:
+ ${INSTALL_DATA} ${WRKSRC}/libefence.a ${PREFIX}/lib
+ ${INSTALL_MAN} ${WRKSRC}/libefence.3 ${PREFIX}/man/man3
+
+.include <bsd.port.mk>
+
+ Las líneas que empiezan con el símbolo "#"
+ son comentarios para facilitar las cosas a los lectores humanos (como
+ en la mayoría de los scripts en Unix).
+
+ DISTNAME especifica el nombre del tarball, pero sin la extensión.
+
+
+ CATEGORIES indica que tipo de programa es. En
+ este caso, una utilidad para desarrolladores. Mira en la sección
+ categorías de este
+ handbook para ver una lista completa.
+
+ MASTER_SITES es la URL(s) del servidor FTP
+ principal, usado para obtener el tarball si no está disponible
+ en el sistema local. Este servidor se considera fiable, y normalmente es
+ desde el que se distribuye de manera oficial el programa.
+
+ MAINTAINER es la dirección de email de
+ la persona responsable de actualizar el esqueleto, si, por ejemplo,
+ aparece una nueva versión del programa.
+
+ Pasando por alto las siguientes líneas, la línea
+ .include <bsd.port.mk> indica que las otras
+ declaraciones o comandos necesarios para compilar el port están
+ en un fichero estándar llamado bsd.port.mk.
+ Como éstas son las mismas para todos los ports, no hay necesidad
+ de duplicarlos en todos los ports, así que se mantienen en un
+ solo fichero.
+
+ Este no es el lugar para entrar en detalle sobre el funcionamiento
+ del Makefile; es suficiente con decir que la línea que comienza
+ con MAN3 asegura que la página man de
+ ElectricFence sea compilada después de la instalación, para
+ ayudar a conservar tu preciado espacio en disco. El port original no
+ contenía el objeto install, así que
+ las tres líneas a partir de do-install
+ aseguran que los ficheros producidos por este port sean instalados
+ en el lugar correcto.
+
+
+
+ El directorio files
+
+ El fichero que contiene el checksum del port se llama
+ md5, ya que se usa el algoritmo MD5 para comprobar
+ el checksum de los ports. Está en el directorio llamado
+ files.
+
+ Este directorio puede contener otros ficheros necesarios para
+ compilar el port y que no pueden situarse en ningun otro lugar.
+
+
+
+ El directorio patches
+
+ Este directorio contiene los patches necesarios para hacer
+ que todo funcione correctamente bajo FreeBSD.
+
+
+
+ El directorio pkg
+
+ Este programa contiene tres archivos muy comunes:
+
+
+
+ COMMENT — una descripción
+ muy corta del programa.
+
+
+
+ DESCR — una descripción
+ más detallada.
+
+
+
+ PLIST — una lista de todos los
+ archivos que serán creados cuando el programa esté
+ instalado.
+
+
+
+
+
+
+ ¿Qué hacer cuando un port no funciona?
+
+ Oh, puedes hacer una de estas cuatro (4) cosas:
+
+
+
+ Solucionarlo tú mismo. Los detalles técnicos de como
+ trabajan los ports se pueden encontrar en Portando aplicaciones.
+
+
+
+ Quejarte. Sólo hacerlo por email.
+ Enví el mail a la dirección &a.ports; y por favor,
+ indica el nombre/versión del port, dónde obtuviste el
+ código fuente y cual ha sido el texto de error.
+
+
+
+ Olvidarlo. Este el sistema más fácil para alguno
+ de los pocos ports que puedan clasificarse como esenciales.
+
+
+
+ Obtener el package compilado desde un servidor FTP. La
+ colección principal de packages está en el servidor
+ principal de FreeBSD en el directorio
+ packages, pero por favor, mira primero en tu mirror local.
+ Estos programas suelen dar menos problemas que intentar compilar el
+ código fuente y es, sobre todo, mucho más rápido.
+ Usa el programa &man.pkg.add.1; para instalar un package en tu
+ sistema.
+
+
+
+
+
+ Algunas Preguntas y Respuestas
+
+
+
+ P. Pensaba que esto iba a ser una discusión sobre modems
+
+
+ R. Ah. Debes estar pensando en los puertos serie que hay en la
+ parte trasera de tu ordenador. Aquí usamos la palabra
+ “port” para definir el resultado de “portar”
+ un programa de una versión de Unix a otra. (Desafortunadamente
+ es un mal hábito de los informáticos el usar la misma
+ palabra para referirse a cosas completamente diferentes).
+
+
+
+ P. Pensaba que usabais los packages para instalar los programas
+ extras
+
+ R. Sí, esa es la manera más rápida y
+ fácil de instalarlos.
+
+
+
+ P. Entonces, ¿Porqué usar los ports?
+
+ R. Por diferentes razones:
+
+
+
+ Las condiciones de la licencia de algunos programas requieren
+ que sean distribuidos como código fuente y no en formato
+ binario.
+
+
+
+ Algunas personas no confían en las distribuciones
+ binarias. Al menos, con el código fuente puedes (en
+ teoría) repasarlo y detectar problemas potenciales
+ tú mismo.
+
+
+
+ Si tienes algunos parches locales, necesitas el código
+ fuente para poder añadirlos tú mismo.
+
+
+
+ Posiblemente tengas opiniones diferentes a las de otros
+ usuarios en lo que respecta a las opciones de optimización
+ en la compilación, creación de versiones de debug,
+ etc.
+
+
+
+ A algunos usuarios les gusta tener el código fuente
+ para poder leerlo, retocarlo, destrozarlo (dentro de los
+ términos de la licencia, claro), y cosas así.
+
+
+
+
+
+ P. ¿Qué es un patch
+ (parche)?
+
+ R. Un parche es un pequeño fichero (normalmente) que
+ especifica como pasar de una versión de un archivo a otra.
+ Contiene texto que especifica cosas como “borrar línea
+ 23”, “añadir estas dos líneas después
+ de la línea 468” o “cambia la línea 197
+ por esta”. También se conoce como “diff” ya
+ que se genera por un programa llamado así.
+
+
+
+ P. Qué es un tarball?
+
+ R. Es un archivo terminado en .tar o
+ .tar.gz (con variaciones como
+ .tar.Z, o también .tgz
+ si intentas adecuar el nombre del archivo a un sistema de archivos
+ DOS).
+
+ Básicamente, es un árbol de directorios que ha
+ sido archivado en un solo fichero (.tar) y
+ opcionalmente comprimido (.gz). Esta
+ técnica se usó originalmente para
+ Tape ARchives (archivos de
+ cinta) y de aquí el nombre tar, pero ahora
+ es de uso general en la distribución deil código
+ fuente de programas a través de Internet.
+
+ Puedes ver que archivos hay en ellos, o bién extraerlos
+ tú mismo, usando el programa estándar de Unix tar,
+ incluido en el sistema base de FreeBSD, así:
+
+ &prompt.user; tar tvzf foobar.tar.gz
+
+&prompt.user; tar xzvf foobar.tar.gz
+&prompt.user; tar tvf foobar.tar
+&prompt.user; tar xvf foobar.tar
+
+
+
+ P. ¿Y el checksum?
+
+ R. Es un número que se genera a partir de todo el
+ contenido del archivo que quieres chequear. Si cambia alguno de
+ los carácteres, el checksum no será el mismo, así
+ que una simple comparación te permitirá conocer la
+ diferencia.
+
+
+
+ P. He hecho lo que indicais para
+ compilar los ports desde el CDROM y todo ha funcionado
+ bién hasta que he intentado instalar el port kermit:
+
+ &prompt.root; make install
+>> cku190.tar.gz doesn't seem to exist on this system.
+>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.
+
+ ¿Porqué no puedo encontrarlo?
+
+ R. Los términos de la licencia del programa kermit no nos
+ permiten incluir el tarball en el CDROM, así que tendrás
+ que bajarlo a mano. La razón por la que han salido esos errores
+ es que no estabas conectado a Internet en el momento de la
+ instalación. Una vez lo hayas bajado de cualquiera de los
+ servidores arriba mencionados, puedes empezar de nuevo el proceso
+ (intenta escoger el servidor más cercano a tí para
+ ganar tiempo y ahorrar ancho de banda de Internet).
+
+
+
+ P. He hecho lo que explicais, pero cuando intento poner el
+ archivo en /usr/ports/distfiles aparece un error
+ que indica que no tengo permisos.
+
+ R. El mecanismo de ports busca el tarball en
+ /usr/ports/distfiles, pero no podrás copiar
+ nada ahí por que es un link al CDROM, el cual es de sólo
+ lectura. Puedes indicar que busque el port en cualquier otro
+ directorio haciendo
+
+ &prompt.root; make DISTDIR=/where/you/put/it install
+
+
+
+ P. ¿Sólo funciona el esquema de ports si
+ están en /usr/ports? Mi administrador de
+ sistema dice que tengo que poner los archivos en
+ /u/people/guests/wurzburger, pero parece que
+ así no funciona.
+
+ R. Puedes usar las variables PORTSDIR y
+ PREFIX para indicarle al mecanismo de ports que
+ use directorios diferentes. Por ejemplo,
+
+ &prompt.root; make PORTSDIR=/u/people/guests/wurzburger/ports install
+
+ compilará el port en
+ /u/people/guests/wurzburger/ports e
+ instalará todos los archivos bajo
+ /usr/local.
+
+ &prompt.root; make PREFIX=/u/people/guests/wurzburger/local install
+
+ compilará el port en /usr/ports y
+ lo instalará en
+ /u/people/guests/wurzburger/local.
+
+ Y por supuesto
+
+ &prompt.root; make PORTSDIR=.../ports PREFIX=.../local install
+
+ combinará los dos (es demasiado extenso para escribirlo
+ en la página, pero seguro que te haces una idea).
+
+ Si no quieres tener que teclear todo esto cada vez que instalas
+ un ports, es una buena idea poner estas variables como variables de
+ entorno.
+
+
+
+ P. No tengo el CDROM de FreeBSD pero me gustaría disponer
+ de todos los tarball en mi sistema para no tener que esperar a que
+ se bajen de Internet cada vez que instalo un port. Hay alguna manera
+ sencilla de hacerlo?
+
+ R. Para obtener todos los tarball de la colección completa
+ de ports haz
+
+ &prompt.root; cd /usr/ports
+&prompt.root; make fetch
+
+ Para todos los tarball de un directorio de ports, haz
+
+ &prompt.root; cd /usr/ports/directory
+&prompt.root; make fetch
+
+ y para un solo port, bueno, creo que ya lo has adivinado.
+
+
+
+ P. Sé que probablemente es más rápido
+ obtener los tarballs desde un mirror de FreeBSD cercano. ¿Hay
+ alguna manera de obtener los ports de otros servidores diferentes a los
+ establecidos en MASTER_SITES?
+
+ R. Sí. Si sabes, por ejemplo que ftp.FreeBSD.ORG te es más cercano que los
+ servidores listados en MASTER_SITES, haz como en el
+ siguiente ejemplo.
+
+ &prompt.root; cd /usr/ports/directory
+&prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ports/distfiles/ fetch
+
+
+
+ P. Quiero saber que ficheros va a necesitar el programa
+ make antes de que intente bajarlos.
+
+ R. make fetch-list mostrará una lista
+ de los ficheros necesarios para el port.
+
+
+
+ P. ¿Hay alguna manera de parar la compilación del
+ port?. Quiero hacer algunos retoques en el código fuente antes
+ de instalarlo, pero es un poco pesado tener que estar atento y pulsar
+ control-C cada vez.
+
+ R. Ejecutando make extract, el port
+ parará después de haber obtenido y extraido el
+ código fuente.
+
+
+
+ P. Estoy intentando crear mi propio port y quiero poder parar
+ la compilación hasta poder asegurarme de que mis parches
+ funcionan correctamente. ¿Hay alguna comando como
+ make extract, pero para parches?
+
+ R. Sí, make patch es lo que quieres.
+ Probablemente también encontrarás muy útil la
+ opción PATCH_DEBUG. Y ya de paso, gracias
+ por el esfuerzo!.
+
+
+
+ P. He oido que algunas opciones de compilación pueden
+ causar errores. ¿Es cierto?. ¿Cómo puedo
+ asegurarme de que compilo los ports con las opciones correctas?.
+
+ R. Sí, con la versión 2.6.3 de
+ gcc (la versión incluida en FreeBSD 2.1.0 y
+ 2.1.5), la opción puede crear problemas
+ a no ser que uses también la opción
+ . (Muchos de los ports no usan
+ ). Deberís poder
+ especificar las opciones de compilación con algo como
+
+ &prompt.root; make CFLAGS='-O2 -fno-strength-reduce'install
+
+ o editando el fichero /etc/make.conf, pero
+ desafortunadamente no todos los ports respetan esto. La forma más
+ segura es hacer make configure, entrar en el
+ directorio de los fuentes e inspeccionar a mano los Makefiles, pero
+ puede ser muy tedioso si los fuentes tienen muchos subdirectorios, cada
+ uno con su propio Makefile.
+
+
+
+ P. Hay tantos ports que resulta complicado encontrar el que
+ quiero. ¿Hay alguna lista de los ports disponibles?
+
+ R. Mira el archivo INDEX en
+ /usr/ports. También puedes hacer
+ búsquedas de palabras en la colección de ports. Por
+ ejemplo puedes encontrar ports referentes al lenguaje de
+ programación LISP usando:
+
+ &prompt.user; cd /usr/ports
+&prompt.user; make search key=lisp
+
+
+
+ P. Iba a instalar el port foo pero de pronto
+ el sistema paró la compilación y comenzó a
+ compilar el port bar. ¿Qué
+ está pasando?
+
+ R. El port foo necesita algo que ofrece el
+ port bar, por ejemplo, si foo
+ usa gráficos, bar puede tener
+ librerías con rutinas de procesamiento gráfico
+ útiles. O puede ser que bar sea una
+ herramienta necesaria para compilar el port foo.
+
+
+
+
+ P. Instalé el programa
+ grizzle desde los ports, y, francamente, me parece
+ una pérdida de espacio en disco, Quiero borrarlo pero no
+ sé dónde están todos los ficheros.
+ ¿alguna idea?
+
+ R. No hay problema, sólo haz
+
+ &prompt.root; pkg_delete grizzle-6.5
+
+
+
+ P. Espera un momento; necesitas saber el número de
+ versión para usar ese comando. No creerás que voy a ser
+ capaz de recordarlo, ¿no?
+
+ R. No, desde luego. Puedes encontrar el número de
+ versión haciendo
+
+ &prompt.root; pkg_info -a | grep grizzle
+Information for grizzle-6.5:
+grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.
+
+
+
+ P. Hablando de espacio en disco, el directorio de ports parece
+ que cada vez ocupa más espacio. ¿Es recomendable
+ borrar cosas?
+
+ R. Sí, si ya tienes instalado el programa y crees que no
+ vas a necesitarlo de nuevo. La mejor manera de hacerlo es
+
+ &prompt.root; cd /usr/ports
+&prompt.root; make clean
+
+ lo que entrará en todos los subdirectorios de ports y
+ borrará todo excepto el esqueleto de cada port.
+
+
+
+
+ P. He hecho lo que comentais y todavía tengo todos esos
+ tarballs o como le llameis en el directorio
+ distfiles. ¿Puedo borrar esos archivos?
+
+
+ R. Sí, si estás seguro de haber terminado con
+ ellos.
+
+
+
+ P. Me gusta tener muchos programas para poder jugar con ellos.
+ ¿Hay alguna manera de instalar todos los ports de una vez?
+
+
+ R. Sólo haz
+
+ &prompt.root; cd /usr/ports
+&prompt.root; make install
+
+
+
+ P. Bién, lo he intentado, pero pensando que tardaría
+ mucho me fuí a dormir y cuando he vuelto esta mañna he
+ visto que sólo había instalado tres ports y medio.
+ ¿Ha ido algo mal?
+
+ R. No, el problema es que algunos ports necesitan hacer preguntas
+ que no podemos responder por tí y necesitan tener a alguien
+ "a mano" para poder responderlas.
+
+
+
+ P. Realmente, no quiero perder todo un día delante del
+ monitor. ¿Alguna idea mejor?
+
+ R. Bueno, haz esto antes de irte a dormir
+
+ &prompt.root cd /usr/ports
+&prompt.root; make -DBATCH install
+
+ Esto instalará todos los ports que no
+ requieran participación por parte del usuario. Entonces,
+ cuando vuelvas haz
+
+ &prompt.root; cd /usr/ports
+&prompt.root; make -DIS_INTERACTIVE install
+
+ para terminar el trabajo.
+
+
+
+ P. En el trabajo, estamos usando el programa
+ frobble, que está en la colección de
+ ports, pero lo hemos alterado un poco para cubrir nuestras necesidades.
+ ¿Hay alguna manera sencilla de hacer nuestros propios packages
+ de manera que podamos distribuirlos más fácilmente en
+ nuestros servidores?
+
+ R. No hay problema, asumiendo que sabes como hacer los parches
+ para tus cambios:
+
+ &prompt.root; cd /usr/ports/somewhere/frobble
+&prompt.root; make extract
+&prompt.root; cd work/frobble-2.8
+[Apply your patches]
+&prompt.root; cd ../..
+&prompt.root; make package
+
+
+
+ P. Este sistema de ports es realmente fantástici. Estoy
+ desesperado por saber como lo habeis hecho. ¿Cuál es el
+ secreto?R. No hay nada secreto, lo tienes todo en los ficheros
+ bsd.ports.mk y
+ bsd.ports.subdir.mk en tu directorio de makefiles.
+
+
+ Los lectores con aversión a intrincados shell-scripts
+ están avisados de no seguir este link...)
+
+
+
+
+
+
+ Haciendo tú mismo un port
+
+ Contribuido por &a.jkh;, &a.gpalmer;, &a.asami; &a.obrien;
+ y &a.hoek;. 28 de Agosto de 1996.
+
+ Así que, ¿ahora estás interesado en hacer un
+ port?. Bién!
+
+ Lo que viene a continuación son algunas guís para crear
+ un nuevo port para FreeBSD. La mayoría del trabajo es hecha por el
+ fichero /usr/ports/Mk/bsd.port.mk que incluyen todos
+ los Makefile de los ports. Por favor, mira en este fichero para más
+ información sobre la manera de trabajar de la colección de
+ ports. Aunque no uses los Makefiles de manera habitualm, está
+ bién comentado, y podrás conocer una gran cantidad de cosas
+ a través de él.
+
+
+ Sólo una pequeña parte de las variables
+ sobreescribibles (VAR)
+ se mencionan en este documento. Muchas (si no todas) están
+ documentadas al inicio del fichero bsd.port.mk.
+ Este fichero usa una tabulación no estándar.
+ Emacs y Vim
+ deberín reconocer la configuración al cargar el fichero.
+ vi or ex se pueden configurar
+ para que usen los valores correctos tecleando
+ :set tabstop=4 una vez que el fichero ha sido
+ cargado.
+
+
+
+ Haciendo Ports rápidamente
+
+ Esta sección te explica cómo hacer un port
+ rápidamente. En muchos casos no es suficiente, pero ya lo iremos
+ viendo.
+
+ Primero, obtén el tarball original y ponlo en
+ DISTDIR, que por defecto apunta a
+ /usr/ports/distfiles.
+
+
+ Los siguientes comentarios asumen que el software compila
+ sin problema alguno en FreeBSD, y no se requiere absolutamente
+ ningún cambio para que el port funcione en tu sistema
+ FreeBSD. Si has necesitado modificar alguna cosa, tendrás que
+ referirte también por la siguiente sección.
+
+
+
+ Escribiendo el Makefile
+
+ El Makefile debería ser algo como
+ esto:
+
+
+# New ports collection makefile for: oneko
+# Version required: 1.1b
+# Date created: 5 December 1994
+# Whom: asami
+#
+# $Id$
+#
+
+DISTNAME= oneko-1.1b
+CATEGORIES= games
+MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
+
+MAINTAINER= asami@FreeBSD.ORG
+
+MAN1= oneko.1
+MANCOMPRESSED= yes
+USE_IMAKE= yes
+
+.include <bsd.port.mk>
+
+ Prueba de entenderlo tú mismo. No te preocupes por los
+ contenidos de la línea $Id$, ya
+ que serán completadas automaticamente por el CVS cuando el port
+ sea importado a la colección de ports principal. Puedes
+ encontrar información más detallada en la sección
+ Makefile de ejemplo.
+
+
+
+ Escribiendo los ficheros de descripción
+
+ Hay tres ficheros de descripción que son requeridos por
+ cualquier port. Los ficheros son COMMENT,
+ DESCR y PLIST. Estos ficheros
+ deben estar en el subdirectorio pkg.
+
+
+ COMMENT
+
+ Descripción corta del port.
+ Por favor no incluir el nombre del package
+ (o número de versión del software) en el comentario.
+ Aquí tienes un ejemplo:
+
+
+A cat chasing a mouse all over the screen.
+
+
+
+ DESCR
+
+ Esta es una descripción más detallada del
+ port. Uno o varios párrafos explicando claramente que
+ hace el port es suficiente.
+
+
+ Este no es un manual o una
+ descripción en profundidad de cómo usar o compilar
+ el port! Por favorm, ten cuidado si lo estás
+ copiando del README o del man. Si
+ el software portado tiene una página web oficial,
+ deberías listarlo aquí.
+
+
+ Te recomendamos que pongas tu nombre o firma al final de
+ este fichero de la manerae siguiente:
+
+
+This is a port of oneko, in which a cat chases a poor mouse all over
+the screen.
+ :
+(etc.)
+
+http://www.oneko.org/
+
+- Satoshi
+asami@cs.berkeley.edu
+
+
+
+ PLIST
+
+ Este fichero lista todos los ficheros instalados por el port.
+ También se llama “packing list” por que el
+ package es generado con los ficheros listados aquí. Los
+ paths son relativos al prefijo de instalación (normalmente
+ /usr/local o /usr/X11R6).
+ Si estás usando las variables
+ MANn (como
+ deberís hacer), no listes ninguna página man
+ aquí.
+
+ Aquí tienes un pequeño ejemplo:
+
+
+bin/oneko
+lib/X11/app-defaults/Oneko
+lib/X11/oneko/cat1.xpm
+lib/X11/oneko/cat2.xpm
+lib/X11/oneko/mouse.xpm
+@dirrm lib/X11/oneko
+
+ Mira en el man de &man.pkg.create.1; para más detalles
+ sobre la "lista de empaquetado".
+
+
+ Deberís listar todos los ficheros, pero no los nombres
+ de los directorios. De la misma manera, si el port crea directorios
+ por sí mismo durante la instalación, asegúrate
+ de añadir las líneas @dirrm
+ cuando sea necesario para eliminarlos cuando el port sea
+ desinstalado.
+
+ Es recomendable que mantengas todos los nobres de fichero en
+ este archivo ordenados alfabéticamente. Hará que la
+ verificación de cambios cuando actualices el port sea mucho
+ más sencilla.
+
+
+
+
+
+ Creando el fichero de checksum
+
+ Solo teclea make checksum. Las reglas del
+ programa make para los ports generarán automáticamente
+ el fichero files/md5.
+
+
+
+ Testeando los ports
+
+ Debes asegurarte de que las reglas de los ports hagan
+ exactamente lo que quieres que hagan, incluyendo el empaquetado
+ del port. Estos son los puntos importantes que necesitas verificar:
+
+
+
+
+ PLIST no contiene nada que no sea
+ instalado por tu port
+
+
+
+ PLIST contiene absolutamente todos
+ los ficheros instalados por tu port
+
+
+
+ Tu port puede ser instalado múltiples veces
+ usando el parámetro reinstall
+
+
+
+ Tu port se elimina
+ a sí mismo al usar el parámetro deinstall
+
+
+
+
+ Orden de test recomendado
+
+
+ make install
+
+
+
+ make package
+
+
+
+ make deinstall
+
+
+
+ pkg_add `make package-name`
+
+
+
+ make deinstall
+
+
+
+ make reinstall
+
+
+
+ make package
+
+
+
+ Asegúrate de que no existe ningún warning en
+ los comandos package y
+ deinstall. Después del paso 3, mira
+ si todos los nuevos directorios han sido eliminados correctamente.
+ también, intenta usar el software después del paso 4,
+ para asegurarte de que funciona correctamente cuando es instalado desde
+ un package.
+
+
+
+ Probando tu port con portlint
+
+ Por favor, usa el comando portlint para
+ ver si tu port cumple nuestras normas. El programa
+ portlint forma parte de la colección de
+ ports. En particular, debes probar que el
+ Makefile es correcto y que el
+ package es nombrado
+ apropiadamente.
+
+
+
+ Enviando un port
+
+ Primero, asegúrate de haber leido la sección
+ Do's and Dont's.
+
+ Ahora que ya tienes tu port, solo queda incluirlo en la
+ colección de ports principal de FreeBSD y que todo el mundo
+ lo tenga a su alcance. No necesitamos tu directorio
+ work o el archivo de package
+ pkgname.tgz, así que bórralos
+ ahora. A continuación, simplemente incluye la salida de
+ shar `find port_dir` en un "bug report" y
+ envialo con el programa &man.send-pr.1; (mira en
+ Bug Reports y comentarios generales para más información sobre &man.send-pr.1;. Si el port
+ descomprimido es mayor de 20Kb deberías comprimirlo en un
+ fichero tar y usar el comando &man.uuencode.1; antes de incluirlo en
+ el bug report. Clasifica el bug report en la categoría
+ ports y clase change-request.
+ No marques el port como confidencial!)
+
+ Una vez más, no incluyas el código
+ fuente original, el directorio work, o el
+ package creado con make package.
+
+
+ En el pasado, te recomendabamos enviar el nuevo port a nuestro
+ servidor ftp (ftp.freebsd.org). Esto
+ ya no es recomendando ya que el permiso de lectura se ha desactivado
+ en el directorio incoming por la cantidad de
+ software pirata que se enviaba.
+
+
+ Miraremos tu port, nos pondremos en contacto contigo si es
+ necesario y lo añadiremos en la colección principal.
+ Tu nombre aparecerá en la lista
+ “Additional FreeBSD contributors” en el Handbook de
+ FreeBSD y otros ficheros. ¿No es genial?!? :)
+
+
+
+
+ Ports paso a paso
+
+ Bién, así que no ha sido tan simple, y el port
+ ha necesitado algunas modificaciones para funcionar. En esta
+ sección, explicaremos, paso a paso, como modificarlo para
+ que pueda funcionar en el entorno de los ports.
+
+
+ Cócomo funcionan las cosas
+
+ Primero, esta es la secuencia de eventos que ocurren cuando
+ un usuario teclea make en el directorio de ports.
+ Si tienes otra ventana con el fichero bsd.port.mk
+ te resultará más sencillo entender todo el proceso.
+
+ Pero no te preocupes si realmente no entiendes todo lo que
+ hace el fichero bsd.port.mk... no hay mucha gente
+ que realmente lo entienda...
+ :>
+
+
+
+
+ El objeto fetch es ejecutado. El
+ objeto fetch es el responsable de asegurar
+ que el tarball necesario existe localmente en el directorio
+ DISTDIR. Si fetch
+ no puede encontrar los ficheros requeridos en
+ DISTDIR localizará el URL de
+ MASTER_SITES, la cual existe en el Makefile,
+ al igual que en nuestro servidor principal ftp ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/,
+ que usamos como servidor de backup. A continuación
+ intentará obtener el archivo de la distribución
+ con FETCH, asumiendo que el servidor de
+ origen tiene conexión directa a Internet. Si este paso
+ termina correctamente, grabará el archivo en
+ DISTDIR para su uso futuro.
+
+
+
+ El objeto extract es ejecutado.
+ Busca el archivo de distribución del port
+ (normalmente un tarball comprimido con gzip) en
+ DISTDIR y lo descomprime en un sibdirectorio
+ temporal especificado por la variable WRKDIR
+ (normalmente work).
+
+
+
+ Se ejecuta el objeto patch. Primero
+ se aplican todos los parches definidos en
+ PATCHFILES. A continuación, si no se
+ han encontrado parches en PATCHDIR (que por
+ defecto está definido como el subdirectorio
+ patches), son aplicados en orden
+ alfabético.
+
+
+
+ Se ejecuta el objeto configure.
+ Este puede hacer cualquiera de las siguientes funciones.
+
+
+
+ Si existe, se ejecuta
+ scripts/configure.
+
+
+
+ Si USE_IMAKE está
+ definido, se ejecuta XMKMF (por
+ defecto: xmkmf -a).
+
+
+
+
+
+ Se ejecuta el objeto build. Este es
+ responsable de descender por los directorios de trabajo privados
+ del port (WRKSRC) y compilarlos. Si se ha
+ definido USE_GMAKE se usa el comando
+ make, en caso contrario, se usará el
+ comando de sistema make.
+
+
+
+ Las anteriores, son las acciones por defecto. Además,
+ puedes definir los objetos
+ pre-algo o
+ post-something,
+ o poner scripts con esos nombres. En el subdirectorio
+ scripts, y serán ejecutados antes o
+ después de las acciones por defecto.
+
+ Por ejemplo, si tienes definido un objeto
+ post-extract en tu Makefile, y un fichero
+ pre-build en el subdirectorio
+ scripts, el objeto
+ post-extract será llamado después
+ de las acciones de extracción regulares, y el script
+ pre-build será ejecutado antes que las
+ reglas por defecto de compilación. Es recomendable que uses
+ objetos de Makefile en caso de que las acciones
+ a realizar sean suficientemente simples, ya que así
+ resultará mucho más sencillo saber que tipo de acciones
+ no regulares requiere el port.
+
+ Las acciones por defecto son ejecutadas por los objetos
+ do-something del
+ fichero bsd.port.mk. Por ejemplo, los mandatos
+ para extraer un port están en el objeto
+ do-extract. Si necesitas algo no incluido
+ en el objeto por defecto, puedes solucionarlo redefiniendo el objeto
+ do-something en
+ tu Makefile.
+
+
+ Los objetos “principales” (por ejemplo,
+ extract,
+ configure, etc.) no hacen nada más
+ que asegurar que se han completado todos los procesos y llamar a los
+ objetos o scripts reales, y no se espera que sean modificados. Si
+ quieres modificar la extracción, cambia el objeto
+ do-extract, pero nunca modifiques
+ el objeto extract!
+
+
+ Ahora que entiendes lo que pasa cuando un usuario teclea
+ make, déjanos explicarte los pasos
+ recomendados para crear el port perfecto.
+
+
+
+ Obteniendo los fuentes originales
+
+ Obtén los fuentes originales (normalmente) en un
+ archivo comprimido
+ (foo.tar.gz o
+ foo.tar.Z) y copialo
+ en el directorio DISTDIR. Usa siempre dónde
+ y cuando puedas los fuentes procedentes del servidor
+ principal de la distribución.
+
+ Si no puedes encontrar un servidor ftp/http con una buena
+ conexión a Internet, o sólo encuentras servidores
+ que tienen los fuentes en irritantes formatos no estándar,
+ puedes poner una copia funcional del archivo en un servidor ftp
+ o http bajo tu control (tu página personal, por ejemplo).
+ Asegúrate de usar el valor correcto en la variable
+ MASTER_SITES para que refleje tu elección.
+
+
+ Si no puedes encontrar ningún lugar en el que poner
+ el fichero de distribución (si eres committer de FreeBSD,
+ puedes ponerlo en el directorio public_html/
+ del servidor freefall), nosotros podemos
+ albergarlo en
+ ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/LOCAL_PORTS/
+ como último recurso. Por favor, usa la variable
+ MASTER_SITE_LOCAL para referirte a este servidor y
+ subdirectorio. Envía un mail a &a.ports; si no estás
+ seguro de qué hacer.
+
+ Si tu archivo de distribución cambia continuamente sin
+ una buena razón, considera poner el archivo en tu página
+ personal y listarlo como el primer MASTER_SITES.
+ Esto evitará que los usuarios obtengan errores del tipo
+ checksum mismatch, y también
+ reducirá la carga de trabajo de las personas que hacen el
+ mantenimiento de nuestro servidor FTP. De la misma manera, si existe un
+ solo servidor como distribuidor principal del programa, es
+ recomendable que albergues una copia de la distribución en
+ tu servidor y lo listes como segundo
+ MASTER_SITES.
+
+ Si tu port requiere algunos parches adicionales que están
+ disponibles en Internet, bájalos y ponlos en
+ DISTDIR. No te preocupes si provienen de un
+ lugar diferente del que obtuviste el tarball principal, tenemos una
+ manera de solucionar este problema (consulta la descripción de
+ PATCHFILES).
+
+
+
+ Modificando el port
+
+ Descomprime una copia del tarball en un directorio privado y
+ haz todos los cambios necesarios para que el port compile en la
+ versión actual de FreeBSD. Mantén una lista
+ completa de todas las modificaciones que realizas para
+ poder automatizar el proceso. Todo, incluyendo borrar, añadir
+ o modificar ficheros debe poder hacerse de manera automática
+ usando un script o parche.
+
+ Si tu port requiere una importante interacción o
+ personalización para compilar o instalar, puedes mirar la
+ clásica aplicación Configure
+ de Larry Wall y hacer algo así tu mismo. El objetivo de la
+ nueva colección de ports es hacer que cada port sea tan
+ “plug-and-play” como sea posible para el usuario final,
+ usando el mínimo espacio en disco posible.
+
+
+ Aunque no se haya mencionado explícitamente, los
+ parches, scripts y otros archivos que hayas creado o contribuido
+ a la colección de ports de FreeBSD están cubiertos
+ por las condiciones estándar del copyright BSD.
+
+
+
+
+ Parcheando
+
+ En la preparación del port, los archivos que han sido
+ añdidos o modificados pueden recorrerse con un diff recursivo.
+ Cada serie de parches que quieras aplicar deben estar integrados en un
+ archivo llamado
+ patch-xx donde
+ xx marca la secuencia en que los parches
+ serán aplicados — éstos se aplican en
+ órden alfabético, así
+ primero será aa, segundo
+ ab ,etc. Estos archivos deben estar en
+ PATCHDIR, desde donde serán
+ automáticamente aplicados. Todos los parches deben ser relativos
+ a WRKSRC (generalmente es el directorio en el que
+ se descomprime el port, siendo éste el lugar donde se compila).
+ Para hacer que la solución de problemas y actualizaciones sea
+ más sencilla, deberís evitar tener más de un
+ parche aplicable a un mismo archivo (por ejemplo,
+ patch-aa y patch-ab
+ modificando ambos al archivo
+ WRKSRC/foobar.c).
+
+
+
+ Configurando
+
+ Incluye cualquier proceso de personalización adicional
+ en el script configure y guardalo en el
+ subdirectorio scripts. Como se ha mencionado
+ anteriormente, también puedes hacer esto como un objeto del
+ Makefile y/o un script con el nombre
+ pre-configure o
+ post-configure.
+
+
+
+ Gestionando las entradas de usuario
+
+ Si tu port requiere entradas por parte del usuario para la
+ compilación, configuración o instalación,
+ activa la variable IS_INTERACTIVE en tu
+ Makefile. Esto permitirá no compilar tu port si el usuario
+ usa la variable BATCH en su entorno (y si el usuario
+ activa la variable INTERACTIVE, entonces
+ sólo serán compilados los ports
+ que requieren interacción por parte del usuario).
+
+ También es recomendable desactivar el script interactivo
+ si un número razonable de respuestas por defecto son
+ aplicables al port (consultar la variable
+ PACKAGE_BUILDING). Esto nos permitirá
+ compilar el package para los CD-ROMs y ftp.
+
+
+
+
+ Configurando el Makefile
+
+ Configurar el Makefile es bastante sencillo, y de nuevo, te
+ sugerimos que consultes los ejemplos existentes antes de empezar.
+ También hay un
+ Makefile de ejemplo en este
+ handbook, así que, consultalo y, por favor, sigue el órden
+ de las variables y secciones del ejemplo para que tu port sea más
+ fácil de leer para otras personas.
+
+ Ahora, considera los siguientes problemas a medida que haces
+ el diseño de tu nuevo Makefile:
+
+
+ Los fuentes originales
+
+ Reside en DISTDIR como un tarball
+ estándar en formato gzip? Si es así puedes pasar al
+ siguiente paso. En caso contrario, deberías considerar la
+ posibilidad de sobreescribir alguna de las variables
+ EXTRACT_CMD,
+ EXTRACT_BEFORE_ARGS,
+ EXTRACT_AFTER_ARGS,
+ EXTRACT_SUFX, o DISTFILES,
+ dependiendo del formato del archivo de distribución del port.
+ (El caso más común es
+ EXTRACT_SUFX=.tar.Z, cuando el tarball está
+ comprimido con compress y no con gzip.)
+
+ En el peor de los casos, puedes crearte tu propio objeto
+ do-extract para sobreescribir el objeto
+ por defecto.
+
+
+
+ DISTNAME
+
+ El valor de DISTNAME debe ser el nombre
+ base del port. Las reglas por defecto esperan que la lista de archivos
+ de la distribución (DISTFILES) se llame
+ DISTNAMEEXTRACT_SUFX, el cual, si
+ es un tarball normal, seráa algo como
+ foozolix-1.0.tar.gz para usar el valor
+ DISTNAME=foozolix-1.0.
+
+ Las reglas por defecto también esperan extraer el
+ tarball en un subdirectorio llamado
+ work/DISTNAME, por ejemplo
+ work/foozolix-1.0/.
+
+ Todos estos valores pueden sobreescribirse; simplemente muestran
+ los valores más habituales. Para un port que requiera
+ múltiples archivos de distribución, simplemente usa
+ explícitamente DISTFILES. Si solo una parte
+ de los DISTFILES son archivos extraibles, entonces
+ usa EXTRACT_ONLY para referenciarlos, lo que
+ sobreescribirá la lista DISTFILES
+ cuando realice la extracción, y el resto de archivos se
+ dejarán en DISTDIR tal y como están
+ para su uso posterior.
+
+
+
+
+ PKGNAME
+
+ Si DISTNAME no sigue las normas de nombre para un package,
+ deberís asignar a la variable PKGNAME un valor
+ más correcto.
+
+
+
+ CATEGORIES
+
+ Cuando se crea un package, se incluye en el directorio
+ /usr/ports/packages/All creandose links desde uno
+ o más subdirectorios de /usr/ports/packages.
+ Los nombres de estos subdirectorios están especificados por la
+ variable CATEGORIES. Se utiliza para facilitar al
+ usuario la orientación dentro de la colección de ports y
+ packages. Por favor, consulta las categorías existentes y
+ elige las que sean aplicables a tu port.
+
+ Esta lista también determina en que lugar del árbol
+ de ports se importa el port. Si especificas más de una
+ categoría, se asume que los archivos del port estarán en
+ el subdirectorio con el nombre en la primera categoría.
+ Consulta la sección categorías para saber como
+ escoger la catergoría adecuada.
+
+ Si tu port pertenece realmente a una categorín
+ inexistente, puedes crear una nueva. En este caso, por favor,
+ envía un mail a &a.ports; para proponer una nueva
+ categoría.
+
+
+ No hay chequeo de error para los nombres de categorías.
+ make package creará un nuevo directorio
+ si tecleas mal el nombre de la categorí, así que
+ se cuidadoso!
+
+
+
+
+ MASTER_SITES
+
+ Guarda la parte del directorio del URL -ftp/hhtp que apunta al
+ tarball original en MASTER_SITES. No olvidar la
+ barra final (/)!
+
+ Las macros make intentaran usar esta
+ especificación para obtener el archivo de distribución
+ con FETCH si no lo pueden encontrar en el sistema.
+
+ Se recomienda poner diferentes servidores en la lista, preferiblemente
+ de continentes diferentes. Esto protegerá de posibles problemas de red
+ en grandes áreas, y se está pensando en la posibilidad de
+ añadir soporte para determinar automáticamente el servidor
+ principal más cercano para obtener el archivo desde él.
+
+ Si el tarball original forma parte de uno de estos servidores populares:
+ X-contrib, GNU, Perl CPAN, TeX CTAN o Linux Sunsite, se debe hacer referencia
+ a estos servidores usando
+ MASTER_SITE_XCONTRIB,
+ MASTER_SITE_GNU,
+ MASTER_SITE_PERL_CPAN,
+ MASTER_SITE_TEX_CTAN, y
+ MASTER_SITE_SUNSITE. Simplemente poner
+ MASTER_SITE_SUBDIR al path interno del servidor. Aquí
+ hay un ejemplo:
+
+
+MASTER_SITES= ${MASTER_SITE_XCONTRIB}
+MASTER_SITE_SUBDIR= applications
+
+
+ El usuario también puede usar las variables
+ MASTER_SITE_* en el archivo /etc/make.conf
+ para sobreescribir nuestras selecciones, y usar en su lugar el mirror que
+ prefiera de estos servidores.
+
+
+
+ PATCHFILES
+
+ Si el port requiere parches adicionales que están disponibles
+ por ftp o http, poner PATCHFILES a los nombres de archivos
+ y PATCH_SITES a la URL del directorio que los contiene
+ (el formato es el mismo que en MASTER_SITES).
+
+ Si el parche no es relativo a la raíz del árbol
+ (WKRSRC) porque contiene alguna información extra
+ sobre paths, usar la variable PATCH_DIST_STRIP. Por ejemplo,
+ si todos los path del parche contienen foozolix-1.0/
+ delante del nombre de archivo, usar PATCH_DIST_STRIP=-p1.
+
+ No preocuparse si los parches están comprimidos, serán
+ descomprimidos automáticamente si el nombre de archivo termina en
+ .gz o .Z.
+
+ Si el parche se distribuye con otros archivos, como documentación, en
+ un tarball gzip, no se puede usar PATCHFILES. Si este es el caso,
+ añadir el nombre y situación del tarball a DISTFILES
+ y MASTER_SITES. A continuación, desde el objeto
+ pre-patch, aplicar el parche ejecutando mandato
+ patch desde él, el copiando al archivo del parche en
+ el directorio PATCHDIR llamandolo
+ patch-xx.
+
+
+ Tener en cuenta que el tarball será extraido del fuente regular,
+ por lo que no es necesario extraerlo explícitamente si es un tarball
+ comprimido con gzip o compress. Si se hace lo último, tener cuidado de
+ no sobreescribir algo ya existente en ese directorio. No olvidarse de añadir
+ un mandato para borrar el parche copiado en el objeto
+ pre-clean
+
+
+
+
+ MAINTAINER
+
+ Poner aquí la dirección de mail. Por favor. :)
+
+ Para una descripción detallada de la responsabilidad de los
+ "maintainers", consultar la sección
+ MAINTAINER en Makefiles.
+
+
+
+ Dependencias
+
+ Muchos ports dependen de otros. Hay cinco variables que se pueden usar para
+ asegurar que existen todos los requerimientos necesarios en la máquina
+ del usuario. También hay algunas variables de dependencia pre-soportadas
+ para casos comunes, mas algunos controles de dependencia.
+
+
+ LIB_DEPENDS
+
+ Esta variable especifica las librerías compartidas de las que
+ depende el port. Es una lista de registros de
+ lib:dir:target
+ donde lib es el nombre de la librerí
+ compartida, y dir es el directorio en el cual encontrarla
+ en caso de no estar disponible y target es el objeto a
+ llamar en ese directorio. Por ejemplo,
+ LIB_DEPENDS=jpeg.9:${PORTSDIR}/graphics/jpeg:install
+ comprobará la existencia de la librería jpeg versión 9,
+ descendiendo al subdirectorio graphics/jpeg de la colección
+ de ports para compilarlo e instalarlo en caso de que no sea encontrado en el
+ sistema. El objeto target puede omitirse si es igual a
+ DEPENDS_TARGET (el cual, por defecto, tiene el valor
+ install).
+
+
+ La parte lib es un argumento dado a
+ ldconfig -r | grep -wF. Es posible que no existan
+ expresiones regulares en esta variable.
+
+
+ La dependencia se comprueba dos veces, una durante la ejecución de
+ extract y otra durante la ejecución de
+ install. También, se incluye el nombre de la
+ dependencia en el package, de manera que pkg_add
+ la instale automáticamente si no está en el sistema del usuario.
+
+
+
+ RUN_DEPENDS
+
+ Esta variable especifica ejecutables o archivos de los que depende la
+ compilació y/o ejecución de este port. Es una lista de tuples
+ path:dir:target
+ donde path es el nombre del ejecutable o archivo,
+ dir es el directorio en el que encontrarlo en caso
+ de no estar disponible y target es el objeto a llamar
+ en ese directorio. Si path empieza con una barra
+ (/), se trata como un archivo comprobando su existencia con
+ test -e; en caso contrario, se asume que es un ejecutable, y
+ se usa which -s para determinar si el programa existe en el
+ path del usuario.
+
+ Por ejemplo,
+
+
+RUN_DEPENDS= ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
+ wish8.0:${PORTSDIR}/x11-toolkits/tk80
+
+ comprobará si existe el directorio o archivo
+ /usr/local/etc/innd, compilando e instalandolo desde
+ el directorio news/inn del árbol de ports en
+ caso de no existir. También se comprueba la existencia del
+ ejecutable wish8.0 en el path, descendiendo al subdirectorio
+ x11-toolkits/tk80 de los ports para compilarlo e
+ instalarlo si no existe.
+
+
+ En este caso, innd es un ejecutable; si un ejecutable
+ está situado en un lugar diferente al esperado (fuera del path), es
+ necesario incluir el path completo.
+
+
+ La dependencia se comprueba desde el objeto install.
+ El nombre de la dependencia también es incluido en el package para que
+ pkg_add lo instale automáticamente si no existe en el
+ sistema del usuario. La parte target puede omitirse si
+ es el mismo DEPENDS_TARGET.
+
+
+
+ BUILD_DEPENDS
+
+ Esta variable especifica los ejecutables o archivos que este port necesita
+ para compilar. Igual que RUN_DEPENDS, es una lista de tuples
+ path:dir:target.
+ Por ejemplo, BUILD_DEPENDS=
+ unzip:${PORTSDIR}/archivers/unzip comprobará la existencia de
+ un ejecutable llamado unzip, descendiendo al subdirectorio
+ archivers/unzip en caso de no existir, para compilarlo e
+ instalarlo.
+
+
+ Compilación en este caso, se refiere a todo el proceso; desde la
+ extracción hasta la compilación final. La dependencia se comprueba
+ en el objeto extract. La parte
+ target puede omitirse si la misma que
+ DEPENDS_TARGET
+
+
+
+
+ FETCH_DEPENDS
+
+ Esta variable especifica ejecutables o archivos que se requieren para obtener
+ este port. Como los dos anteriores, es una lista de tuples
+ path:dir:target.
+ Por ejemplo, FETCH_DEPENDS=
+ ncftp2:${PORTSDIR}/net/ncftp2 comprobará la existencia de un
+ ejecutable llamado ncftp2, descendiendo al subdirectorio
+ net/ncftp2 de los ports para compilarlo e instalarlo en caso de
+ no existir.
+
+ La dependencia es comprobada en el objeto fetch.
+ La parte target puede omitirse si es la misma que
+ DEPENDS_TARGET.
+
+
+
+ DEPENDS
+
+ Si hay una dependencia que no se puede incluir en las cuatro categorías
+ anteriores, o el port necesita tener extraidos los fuentes de otro port para poder
+ ser instalado, usar esta variable. Esta es una lista compuesta de
+ dir:target,
+ ya que no no hay nada que comprobar, al contrario que las cuatro anteriores. La parte
+ target puede omitirse si es la misma que
+ DEPENDS_TARGET.
+
+
+
+ Variables de dependencia comunes
+
+ Definir USE_XLIB=yes si el port requiere la instalación
+ del sistema X Window (implícito en USE_IMAKE). Definir
+ USE_GMAKE=yes si el port requiere el make de
+ GNU en lugar del make de BSD. Definir USE_AUTOCONF=yes
+ si el port requiere la ejecución del autoconf de GNU. Definir
+ USE_QT=yes si el port usa el último kit qt. Usar
+ USE_PERL5=yes si el port requiere la versión 5 del
+ lenguaje perl. (Este último es especialmente importante ya que unas versiones
+ de FreeBSD contienen perl5 como parte del sistema y otras no.)
+
+
+
+ Notas sobre dependencias
+
+ Cómo se ha mencionado anteriormente, el objeto por defecto a llamar cuando
+ se require una dependencia es DEPENDS_TARGET. Por defecto es
+ install. Esta es una variable de usuario; nunca se define en los
+ Makefile de los ports. Si un port necesita gestionar las
+ dependencias de manera especial, usar la parte :target de las
+ variables *_DEPENDS en lugar de redefinir
+ DEPENDS_TARGET.
+
+ Cuando se ejecuta make clean, sus dependencias también
+ son "limpiadas". Si se quiere evitar esto, hay que definir la variable
+ NOCLEANDEPENDS en el entorno.
+
+ Para depender incondicionalmente de un port, es imprescindible usar la cadena de
+ texto nonexistent como primer campo de
+ BUILD_DEPENDS o RUN_DEPENDS. Usar esto sólo
+ cuando es necesario disponer del código fuente de otro port. Se puede ahorrar
+ tiempo de compilación especificando el objeto. Por ejemplo:
+
+
+BUILD_DEPENDS= /nonexistent:${PORTSDIR}/graphics/jpeg:extract
+
+ siempre descenderá al port JPEG y lo extraerá.
+
+ No usar DEPENDS a no ser que no exista otra manera de obtener
+ los resultados deseados. Hará que el otro port siempre sea compilado (e
+ instalado, por defecto), y la dependencia sea añadia al package. Si esto es lo
+ que realmente se necesita, es recomendable usar BUILD_DEPENDS
+ y RUN_DEPENDS.
+
+
+
+
+ Mecanismos de creación
+
+ Si el package usa GNU make, definir
+ USE_GMAKE=yes. Si el package usa configure,
+ definir HAS_CONFIGURE=yes. Si el package usa GNU
+ configure, definir GNU_CONFIGURE=yes (esto
+ implica HAS_CONFIGURE). Si se quieren pasar argumentos extra a
+ configure (el argumento por defecto es
+ --prefix=${PREFIX} para GNU
+ configure y vacío para no GNU
+ configure), definir los argumentos extra en
+ CONFIGURE_ARGS. Si el package usa GNU
+ autoconf, definir USE_AUTOCONF=yes. Esto
+ implica GNU_CONFIGURE, y causará la ejecución de
+ autoconf antes que configure.
+
+ Si el package es una aplicación X que crea archivos
+ Makefiles desde Imakefiles
+ usando imake, definir USE_IMAKE=yes. Esto
+ hará que durante el proceso de configuración se ejecute el
+ mandato xmkmf -a. Si el argumento es
+ problemático para el port, definir XMKMF=xmkmf. Si el
+ port usa el mandato imake pero no entiende el objeto
+ install.man, definir
+ NO_INSTALL_MANPAGES=yes.
+
+ Si el código fuente incluido en el Makefile del
+ port tiene algo más que el objeto all como
+ objeto principal de creación, definir ALL_TARGET
+ correctamente. Hacer lo mismo con install y
+ INSTALL_TARGET.
+
+
+
+
+ Consideraciones especiales
+
+ Hay más cosas a tener en cuenta a la hora de crear un port. Esta
+ sección explica las más comunes.
+
+
+ ldconfig
+
+ Si el port instala una librería compartida, añadir un objeto
+ post-install al Makefile para
+ que ejecute ${LDCONFIG} -m en el directorio donde
+ se ha instalado la nueva librería (normalmente
+ PREFIX/lib) para registrarla en el
+ caché de librerías compartido.
+
+ También, añadir un par
+ @exec /sbin/ldconfig -m y
+ @unexec /sbin/ldconfig -R al archivo pkg/PLIST
+ para que el usuario que ha instalado el port pueda usar la librería compartida
+ inmediatamente. Estas líneas deben estar inmediatamente después de la
+ línea de la propia librería compartida, como en:
+
+
+lib/libtvl80.so.1
+@exec /sbin/ldconfig -m %D/lib
+@unexec /sbin/ldconfig -R
+
+ Nunca, nunca, nunca añadir una línea
+ que ponga ldconfig sin argumentos en el
+ Makefile o pkg/PLIST. Esto hará
+ que el caché de librerías compartidas se resetee sólo con
+ los contenidos de /usr/lib, probablemente, dejando el sistema
+ inestable ("Ayuda, xinit no ha vuelto a funcionar desde que instalé este
+ port"). Cualquiera que haga esto, será troceado en 65.536 partes con un
+ cuchillo poco afilado, permaneciendo por toda la eterniadad en lo más
+ profundo del infierno (y no necesariamente en este órden)
+
+
+
+
+ Soporte ELF
+
+ Desde la transición de FreeBSD a formato ELF después de la
+ version 3.0-RELEASE, fue necesario convertir muchos ports para que generasen
+ librerías compartidas en formato ELF. Para complicar más el
+ trabajo, los sistemas 3.0 pueden ejecutar ELF y a.out, y se quiere mantener,
+ etraoficialmente, tanto como sea posible, el soporte para versiones 2.2. A
+ continuación se explica como convertir ports que sólo soportan
+ a.out para que soporten compilaciones a.out y ELF.
+
+ Una parte de esta lista sólo es aplicable durante la conversión,
+ pero se mantendrá durante un tiempo como referencia en caso de querer
+ actualizar algún port antiguo.
+
+
+ Mover las librerías a.out
+
+ Las librerías a.out deben moverse de /usr/local/lib
+ y similares a un subdirectorio aout. (Si no se mueven, los
+ ports ELF sobreescribirán las librerías a.out). El objeto
+ move-aout-libs del archivo
+ src/Makefile en 3.0-CURRENT (llamado desde
+ aout-to-elf) hará este paso en nuestro lugar.
+ Sólo moverá las librerías a.out en los directorios
+ estándar.
+
+
+
+ Formato
+
+ La colección de ports compilará los packages en el mismo
+ formato en el que esté la máquina. Esto significa a.out para
+ 2.2 y a.out o ELF para 3.0 dependiendo de lo que devuelva la variable
+ `objformat`. De la misma manera, una vez se mueven las
+ librerías a un subdirectorio, ya no será posible compilar
+ librerías a.out.
+
+
+ Si un port sólo funciona para a.out, definir
+ BROKEN_ELF. Estos ports serán pasados por alto
+ durante la compilación en sistemas ELF.
+
+
+
+
+ PORTOBJFORMAT
+
+ bsd.port.mk definirá
+ PORTOBJFORMAT a aout o
+ elf y lo exportará en las variables de
+ entorno CONFIGURE_ENV, SCRIPTS_ENV y
+ MAKE_ENV. (Siempre será
+ aout en 2.2-STABLE). También se pasa a
+ PLIST_SUB como
+ PORTOBJFORMAT=${PORTOBJFORMAT}. (Consultar los comentarios
+ sobre ldconfig de las líneas anteriores).
+
+ La variable se defina usando esta línea en
+ bsd.port.mk:
+
+
+PORTOBJFORMAT!= test -x /usr/bin/objformat && /usr/bin/objformat || echo aout
+
+ Los procesos de compilación de los ports deberían usar esta
+ variable para decidir que hacer. De todas maneras, si el script
+ configure del port detecta automáticamente un sistema
+ ELF, no es necesario hacer referencia a PORTOBJFORMAT.
+
+
+
+
+
+
+
+ pkgname
+ a
+
+
+
+ pkgname
+ a
+
+
+
+ pkgname
+ a
+
+
+
+ pkgname
+ a
+
+
+
+ pkgname
+ a
+
+
+
+ pkgname
+ a
+
+
+
+
+
diff --git a/es_ES.ISO_8859-1/books/handbook/quotas/chapter.sgml b/es_ES.ISO_8859-1/books/handbook/quotas/chapter.sgml
new file mode 100755
index 0000000000..663003ebee
--- /dev/null
+++ b/es_ES.ISO_8859-1/books/handbook/quotas/chapter.sgml
@@ -0,0 +1,243 @@
+
+
+
+ Cuotas de disco
+
+ Contribuido por &a.mpp;. 26 Febrero
+ 1996
+
+ Las cuotas constituyen una prestación del sistema operativo que
+ le permite limitar la cantidad de espacio en disco y/o el número de
+ archivos de que un usuario puede disponer en un determinado sistema de archivos.
+ Habitualmente se utiliza en sistemas multiusuario en los que resulta deseable
+ limitar la cantidad de recursos de que puede disponer cada usuario o grupo de
+ usuarios. De este modo se impide que un usuario agote todo el espacio disponible
+ en un disco.
+
+
+ Configurando su sistema para habilitar las cuotas de disco
+
+ Antes de intentar usar las cuotas de disco es necesario asegurarse de que
+ se encuentran habilitadas en el núcleo del sistema operativo. Esto se
+ consigue añadiendo la siguiente línea al archivo de configuración
+ del núcleo:
+
+
+options QUOTA
+
+ El núcleo que se incluye de serie (GENERIC) no
+ tiene esta función activada por defecto, por lo que tendrá que
+ configurar, crear e instalar un núcleo a medida para utilizar las cuotas
+ de disco. Puede acudir a la sección Configurando
+ el núcleo de FreeBSD, donde encontrará más información
+ acerca de la configuración del núcleo.
+
+ A continuación, necesitará habilitar las cuotas de disco en
+ /etc/sysconfig. Esto se hace cambiando la línea:
+
+
+quotas=NO
+
+ por:
+
+
+quotas=YES
+
+ Si está utilizando FreeBSD 2.2.2 o posterior, el archivo de
+ configuración será /etc/rc.conf y el nombre de
+ la variable habrá cambiado a:
+
+
+check_quotas=YES
+
+ Finalmente, necesitará editar /etc/fstab para
+ habilitar las cuotas de disco de forma individualizada para cada sistema de archivos.
+ Es aquí donde puede habilitar cuotas para usuarios, grupos o ambos y para
+ todos sus sistemas de archivos.
+
+ Para habilitar las cuotas de disco para un determinado usuario en un sistema
+ de archivos, añada la opción userquota en el archivo
+ /etc/fstab, en el campo de opciones del registro correspondiente
+ al sistema de archivos para el cual quiere habilitar las cuotas. Por ejemplo:
+
+
+/dev/da1s2g /home ufs rw,userquota 1 2
+
+ Análogamente, para habilitar las cuotas para grupos emplee la opción
+ groupquota en lugar de userquota. Para
+ habilitar ambas, cuotas de usuario y de grupo, cambie el registro del siguiente modo:
+
+
+
+/dev/da1s2g /home ufs rw,userquota,groupquota 1 2
+
+ Por defecto, los archivos relacionados con las cuotas se almacenan en el
+ directorio raíz del sistema de archivos con los nombres
+ quota.user y quota.group, para las cuotas
+ de usuarios y de grupos, respectivamente. Consulte man fstab para
+ más información. Aunque esa página man afirma que se puede
+ especificar un emplazamiento alternativo para los archivos relacionados con las
+ cuotas, esto no es recomendable ya que las diversas utilidades de las cuotas no
+ parecen adaptarse convenientemente a este cambio.
+
+ En este momento debería reiniciar su sistema con el nuevo núcleo.
+ /etc/rc ejecutará automáticamente los comandos
+ apropiados para crear los archivos iniciales de las cuotas para todas las cuotas que
+ haya activado en /etc/fstab, por lo que no hace falta crear
+ manualmente ningún archivo de cuotas de logitud cero.
+
+ Durante el funcionamiento normal del sistema, no debería ser necesario ejecutar
+ manualmente los comandos quotacheck, quotaon,
+ o quotaoff. Sin embargo, puede interesarle leer sus páginas
+ man para familiarizarse con su funcionamiento.
+
+
+
+ Fijando los límites de las cuotas
+
+ Una vez haya configurado su sistema para habilitar las cuotas, compruebe que
+ realmente han sido habilitadas. Una forma de hacerlo fácilmente es ejecutar
+
+ &prompt.root; quota -v
+
+ Debería aparecer una línea describiendo la utilización de
+ los discos y los límites actuales de cuotas para cada sistema de archivos en
+ el que estén activadas las cuotas.
+
+ Ya está listo para comenzar a asignar límites de cuota con el
+ mandato edquota.
+
+ Tiene varias opciones acerca de cómo aplicar límites a la cantidad
+ de espacio en disco de que un usuario o grupo puede disponer y la cantidad de archivos
+ que pueden crear. Puede limitar la cantidad de disco utilizada en función del
+ espacio físico usado (cuotas de bloque), en función de los archivos
+ (cuotas de inode) o en función de una combinación de ambos. Cada uno de
+ estos límites se divide en dos categorías: límites flexibles y
+ rígidos.
+
+ Los límites rígidos no pueden ser sobrepasados. Cuando un usuario
+ alcanza su límite rígido, ya no puede disponer de más espacio en
+ el sistema de archivos en cuestión. Por ejemplo, si el usuario tiene un
+ límite rígido de 500 bloques en un determinado sistema de archivos y
+ ya está utilizando 490 bloques, el usuario sólo puede asignar 10 bloques
+ adicionales. Cualquier intento de asignar 11 bloques fracasará.
+
+ Por otra parte, los límites flexibles pueden ser sobrepasados por un
+ periodo de tiempo limitado. Este periodo de tiempo se conoce como el periodo de gracia,
+ que dura una semana por defecto. Si un usuario permanece por encima de su límite
+ flexible más allá del periodo de gracia, el límite flexible se
+ convertirá en un límite rígido y no se permitirá realizar
+ nuevas asignaciones. Cuando el usuario se vuelva a situar por debajo del límite
+ flexible, el periodo de gracia se reiniciará.
+
+ A continuación se muestra un ejemplo de lo que podrá ver cuando
+ ejecute el comando edquota. Cuando se invoca el comando
+ edquota, se inicia el editor espeficado en la variable de entorno
+ EDITOR, o el editor vi en caso de que la variable
+ EDITOR no se encuentre definida, permitiéndole editar los
+ límites de las cuotas de disco.
+
+ &prompt.root; edquota -u test
+
+
+Quotas for user test:
+/usr: blocks in use: 65, limits (soft = 50, hard = 75)
+ inodes in use: 7, limits (soft = 50, hard = 60)
+/usr/var: blocks in use: 0, limits (soft = 50, hard = 75)
+ inodes in use: 0, limits (soft = 50, hard = 60)
+
+ Normalmente verá dos líneas por cada sistema de archivos que
+ tenga activadas las cuotas de disco. Una línea para los límites de
+ bloques y otra para los límites de inodes. Para modificar los límites
+ de las cuotas, simplemente cambie el valor que quiere actualizar. Por ejemplo, para
+ elevar el límite de bloques de este usuario de un límite flexible de
+ 50 y un límite rígido de 75 a un límite flexible de 500 y a un
+ límite rígido de 600, cambie:
+
+ /usr: blocks in use: 65, limits (soft = 50, hard = 75)
+ por: /usr: blocks in use: 65, limits (soft = 500, hard = 600)
+
+
+ Los nuevos límites estarán vigentes cuando salga del editor.
+
+ En ocasiones resulta deseable imponer límites en las cuotas de disco
+ a un intervalo de UIDs (número de identificación de usuario). Esto
+ se puede hacer empleando la opción del comando
+ edquota. En primer lugar, asigne el límite deseado al
+ usuario y luego ejecute edquota -p protouser UID_inicial-UID_final.
+ Por ejemplo, si el usuario test está sujeto a límites
+ en la cuota de disco, el siguiente comando puede ser empleado para duplicar esos
+ límites para los UIDs comprendidos entre 10000 y 19999:
+
+ &prompt.root; edquota -p test 10000-19999
+
+ La capacidad de especificar intervalos de UIDs se añadió al
+ sistema después de que la versión 2.1 fuese distribuida. Si necesita
+ esta función en un sistema 2.1, deberá conseguir una copia más
+ reciente de edquota.
+
+ Consulte man edquota, donde encontrará información
+ más detallada.
+
+
+
+ Comprobando los límites en las cuotas y la utilización de
+ los discos
+
+ Puede utilizar el comando quota, o bien el comando
+ repquota para comprobar los límites en las cuotas y la
+ utilización de los discos. El comando quota puede ser
+ empleado para comprobar cuotas individuales y de grupo, así como la
+ utilización de los discos. Sólo el administrador del sistema puede
+ examinar las cuotas y la utilización de los discos por otros usuarios o por
+ grupos de los que no es miembro. El comando repquota puede ser
+ empleado para obtener un resumen de todas las cuotas y la utilización de los
+ discos para sistemas de archivos que tengan las cuotas habilitadas.
+
+ A continuación se muestra un ejemplo de la salida del comando
+ quota -v para un usuario que está sujeto a límites
+ en la cuota de disco en dos sistemas de archivos.
+
+
+
+Disk quotas for user test (uid 1002):
+ Filesystem blocks quota limit grace files quota limit grace
+ /usr 65* 50 75 5days 7 50 60
+ /usr/var 0 50 75 0 50 60
+
+ En el ejemplo anterior, en el sistema de archivos /usr el
+ usuario ya ha sobrepasado en 15 bloques su límite flexible (fijado en 50 bloques)
+ y aún dispone de 5 días del periodo de gracia. Observe la presencia de un
+ asterisco *, lo cual indica que el usuario ha sobrepasado su
+ límite en la cuota de disco.
+
+ Normalmente, aquellos sistemas de archivos en los que el usuario no esté
+ utilizando espacio no figurarán en la salida del comando quota,
+ aunque el usuario tenga asignado un límite en la cuota de disco para esos
+ sistemas de archivos. La opción mostrará esos
+ sistemas de archivos, como ha sucedido con /usr/var en el ejemplo
+ anterior.
+
+
+
+ * Cuotas a través de NFS
+
+ Esta sección se encuentra en desarrollo.
+
+
+
+
+
diff --git a/es_ES.ISO_8859-1/books/handbook/staff/chapter.sgml b/es_ES.ISO_8859-1/books/handbook/staff/chapter.sgml
new file mode 100755
index 0000000000..ef959663eb
--- /dev/null
+++ b/es_ES.ISO_8859-1/books/handbook/staff/chapter.sgml
@@ -0,0 +1,802 @@
+
+
+
+
+ Staff del Proyecto FreeBSD
+
+ El Proyecto FreeBSD está gestionado y operado por los
+ siguientes grupos de personas:
+
+
+
+ El Core Team de FreeBSD
+
+ El core team de FreeBSD constituye el “Grupo de
+ directores”, responsable de decidir el camino a seguir y
+ mantener al proyecto en la dirección correcta, así
+ cómo gestionar áreas
+ específicas del proyecto.
+
+ (por órden alfabético de apellido):
+
+
+
+
+
+ &a.asami;
+
+
+
+ &a.jmb;
+
+
+
+ &a.ache;
+
+
+
+ &a.bde;
+
+
+
+ &a.gibbs;
+
+
+
+ &a.dg;
+
+
+
+ &a.jkh;
+
+
+
+ &a.phk;
+
+
+
+ &a.rich;
+
+
+
+ &a.gpalmer;
+
+
+
+ &a.jdp;
+
+
+
+ &a.guido;
+
+
+
+ &a.sos;
+
+
+
+ &a.peter;
+
+
+
+ &a.wollman;
+
+
+
+ &a.joerg;
+
+
+
+
+
+
+
+
+ Los desarrolladores de FreeBSD
+
+ Estas son las personas que tienen privilegios de committes y
+ hacen el trabajo de ingeniería en el árbol de
+ código fuente de FreeBSD. Todos los miembros del core team
+ también son desarrolladores.
+
+
+
+
+ &a.ugen;
+
+
+
+ &a.mbarkah;
+
+
+
+ &a.stb;
+
+
+
+ &a.pb;
+
+
+
+ &a.abial;
+
+
+
+ &a.jb;
+
+
+
+ &a.torstenb;
+
+
+
+ &a.dburr;
+
+
+
+ &a.charnier;
+
+
+
+ &a.luoqi;
+
+
+
+ &a.ejc;
+
+
+
+ &a.kjc;
+
+
+
+ &a.gclarkii;
+
+
+
+ &a.archie
+
+
+
+ &a.cracauer;
+
+
+
+ &a.adam;
+
+
+
+ &a.dillon;
+
+
+
+ &a.dufault;
+
+
+
+ &a.uhclem;
+
+
+
+ &a.tegge;
+
+
+
+ &a.eivind;
+
+
+
+ &a.julian;
+
+
+
+ &a.rse;
+
+
+
+ &a.se;
+
+
+
+ &a.sef;
+
+
+
+ &a.fenner;
+
+
+
+ &a.jfieber;
+
+
+
+ &a.jfitz;
+
+
+
+ &a.scrappy;
+
+
+
+ &a.lars;
+
+
+
+ &a.billf;
+
+
+
+ &a.tg;
+
+
+
+ &a.brandon;
+
+
+
+ &a.graichen;
+
+
+
+ &a.jgreco;
+
+
+
+ &a.rgrimes;
+
+
+
+ &a.jmg;
+
+
+
+ &a.hanai;
+
+
+
+ &a.thepish;
+
+
+
+ &a.jhay;
+
+
+
+ &a.helbig;
+
+
+
+ &a.ghelmer;
+
+
+
+ &a.erich;
+
+
+
+ &a.nhibma;
+
+
+
+ &a.flathill;
+
+
+
+ &a.hosokawa;
+
+
+
+ &a.hsu;
+
+
+
+ &a.mph;
+
+
+
+ &a.itojun;
+
+
+
+ &a.mjacob;
+
+
+
+ &a.gj;
+
+
+
+ &a.nsj;
+
+
+
+ &a.ljo;
+
+
+
+ &a.kato;
+
+
+
+ &a.andreas;
+
+
+
+ &a.motoyuki;
+
+
+
+ &a.jkoshy;
+
+
+
+ &a.kuriyama;
+
+
+
+ &a.grog;
+
+
+
+ &a.jlemon;
+
+
+
+ &a.truckman;
+
+
+
+ &a.imp;
+
+
+
+ &a.smace;
+
+
+
+ &a.mckay;
+
+
+
+ &a.mckusick;
+
+
+
+ &a.ken;
+
+
+
+ &a.tedm;
+
+
+
+ &a.amurai;
+
+
+
+ &a.markm;
+
+
+
+ &a.max;
+
+
+
+ &a.alex;
+
+
+
+ &a.rnordier;
+
+
+
+ &a.davidn;
+
+
+
+ &a.obrien;
+
+
+
+ &a.danny;
+
+
+
+ &a.ljo;
+
+
+
+ &a.fsmp;
+
+
+
+ &a.smpatel;
+
+
+
+ &a.wpaul;
+
+
+
+ &a.jmacd;
+
+
+
+ &a.wes;
+
+
+
+ &a.steve;
+
+
+
+ &a.mpp;
+
+
+
+ &a.dfr;
+
+
+
+ &a.jraynard;
+
+
+
+ &a.darrenr;
+
+
+
+ &a.csgr;
+
+
+
+ &a.martin;
+
+
+
+ &a.paul;
+
+
+
+ &a.roberto;
+
+
+
+ &a.chuckr;
+
+
+
+ &a.dima;
+
+
+
+ &a.sada;
+
+
+
+ &a.wosch;
+
+
+
+ &a.ats;
+
+
+
+ &a.jseger;
+
+
+
+ &a.vanilla;
+
+
+
+ &a.msmith;
+
+
+
+ &a.des;
+
+
+
+ &a.brian;
+
+
+
+ &a.stark;
+
+
+
+ &a.karl;
+
+
+
+ &a.dt;
+
+
+
+ &a.cwt;
+
+
+
+ &a.pst;
+
+
+
+ &a.hoek;
+
+
+
+ &a.nectar;
+
+
+
+ &a.swallace;
+
+
+
+ &a.dwhite;
+
+
+
+ &a.nate;
+
+
+
+ &a.yokota;
+
+
+
+ &a.jmz;
+
+
+
+ &a.archie;
+
+
+
+
+
+
+
+
+ El Proyecto de Documentación de FreeBSD
+
+ El Proyecto
+ de Documentación es responsable de diferentes
+ servicios, siendo ejecutado cada uno por un responsable y sus
+ ayudantes (si los tiene):
+
+
+
+ Responsable del Proyecto de Documentación
+
+
+ &a.nik;
+
+
+
+
+ Webmaster
+
+
+ &a.wosch;
+
+
+
+ Editor del Handbook & FAQ
+
+
+ &a.faq;
+
+
+
+
+ Editor de Noticias
+
+
+ &a.nsj;
+
+ Ayudante: &a.john;
+
+
+
+
+
+ Editor del FreeBSD Really-Quick NewsLetter
+
+
+ Chris Coleman chrisc@vmunix.com
+
+
+
+ Editor de la Galería y sección Comercial
+
+
+ &a.nsj;
+
+ Ayudante: &a.cawimm;
+
+
+
+
+ Style Police & Art Director
+
+
+ &a.opsys;
+
+
+
+ Ingeniero de las Bases de Datos
+
+
+ &a.mayo;
+
+
+
+ Ingeniero de CGI
+
+
+ &a.stb;
+
+
+
+ Bottle Washing
+
+
+ &a.nsj;
+
+
+
+
+ COnversión de LinuxDoc a DocBook
+
+
+ &a.nik;
+
+
+
+
+
+
+
+
+ Quién es responsable de qué
+
+
+
+ Arquitecto Principal
+
+ &a.dg;
+
+
+
+
+ Responsable del Proyecto de Documentación
+
+
+ &a.nik;
+
+
+
+
+ Internationalización
+
+
+ &a.ache;
+
+
+
+
+ Networking
+
+
+ &a.wollman;
+
+
+
+
+ Postmaster
+
+
+ &a.jmb;
+
+
+
+
+ Coordinador de Release
+
+
+ &a.jkh;
+
+
+
+
+ Relaciones Públicas & Corporativas
+
+
+ &a.jkh;
+
+
+
+
+ Responsable de Seguridad
+
+
+ &a.guido;
+
+
+
+
+ >Responsables del CVS
+
+
+ Principal: &a.peter;
+
+ Asistente: &a.jdp;
+
+ Internacional (Crypto): &a.markm;
+
+
+
+
+ Responsable de Ports
+
+
+ &a.asami;
+
+
+
+
+ XFree86 Project, Inc.
+
+
+ &a.rich;
+
+
+
+
+ Soporte Usenet
+
+
+ &a.joerg;
+
+
+
+
+ Administrador GNATS
+
+
+ &a.steve;
+
+
+
+
+
+ Webmaster
+
+ &a.wosch;
+
+
+
+
+
+
+
+
+
+
+