Archive for agosto, 2011

Mostrar el formulario de login en un pop-up

Posted on agosto 25th, 2011 in Liferay | 116 Comments »

Antes de nada, debemos obtener la URL del portlet de login. En este caso es la siguiente:

/web/guest/home?p_p_id=58&p_p_lifecycle=0&p_p_state=pop_up&p_p_mode=view&saveLastPath=0&_58_struts_action=%2Flogin%2Flogin

Una vez la tenemos, debemos modificar el fichero portal_normal.vm de nuestro theme. Ahí crearemos el JavaScript que va a lanzar el pop up:

function showLogin() {
	AUI().use('aui-dialog', 'aui-overlay-manager', 'dd-constrain', function(A) {
		var dialog = new A.Dialog({
			title: 'Login',
			centered: true,
			modal: true,
			width: 500,
			height: 250
		}).plug(A.Plugin.IO, {
uri: '/web/guest/home?p_p_id=58&p_p_lifecycle=0&p_p_state=pop_up&p_p_mode=view&saveLastPath=0&_58_struts_action=%2Flogin%2Flogin'}).render();
		dialog.show();
	});
}

Finalmente, sólo nos queda crear el link que lanzará esta función:

<a href="javascript:void(0)" onclick="showLogin();">Login</a>

Evitar el mensaje “La operación ha sido realizada correctamente.”

Posted on agosto 24th, 2011 in Liferay | 145 Comments »

Cuando creamos un portlet para Liferay implementando us MVCPortlet, acostumbra a salir este mensaje cuando nos movemos de una página a otra. Hay dos maneras de evitarlo.

1. Hacer que no salgan nunca, para lo que habría que añadir lo siguiente en portlet.xml:

<init-param>
      <name>add-process-action-success-action</name>
      <value></value>
</init-param>

2. Sobreescribir en el portlet el método addSuccessMessage:

protected void addSuccessMessage(
    ActionRequest actionRequest, ActionResponse actionResponse) {
        if (!addProcessActionSuccessMessage) {
            return;
        }
        String successMessage = ParamUtil.getString(
            actionRequest, "successMessage");
        SessionMessages.add(actionRequest, "request_processed", successMessage);
    }

Liferay – Cambiar el Theme por defecto

Posted on agosto 23rd, 2011 in Liferay | 140 Comments »

Un theme de liferay tiene un id y un nombre que se puede ver en el fichero liferay-look-and-feel.xml que se encuentra en el directorio WEB-INF del theme. Algo como esto:

Para que “cool” sea el theme por defecto, se añade la siguiente línea en portal-ext.properties:

default.regular.theme.id=cool_WAR_cooltheme

Y aquí viene lo divetido, no se usa únicamente el id del theme, si no también el nombre de contexto del war que lo incluye, omitiendo guiones, espacios, barras, etc. Esto es para Liferay 6, en versiones anteriores era suficiente con el id.

Si tienes algún problema averiguando el nombre exacto que hay que poner en la configuración, se puede obtener de la siguiente manera:

1. Añade el theme a una página
2. Consulta la base de datos con: Select themeId from Layout;

Aquí, obtén el theme id que coincide con el nombre de tu theme.

Una vez añadida la línea a portal-ext.properties, reiniciar Liferay.

Más información sobre la identificación de themes en http://www.liferay.com/community/wiki/-/wiki/Main/Theme+Id+or+Portlet+Id+references+in+portal-ext.properties.

Abrir puerto en iptables

Posted on agosto 11th, 2011 in Linux | 152 Comments »

En caso de querer dar acceso externo a una web o cualquier otro servicio de vuestra máquina, si teneis iptables como firewall, es posible que tengais que abrir los puertos correspondientes.

Obtener listado de reglas de iptables:
iptables -L -n

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:67
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24    state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Añadir regla para abrir el puerto 8080 (podemos sustituirlo por cualquier otro):
iptables -A INPUT -p tcp –dport 8080 -j ACCEPT

