Alfresco en Rocky Linux
Tags: alfresco, ansible, rocky, activedeirectory
Published: 2023-03-04 20:14:45

Recientemente, he tenido que instalar un **Alfresco 7.2** en un servidor con **Rocky Linux**. Seguramente, la calidad de este post no merezca miles de likes, pero como tuve que dedicar cierto tiempo para conseguir que todo funcionara correctamente, he decidido compartirlo por si a laguien le pudiera resultar de utilidad.

El proceso de instalación, está perfectamente detallado [aquí](https://docs.alfresco.com/content-services/community/install/ansible/), por lo que no voy a repetirlo pero, si te voy a indicar aquellos pasos que han requerido alguna acción adicional.

Yo opté por la **instalación** con **ansible** en un **servidor único**.

En un servidor con una instalación convencional de **Rocky Linux 8**, segui las intruciones de la documentación que en resumidas cuentas sería algo así:


```
yum update
yum install unzip https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum update --nobest
yum install ansible
mkdir alfresco_tmp
cd alfresco_tmp
wget https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-ansible-deployment/1.1.1/alfresco-ansible-deployment-1.1.1.zip
unzip alfresco-ansible-deployment-1.1.1.zip
cd alfresco-ansible-deployment-1.1.1
```
Hasta aquí ningún problema, pero al ejecutar el **playbook** de instalación, me encuentré con la sorpresa de que la cosa no fue demasiado bien. Así que te aconsejo que te detengas aquí un momento y, no sigas con la instalación.

Tras algo de **troubleshooting** descubro que, el origen de todo, está en que hay una serie de variables que no están definidas en caso de que la instalación se ejecute sobre **Rocky Linux**. Una vez descubierto esto, la solución es fácil, crear las variables a partir de las de sus distros gemelas.

```
cp ./roles/sfs/vars/RedHat.yml ./roles/sfs/vars/Rocky8.yml
cp ./roles/repository/vars/RedHat.yml ./roles/repository/vars/Rocky8.yml
cp ./roles/search/vars/RedHat.yml ./roles/search/vars/Rocky8.yml
cp ./roles/trouter/vars/RedHat.yml ./roles/trouter/vars/Rocky8.yml
cp ./roles/sync/vars/RedHat.yml ./roles/sync/vars/Rocky8.yml
cp ./roles/nginx/vars/RedHat.yml ./roles/nginx/vars/Rocky8.yml
cp ./roles/adw/vars/RedHat.yml ./roles/adw/vars/Rocky8.yml
cp ./roles/common/vars/CentOS8.yml ./roles/common/vars/Rocky8.yml
cp ./roles/postgres/vars/CentOS8.yml ./roles/postgres/vars/Rocky8.yml
cp ./roles/transformers/vars/CentOS8.yml ./roles/transformers/vars/Rocky8.yml
```
Ahota sí, ya podemos ejecutar el playbook
```
ansible-playbook playbooks/acs.yml -i inventory_local.yml -e "@community-extra-vars.yml"
```
Esto tardará unos minutos pero, tenemos que agradecer a los autores que nos hayan puesto tan fácil la instlación. Al finalizar, tendremos un alfresco completamente funcional, eso sí, si tienes activado el firewall, asegurate de que permites las conexiones entrantes.

```
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
```
Llegados a este punto, ya podemos entra en **http://mi-servidor/share** con el usuario **admin** y la contraseña **admin**. Supongo que no hace falta que recomiende el cambio de contraseña como la primera acción a realizar tras comprobar que la instlación ha funcionado correctamente.

Ya podemos utilzar usuarios locales, pero lo que me interesaba era permitir el acceso a los usuarios de nuestro **Active Directory**. La ubicación de los ficheros de configuración ha cambiado respecto a versiones anteriores y, tuve que realizar varias pruebas hasta encontrar la ubicación correcta.

```
nano /etc/opt/alfresco/content-services/classpath/alfresco-global.properties
```
Al final del fichero, tenemos que añadir algo parecido a esto:
```
authentication.chain=alfrescoNtlm1:alfrescoNtlm,ldap1:ldap
synchronization.syncWhenMissingPeopleLogIn=true
synchronization.import.cron=0 0/10 * * * ?

ldap.authentication.active=true
ldap.authentication.allowGuestLogin=true
ldap.authentication.userNameFormat=%s@tudominio.net
ldap.authentication.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
ldap.authentication.java.naming.provider.url=ldap://tudominio.net:389
ldap.authentication.java.naming.security.authentication=simple
ldap.authentication.escapeCommasInBind=false
ldap.authentication.escapeCommasInUid=false
ldap.authentication.defaultAdministratorUserNames=Administrator,otrousuario,tuusuario

ldap.synchronization.active=false
ldap.synchronization.java.naming.security.authentication=simple
ldap.synchronization.java.naming.security.principal=cn\=UsuarioAd,OU\=IT,OU\=OtraOU,DC\=tudominio,DC\=net
ldap.synchronization.java.naming.security.credentials=ContraseñaDeUsuarioConexionAD
ldap.synchronization.queryBatchSize=1000
ldap.synchronization.attributeBatchSize=1000
ldap.synchronization.groupQuery=(objectclass\=group)
ldap.synchronization.groupDifferentialQuery=(&(objectclass\=group)(!(whenChanged<\={0})))
ldap.synchronization.personQuery=(&(objectclass\=user)(userAccountControl\:1.2.840.113556.1.4.803\:\=512))
ldap.synchronization.personDifferentialQuery=(&(objectclass\=user)(userAccountControl\:1.2.840.113556.1.4.803\:\=512)(!(whenChanged<\={0})))
ldap.synchronization.groupSearchBase=DC\=tudominio,DC\=net
ldap.synchronization.userSearchBase=DC\=tudominio,DC\=net
ldap.synchronization.modifyTimestampAttributeName=whenChanged
ldap.synchronization.timestampFormat=yyyyMMddHHmmss'.0Z'
ldap.synchronization.userIdAttributeName=sAMAccountName
ldap.synchronization.userFirstNameAttributeName=givenName
ldap.synchronization.userLastNameAttributeName=sn
ldap.synchronization.userEmailAttributeName=mail
ldap.synchronization.userOrganizationalIdAttributeName=company
ldap.synchronization.defaultHomeFolderProvider=largeHomeFolderProvider
ldap.synchronization.groupIdAttributeName=cn
ldap.synchronization.groupDisplayNameAttributeName=displayName
ldap.synchronization.groupType=group
ldap.synchronization.personType=user
ldap.synchronization.groupMemberAttributeName=member
ldap.synchronization.enableProgressEstimation=true
ldap.authentication.java.naming.read.timeout=0
```
Naturalmente, si quieres que esto funcione con tu Active Directory, tendrás que realizar las adaptaciones pertinentes para que se adapte a tu configuración particular.

Y esto es todo, espero que a alguien le resulte de utilidad.