Migración a Debian 9 con openjdk-8 - Instructivo

Que tal?

Comparto mi experiencia migrando Comdoc 3.0.6 (funcionando sobre jboss-4.2.3.GA) de un servidor antiguo con Debian 6 y openjdk-6-jdk a un nuevo servidor con Debian 9 y openjdk-8-jdk. Las versiones de Comdoc y JBoss se mantienen iguales.

Notas:

  • reemplazar [mi-us-admin] por tu usuario LDAP o tu usuario PAM de cada servidor.
  • reemplazar ‘[host-db-anterior]’ por la URL al servidor de base de datos anterior
  • reemplazar ‘[host-app-anterior]’ por la URL al servidor de aplicación anterior
  • En nuestro caso JBoss se encuentra en el directorio /opt/jboss-4.2.3.GA y Comdoc en el directorio /var/comdoc

En el servidor de aplicación anterior (Debian 6, openjdk-6-jdk)

Se comprimen los directorios y archivos a migrar. El resultado es el archivo /tmp/comdoc_app_dump.tar.gz listo para ser descargado vía scp desde el servidor nuevo:

cd /opt
sudo tar -czf opt_jboss.tar.gz jboss-4.2.3.GA
sudo mv opt_jboss.tar.gz /tmp/
cd /var
sudo tar -czf var_comdoc.tar.gz comdoc
sudo mv var_comdoc.tar.gz /tmp/
cd /tmp
sudo cp -a /etc/init.d/jboss_init.sh /etc/init.d/xvfb-daemon /etc/init.d/xvfb-daemon2 .
sudo tar -czf comdoc_app_dump.tar.gz jboss_init.sh opt_jboss.tar.gz var_comdoc.tar.gz xvfb-daemon xvfb-daemon2
sudo rm jboss_init.sh opt_jboss.tar.gz var_comdoc.tar.gz xvfb-daemon xvfb-daemon2

En el servidor de base de datos anterior (PostgreSQL 9.1.14)

pg_dump -h localhost -U comdoc -W produccion > /tmp/comdoc_produccion.pgsql

En el nuevo servidor de base de datos (PostgreSQL 9.6.7)

Se descarga y se importa el dump de la base de datos

scp [mi-us-admin]@[host-db-anterior]:/tmp/comdoc_produccion.pgsql .
psql -h localhost -U comdoc produccion < /tmp/comdoc_produccion.pgsql

Se agrega la IP del nuevo servidor de aplicación al archivo pg_hba.conf:

sudo vim /etc/postgresql/9.6/main/pg_hba.conf
  '-»  (add application host ips)

Para solucionar un problema que evita que los usuario puedan ingresar al sistema es necesario ejecutar:

sudo su postgres
psql -d produccion

y dentro de psql (puede ser necesario que edites el nombre de la base de datos):

ALTER DATABASE produccion SET bytea_output TO 'escape';

En caso de encontrarse con el error “ERROR: el operador no existe: integer = character varying en carácter 53” en el log de PostgreSQL, también se deberá ejecutar:

 CREATE OR REPLACE FUNCTION pg_catalog.varchartoint(character varying) 
 RETURNS integer
 STRICT IMMUTABLE LANGUAGE SQL AS 'SELECT
 int4($1::text);';

 CREATE CAST (character varying AS integer) WITH FUNCTION
 pg_catalog.varchartoint(character varying) AS IMPLICIT;

Finalmente se reinicia el servidor de base de datos:

exit
sudo systemctl restart postgresql.service

En el nuevo servidor de aplicación (Debian 9, openjdk-8-jdk)

sudo apt-get install openjdk-8-jdk xvfb vim

cd /tmp
scp [mi-us-admin]@[host-app-anterior]:/tmp/comdoc_app_dump.tar.gz .


sudo tar xzf comdoc_app_dump.tar.gz
sudo rm comdoc_app_dump.tar.gz


sudo mv opt_jboss.tar.gz /opt/
sudo mv var_comdoc.tar.gz /var/
sudo mv jboss_init.sh xvfb-daemon xvfb-daemon2 /etc/init.d/

sudo chmod a+x /etc/init.d/jboss_init.sh
cd /opt
sudo tar xzf opt_jboss.tar.gz
sudo rm -f opt_jboss.tar.gz
 cd /var