Volvemos a listar las reglas y veremos que ya aparece la que hemos introducido:
iptables -L -n

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:67
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8080 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24    state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Instalar Google Chrome en RHEL 6

Posted on agosto 11th, 2011 in Linux | 154 Comments »

Aquí explico como instalar Google Chrome en Fedora 15, Fedora 14, Fedora 13, Fedora 12, CentOS 6 y Red Hat 6 (RHEL 6). La mejor manera de instalarlo y mantenerlo actualizado es usando el repositorio YUM de Google.

Configurar el repositorio de Google

Crear el fichero /etc/yum.repos.d/google.repo y añadirle las siguientes líneas:

[google]
name=Google - i386
baseurl=http://dl.google.com/linux/rpm/stable/i386
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

64-bit

[google64]
name=Google - x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

Instalar Google Chrome con YUM (siendo root)

En la línea de comandos, lanzar lo siguiente:

yum install google-chrome-stable

Ocultar un portlet para el que no se tienen permisos

Posted on agosto 9th, 2011 in Liferay | 115 Comments »

A veces ocurre en Liferay que un portlet debe ser visible sólo para un tipo de usuarios. Esto se consigue configurando la visibilidad por roles. Una vez configuramos esto, por defecto, para aquellos usuarios que no tiene permiso de visibilidad, Liferay mostrará el siguiente mensaje:

Lo siento, no tiene los roles necesarios para acceder a este portlet

Para evitar que ocurra esto, debemos modificar el fichero portal-ext.properties y añadir la siguiente línea:

layout.show.portlet.access.denied=false

Esto hará que el portlet no aparezca cuando no tengamos permisos para verlo.

RHEL6 Volumen de auriculares USB muy bajo

Posted on agosto 9th, 2011 in Linux | 206 Comments »

Estos días decidí probar unos auriculares Logitech con Skype en mi Red Hat EL 6. De entrada, el resultado no fue muy bueno, el sonido apenas se escuchaba, era imposible poder llegar a tener una conversación. Parece que esto se debe a un bug del sistema, aunque hasta que lo arreglen, aquí está una posible solución.

  1. Conectar los auriculares USB al ordenador
  2. Ejecutar alsamixer desde la línea de comando
  3. Pulsar <F6> y buscar los auriculares USB en la lista que aparece
  4. Ajustar el volumen usando las flechas arriba y abajo del teclado.

En mi caso, tengo que hacer esto cada vez que conecto los auriculares al PC.

VMware Player y RHEL 6.1 y problema vmmon

Posted on agosto 8th, 2011 in Linux | No Comments »

En el caso de tener RHEL 6.1 e instalar VMware Player (también pasa con VMware Workstation) hay un problema con el módulo vmmon. De entrada, no están preparados para funcionar conjuntamente. Se puede ver más información en los foros de VMware y detalles técnicos en el bugzilla de Red Hat.

El error en concreto, dice algo como esto:

Error VMware + Could not open /dev/vmmon. No such file or directory.
Please make sure that the kernel module ‘vmmon’ is loaded

Una solución es compilar el módulo vmmon en RHEL 6.1. Se puede hacer siguiendo los estos pasos:

1. mkdir ~/vmsrc ; cd ~/vmsrc
2. tar xvf /usr/lib/vmware/modules/source/vmmon.tar
3. cd vmmon-only
4. make [Nota: esto construye vmmon.ko]
5. strip –strip-debug vmmon.ko [Nota: esto es opcional. Ojo con los dos guiones]
6. su -
7. cd /lib/modules/`uname -r`/misc
8. mv vmmon.o vmmon.o.dist [Nota: guardamos el original por si acaso]
9. cp /(path al home del usuario)/vmsrc/vmmon-only/vmmon.ko vmmon.o

Una vez hecho esto, yo he reiniciado la máquina y VMware funciona perfectamente.