martes, 24 de enero de 2012

Cambiar base de datos en el CAS

El CAS (Central Authentication Service) es un sistema de autenticación creado originalmente por la Universidad de Yale para proporcionar una autenticación segura de usuarios.

Este se monta sobre un apache para poder funcionar. Si deseamos configurarle tendremos que acceder al fichero deployerConfigContext.xml situado en la ruta (suponiendo /home/xyz/server/apache-tomcat-6.0.20 como el raíz de instalación del apache en el que esté) /home/xyz/server/apache-tomcat-6.0.20/webapps/cas/WEB-INF/deployerConfigContext.xml y editarlo con el vi.

rencinar@OPT360:~$ vi /home/xyz/server/apache-tomcat-6.0.20/webapps/cas/WEB-INF/deployerConfigContext.xml

En el econtraremos múltiples parametros susceptibles de configurar. Un ejemplo de estos es la base de datos a la que conectarnos, que en este caso es  Postgresql.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
                <property name="driverClassName">
                  <value>org.postgresql.Driver</value>
                </property>
                <property name="url">
                  <value>jdbc:postgresql://predb01.dominio.es/xyzcore</value>
                </property>
                <property name="username"><value>pruebacore</value></property>
                <property name="password"><value>12345678</value></property>
      </bean>

Puede obtener mas información en:

Contraseña de admin automática en Glassfish

En innumerables ocasiones, cuando queremos hacer un deploy de una aplicación realizamos un comando de este estilo para que se haga de forma automática:

#Asignacion de parametros despendiendo del servidor indicado.
if [ "$1" == "xyz" ]; then
        SERVER_HOST=localhost
        SERVER_PORT=54848
        SERVER_PATH=$HOME/server/glassfishxyzCore/bin
elif [ "$1" == "jxyz" ]; then
        SERVER_HOST=localhost
        SERVER_PORT=64848
        SERVER_PATH=$HOME/server/glassfishJxyz/bin
else
        echo "Opción servidor $1 no es valida"
        echo "Opciones disponibles: "
        echo "  xyz     - servidor xyz"
        echo "  jxyz - servidor jxyz"
        exit -2
fi

#Deploy del directorio.
$SERVER_PATH/asadmin deploydir --echo=true --user admin --passwordfile "$HOME/aplicacion/bin/passfile"  --host $SERVER_HOST --port $SERVER_PORT  --force=true --enabled=true --name $2 --verify=false --precompilejsp=false "$3


Donde definimos un --user admin y un --passwordfile "passfile".
Para evitarnos los problemas de que no sea capaz de leer el fichero passfile por la codificación, permisos....etc podemos solucionarlo ejecutando el comando  ./asadmin login dentro de la carpeta bin del Glassfish. Este nos generará un fichero con el par usuario-clave que usará el glassfish para logar el usuario con la clave en él definida.

Un ejemplo de la ejecución del comando es:

rencinar@OPT360:~/proyectos/xyz/servers/glassfish/bin$ ./asadmin login
Please enter the admin user name>admin
Please enter the admin password>adminadmin
Trying to authenticate for administration of server at host [localhost] and port [4848] ...
An entry for login exists for host [localhost] and port [4848], probably from an earlier login operation.
Do you want to overwrite this entry (y/n)?y
Login information relevant to admin user name [admin] for host [localhost] and admin port [4848] stored at [/home/rencinar/.asadminpass] successfully.
Make sure that this file remains protected. Information stored in this file will be used by asadmin commands to manage associated domain.

Fijar reloj por NTP

El protocolo NTP (Network Time Protocol) sirve para ajustar en reloj de un sistema informático por red. Para comunicarse utiliza el puerto 123 y va por UDP.

Si necesitamos o queremos que todos los equipos de una red tengan la misma descripción horaria lo más adecuado es configurarles para que esta hora la tomen mediante ntp de algún servidor que provea.

Configurar el reloj  en RHEL, CENTOS o FEDORA por NTP:

Entramos en una consola y nos  logamos como root:

[rencinar@core mountshare]#  su -

