Archivo de la categoría: tips

[Tip] Refresca tu desarrollo java en caliente en Alfresco 4.x y 5.x

Buenas.

Hace poco estuve en un cliente trabajando, entre otras cosas, con la SDK 2.1.1 de Maven y clases Java. Cada vez que tenía que re-desplegar un desarrollo perdía como mínimo 3 minutos y eso sin contar que se complicase el tema:

  • Para el servicio
  • Despliega el contenido
  • Arranca
  • Mira logs
  • Si hay un error corrígelo
  • Empieza de nuevo desde el punto 1

Sigue leyendo

[Alfresco Tip] Crear un servicio de alfresco en linux

Buenas.

¿No os ha ocurrido a veces que te encuentras una instalación en el que Alfresco no arranca al iniciar el sistema operativo? Hay una opción sencilla para hacerlo y es creando un demonio o servicio dentro del sistema operativo que dispongáis. En mi caso os voy a explicar cómo hacerlo para Ubuntu 14.04 LTS

Los pasos que vamos a realizar son:

  • Creamos el script que se encargará de levantar nuestro alfresco
  • Configuramos las variables que nos interesan de acuerdo con nuestra instalación
  • Creamos y damos permisos a los archivos necesarios
  • Refrescamos los servicios a nivel de sistema operativo
  • ¡A probar!

¡Manos a la obra!

Antes de nada comprobaremos que no esté creado en el sistema, para ello listaremos los que existen actualmente con el siguiente comando:

ls -l /etc/init.d/

Os devolverá algo similar a estas entradas:

-rw-r–r– 1 root root 4290 mar 12  2013 apache2
-rwxr-xr-x 1 root root 6173 abr 13  2012 bluetooth
-rwxr-xr-x 1 root root 4077 may  2  2010 ssh
….

Fijaros que no haya ninguno relativo a alfresco o tomcat. Una vez comprobado que realmente no disponemos de ningún servicio, procedemos a crear uno. Para ello realizamos los siguientes pasos:

    1. $ cd /etc/init.d/
    2. $ sudo nano alfresco
      Se nos abrirá el editor de texto. Deberemos pegar el siguiente contenido:

      #!/bin/sh
      #
      # description: Alfresco init.d startup
      # author: Cristina Martin
      # date: 18.12.15
      #
      ### BEGIN INIT INFO
      # Provides:          alfresco
      # Start:             start
      # Stop:              stop
      # Restart:           restart
      # Status:            status   
      # Description:       Alfresco start|stop|restart|status
      ### END INIT INFO
      
      RETVAL=0
      ALF_USER=alfresco
      ALF_LOGS=/var/log/alfresco
      ALF_HOME=/opt/alfresco-4.2.f
      ALF_CURRENT_USER=`whoami`
      #echo starttt
      #echo $ALF_CURRENT_USER
      start () {
          cd $ALF_LOGS
          if [ $ALF_CURRENT_USER = $ALF_USER ] ; then
             $ALF_HOME/alfresco.sh start $2
          else
             su $ALF_USER -c "$ALF_HOME/alfresco.sh start $2"
          fi
          #$ALF_HOME/alfresco.sh start $2
          #/opt/alfresco/alfresco.sh start "$2"
          RETVAL=$?
          if [ -d "/var/lock/subsys" ] && [ `id -u` = 0 ] && [ $RETVAL -eq 0 ] ; then
              touch /var/lock/subsys/alfresco
          fi
      }
      
      stop () {
          if [ $ALF_CURRENT_USER = $ALF_USER ] ; then
             $ALF_HOME/alfresco.sh stop $2
          else
             su $ALF_USER -c "$ALF_HOME/alfresco.sh stop $2"
          fi
          RETVAL=$?
      }
      
      
      case "$1" in
          start)
              start "$@"
              ;;
          stop)
              stop "$@"
              ;;
          restart)
              stop "$@"
              start "$@"
              ;;
          *)
          if [ $ALF_CURRENT_USER = $ALF_USER ] ; then
             $ALF_HOME/alfresco.sh $@
          else
             su $ALF_USER -c "$ALF_HOME/alfresco.sh $@"
          fi
          RETVAL=$?
      esac
      exit $RETVAL
      
      
    3. A tener en cuenta las siguientes líneas (cambiadlas por los valores que estéis usando):
      ALF_USER=alfresco
      ALF_LOGS=/var/log/alfresco
      ALF_HOME=/opt/alfresco-5.0.a

      ALF_USER: Es el usuario que se encargará de arrancar el alfresco
      ALF_LOGS: Será la ruta donde se guardaran los logs que genere nuestro servicio
      ALF_HOME: La ruta donde está instalado nuestro Alfresco

    4. Realizamos lo siguiente:
      $ control + x
      $ Y
      $ Tecla «intro»Con esto salvaremos nuestro nuevo fichero
    5. Asignamos permisos a nuestro nuevo archivo:
      sudo chown alfresco /etc/init.d/alfresco
      sudo chmod 755 /etc/init.d/alfresco
    6. Necesitamos crear la carpeta donde salvaremos los logs que se generen con este servicio y dar permisos a nuestro usuario:
      sudo mkdir /var/log/alfresco
      sudo chown alfresco /var/log/alfresco
    7. Lo siguiente es decirle a nuestro Sistema que hemos introducido este nuevo servicio y que queremos cargarlo cuando se inicie el sistema, para ello ejecutamos la siguiente orden:
      sudo update-rc.d alfresco defaults
    8. Reiniciar el sistema para probar que funciona y se inicia Alfresco correctamente con el comando reboot

