--- title: 'Instalación de Pentaho Community Server' --- Instalación de Pentaho Community Server === # Contenido [TOC] # Introducción * El instalador corresponde a la forma archivado y se obtiene de https://sourceforge.net/projects/pentaho/files/Pentaho-9.2/ * El link específico que usamos fue https://sourceforge.net/projects/pentaho/files/Pentaho-9.2/server/pentaho-server-ce-9.2.0.0-290.zip/download * La documentación para instalación de Pentaho 9.2 está en https://help.hitachivantara.com/Documentation/Pentaho/9.2/Setup/Archive_installation * y el lector va avanzando con el link a la siguiente sección de la instalación que está al final de la página. # Pre-requisitos para la instalación ## Software * JDK 1.8 para todo software de Pentaho. Soportado AdopOpenJdk * Sistema Operativo de 64 bits. Centos 7 y 8. Windows 2016 Server. Ubuntu 16.04 y 18.04. * Repositorio: Uno de los siguientes * PostgreSQL 9.6* & 10.0 * MySQL 5.7 & 8.0 (SQL 92) * Oracle 19c * MS SQL Server 2016, 2017 ## Hardware * Hardware de 64 bits * Procesador: Intel EM64T or AMD64 Dual-Core * Memoria RAM: 8 GB with 4 GB dedicados a 1 servidor Pentaho. * Espacio de disco: 20 GB libres luego de la instalación # Instalación archivada Para instalación de Pentaho Community Edition Server Hitachi provee una instalación archivada: | Ud. Provee | Pentaho provee | | -------- | -------- | | Computador con hardware y sistema operativo requeridos/soportados. | El paquete de instalación (archivo .zip)| | JRE o JDK 1.8. | Servidor de aplicaciones: Tomcat.| | Base de datos para el repositorio de Pentaho. Puede ser PostgreSQL, MySQL, MS SQL Server or Oracle. | Aclaración: Tomcat 9| | Drivers JDBC para la bd del repositorio (PostgreSQL, MySQL, MS SQL Server or Oracle).| | # Instalación del JDK https://developer.ibm.com/languages/java/semeru-runtimes/downloads ### openJdk ``` shell= sudo dnf install –y https://github.com/ibmruntimes/semeru8-binaries/releases/download/jdk8u302-b08_openj9-0.27.1/ibm-semeru-open-8-jdk-1.8.0.302.b08-2.ppc64le.rpm ``` > Editar el archivo `/etc/profile` y agregar: ``` shell= JAVA_HOME= /usr/lib/jvm/ibm-semeru-open-8-jdk export $JAVA_HOME ``` # Instalacion de PostgreSQL ### Instalación del paquete rpm ``` shell= sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo dnf -qy module disable postgresql sudo dnf install -y postgresql10-server ``` Si bien la documentación de Postgres indica ejecutar initdb, esto no fue necesario porque la instalación con el archivo .rpm ya creó la bd postgres. ``` shell= sudo /usr/pgsql-10/bin/postgresql-10-setup initdb ``` El archivo *.rpm* también crea el usuario postgres con home dir ``` shell= /var/lib/pgsql ``` e instala postgreSql 10 en el directorio ``` shell= /var/lib/pgsql/10/data ``` ### pgctl Control de PostrgreSQL ``` shell= pg_ctl pg_ctl — initialize, start, stop, or control a PostgreSQL server Synopsis pg_ctl init[db] [-D datadir] [-s] [-o initdb-options] pg_ctl start [-D datadir] [-l filename] [-W] [-t seconds] [-s] [-o options] [-p path] [-c] pg_ctl stop [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t seconds] [-s] pg_ctl restart [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t seconds] [-s] [-o options] [-c] pg_ctl reload [-D datadir] [-s] pg_ctl status [-D datadir] pg_ctl promote [-D datadir] [-W] [-t seconds] [-s] pg_ctl kill signal_name process_id ``` ### pgAdmin **CentOS 7 u 8** Ejecutar los siguientes comandos en el shell ```shell=0 sudo rpm -i https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm sudo rpm -e pgdg-redhat-repo-42.0-19.noarch sudo yum install pgadmin4-web ``` Para que funcione pgAdmin fue necesario permitir el acceso al puerto 8080 (cambiar configuración de firewall) y modificar el archivo *postgresql.conf* para permitir que cualquier dirección IP pueda conectarse ``` shell= # - Connection Settings - listen_addresses = '*' ``` **Incompatibilidad con paquete pgdg-common** ``` shell= yum install pgadmin4 ``` ``` shell= Last metadata expiration check: 14:57:18 ago on Sun 25 Jul 2021 07:10:01 PM PDT. Dependencies resolved. ================================================================================================================================ Package Architecture Version Repository Size ================================================================================================================================ Downgrading: pgadmin4-redhat-repo noarch 0.9-2 pgdg-common 11 k Transaction Summary ================================================================================================================================ Downgrade 1 Package Total download size: 11 k Is this ok [y/N]: y Downloading Packages: pgadmin4-redhat-repo-0.9-2.noarch.rpm 5.4 kB/s | 11 kB 00:02 -------------------------------------------------------------------------------------------------------------------------------- Total 5.4 kB/s | 11 kB 00:02 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Downgrading : pgadmin4-redhat-repo-0.9 2.noarch 1/2 Running scriptlet: pgadmin4-redhat-repo-0.9-2.noarch 1/2 ``` ``` shell [root@dwh etc]# man yum /etc/dnf/dnf.conf ``` Repository ``` shell= /etc/yum.repos.d/ ``` Excluir pgadmin4 de pgdg-common Agregar exclude en el repositorio para pgadmin ![](https://i.imgur.com/bv5r3V6.png) ![](https://i.imgur.com/nQAwB6P.png) # Creación de Bds utilizadas por pentaho Para que los scripts de creación de bases de datos utilizados por Pentaho fueran ejecutados con éxito tuvimos que crear los los mismos usuarios en la bd y en el sistema operativo. Además modificar el archivo *pghba.conf* para que el usuario postgres pueda ejecutar *\connect* a las nuevas bd como su usuario Owner sin error. ``` shell= #TYPE DATABASE USER ADDRESS METHOD local all all trust ``` ![](https://i.imgur.com/cGskvwo.png) Indicar el password para la bd de cada usuario en la sentencia CREATE USER del script correspondiente. Ej. En el archivo *createrepositorypostgresql.sql* ``` shell= CREATE USER jcr_usr PASSWORD 'Cambiar'; ``` Crear los usuarios hib_usr, jcr_usr, pentaho ``` shell= $adduser hib_usr $adduser jcr_usr $adduser pentaho ``` # Instalación de pentaho ### Creación del usuario dueño de Pentaho Si aún no existe el usuario pentaho, crearlo. ``` shell= $adduser pentaho ``` ### Directorio para Pentaho Descomprimir el archivo *pentaho-server-ce-9.2.0.0-290.zip* en la carpeta ``` shell= <HOME_usuario_pentaho>/pentaho/server/pentaho-solutions ``` **Aclaración**: *Descomprimir fue lo factible porque no hay un installer.jar ni un install.sh como dice la ayuda para la instalación archivada.* ### Configuración de Pentaho #### Variable de ambiente para el jdk que Pentaho utiliza ``` shell= PENTAHO_JAVA_HOME=/usr/lib/jvm/ibm-semeru-open-8-jdk ``` #### Scripts de inicio Modificar los scripts de inicio para que incluyan headless (cuando el servidor no tiene Xwindows instalado) ``` shell= -Djava.awt.headless=true ``` Ejemplo ``` shell= export CATALINA_OPTS="-Djava.awt.headless=true -Xms4096m -Xmx6144m -XX:MaxPermSize=256m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000" ``` #### Operaciones de Xwindows en memoria Para que las operaciones de X11 funcionen en memoria en lugar de la pantalla ``` shell= sudo yum install Xvfb ``` #### Indicar el directorio CATALINA_HOME En la instalación realizada en el **servidor de desarrollo**, modificamos el archivo `/etc/profile` ``` shell= CATALINA_HOME= /home/pentaho/pentaho/server/pentaho-server/tomcat export CATALINA_HOME ``` #### Bd en postgreSql para repositorio de Pentaho Setear la bd Quartz del servidor PostgreSQL para que sea el Repositorio de Pentaho. **La información de eventos como reportes programados, son almacenado en el JobStore de Quartz.** Indicar la localización del JobStore modificando el archivo `quartz.properties`: Editar el archivo `<PENTAHO_USER_HOME>/pentaho/server/pentaho-server/pentaho-solutions/system/quartz/quartz.properties` file in any text editor. Localizar la sección `#_replace_jobstore_properties` e indicar `org.quartz.jobStore.driverDelegateClass` como sigue: ``` shell= org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate ``` Localizar la sección `#Configure Datasources` e indicar `org.quartz.dataSource.myDS.jndiURL` igual a `Quartz`. En Tomcat, esto sería: ``` shell= org.quartz.dataSource.myDS.jndiURL = Quartz ``` #### Bd en postgreSql para el repositorio de Hibernate Modificar el archivo `<PENTAHO_USER_HOME>/pentaho/server/pentaho-server/pentaho-solutions/system/hibernate/hibernate-settings.xml` file in a text editor. Ubicar el tag `<config-file>` e indicar PostgreSQL: ``` xml= <config-file>system/hibernate/postgresql.hibernate.cfg.xml </config-file> ``` Indicar el usuario y contraseñas correctas para la bd que usará hibernate en el archivo `<PENTAHO_USER_HOME>/pentaho/server/pentaho-server/pentaho-solutions/system/hibernate/postgresql.hibernate.cfg.xml` En la instalación realizada: ``` xml= <session-factory> <property name="cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</property> <property name="hibernate.generate_statistics">true</property> <property name="hibernate.cache.use_query_cache">true</property> <!-- Postgres 8 Configuration --> <property name="connection.driver_class">org.postgresql.Driver</property> <property name="connection.url">jdbc:postgresql://localhost:5432/hibernate</property> <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> <property name="connection.username">hib_usr</property> <property name="connection.password">Cambiar</property> <property name="hibernate.connection.datasource">java:comp/env/jdbc/Hibernate</property> <property name="connection.pool_size">10</property> <property name="show_sql">false</property> <property name="hibernate.jdbc.use_streams_for_binary">true</property> <!-- replaces DefinitionVersionManager --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- load resource from classpath --> <mapping resource="hibernate/postgresql.hbm.xml" /> </session-factory> ``` ### Configuraciones de Tomcat #### Driver Jdbc Descargar el driver Jdbc para la versión instalada de PostgreSQL y copiarlo al directorio `<PENTAHO_USER_HOME>/pentaho/server/pentaho-server/tomcat/lib` #### Bd en postgreSql para el repositorio de jackrabbit Editar el archivo `<PENTAHO_USER_HOME>/pentaho/server/pentaho-server/pentaho-solutions/jackrabbit/repository.xml` Indicar el uso de postgreSQL en las siguientes ubicaciones del archivo `repository.xml`. Notar que para Pentaho 9.2 el url tiene que usar JNDI. a. FileSystem ``` xml= <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"> <param name="driver" value="javax.naming.InitialContext"/> <param name="url" value="java:comp/env/jdbc/jackrabbit"/> <param name="schema" value="postgresql"/> <param name="schemaObjectPrefix" value="fs_repos_"/> </FileSystem> ``` Comentar el uso del sistema de archivos ``` xml= <!-- <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem"> <param name="path" value="${rep.home}/repository"/> </FileSystem> --> ``` b. DataStore ``` xml= <DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore"> <param name="driver" value="javax.naming.InitialContext"/> <param name="url" value="java:comp/env/jdbc/jackrabbit"/> <param name="databaseType" value="postgresql"/> <param name="minRecordLength" value="1024"/> <param name="maxConnections" value="3"/> <param name="copyWhenReading" value="true"/> <param name="tablePrefix" value=""/> <param name="schemaObjectPrefix" value="ds_repos_"/> </DataStore> ``` c. FileSystem (no es repetido) ``` xml= <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"> <param name="driver" value="javax.naming.InitialContext"/> <param name="url" value="java:comp/env/jdbc/jackrabbit"/> <param name="schema" value="postgresql"/> <param name="schemaObjectPrefix" value="fs_ws_"/> </FileSystem> ``` d. Persistence Manager ``` xml= <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.PostgreSQLPersistenceManager"> <param name="driver" value="javax.naming.InitialContext"/> <param name="url" value="java:comp/env/jdbc/jackrabbit"/> <param name="schema" value="postgresql"/> <param name="schemaObjectPrefix" value="${wsp.name}_pm_ws_"/> </PersistenceManager> ``` e. FileSystem (no es repetido) ``` xml= <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem"> <param name="driver" value="javax.naming.InitialContext"/> <param name="url" value="java:comp/env/jdbc/jackrabbit"/> <param name="schema" value="postgresql"/> <param name="schemaObjectPrefix" value="fs_ver_"/> </FileSystem> ``` f. PersistenceManager (no es repetido) ``` xml= <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.PostgreSQLPersistenceManager"> <param name="driver" value="javax.naming.InitialContext"/> <param name="url" value="java:comp/env/jdbc/jackrabbit"/> <param name="schema" value="postgresql"/> <param name="schemaObjectPrefix" value="pm_ver_"/> </PersistenceManager> ``` g. Journal (dentro del tag Cluster) ``` xml= <Cluster id="node1"> <Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal"> <param name="revision" value="${rep.home}/revision.log" /> <param name="driver" value="javax.naming.InitialContext"/> <param name="url" value="java:comp/env/jdbc/jackrabbit"/> <param name="schema" value="postgresql"/> <param name="schemaObjectPrefix" value="cl_j_"/> <param name="janitorEnabled" value="true"/> <param name="janitorSleep" value="86400"/> <param name="janitorFirstRunHourOfDay" value="3"/> </Journal> ``` #### Datasource para Tomcat Modificar la información de conexión usada por Tomcat. Editar el archivo `<PENTAHO_USER_HOME>/>/pentaho/server/pentaho-server/tomcat/webapps/pentaho/META-INF/context.xml` ``` xml= <Resource name="jdbc/Hibernate" auth="Container" type="javax.sql.DataSource" factory="org.pentaho.di.core.database.util.DecryptingDataSourceFactory" maxActive="30" minIdle="0" maxIdle="10" initialSize="0" maxWait="10000" username="hib_usr" password="Cambiar.123" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/hibernate" validationQuery="select 1" /> <Resource name="jdbc/Quartz" auth="Container" type="javax.sql.DataSource" factory="org.pentaho.di.core.database.util.DecryptingDataSourceFactory" maxActive="30" minIdle="0" maxIdle="10" initialSize="0" maxWait="10000" username="pentaho" password="Cambiar.123" testOnBorrow="true" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/quartz" validationQuery="select 1" /> <Resource name="jdbc/jackrabbit" auth="Container" type="javax.sql.DataSource" factory="org.pentaho.di.core.database.util.DecryptingDataSourceFactory" maxActive="30" minIdle="0" maxIdle="10" initialSize="0" maxWait="10000" username="jcr_usr" password="Cambiar.123" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/jackrabbit" validationQuery="select 1" /> <Resource name="jdbc/SampleData" auth="Container" type="javax.sql.DataSource" factory="org.pentaho.di.core.database.util.DecryptingDataSourceFactory" maxActive="30" minIdle="0" maxIdle="10" initialSize="0" maxWait="10000" username="pentaho" password="Cambiar.123" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/sampledata" validationQuery="select 1" /> <Resource name="jdbc/SampleDataAdmin" auth="Container" type="javax.sql.DataSource" factory="org.pentaho.di.core.database.util.DecryptingDataSourceFactory" maxActive="30" minIdle="0" maxIdle="10" initialSize="0" maxWait="10000" username="pentaho_admin" password="Cambiar.123" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/sampledata" validationQuery="select 1" /> ``` **Notar que en nuestra instalación sampleData con hSQLServer no funcionó**. Intentamos que funcione con PostgreSQL pero de todas formas dio error al intentar consultar un reporte de muestra identificado como Invoice (los reportes también daban error cuando la bd SampleData era hSQL # Creación de bd sampleData y sus usuarios en postgreSql Los scripts para la creación e inserts necesarios para la bd sampleData fueron adaptados de una documentación de una imagen Docker para Pentaho 5 (https://github.com/wmarinho/docker-pentaho/blob/master/config/postgresql/biserver-ce/pentaho-solutions/system/jackrabbit/repository.xml) Adaptamos esos scripts usando nombres todos en minúsculas para que no de error de nombres de tablas y campos. PostgreSQL convierte los nombres de campos y tablas a minúsculas cuando procesa una sentencia SQL . Los scripts a ejecutar están en el directorio `datosMuestra_paraLowercaseFoldingDePostgres` # Iniciar Pentaho Ejecutar el script ``` shell= start-pentaho.sh ``` Para parar pentaho ejecutar ``` shell= stop-pentaho.sh ``` # Observaciones sobre Datasources BasicDataSourceFactory y DecryptingDataSourceFactory Observación: Si bien con uso de BasicDataSourceFactory (https://tomcat.apache.org/tomcat-9.0-doc/jndi-resources-howto.html), pentaho pudo iniciar, el log aún tenía error de hibernate/repositorio Ej. ``` xml= <Resource name="jdbc/Quartz" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory" maxActive="20" minIdle="0" maxIdle="5" initialSize="0" maxWait="10000" username="pentaho" password="Cambiar " testOnBorrow="true" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/quartz" validationQuery="select 1" /> ``` Para que funcione con el datasource indicado por Pentaho, tuvimos que copiar en `<TOMCAT>/WEB-INF/lib/` el jar de kettle y sus dependencias: Ej. ``` xml= <Resource name="jdbc/Quartz" auth="Container" type="javax.sql.DataSource" factory="org.pentaho.di.core.database.util.DecryptingDataSourceFactory" maxActive="30" minIdle="0" maxIdle="10" initialSize="0" maxWait="10000" username="pentaho" password="Cambiar.123" testOnBorrow="true" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/quartz" validationQuery="select 1" /> ``` Kettle y sus dependencias están en el directorio `kettleDependency\` ```shell= batik-anim-1.9.1.jar batik-awt-util-1.9.1.jar batik-bridge-1.9.1.jar batik-codec-1.9.1.jar batik-constants-1.9.1.jar batik-css-1.9.1.jar batik-dom-1.9.1.jar batik-ext-1.9.1.jar batik-gui-util-1.9.1.jar batik-gvt-1.9.1.jar batik-i18n-1.9.1.jar batik-parser-1.9.1.jar batik-script-1.9.1.jar batik-svg-dom-1.9.1.jar batik-svggen-1.9.1.jar batik-transcoder-1.9.1.jar batik-util-1.9.1.jar batik-xml-1.9.1.jar com.wcohen.secondstring-0.1.jar commons-collections4-4.4.jar commons-dbcp-1.4.jar commons-io-2.2.jar commons-lang-2.6.jar commons-pool-1.5.7.jar javassist-3.20.0-GA.jar jcifs-1.3.3.jar joda-time-2.10.2.jar jsch-0.1.54.jar jug-lgpl-2.0.0.jar jzlib-1.0.7.jar kettle-core-9.2.0.0-290.jar ognl-2.6.9.jar pentaho-encryption-support-9.2.0.0-290.jar scannotation-1.0.2.jar simple-jndi-1.0.3.jar xml-apis-ext-1.3.04.jar ```