Instalamos ntp:

[root@core mountshare]# yum -y install ntp

Arrancamos el servicio ntpd:

[root@core mountshare]# service ntpd start

Lo configuramos para que se ejecute cuando se reinicie el sistema:

[root@core mountshare]# chkconfig ntpd on

Configuramos la hora mediante el comando ntpdate y elegimos un servidor que nos pueda proveer de la hora por ntp (en mi caso 2.pool.ntp.org).

root@core:~# ntpdate -u 2.pool.ntp.org

Reiniciamos el servicio.

[root@core mountshare]# service ntpd restart

Tras esto tendremos la hora de nuestro sistema configurada y siempre actualizada.

[root@core mountshare]# date
lun ene 23 12:23:08 CET 2012


Configurar el reloj  en Debian por NTP:

Entramos en una consola y nos  logamos como root:

[rencinar@OPT mountshare]#  su -

Instalamos ntp:

root@OPT:~# apt-get install ntpdate

Lo configuramos para que se ejecute cuando se reinicie el sistema:

root@OPT:~# chkconfig ntp on 

Configuramos la hora mediante el comando ntpdate y elegimos un servidor que nos pueda proveer de la hora por ntp (en mi caso 2.pool.ntp.org).

root@OPT:~# ntpdate -u 2.pool.ntp.org

Reiniciamos el servicio ntpd: 

root@OPT:~# service ntp restart

Tras esto tendremos la hora de nuestro sistema configurada y siempre actualizada. 

root@OPT:~# date
lun ene 23 12:26:51 CET 2012

Puede obtener mas información en:

jueves, 19 de enero de 2012

Arranque de un servicio al iniciar el sistema en RHEL

Para que se lance un proceso al arrancar el sistema, necesitamos incluir como servicio este proceso en /etc/init.d/ con el nombre que queramos (en mi caso este proceso sera prueba) y generándolo siempre como root.

Un ejemplo de como sería el esqueleto para crear un servicio es el siguiente:

 #! /bin/sh
set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:directorio donde esten los ejecutables que haga el starServer, stopServer
DESC="descripción entre comillas"
NAME=nombre del servio
STARTUP=ruta completa incluyendo el ejecutable de arranque
SHUTDOWN=ruta completa incluyendo el
ejecutable de parada
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
USER=usuario con el que se va a lanzar

test -x $DAEMON || exit 0

d_start() {
       su $USER $STARTUP || echo -n " already running"
}
d_stop() {
       su $USER $SHUTDOWN || echo -n " not running"
}
case "$1" in
 start)
       echo -n "Starting $DESC: $NAME"
       d_start
       echo "."
       ;;
 stop)
       echo -n "Stopping $DESC: $NAME"
       d_stop
       echo "."
       ;;
 reload|restart|force-reload)
       echo -n "Restarting $DESC: $NAME"
       d_stop
       sleep 10
       d_start
       echo "."
       ;;
 *)
       echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
       exit 3
       ;;
esac
exit 0


Tras generarlo le asignamos permisos de ejecución de la siguiente manera (siempre como root):

-bash-3.2$ chmod 755 prueba

Si hacemos un ls -ltr quedaría con los permisos:

-rwxr-xr-x 1 root root  1547 ene 19 12:23 PRUEBA

Con esto ya tendríamos un servicio que arranque nuestro proceso. Para poderlo arrancar sería tan fácil como hacer dentro del directorio /etc/init.d/
un:

-bash-3.2$ ./prueba start
-bash-3.2$ ./prueba stop

Ahora para incluirlo en el arranque del sistema utilizamos el comando chkconfig como root de la siguiente manera :

-bash-3.2$ chkconfig --add prueba  --level 2345

Esto lo incluye en el arranque del sistema para los niveles de arranque 2, 3, 4 y 5.

ResourceAdapterInternalException: MQJMSRA_RA4001: start:Aborting:Exception starting EMBEDDED broker=EMBEDDED Broker start failure:code = 1

