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 <command>kgdb</command> + + 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 <emphasis>opción del + kernel</emphasis>? + + 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 <email>security-officer@freebsd.org</email> + + +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. + + + <makevar>MAINTAINER</makevar> 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. + + + <filename>Makefile</filename> + + 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 <filename>files</filename> + + 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 <filename>patches</filename> + + Este directorio contiene los patches necesarios para hacer + que todo funcione correctamente bajo FreeBSD. + + + + El directorio <filename>pkg</filename> + + 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 <filename>Makefile</filename> + + 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. + + + <filename>COMMENT</filename> + + 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. + + + + <filename>DESCR</filename> + + 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 + + + + <filename>PLIST</filename> + + 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 <command>portlint</command> + + 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. + + + + <makevar>DISTNAME</makevar> + + 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. + + + + + <makevar>PKGNAME</makevar> + + Si DISTNAME no sigue las normas de nombre para un package, + deberís asignar a la variable PKGNAME un valor + más correcto. + + + + <makevar>CATEGORIES</makevar> + + 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! + + + + + <makevar>MASTER_SITES</makevar> + + 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. + + + + <makevar>PATCHFILES</makevar> + + 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 + + + + + <makevar>MAINTAINER</makevar> + + 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. + + + <makevar>LIB_DEPENDS</makevar> + + 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. + + + + <makevar>RUN_DEPENDS</makevar> + + 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. + + + + <makevar>BUILD_DEPENDS</makevar> + + 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 + + + + + <makevar>FETCH_DEPENDS</makevar> + + 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. + + + + <makevar>DEPENDS</makevar> + + 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. + + + <command>ldconfig</command> + + 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. + + + + + <makevar>PORTOBJFORMAT</makevar> + + 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 <command>kgdb</command> + + 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 <emphasis>opción del + kernel</emphasis>? + + 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 <email>security-officer@freebsd.org</email> + + +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. + + + <makevar>MAINTAINER</makevar> 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. + + + <filename>Makefile</filename> + + 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 <filename>files</filename> + + 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 <filename>patches</filename> + + Este directorio contiene los patches necesarios para hacer + que todo funcione correctamente bajo FreeBSD. + + + + El directorio <filename>pkg</filename> + + 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 <filename>Makefile</filename> + + 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. + + + <filename>COMMENT</filename> + + 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. + + + + <filename>DESCR</filename> + + 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 + + + + <filename>PLIST</filename> + + 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 <command>portlint</command> + + 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. + + + + <makevar>DISTNAME</makevar> + + 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. + + + + + <makevar>PKGNAME</makevar> + + Si DISTNAME no sigue las normas de nombre para un package, + deberís asignar a la variable PKGNAME un valor + más correcto. + + + + <makevar>CATEGORIES</makevar> + + 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! + + + + + <makevar>MASTER_SITES</makevar> + + 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. + + + + <makevar>PATCHFILES</makevar> + + 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 + + + + + <makevar>MAINTAINER</makevar> + + 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. + + + <makevar>LIB_DEPENDS</makevar> + + 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. + + + + <makevar>RUN_DEPENDS</makevar> + + 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. + + + + <makevar>BUILD_DEPENDS</makevar> + + 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 + + + + + <makevar>FETCH_DEPENDS</makevar> + + 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. + + + + <makevar>DEPENDS</makevar> + + 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. + + + <command>ldconfig</command> + + 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. + + + + + <makevar>PORTOBJFORMAT</makevar> + + 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; + + + + + + + + + + +