Y con esto tendremos configurado nuestra instalación de Alfresco como servicio, de forma que si el servidor sufre alguna caída, Alfresco pueda levantarse automáticamente.

Espero que os haya servido este tip ;-)

Un saludo.

[Alfresco Tip] Error 404 al acceder a la consola Solr

Buenas a todos :-)

Tras realizar una instalación usando el bundle por defecto de Alfresco, versión 4.1 Enterprise, me di cuenta que al tratar de acceder a la consola de Solr esta arrojaba un significativo 404 not found. Me gustaría compartir con vosotros como conseguí echar a andar la consola, solventando por el camino otros errores relativos al certificado.

Por cierto: Esta solución está probada con Firefox versión 42.0.

En general, para habilitar la consola de Solr en Alfresco necesitamos instalar el certificado del browser que hay creado por defecto en nuestra instalación e importarlo en el explorador que vayamos a utilizar para que sea capaz de validar la sesión SSL de Solr. En el caso de no haber realizado la instalación con el instalador de Alfresco, deberás generar ese certificado siguiendo estas instrucciones.

Una vez tenemos ese certificado, debemos seguir los siguientes pasos:

  1. Abre Firefox, vamos a trabajar en él.
  2. Importa el certificado ubicado en ../alfresco/alf_data/keystore/browser.p12
  3. Si intentas acceder a la consola, obtendrás el siguiente error: ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY (más info acerca de esta vulneravilidad  aquí).
  4. Para solventarlo, abre una pestaña de Firefox y ejecuta los siguientes pasos:

– Teclea en la url about:config
– Acepta el mensaje y a continuación ve al cuadro de búsqueda
– Introduce security.ssl3.dhe_rsa_aes_128_sha y clicka dos veces en el para ponerlo a false
– De nuevo, busca: security.ssl3.dhe_rsa_aes_256_sha y clicka dos veces en el para ponerlo a false:

ssl_solr_1
– Accede a la siguiente url (https://IP_SERVIDOR:8443/solr) y «voilà»:

solr_console_1solr_console_2

Además de esta solución he encontrado esta otra (no la he probado pero quizás sería interesante y «menos engorrosa»).

En el archivo server.xml (en …/tomcat/conf/)

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
       maxThreads="150" scheme="https" secure="true"
       keystoreFile="keystorePath"
       keystorePass="keystorepass"
       ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"
       clientAuth="false" sslProtocol="TLS"/>

Aplicando esta solución, reiniciamos el tomcat y simplemente tendríamos que importar el certificado a nuestro explorador para poder acceder a la consola (no nos saldría el error ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY).

Espero que os haya servido de utilidad ;-)

¡¡Saludos!!

[Share] Ocultar la opción “crear sitio” en 4.1.x Enterprise

Buenas a todos.

Hace algún tiempo hice esta entrada basada en la 3.4.0 Enterprise y recientemente he tenido que adaptarla para la versión 4.1.x y me gustaría compartirla con vosotros. Esta entrada sirve para la version 4.1.x, no lo he probado en 4.2. ( de hecho sabiendo los cambios que existen con respecto a Aikau, apostaría que no funciona).

Los archivos que tenemos que tocar son 3:

  1. El dashlet de «Mis sitios»
  2. En la barra de arriba, dentro del menú desplegable
  3. El Dashlet de bienvenida

Como nos gusta seguir con las buenas prácticas, tendremos que copiar estos tres archivos (dentro de webapps/share/):

1.- {share-path-webapp}/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/dashlets/my-sites.get.html.ftl
2.- {share-path-webapp}/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/modules/header/sites.get.html.ftl
3.- {share-path-webapp}/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/dashlets/dynamic-welcome.get.html.

Y pegarlos en tomcat/shared/classes/alfresco/web-extension/