sudo tar xzf var_comdoc.tar.gz
sudo rm -f var_comdoc.tar.gz

Se edita la configuración de conexión al servidor de base de datos, en caso de ser necesario:

sudo vim /opt/jboss-4.2.3.GA/server/comdoc/deploy/comdoc-ds.xml

Para solucionar un problema de JBoss en Debian 9 al utilizar el servicio Xvfb, es necesario:

sudo vim /etc/init.d/jboss_init.sh

remplazar:

export DISPLAY=localhost:0.0

por:

export DISPLAY=:0.0

Se crean los unit files para systemd:

JBoss:

sudo vim /lib/systemd/system/jboss.service

[Unit]
Description=JBoss

[Service]
Type=forking
User=root
Group=root
ExecStart=/etc/init.d/jboss_init.sh start
ExecStop=/etc/init.d/jboss_init.sh stop
TimeoutSec=300

[Install]
WantedBy=multi-user.target
sudo ln -s /lib/systemd/system/jboss.service /etc/systemd/system/multi-user.target.wants/jboss.service

Xvfb:

sudo vim /lib/systemd/system/xvfb.service
[Unit]
Description=X Virtual Frame Buffer Service
After=network.target

[Service]
ExecStart=/usr/bin/Xvfb :0 -screen 0 800x600x8

[Install]
WantedBy=multi-user.target
sudo ln -s /lib/systemd/system/xvfb.service /etc/systemd/system/multi-user.target.wants/xvfb.service

Xvfb2:

sudo vim /lib/systemd/system/xvfb2.service
Description=X Virtual Frame Buffer Service 2
After=network.target

[Service]
ExecStart=/usr/bin/Xvfb :1 -screen 0 800x600x8

[Install]
WantedBy=multi-user.target
sudo ln -s /lib/systemd/system/xvfb2.service /etc/systemd/system/multi-user.target.wants/xvfb2.service

Se recarga y se reinician los servicios:

sudo systemctl daemon-reload
sudo systemctl start xvfb.service
sudo systemctl start xvfb2.service
sudo systemctl start jboss.service

o bien directamente:

sudo reboot

EXTRA: Para ejecutar JBoss con un usuario distinto a root

sudo adduser comdoc

El puerto debe ser mayor a 1000 para que el usuario comdoc pueda utilizarlo, en nuestro caso tenemos un proxy escuchando el puerto 80 el cual redirecciona el tráfico al puerto 8080 en Comdoc. Por lo tanto se edita el puerto de 80 a 8080 en:

sudo vim /opt/jboss-4.2.3.GA/server/comdoc/deploy/jboss-web.deployer/server.xml

Quedando dicho fragmento así:


<Connector port="8080" address="${jboss.bind.address}"    
         maxThreads="250" maxHttpHeaderSize="8192"
         emptySessionPath="true" protocol="HTTP/1.1"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true" />

En el caso de que el sistema se encuentre detrás de un proxy con un certificado TLS/SSL para el acceso vía https, será necesario agregar una línea extra, quedando así el fragmento:


<Connector port="8080" address="${jboss.bind.address}"    
         maxThreads="250" maxHttpHeaderSize="8192"
         emptySessionPath="true" protocol="HTTP/1.1"
         scheme="https" secure="true" proxyName="comdoc.[URL_UNIVERSIDAD]" proxyPort="443"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true" />

Nota: reemplazar [URL_UNIVERSIDAD] por la URL que corresponda. Será la URL del proxy, es decir, la URL externa que los usuarios utilizarán para ingresar a ComDoc.

Luedo se edita el unit file configurando el usuario y grupo:

sudo vim /lib/systemd/system/jboss.service

reemplazar:

User=root
Group=root

por:

User=comdoc
Group=comdoc

luego:

sudo systemctl daemon-reload

Se modifican el propietario para los directorios clave:

sudo chown -R comdoc:comdoc /opt/jboss-4.2.3.GA/
sudo chown -R comdoc:comdoc /var/comdoc/

Reiniciamos el servicio:

sudo systemctl stop jboss.service
sudo systemctl start jboss.service

Solo restaría configurar las tareas cron.

Saludos.