Yacy en OpenBSD

2011 - 05 - 15

Como ya comenté en su día, he estado indagando sobre buscadores web soportados por la comunidad. Finalmente Yacy ha sido el proyecto que más me ha convencido.

Como utilizo OpenBSD en mi servidor casero, en él he puesto a funcionar un nodo Yacy. Desafortunadamente la instalación no es tan directa como en Gnu/Linux, así que ha sido necesario modificar alguna cosa para hacerlo funcionar.

No he encontrado mucha documentación sobre el tema en Internet y me ha tocado entender donde se producían los errores. Una pena, porque en realidad no es un tarea complejo. Detallo a continuación el procedimiento que utilicé.

Lo primero es tener instalado OpenBSD. Es importante tener en cuenta que vamos a necesitar Java (jre), que a su vez necesita que tengamos instalado también los archivos X11 del sistema. Tenéis el manual oficial aquí.

Ahora será necesario instalar la máquina virtual Java JRE. Si PKG_PATH está bien definido bastará con ejecutar.

pkg_add jre

Ahora se puede incluir java en el PATH añadiendo /usr/local/jre-1.7.0/bin a la linea PATH dentro del archivo de usuario .profile , en mi caso queda:

PATH=$HOME/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/jre-1.7.0/bin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:/usr/games.

El script de arranque de Yacy necesita el comando getopt de GNU (distinto al comando getopt que viene en OpenBSD), lo instalamos con:

pkg_add gnugetopt

Necesitamos ahora descargar Yacy, lo podéis encontrar en http://yacy.net/es/. Es necesario que descarguéis la versión para Linux. Tras descargarlo lo descomprimimos en la carpeta donde quedará instalado. Lo podéis dejar en una carpeta personal, pues se ejecutará como usuario sin privilegios.

tar xzf yacy_xxxxx.tgz
cd yacy

"startYACY.sh" es el script con el que iniciaremos normalmente Yacy. Este script busca los archivos de configuración de Yacy para obtener los parámetros de la máquina virtual. Como la primera vez que se ejecuta no los encuentra, define internamente unos por omisión, valores que intentan reservar una cantidad de memoria por encima de la cantidad que OpenBSD permite para cada aplicación.

Aunque el sistema limita la memoria para cada aplicación, es posible cambiar esta variable del kernel utilizando el comando sysctl y dejando los cambios definitivos en /etc/sysctl.conf.

De todos modos resolveremos inicialmente el problema editando el script "startYACY.sh", que intenta lanzarse en una máquina virtual con 600 MB de memoria reservada. Podemos esquivar esta limitación bajando la cantidad de memoria en el script. Basta con cambiar la línea:
JAVA_ARGS="-Xmx600m -Xms180m $JAVA_ARGS";
por esta otra:
JAVA_ARGS="-Xmx300m -Xms180m $JAVA_ARGS";

Por otra parte también debemos sustituir la llamada al comando getopt por gnugetopt editamos el script "startYACY.sh" y en la sección "#startup YaCy" (cerca del principio) sustituimos getopt por gnugetopt.

Guardados los cambios ya podemos lanzar yacy con el comando:

sh startYACY.sh

Podemos verificar que se ha lanzado visualizando los procesos con top o con ps -auxc, aparecerá en ejecución un comando java.

Ahora toca entrar a través de un navegador al panel de administración. Para ello nos dirigimos a

lynx http://localhost:8090

Es necesario acceder la primera vez como localhost, solo así nos permitirá definir una contraseña para el usuario "admin". Si estamos trabajando desde ssh tendremos que utilizar el navegador lynx para definir una contraseña antes de poder entrar desde un navegador ajeno a la computadora que ejecuta Yacy.
Dentro de lynx bajamos hasta "Accounts", picamos y podremos escribir contraseña para "admin", dos veces para poder confirmar. Luego picamos en "Define administrator".

El script de inicio startYACY.sh definía una cantidad de memoria ante la ausencia de archivos de configuración. Tras iniciar por primera vez Yacy ya se han creado los archivos de configuración en la carpeta DATA, pero por defecto vuelve a definir la memoria para máquina virtual a 600MB. Por ello es muy importante volver a definir ahora, aún desde lynx, la memoria que puede utilizar la máquina virtual. Para ello en las opciones principales picamos en "Performance" y en la casilla junto a "Memory reserved for JVM" definimos 300MB. Esto guardará el valor como variable definitiva. En caso de que no lo hagamos y se apague Yacy, no podrá arrancar pues leerá el archivo de configuración e intentará volver a reservar 600MB de memoria. En tal caso se podrá modificar el archivo "DATA/SETTINGS/yacy.conf" o directamente borrar la carpeta DATA del directorio principal y volver a ejecutar "sh startYACY.sh" de nuevo.

