Java-Linux 1.1.1 HOWTO Karl Asha, karl@blackdown.org 18 May 1997 Traductor: Manuel de Vega Barreiro , mbarreiro@red.madritel.es http://www.arrakis.es/~barreiro/spain v0.2-Agosto 1997 Este es el borrador de la guía Como (HOWTO) JDK-1.1.1 para Linux. ______________________________________________________________________ Índice: 1. Instalando JDK 1.1.1 1.1. Presentación. 1.2. Librerías necesarias 1.3. Copiando JDK-1.1.1 para Linux 1.4. Instalando JDK-1.1.1 para Linux 1.5. Parámetros del sistema necesarios 1.6. Motif - Estático vs. Dinámico. 1.7. Informes sobre problemas y errores 1.8. Lecturas complementarias 2. JDK-1.1.1 Notas de liberación 2.1. accept() 2.2. jdb 3. Uso del soporte del formato binario java incluido en el núcleo Linux 3.1. Configurando el núcleo 3.2. Haciendo uso del soporte binario de java 3.3. Lecturas complementarias 4. Netscape y Java 4.1. Netscape 3.0 4.2. Netscape 4.0 5. Marimba's Tuner, Transmitter, y Bongo ______________________________________________________________________ 1. Instalando JDK 1.1.1 1.1. Presentación. El paquete JDK-1.1.1 para Linux esta disponible en una extensa lista de servidores espejo voluntarios. Se da por supuesto que el sistema del usuario final es capaz de ejecutar binarios ELF. Llegados a este punto, ELF queda fuera del ámbito de este documento. 1.2. Librerías necesarias La actual integración de JDK-1.1.1 para Linux esta construida con las Librerías C Estándar y de Carga Dinámica Linux necesarias para hacer funcionar los binarios de apoyo. El usuario final es responsable de asegurar que las librerías de XFree86 están instaladas en su sistema. JDK-1.1.1 para Linux ha sido creado en el siguiente entorno. Revisiones de Librerías o libc versión 5.4.13 o ld.so versión 1.8.5 o XFree86 versión 3.1.2 En el caso de que su sistema necesite una actualización de la instalación de XFree86, el paquete necesario se puede encontrar en . Por favor busquen allí el fichero README para obtener más información de la distribución XFree86. Para obtener un resumen de cuales son las librerías instaladas actualmente un tu sistema, teclea ldconfig -v Detalles técnicos, información de programación, e instrucciones de instalación para estos paquetes queda fuera del ámbito de este documento. 1.3. Copiando JDK 1.1.1 para Linux Se pueden encontrar tres paquetes diferentes para usar Java con Linux en los servidores espejo. Por favor visita http://www.javasoft.com para obtener información de licencias en la integración de JRE con sus aplicaciones Java. La documentación JavaSoft, las clases de demostración, y src.zip para JDK 1.1.1 se distribuyen en un paquete aparte. (jdk1.1.1-doc+demo.tar.gz) JDK - Kit de desarrollo Java Este paquete incluye todo lo necesario para ejecutar y compilar programas java bajo Linux. JRE - Entorno de ejecución Java JRE es un sistema de ejecución pensado para incluirse con las aplicaciones. Incluye todo lo necesario para ejecutar (pero no compilar o corregir) programas Java. JRE incluye todos los conversores de caracteres para un soporte internacional completo. RT - Entorno de ejecución Java separado En el paquete RT, el soporte para internacionalización y el sistema de ejecución básico VM están separados en dos directorios, rt y i18n. El directorio rt proporciona todo lo necesario para ejecutar aplicaciones Java en entornos ISO-latin-1. El directorio i18n contiene los conversores de byte a caracteres opcionales para diferentes esquemas de codificación de caracteres globales. En el paquete JRE, estos dos directorios están combinados en uno solo. La lista de servidores espejo reconocidos esta disponible en . 1.4. Instalando JDK-1.1.1 para Linux Generalmente, todo lo que se necesita hacer para conseguir instalar el JDK es elegir un directorio, tal que /usr/local/, y desempaquetar el archivo seleccionado. Una vez instalado, añadir (en este caso) /usr/local/jdk1.1.1/bin/ a tu PATH te permitirá hacer uso del kit de desarrollo. Desafortunadamente, recientes controversias rodean la elección del directorio origen para el JDK cuando se usa en Linux. La ubicación, honestamente, es meramente una cuestión decorativa. Lo que si resulta importante es que el valor de la variable JDK_HOME apunte a un directorio que contenga los subdirectorios bin/, lib/, y classes/ del JDK. Todos los futuros paquetes distribuidos por la comunidad Java-Linux se basaran en esa variable para encontrar los binarios de soporte y las librerías de clases necesarias. 1.5. Parámetros del sistema necesarios CLASSPATH Valores La variable de entorno CLASSPATH se usa para indicar al JDK donde buscar las clases. Algunas veces, un valor incorrecto puede impedir la correcta ejecución de las herramientas JDK. Si experimentas cualquier problema usando JDK, asegúrate que la variable CLASSPATH no tiene valor antes de intentar ejecutar java, javac, o el appletviewer. Permisos de los manejadores. Antes de usar JDK, asegúrate que el mundo puede leer y escribir en el manejador especial /dev/zero. Para conseguirlo, simplemente ejecuta el siguiente comando como superusuario: chmod 666 /dev/zero Imprimiendo El JDK espera usar /usr/bin/lp para imprimir en un dispositivo. Por favor asegúrate de que se ha hecho un enlace simbólico de /usr/bin/lpr a /usr/bin/lp antes de intentar imprimir desde un programas Java. Espacio de Memoria de Intercambio JDK intenta hacer una reserva de un amplio bloque de memoria cuando se inicia. Siempre debes tener la certeza de que tu sistema tiene al menos 20 Megabytes de memoria de intercambio libres antes de ejecutar cualquiera de los ejecutables suministrados con el kit de desarrollo java. Se puede controlar la cantidad de memoria que usa el interprete java experimentando con los parámetros -mx y -ms. Información adicional de estos parámetros esta disponible en las paginas de manuales de JDK. 1.6. Motif - Estático vs. Dinámico. Antes de JDK 1.1.1, dos paquetes separados fueron lanzados a la comunidad Java-Linux, uno de los cuales estaba enlazado estáticamente con Motif. A pesar de que el JDK 1.1.1 enlazado dinámicamente con Motif no esta actualmente soportado, hay formas de hacer uso de tus librerías compartidas de Motif. Dando a la variable de entorno NS_JAVA un valor no nulo, Este método te permite usar JDK sin tener la distribución XFree86 instalada. Permite también el uso de las librerías compartidas de Motif. Con el fin de usar tus librerías compartidas de Motif, debes hacer uso de la variable entorno LD_PRELOAD. Se deben incluir como librerías cargadas previamente Motif y todas las necesarias de XFree86. Por ejemplo: export NS_JAVA=true export LD_PRELOAD=/usr/X11R6/lib/libXm.so.2.0:\ /usr/X11R6/lib/libX11.so.6.1 1.7. Informes sobre problemas y errores Si descubres algo que puede ser un error trabajando con JDK 1.1.1 para Linux, por favor envía un mensaje electrónico a Steve Byrne, sbb@gnu.ai.mit.edu. Acompañando el informe del error, por favor incluye la salida de 'ldconfig -v', la versión del núcleo que tienes instalado en tu maquina, y cualquier traza de la pila disponible. 1.8. Lecturas complementarias Versiones al ida de HOWTOs, listas de correo, lista de productos soportados, y otros servicios Java-Linux se encuentran disponibles a través de la organización Blackdown, en http://www.blackdown.org/java-linux.html . Por favor envía cualquier pregunta o sugerencia acerca de estos recursos a karl@blackdown.com. Abundante información sobre Java esta disponible directamente en JavaSoft, http://www.javasoft.com . 2. JDK-1.1.1 Notas de liberación 2.1. accept() Existe un error conocido en el que se esta trabajando que afecta a las aplicaciones Java que hacen uso de las llamadas del tipo accept(). Esto afecta también a jdb. 2.2. jdb El corrector de errores ("jdb") incluido con jdk requiere un interfaz de red activo para funcionar. Dado que la mayoría de las maquinas conectadas vía telefónica solo tienen activo el interfaz retorno ("127.0.0.1") cuando no están conectados a internet, el jdb se mete en un lío. El jdb intenta conectar con la dirección que corresponde con el 'hostname' de tu maquina, encuentra que, o bien no puede verlo activo, o bien no puede alcanzar la dirección especificada en /etc/hosts, y no logra iniciar la marcha. Una solución al problema es cambiar o poner como alias a tu 'hostname' la dirección ("127.0.0.1"). Una solución mas sensata es usar un falso dispositivo que corresponda con el nombre y dirección que hayas especificado para tu maquina en /etc/hosts. Lo que sigue es un extracto de la Guía de Administración de redes que resume y clarifica la funcionalidad del manejador de falsos dispositivos. El falso interfaz es realmente un poco exótico, pero mas bien de utilidad a pesar de todo. Los sistemas aislados y las maquinas que solo tienen conexión con una red IP vía enlace telefónico son sus principales beneficiaros, Estos últimos son también sistemas aislados la mayoría del tiempo. El dilema con los sistemas aislados es que solo tienen un único dispositivo de red activo, el dispositivo de retorno, que se asigna usualmente a la dirección 127.0.0.1. En algunas ocasiones, sin embargo, necesitas enviar datos al la dirección IP `oficial' del sistema local. Por ejemplo, considera el portátil vlite, que esta desconectado de cualquier red durante la duración de este caos. Una aplicación en vlite puede ahora querer enviar algún dato a otra aplicación en el mismo sistema. Buscando vlite en los registros de /etc/hosts aparece la dirección IP 191.72.1.65, así que la aplicación intenta enviarlo a esa dirección. Como el interfaz de retorno es el único interfaz activo en ese momento en la maquina, el núcleo no tiene ni idea de que esa dirección se refiere a si mismo! Y en consecuencia, el núcleo descarta el paquete, y devuelve un error a la aplicación. Aquí es donde entra en juego el falso dispositivo. Resuelve el dilema presentándose como el alter ego del interfaz de retorno. En el caso de vlite, deberás simplemente dar la dirección 191.72.1.65 y añadir una ruta de sistema apuntando a ella. Cada paquete para 191.72.1.65 será despachado localmente. La correcta invocación es: ______________________________________________________________________ # ifconfig dummy vlite # route add vlite ______________________________________________________________________ 3. Usando el soporte del formato binario java incluido en el núcleo Linux 3.1. Configurando el núcleo Con el fin de hacer uso del soporte del formato binario Java con Linux, debes configurar un núcleo con 'Kernel support for ELF binaries'. Soporte Java Compilado en el Núcleo o Si el soporte Java no esta compilado como un modulo, la ubicación de las aplicaciones java puede ser especificada usando el interfaz de control del sistema Linux. De otra manera, se cuenta con que el visualizador de apliques (applet ***1***) y las aplicaciones se encuentren en /usr/bin. echo "/usr/local/java/bin/java" > /proc/sys/kernel/java-interpreter echo "/usr/local/java/bin/appletviewer" > /proc/sys/kernel/java-appletviewer Soporte Java Compilado como un modulo o Si el soporte Java esta compilado como un modulo, el modulo espera encontrar el visualizador de apliques y las aplicaciones java en /usr/bin. Para solucionar esto, simplemente edita /usr/src/linux/fs/binfmt_java.c y modifica las siguientes definiciones para reflejar tu configuración. #define _PATH_JAVA "/usr/bin/java" #define _PATH_APPLET "/usr/bin/appletviewer" 3.2. Haciendo uso del soporte binario de java Con el fin de hacer uso del soporte del formato binario Java, se deben seguir los siguientes pasos para compilar el código Java. o Compile su fichero de código java como lo haría normalmente. o Active el bit de ejecución usando chmod en los ficheros de clases generados o Ejecute el fichero de clase como si se tratara de otro ejecutable. 3.3. Lecturas complementarias Las notas de liberación pertenecientes al soporte de binarios Java en el núcleo Linux pueden encontrase en . 4. Netscape y Java 4.1. Netscape 3.0 El problema fundamental de Netscape 3.0, java, y las maquinas Linux es el uso de la librería Standard C compilada con dl-malloc. Usando un programa de apoyo y la antigua gnumalloc, java dejara de hacer fallar el visualizador en la mayoría de los casos. El programa da también un valor sencillo a CLASSPATH. Ten cuidado, ciertas entradas en CLASSPATH pueden confundir a netscape y causar el fallo de este, de la misma forma que la presencia de librerías de clases Netscape caducadas. ______________________________________________________________________ #!/bin/sh export CLASSPATH="/usr/local/netscape/java/classes/java_301:." export LD_PRELOAD="/lib/gnumalloc.so" exec /opt/netscape/bin/netscape "$@" # NOTA! Este debe ser el camino del ejecutable real de netscape, no el de este programa. ______________________________________________________________________ Para hacer que todo esto funcione, sigue los siguientes pasos: o Instala netscape o Copia los ficheros java_30 o java_31 incluidos con el paquete netscape en /usr/local/netscape/java/classes/ o Copia gnumalloc.so en /lib o Edite el programa de comandos para que se ajuste a tu configuración. Puedes encontrar gnumalloc.o en http://www.blackdown.org/java- linux/downloads/gnumalloc.tar.gz . Gracias a Doug Ridgway (ridgway@routh.UCSD.EDU) por este truco. Steven Adler (adler@bnlku5.phy.bnl.gov) ha aportado un RPM extremadamente útil para automatizar el proceso descrito anteriormente. El archivo se puede encontrar en . Recientemente, se han recibido informes indicando que netscape puede fallar también con apliques Java si se usan versiones de libXext.so superiores a libXext.so.6.0. La solución, es copiar libXext.so.6.0 en un directorio tal que /lib/509/, hacer el enlace simbólico apropiado y dar el valor a LD_LIBRARY_PATH para que busque en ese directorio primero. 4.2. Netscape 4.0 Antes de Netscape 4.0b3, ninguna combinación de librerías y módulos puede frenar los deseos de fallar de Netscape. La versión beta3 de Netscape 4.0, sin embargo, cuando se usa conjuntamente con libc 5.4.23 y superiores, ha demostrado funcionar sin necesidad de ninguna de las chapuzas necesarias para Netscape 3.0. 5. Marimba's Tuner, Transmitter, y Bongo Marimba, Inc. no ha lanzado todavía versiones de Tuner, Transmitter, y Bongo compatibles con JDK 1.1.1. *** Notas del traductor *** *** 1 *** Cuando empece a trabajar en este documento me encontré con el problema de traducir 'applet'. La dichosa palabreja no resultaba nada fácil y levanto un buen revuelo en el foro de traducciones de LuCAS. Durante estas discusiones se me ocurrió el termino aplique, que aunque no ha resuelto la polémica de si traducir la palabra o adoptarla sin más, ha tenido una relativa buena acogida. *** Si tienes comentarios sobre la traducción, no dudes en hacérmelos llegar. Manuel de Vega Barreiro. mbarreiro@red.madritel.es En un lugar de la red Madrid. España. de cuyo nombre no quiero http://www.arrakis.es/~barreiro acordarme..........