1.- {share-path-shared}/web-extension/site-webscripts/org/alfresco/components/dashlets/my-sites.get.html.ftl
2.- {share-path-shared}/web-extension/site-webscripts/org/alfresco/modules/header/sites.get.html.ftl
3.- {share-path-shared}/web-extension/site-webscripts/org/alfresco/components/dashlets/dynamic-welcome.get.html.ftl

Si en web-extension no tenéis creada la estructura de carpeta, deberéis hacerlo ya que necesitamos replicar la misma estructura que se encuentra en el Share internamente. Una vez los tengamos en web-extension, vamos a proceder a modificarlos:

1.- Dashlet de «mis sitios» – my-sites.get.html.ftl

Vamos directamente a la linea 43 y en este framento de código:

                 <span class="align-right yui-button-align">
                    <span class="first-child">
                       <a href="#" id="${id}-createSite-button" class="theme-color-1">
                          <img src="${url.context}/res/components/images/site-16.png" style="vertical-align: text-bottom" />
                          ${msg("link.createSite")}</a>
                    </span>
                 </span>

Lo encapsularemos con un if que chequeará la seguridad. Nos debe quedar así:

 

         <#if user.isAdmin>
                 <span class="align-right yui-button-align">
                    <span class="first-child">
                       <a href="#" id="${id}-createSite-button" class="theme-color-1">
                          <img src="${url.context}/res/components/images/site-16.png" style="vertical-align: text-bottom" />
                          ${msg("link.createSite")}</a>
                    </span>
                 </span>
         </#if>

Con esto, cuando Share vaya a cargar el componente visual, chequeará si el usuario que tiene hecho login tiene permisos de administrador.

2.- Link menú desplegable – sites.get.html.ftl

Debemos ir a la línea 25, ahí encontraremos este fragmento donde se pinta el link:

              <ul class="create-site-menuitem">
                 <li>
                    <a href="#" onclick="Alfresco.util.ComponentManager.get('${id_js}').showCreateSite(); return false;">${msg("label.create-site")}</a>
                 </li>
              </ul>

Hacemos lo mismo en el caso anterior y lo encapsularemos en una comprobación para que chequee los permisos del usuario que quiera visualizarlo:

      <#if user.isAdmin>
              <ul class="create-site-menuitem">
                 <li>
                    <a href="#" onclick="Alfresco.util.ComponentManager.get('${id_js}').showCreateSite(); return false;">${msg("label.create-site")}</a>
                 </li>
              </ul>
          </#if>

3.- Dashlet de bienvenida – dynamic-welcome.get.html.ftl

Este caso es algo especial porque si queremos que no pinte el link dentro del dashlet, deberemos tocar el javascript para manipular el número de columnas y que se «salte» la del sitio y, además, el freemarket (ftl) para retocar los estilos y que no se descuadre. En mi caso, sencillamente mostraré este dashlet solo a los usuarios administradores, y lo ocultaré para aquellos que no lo sean.
En este caso es sencillo: Tendremos que poner la condición arriba del todo y encapsular el dashlet completo:

Original:

 <#if showDashlet>
   <#assign el=args.htmlid?html>
   <script type="text/javascript">//<![CDATA[
   new Alfresco.dashlet.DynamicWelcome("${el}", "${dashboardUrl}", "${dashboardType}", "${siteNodeRef!""}").setMessages(${messages});
   //]]></script>
   <div class="dashlet dynamic-welcome">
      <a id="${el}-close-button" class="welcome-close-button" href="#">
         <img src="${url.context}/res/components/images/delete-16.png" />
         <span>${msg("welcome.close")}</span>
      </a>
    ...
    ...
              <div class="welcome-height-adjuster">&nbsp;</div>
         </div>
      </div>
    </div>
 </#if>

Modificado:

<#if user.isAdmin>
 <#if showDashlet>
   <#assign el=args.htmlid?html>
   <script type="text/javascript">//<![CDATA[
   new Alfresco.dashlet.DynamicWelcome("${el}", "${dashboardUrl}", "${dashboardType}", "${siteNodeRef!""}").setMessages(${messages});
   //]]></script>
   <div class="dashlet dynamic-welcome">
      <a id="${el}-close-button" class="welcome-close-button" href="#">
         <img src="${url.context}/res/components/images/delete-16.png" />
         <span>${msg("welcome.close")}</span>
      </a>
      ...
      ...
           <div class="welcome-height-adjuster">&nbsp;</div>
         </div>
      </div>
    </div>
 </#if>
</#if>

Y listo, con estas modificaciones Share cuando pinte el link, chequeará primero si el usuario que intenta visualizarlo tiene permisos de administrador o no.

Espero que sirva de ayuda,

¡Un saludo!