Hay ocasiones que por celeridad o para evitarnos una configuración integra del Glassfish decidimos copiar el servidor de una máquina a otra. Esto tiene el por menor de tener que renombrar, en todos los lugares del servidor (exceptuando los ficheros binarios), la ip y el DNS antiguos por los nuevos. Esto lo podemos realizar mediante el comando:

grep -r "ip" /home/xyz/server/glassfishxyzCore/ 
grep -r "DNS" /home/xyz/server/glassfishxyzCore/ 

Donde tanto la ip como el DNS son las antiguas del servidor y glassfishxyzCore es la carpeta raíz del Glassfish. Entonces procedemos a re-arrancar el Glassfish, teniendo en cuenta que al cambiar la ip y el DNS el fichero lock que contiene la definición de imqbroker puede no refrescarse dando el siguiente error:

[#|2012-01-18T17:54:33.644+0100|SEVERE|sun-appserver2.1|javax.enterprise.resource.resourceadapter|_ThreadID=10;_ThreadName=main;_RequestID=6b789d3d-5089-4899-ad72-024b48a73a78;|RAR6035 : Resource adapter start failed : {0}
javax.resource.spi.ResourceAdapterInternalException: MQJMSRA_RA4001: start:Aborting:Exception starting EMBEDDED broker=EMBEDDED Broker start failure:code = 1
        at com.sun.messaging.jms.ra.ResourceAdapter.start(ResourceAdapter.java:476)
        at com.sun.enterprise.connectors.ActiveInboundResourceAdapter$1.run(ActiveInboundResourceAdapter.java:178)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.enterprise.connectors.ActiveInboundResourceAdapter.startResourceAdapter(ActiveInboundResourceAdapter.java:174)
        at com.sun.enterprise.connectors.ActiveInboundResourceAdapter.<init>(ActiveInboundResourceAdapter.java:132)
        at com.sun.enterprise.connectors.system.ActiveJmsResourceAdapter.<init>(ActiveJmsResourceAdapter.java:234)
        at com.sun.enterprise.connectors.ActiveRAFactory.createActiveResourceAdapter(ActiveRAFactory.java:107)
        at com.sun.enterprise.connectors.ResourceAdapterAdminServiceImpl.createActiveResourceAdapter(ResourceAdapterAdminServiceImpl.java:300)
        at com.sun.enterprise.connectors.ResourceAdapterAdminServiceImpl.createActiveResourceAdapter(ResourceAdapterAdminServiceImpl.java:445)
        at com.sun.enterprise.connectors.ConnectorRuntime.createActiveResourceAdapter(ConnectorRuntime.java:230)
        at com.sun.enterprise.jms.JmsProviderLifecycle.onStartup(JmsProviderLifecycle.java:428)
        at com.sun.enterprise.server.ApplicationServer.onStartup(ApplicationServer.java:446)
        at com.sun.enterprise.server.ondemand.OnDemandServer.onStartup(OnDemandServer.java:134)
        at com.sun.enterprise.server.PEMain.run(PEMain.java:409)
        at com.sun.enterprise.server.PEMain.main(PEMain.java:336)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.enterprise.server.PELaunch.main(PELaunch.java:415)
Caused by: java.lang.RuntimeException: EMBEDDED Broker start failure:code = 1
        at com.sun.messaging.jms.ra.EmbeddedBrokerRunner.start(EmbeddedBrokerRunner.java:268)
        at com.sun.messaging.jms.ra.ResourceAdapter.start(ResourceAdapter.java:472)
        ... 19 more
|#]



Para solucionarlo basta con eliminar el fichero lock situado en imqbroker, para ello lanzamos un comando similar a este (considerando glassfishxyzCore la carpeta raíz del Glassfish y xyz el dominio que queremos arrancar):

-bash-3.2$ rm /home/xyz/server/glassfishxyzCore/domains/xyz/imq/instances/imqbroker/lock

Tras esto reiniciamos el servidor, y el archivo lock, estaría regenerado.

La configuración del imqbroker quedaría con una estructura similar a esta:
imqbroker:DNS_NUEVA_IP:47676