Por último mencionar que sh stopYACY.sh no cierra correctamente Yacy. Pero bastará con ejecutar ps -a y matar el número de proceso java con kill.

Actualización 2011-05-17

Después de algún problema de estabilidad, he decidido cambiar el parámetro Memory reserved for JVM para limitar la memoria asignada a la máquina virtual a 250MB. Esto ha solucionado los problemas de estabilidad.

Actualización 2012-03-18

Como comenta Seth, estas instrucciones no funcionan para OpenBSD 5.0; no me había percatado. Al ejecutar en modo debug "sh startYACY.sh -d" vemos que no se puede reservar memoria suficiente para la máquina virtual. Así que probaremos a modificar los parámetros con los que se lanza la máquina virtual.

Para ir probando diversos parámetros, lo más sencillo es ejecutar el comando sh startYACY.sh -d -p, lo cual nos devolverá el comando completo con el que se lanza Yacy. Quedan a la vista los valores de reserva de memoria. Podemos ejecutar directamente el comando modificando los valores que queramos para comprobar el funcionamiento. A mi me ha funcionado bien utilizando:

/usr/local/jre-1.7.0/bin/java -Xmx180m -Xms180m -server -Xss256k -XX:MaxPermSize=96m -XX:ReservedCodeCacheSize=96m -XX:-UseGCOverheadLimit -XX:+UseAdaptiveSizePolicy -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dfile.encoding=UTF-8 -ea -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -classpath .:htroot:lib/J7Zip-modified.jar:lib/activation.jar:lib/apache-mime4j-0.6.jar:lib/apache-solr-solrj-3.5.0.jar:lib/bcmail-jdk15-145.jar:lib/bcprov-jdk15-145.jar:lib/bzip2.jar:lib/commons-codec-1.6.jar:lib/commons-fileupload-1.2.2.jar:lib/commons-httpclient-3.1.jar:lib/commons-io-2.1.jar:lib/commons-jxpath-1.3.jar:lib/commons-logging-1.1.1.jar:lib/fontbox-1.6.0.jar:lib/geronimo-stax-api_1.0_spec-1.0.1.jar:lib/httpclient-4.1.3.jar:lib/httpcore-4.1.4.jar:lib/httpmime-4.1.3.jar:lib/icu4j-core.jar:lib/jakarta-oro-2.0.8.jar:lib/jcifs-1.3.15.jar:lib/jcl-over-slf4j-1.6.1.jar:lib/jempbox-1.6.0.jar:lib/jsch-0.1.42.jar:lib/json-simple-1.1.jar:lib/log4j-1.2.16.jar:lib/metadata-extractor-2.4.0-beta-1.jar:lib/mysql-connector-java-5.1.12-bin.jar:lib/pdfbox-1.6.0.jar:lib/poi-3.6-20091214.jar:lib/poi-scratchpad-3.6-20091214.jar:lib/servlet-api.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-jdk14-1.6.1.jar:lib/webcat-0.1-swf.jar:lib/wstx-asl-3.2.7.jar:lib/xercesImpl.jar:lib/xml-apis.jar:lib/yacycore.jar: net.yacy.yacy

Por tanto en el archivo de lanzamiento startYACY.sh cambiamos las líneas de reserva de memoria para que queden fijos los valores. Cambiamos al principio del archivo la linea:

JAVA_ARGS="-server -Xss256k -XX:MaxPermSize=96m -XX:ReservedCodeCacheSize=96m -XX:-UseGCOverheadLimit -XX:+UseAdaptiveSizePolicy -Djava.net.preferIPv4Stack=true -Djava.awt.head
less=true -Dfile.encoding=UTF-8";


y la línea que ya conocíamos por:

JAVA_ARGS="-Xmx180m -Xms180m $JAVA_ARGS";

Recordar que la primera vez que se ejecuta YACY hay que ir a la pestaña performance y cambiar Memory reserved for JVM por 180 MBytes.

tralev@mail.ru

Great thanks for the post. It was really useful.

ventejuy

Thanks, nice to help. :P

Seth

Tried instructions on OpenBSD 5.0 amd64 but java app will not start. Any tips for debugging?

ventejuy

I am checking yacy on OpenBSD 5.0 and it does not work with parameters I used on 4.9

Now It works with a more restrictive memory use:
-Xmx180m -Xms180m -server -Xss256k -XX:MaxPermSize=96m -XX:ReservedCodeCacheSize=96m

ventejuy

I will look for some time to update the article. This time I will write the article in english.

Add a comment